diff --git a/src/apps/relay/dbdrivers/dbdriver.c b/src/apps/relay/dbdrivers/dbdriver.c index 807ad71..4f84901 100644 --- a/src/apps/relay/dbdrivers/dbdriver.c +++ b/src/apps/relay/dbdrivers/dbdriver.c @@ -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); + } + } + + } +} diff --git a/src/apps/relay/dbdrivers/dbdriver.h b/src/apps/relay/dbdrivers/dbdriver.h index d123e93..1310254 100644 --- a/src/apps/relay/dbdrivers/dbdriver.h +++ b/src/apps/relay/dbdrivers/dbdriver.h @@ -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 diff --git a/src/client/ns_turn_msg.c b/src/client/ns_turn_msg.c index 6b96daf..85229b8 100644 --- a/src/client/ns_turn_msg.c +++ b/src/client/ns_turn_msg.c @@ -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; diff --git a/src/client/ns_turn_msg_defs_new.h b/src/client/ns_turn_msg_defs_new.h index b65f9df..e4e7bbb 100644 --- a/src/client/ns_turn_msg_defs_new.h +++ b/src/client/ns_turn_msg_defs_new.h @@ -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;