working on oauth

This commit is contained in:
mom040267 2014-08-24 19:08:21 +00:00
parent 18180cafdc
commit 5892275627
4 changed files with 78 additions and 2 deletions

View File

@ -30,6 +30,9 @@
*/
#include "../mainrelay.h"
#include "apputils.h"
#include "dbdriver.h"
#include "dbd_pgsql.h"
#include "dbd_mysql.h"
@ -86,5 +89,52 @@ turn_dbdriver_t * get_dbdriver() {
return _driver;
}
/////////// OAUTH /////////////////
void convert_oauth_key_data_raw(const oauth_key_data_raw *raw, oauth_key_data *oakd)
{
if(raw && oakd) {
ns_bzero(oakd,sizeof(oauth_key_data));
oakd->timestamp = (turn_time_t)raw->timestamp;
oakd->lifetime = raw->lifetime;
ns_bcopy(raw->as_rs_alg,oakd->as_rs_alg,sizeof(oakd->as_rs_alg));
ns_bcopy(raw->auth_alg,oakd->auth_alg,sizeof(oakd->auth_alg));
ns_bcopy(raw->hkdf_hash_func,oakd->hkdf_hash_func,sizeof(oakd->hkdf_hash_func));
ns_bcopy(raw->kid,oakd->kid,sizeof(oakd->kid));
{
size_t ikm_key_size = 0;
char *ikm_key = base64_encode((const unsigned char *)(raw->ikm_key),strlen(raw->ikm_key),&ikm_key_size);
if(ikm_key) {
ns_bcopy(ikm_key,oakd->ikm_key,ikm_key_size);
oakd->ikm_key_size = ikm_key_size;
turn_free(ikm_key,ikm_key_size);
}
}
{
size_t as_rs_key_size = 0;
char *as_rs_key = base64_encode((const unsigned char *)(raw->as_rs_key),strlen(raw->as_rs_key),&as_rs_key_size);
if(as_rs_key) {
ns_bcopy(as_rs_key,oakd->as_rs_key,as_rs_key_size);
oakd->as_rs_key_size = as_rs_key_size;
turn_free(as_rs_key,as_rs_key_size);
}
}
{
size_t as_rs_key_size = 0;
char *as_rs_key = base64_encode((const unsigned char *)(raw->as_rs_key),strlen(raw->as_rs_key),&as_rs_key_size);
if(as_rs_key) {
ns_bcopy(as_rs_key,oakd->as_rs_key,as_rs_key_size);
oakd->as_rs_key_size = as_rs_key_size;
turn_free(as_rs_key,as_rs_key_size);
}
}
}
}

View File

@ -34,6 +34,8 @@
#include "../userdb.h"
#include "ns_turn_msg_defs_new.h"
#ifdef __cplusplus
extern "C" {
#endif
@ -67,6 +69,24 @@ int convert_string_key_to_binary(char* keysource, hmackey_t key, size_t sz);
persistent_users_db_t * get_persistent_users_db(void);
turn_dbdriver_t * get_dbdriver(void);
////////////// OAUTH UTILS ////////////////
struct _oauth_key_data_raw {
char kid[OAUTH_KID_SIZE+1];
char ikm_key[OAUTH_KEY_SIZE+1];
u64bits timestamp;
u32bits lifetime;
char hkdf_hash_func[OAUTH_HASH_FUNC_SIZE+1];
char as_rs_alg[OAUTH_ALG_SIZE+1];
char as_rs_key[OAUTH_KEY_SIZE+1];
char auth_alg[OAUTH_ALG_SIZE+1];
char auth_key[OAUTH_KEY_SIZE+1];
};
typedef struct _oauth_key_data_raw oauth_key_data_raw;
void convert_oauth_key_data_raw(const oauth_key_data_raw *raw, oauth_key_data *oakd);
////////////////////////////////////////////
#ifdef __cplusplus

View File

@ -1789,6 +1789,9 @@ int convert_oauth_key_data(oauth_key_data *oakd, oauth_key *key, char *err_msg,
key->timestamp = oakd->timestamp;
key->lifetime = oakd->lifetime;
if(!(key->timestamp)) key->timestamp = OAUTH_DEFAULT_TIMESTAMP;
if(!(key->lifetime)) key->lifetime = OAUTH_DEFAULT_LIFETIME;
key->hkdf_hash_func = SHATYPE_SHA256;
if(!strcmp(oakd->hkdf_hash_func,"SHA1") || !strcmp(oakd->hkdf_hash_func,"SHA-1")) {
key->hkdf_hash_func = SHATYPE_SHA1;

View File

@ -103,11 +103,14 @@ typedef enum _AUTH_ALG AUTH_ALG;
#define OAUTH_ALG_SIZE (64)
#define OAUTH_KEY_SIZE (256)
#define OAUTH_DEFAULT_LIFETIME (0)
#define OAUTH_DEFAULT_TIMESTAMP (turn_time())
struct _oauth_key_data {
char kid[OAUTH_KID_SIZE+1];
char ikm_key[OAUTH_KEY_SIZE+1];
size_t ikm_key_size;
u64bits timestamp;
turn_time_t timestamp;
turn_time_t lifetime;
char hkdf_hash_func[OAUTH_HASH_FUNC_SIZE+1];
char as_rs_alg[OAUTH_ALG_SIZE+1];
@ -124,7 +127,7 @@ struct _oauth_key {
char kid[OAUTH_KID_SIZE+1];
char ikm_key[OAUTH_KEY_SIZE+1];
size_t ikm_key_size;
u64bits timestamp;
turn_time_t timestamp;
turn_time_t lifetime;
SHATYPE hkdf_hash_func;
ENC_ALG as_rs_alg;