diff options
author | Youness Alaoui <kakaroto@kakaroto.(none)> | 2008-08-06 18:49:32 -0400 |
---|---|---|
committer | Youness Alaoui <kakaroto@kakaroto.(none)> | 2008-08-06 18:49:32 -0400 |
commit | c395f5c6fc7d609174b3981fd74341b84a7844d7 (patch) | |
tree | 2f7fb175f40e710fa0ffb21bee9f087318639d82 /stun/stunhmac.c | |
parent | 8338ac59ae180516e7c20812e364f6a6df524ac2 (diff) | |
download | libnice-c395f5c6fc7d609174b3981fd74341b84a7844d7.tar.gz |
Add proper long term credentials support
Diffstat (limited to 'stun/stunhmac.c')
-rw-r--r-- | stun/stunhmac.c | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/stun/stunhmac.c b/stun/stunhmac.c index 563d805..6b205a2 100644 --- a/stun/stunhmac.c +++ b/stun/stunhmac.c @@ -81,21 +81,40 @@ void stun_sha1 (const uint8_t *msg, size_t len, uint8_t *sha, HMAC_CTX_cleanup (&ctx); } +static const uint8_t *priv_trim_var (const uint8_t *var, size_t *var_len) +{ + const uint8_t *ptr = var; + + while (*ptr == '"') { + ptr++; + (*var_len)--; + } + while(ptr[*var_len] == '"' || + ptr[*var_len] == 0) { + (*var_len)--; + } -void stun_hash_creds (const char *realm, const char *login, const char *pw, - unsigned char md5[16]) + return ptr; +} + + +void stun_hash_creds (const uint8_t *realm, size_t realm_len, + const uint8_t *username, size_t username_len, + const uint8_t *password, size_t password_len, + unsigned char md5[16]) { EVP_MD_CTX ctx; - - assert (realm && login && pw && md5); + const uint8_t *username_trimmed = priv_trim_var (username, &username_len); + const uint8_t *password_trimmed = priv_trim_var (password, &password_len);; + const uint8_t *realm_trimmed = priv_trim_var (realm, &realm_len);; EVP_MD_CTX_init (&ctx); EVP_DigestInit_ex (&ctx, EVP_md5 (), NULL); - EVP_DigestUpdate (&ctx, realm, strlen (realm)); + EVP_DigestUpdate (&ctx, username_trimmed, username_len); EVP_DigestUpdate (&ctx, ":", 1); - EVP_DigestUpdate (&ctx, login, strlen (login)); + EVP_DigestUpdate (&ctx, realm_trimmed, realm_len); EVP_DigestUpdate (&ctx, ":", 1); - EVP_DigestUpdate (&ctx, pw, strlen (pw)); + EVP_DigestUpdate (&ctx, password_trimmed, password_len); EVP_DigestFinal (&ctx, md5, NULL); } |