|
@@ -125,6 +125,15 @@ int stun_calculate_hmac(const u08bits *buf, size_t len, const u08bits *key, size
|
|
|
#else
|
|
|
fprintf(stderr,"SHA256 is not supported\n");
|
|
|
return -1;
|
|
|
+#endif
|
|
|
+ } else if(shatype == SHATYPE_SHA384) {
|
|
|
+#if !defined(OPENSSL_NO_SHA384) && defined(SHA384_DIGEST_LENGTH)
|
|
|
+ if (!HMAC(EVP_sha384(), key, keylen, buf, len, hmac, hmac_len)) {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+#else
|
|
|
+ fprintf(stderr,"SHA384 is not supported\n");
|
|
|
+ return -1;
|
|
|
#endif
|
|
|
} else if(shatype == SHATYPE_SHA512) {
|
|
|
#if !defined(OPENSSL_NO_SHA512) && defined(SHA512_DIGEST_LENGTH)
|
|
@@ -173,6 +182,18 @@ int stun_produce_integrity_key_str(u08bits *uname, u08bits *realm, u08bits *upwd
|
|
|
#else
|
|
|
fprintf(stderr,"SHA256 is not supported\n");
|
|
|
return -1;
|
|
|
+#endif
|
|
|
+ } else if(shatype == SHATYPE_SHA384) {
|
|
|
+#if !defined(OPENSSL_NO_SHA384) && defined(SHA384_DIGEST_LENGTH)
|
|
|
+ unsigned int keylen = 0;
|
|
|
+ EVP_MD_CTX ctx;
|
|
|
+ EVP_DigestInit(&ctx,EVP_sha384());
|
|
|
+ EVP_DigestUpdate(&ctx,str,strl);
|
|
|
+ EVP_DigestFinal(&ctx,key,&keylen);
|
|
|
+ EVP_MD_CTX_cleanup(&ctx);
|
|
|
+#else
|
|
|
+ fprintf(stderr,"SHA384 is not supported\n");
|
|
|
+ return -1;
|
|
|
#endif
|
|
|
} else if(shatype == SHATYPE_SHA512) {
|
|
|
#if !defined(OPENSSL_NO_SHA512) && defined(SHA512_DIGEST_LENGTH)
|
|
@@ -1538,6 +1559,8 @@ size_t get_hmackey_size(SHATYPE shatype)
|
|
|
{
|
|
|
if(shatype == SHATYPE_SHA256)
|
|
|
return 32;
|
|
|
+ if(shatype == SHATYPE_SHA384)
|
|
|
+ return 48;
|
|
|
if(shatype == SHATYPE_SHA512)
|
|
|
return 64;
|
|
|
return 16;
|
|
@@ -1563,6 +1586,9 @@ int stun_attr_add_integrity_str(turn_credential_type ct, u08bits *buf, size_t *l
|
|
|
case SHATYPE_SHA256:
|
|
|
shasize = SHA256SIZEBYTES;
|
|
|
break;
|
|
|
+ case SHATYPE_SHA384:
|
|
|
+ shasize = SHA384SIZEBYTES;
|
|
|
+ break;
|
|
|
case SHATYPE_SHA512:
|
|
|
shasize = SHA512SIZEBYTES;
|
|
|
break;
|
|
@@ -1655,6 +1681,16 @@ int stun_check_message_integrity_by_key_str(turn_credential_type ct, u08bits *bu
|
|
|
if(shatype != SHATYPE_SHA256)
|
|
|
return -1;
|
|
|
break;
|
|
|
+ case SHA384SIZEBYTES:
|
|
|
+ shasize = SHA384SIZEBYTES;
|
|
|
+ if(shatype > SHATYPE_SHA384) {
|
|
|
+ if(too_weak)
|
|
|
+ *too_weak = 1;
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ if(shatype != SHATYPE_SHA384)
|
|
|
+ return -1;
|
|
|
+ break;
|
|
|
case SHA512SIZEBYTES:
|
|
|
shasize = SHA512SIZEBYTES;
|
|
|
if(shatype > SHATYPE_SHA512) {
|
|
@@ -1861,6 +1897,8 @@ static size_t calculate_auth_key_length(AUTH_ALG a)
|
|
|
return 32;
|
|
|
case AUTH_ALG_HMAC_SHA_256:
|
|
|
return 32;
|
|
|
+ case AUTH_ALG_HMAC_SHA_384:
|
|
|
+ return 48;
|
|
|
case AUTH_ALG_HMAC_SHA_512:
|
|
|
return 64;
|
|
|
default:
|
|
@@ -1879,6 +1917,8 @@ static size_t calculate_auth_output_length(AUTH_ALG a)
|
|
|
return 16;
|
|
|
case AUTH_ALG_HMAC_SHA_256:
|
|
|
return 32;
|
|
|
+ case AUTH_ALG_HMAC_SHA_384:
|
|
|
+ return 48;
|
|
|
case AUTH_ALG_HMAC_SHA_512:
|
|
|
return 64;
|
|
|
default:
|
|
@@ -2004,6 +2044,8 @@ int convert_oauth_key_data(const oauth_key_data *oakd0, oauth_key *key, char *er
|
|
|
key->hkdf_hash_func = SHATYPE_SHA1;
|
|
|
} else if(!strcmp(oakd->hkdf_hash_func,"SHA256") || !strcmp(oakd->hkdf_hash_func,"SHA-256")) {
|
|
|
key->hkdf_hash_func = SHATYPE_SHA256;
|
|
|
+ } else if(!strcmp(oakd->hkdf_hash_func,"SHA384") || !strcmp(oakd->hkdf_hash_func,"SHA-384")) {
|
|
|
+ key->hkdf_hash_func = SHATYPE_SHA384;
|
|
|
} else if(!strcmp(oakd->hkdf_hash_func,"SHA512") || !strcmp(oakd->hkdf_hash_func,"SHA-512")) {
|
|
|
key->hkdf_hash_func = SHATYPE_SHA512;
|
|
|
} else if(oakd->hkdf_hash_func[0]) {
|
|
@@ -2019,6 +2061,8 @@ int convert_oauth_key_data(const oauth_key_data *oakd0, oauth_key *key, char *er
|
|
|
key->auth_alg = AUTH_ALG_HMAC_SHA_1;
|
|
|
} else if(!strcmp(oakd->auth_alg,"HMAC-SHA-256")) {
|
|
|
key->auth_alg = AUTH_ALG_HMAC_SHA_256;
|
|
|
+ } else if(!strcmp(oakd->auth_alg,"HMAC-SHA-384")) {
|
|
|
+ key->auth_alg = AUTH_ALG_HMAC_SHA_384;
|
|
|
} else if(!strcmp(oakd->auth_alg,"HMAC-SHA-512")) {
|
|
|
key->auth_alg = AUTH_ALG_HMAC_SHA_512;
|
|
|
} else if(!strcmp(oakd->auth_alg,"HMAC-SHA-256-128")) {
|
|
@@ -2104,10 +2148,14 @@ static const EVP_MD *get_auth_type(AUTH_ALG aa)
|
|
|
case AUTH_ALG_HMAC_SHA_256_128:
|
|
|
case AUTH_ALG_HMAC_SHA_256:
|
|
|
return EVP_sha256();
|
|
|
+#endif
|
|
|
+#if !defined(OPENSSL_NO_SHA384) && defined(SHA384_DIGEST_LENGTH)
|
|
|
+ case AUTH_ALG_HMAC_SHA_384:
|
|
|
+ return EVP_sha384();
|
|
|
+#endif
|
|
|
#if !defined(OPENSSL_NO_SHA512) && defined(SHA512_DIGEST_LENGTH)
|
|
|
case AUTH_ALG_HMAC_SHA_512:
|
|
|
return EVP_sha512();
|
|
|
-#endif
|
|
|
#endif
|
|
|
default:
|
|
|
break;
|