diff options
author | Simo Sorce <simo@redhat.com> | 2013-08-18 01:04:30 -0400 |
---|---|---|
committer | Simo Sorce <simo@redhat.com> | 2013-08-19 00:09:56 -0400 |
commit | 885d7e6bb8a08b739fd3a5eac528445a2524500e (patch) | |
tree | dc06495a8b959578af76b700eced88b3495808cd /src/crypto.c | |
parent | def4d4a35a007e1c442006e6f9744fa7a8e1da69 (diff) | |
download | gss-ntlmssp-885d7e6bb8a08b739fd3a5eac528445a2524500e.tar.gz gss-ntlmssp-885d7e6bb8a08b739fd3a5eac528445a2524500e.tar.xz gss-ntlmssp-885d7e6bb8a08b739fd3a5eac528445a2524500e.zip |
Add integrity and confidentiality functions
Diffstat (limited to 'src/crypto.c')
-rw-r--r-- | src/crypto.c | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/src/crypto.c b/src/crypto.c index ab1efbf..dd33b34 100644 --- a/src/crypto.c +++ b/src/crypto.c @@ -36,12 +36,13 @@ int RAND_BUFFER(struct ntlm_buffer *random) return 0; } -int HMAC_MD5(struct ntlm_buffer *key, - struct ntlm_buffer *payload, - struct ntlm_buffer *result) +int HMAC_MD5_IOV(struct ntlm_buffer *key, + struct ntlm_iov *iov, + struct ntlm_buffer *result) { HMAC_CTX hmac_ctx; unsigned int len; + size_t i; int ret = 0; if (result->length != 16) return EINVAL; @@ -54,10 +55,12 @@ int HMAC_MD5(struct ntlm_buffer *key, goto done; } - ret = HMAC_Update(&hmac_ctx, payload->data, payload->length); - if (ret == 0) { - ret = ERR_CRYPTO; - goto done; + for (i = 0; i < iov->num; i++) { + ret = HMAC_Update(&hmac_ctx, iov->data[i]->data, iov->data[i]->length); + if (ret == 0) { + ret = ERR_CRYPTO; + goto done; + } } ret = HMAC_Final(&hmac_ctx, result->data, &len); @@ -73,7 +76,16 @@ done: return ret; } +int HMAC_MD5(struct ntlm_buffer *key, + struct ntlm_buffer *payload, + struct ntlm_buffer *result) +{ + struct ntlm_iov iov; + iov.num = 1; + iov.data = &payload; + return HMAC_MD5_IOV(key, &iov, result); +} static int mdx_hash(const EVP_MD *type, struct ntlm_buffer *payload, |