diff options
Diffstat (limited to 'src/lib/emile/emile_cipher_gnutls.c')
-rw-r--r-- | src/lib/emile/emile_cipher_gnutls.c | 57 |
1 files changed, 8 insertions, 49 deletions
diff --git a/src/lib/emile/emile_cipher_gnutls.c b/src/lib/emile/emile_cipher_gnutls.c index 998ce886ca..d51ae8bb9a 100644 --- a/src/lib/emile/emile_cipher_gnutls.c +++ b/src/lib/emile/emile_cipher_gnutls.c @@ -170,56 +170,15 @@ emile_hmac_sha1(const void *key, return EINA_TRUE; } -static Eina_Bool -emile_pbkdf2_sha1(const char *key, - int key_len, - const unsigned char *salt, - unsigned int salt_len, - int iter, - unsigned char *res, - int res_len) +EAPI Eina_Bool +emile_binbuf_sha1(const char *key, + unsigned int key_len, + const Eina_Binbuf *data, + unsigned char digest[20]) { - unsigned char digest[20]; - unsigned char tab[4]; - unsigned char *p = res; - unsigned char *buf; - unsigned int i; - int digest_len = 20; - int len = res_len; - int tmp_len; - int j, k; - - buf = alloca(salt_len + 4); - if (!buf) return EINA_FALSE; - - for (i = 1; len; len -= tmp_len, p += tmp_len, i++) - { - if (len > digest_len) - tmp_len = digest_len; - else - tmp_len = len; - - tab[0] = (unsigned char)(i & 0xff000000) >> 24; - tab[1] = (unsigned char)(i & 0x00ff0000) >> 16; - tab[2] = (unsigned char)(i & 0x0000ff00) >> 8; - tab[3] = (unsigned char)(i & 0x000000ff) >> 0; - - memcpy(buf, salt, salt_len); - memcpy(buf + salt_len, tab, 4); - if (!emile_hmac_sha1(key, key_len, buf, salt_len + 4, digest)) - return EINA_FALSE; - memcpy(p, digest, tmp_len); - - for (j = 1; j < iter; j++) - { - if (!emile_hmac_sha1(key, key_len, digest, 20, digest)) - return EINA_FALSE; - for (k = 0; k < tmp_len; k++) - p[k] ^= digest[k]; - } - } - - return EINA_TRUE; + return emile_hmac_sha1(key, key_len, + eina_binbuf_string_get(data), eina_binbuf_length_get(data), + digest); } EAPI Eina_Binbuf * |