[30135] in CVS-changelog-for-Kerberos-V5

home help back first fref pref prev next nref lref last post

krb5 commit: Add vector support to k5_sha256()

daemon@ATHENA.MIT.EDU (Greg Hudson)
Sat Mar 24 17:06:13 2018

Date: Sat, 24 Mar 2018 17:06:08 -0400
From: Greg Hudson <ghudson@mit.edu>
Message-Id: <201803242106.w2OL68jZ023256@drugstore.mit.edu>
To: cvs-krb5@mit.edu
Reply-To: krbdev@mit.edu
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Errors-To: cvs-krb5-bounces@mit.edu

https://github.com/krb5/krb5/commit/4f3373e8c55b3e9bdfb5b065e07214c5816c85fa
commit 4f3373e8c55b3e9bdfb5b065e07214c5816c85fa
Author: Greg Hudson <ghudson@mit.edu>
Date:   Sat Feb 3 20:53:42 2018 -0500

    Add vector support to k5_sha256()
    
    Add a length argument so that multiple krb5_data values can be passed
    to k5_sha256(), for efficient computation of SHA-256 hashes over
    concatenations of data values.

 src/include/k5-int.h                 |    4 ++--
 src/lib/crypto/builtin/sha2/sha256.c |    6 ++++--
 src/lib/crypto/crypto_tests/t_sha2.c |    2 +-
 src/lib/crypto/openssl/sha256.c      |    6 ++++--
 src/lib/krb5/rcache/rc_conv.c        |    2 +-
 5 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/src/include/k5-int.h b/src/include/k5-int.h
index e1b1cb0..985f6f1 100644
--- a/src/include/k5-int.h
+++ b/src/include/k5-int.h
@@ -634,9 +634,9 @@ krb5int_arcfour_gsscrypt(const krb5_keyblock *keyblock, krb5_keyusage usage,
 
 #define K5_SHA256_HASHLEN (256 / 8)
 
-/* Write the SHA-256 hash of in to out. */
+/* Write the SHA-256 hash of in (containing n elements) to out. */
 krb5_error_code
-k5_sha256(const krb5_data *in, uint8_t out[K5_SHA256_HASHLEN]);
+k5_sha256(const krb5_data *in, size_t n, uint8_t out[K5_SHA256_HASHLEN]);
 
 /*
  * Attempt to zero memory in a way that compilers won't optimize out.
diff --git a/src/lib/crypto/builtin/sha2/sha256.c b/src/lib/crypto/builtin/sha2/sha256.c
index 2b5cbe4..9a940b3 100644
--- a/src/lib/crypto/builtin/sha2/sha256.c
+++ b/src/lib/crypto/builtin/sha2/sha256.c
@@ -257,12 +257,14 @@ k5_sha256_final(void *res, SHA256_CTX *m)
 }
 
 krb5_error_code
-k5_sha256(const krb5_data *in, uint8_t out[K5_SHA256_HASHLEN])
+k5_sha256(const krb5_data *in, size_t n, uint8_t out[K5_SHA256_HASHLEN])
 {
     SHA256_CTX ctx;
+    size_t i;
 
     k5_sha256_init(&ctx);
-    k5_sha256_update(&ctx, in->data, in->length);
+    for (i = 0; i < n; i++)
+        k5_sha256_update(&ctx, in[i].data, in[i].length);
     k5_sha256_final(out, &ctx);
     return 0;
 }
diff --git a/src/lib/crypto/crypto_tests/t_sha2.c b/src/lib/crypto/crypto_tests/t_sha2.c
index 12f3286..e6fa584 100644
--- a/src/lib/crypto/crypto_tests/t_sha2.c
+++ b/src/lib/crypto/crypto_tests/t_sha2.c
@@ -125,7 +125,7 @@ hash_test(const struct krb5_hash_provider *hash, struct test *tests)
 
 	    if (hash == &krb5int_hash_sha256) {
 		/* Try again using k5_sha256(). */
-		if (k5_sha256(&iov.data, (uint8_t *)hval.data) != 0)
+		if (k5_sha256(&iov.data, 1, (uint8_t *)hval.data) != 0)
 		    abort();
 		if (memcmp(hval.data, t->hash, hval.length) != 0)
 		    abort();
diff --git a/src/lib/crypto/openssl/sha256.c b/src/lib/crypto/openssl/sha256.c
index fa095d4..0edd8b7 100644
--- a/src/lib/crypto/openssl/sha256.c
+++ b/src/lib/crypto/openssl/sha256.c
@@ -34,16 +34,18 @@
 #include <openssl/evp.h>
 
 krb5_error_code
-k5_sha256(const krb5_data *in, uint8_t out[K5_SHA256_HASHLEN])
+k5_sha256(const krb5_data *in, size_t n, uint8_t out[K5_SHA256_HASHLEN])
 {
     EVP_MD_CTX *ctx;
+    size_t i;
     int ok;
 
     ctx = EVP_MD_CTX_new();
     if (ctx == NULL)
         return ENOMEM;
     ok = EVP_DigestInit_ex(ctx, EVP_sha256(), NULL);
-    ok = ok && EVP_DigestUpdate(ctx, in->data, in->length);
+    for (i = 0; i < n; i++)
+        ok = ok && EVP_DigestUpdate(ctx, in[i].data, in[i].length);
     ok = ok && EVP_DigestFinal_ex(ctx, out, NULL);
     EVP_MD_CTX_free(ctx);
     return ok ? 0 : ENOMEM;
diff --git a/src/lib/krb5/rcache/rc_conv.c b/src/lib/krb5/rcache/rc_conv.c
index 0e021f5..f2fe528 100644
--- a/src/lib/krb5/rcache/rc_conv.c
+++ b/src/lib/krb5/rcache/rc_conv.c
@@ -58,7 +58,7 @@ krb5_rc_hash_message(krb5_context context, const krb5_data *message,
     *out = NULL;
 
     /* Calculate the binary checksum. */
-    retval = k5_sha256(message, cksum);
+    retval = k5_sha256(message, 1, cksum);
     if (retval)
         return retval;
 
_______________________________________________
cvs-krb5 mailing list
cvs-krb5@mit.edu
https://mailman.mit.edu/mailman/listinfo/cvs-krb5

home help back first fref pref prev next nref lref last post