Browse Source

working on oauth

mom040267 11 years ago
parent
commit
5892275627

+ 50 - 0
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);
+			}
+		}
+
+	}
+}
 

+ 20 - 0
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

+ 3 - 0
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;

+ 5 - 2
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;