summaryrefslogtreecommitdiff
path: root/src/lib/emile/emile_cipher_gnutls.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/emile/emile_cipher_gnutls.c')
-rw-r--r--src/lib/emile/emile_cipher_gnutls.c57
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 *