shithub: blake2

Download patch

ref: ae633ca8e2220236e28953299194bf0656da5d25
parent: 73bd0dc6529657b972cdd00b16bfe7d788d73f8c
author: JP Aumasson <jeanphilippe.aumasson@gmail.com>
date: Tue Oct 11 16:25:14 EDT 2016

b2xs test procedures

--- a/ref/blake2xs-ref.c
+++ b/ref/blake2xs-ref.c
@@ -17,7 +17,7 @@
     return -1;
   }
 
-  if (key == NULL || keylen > BLAKE2S_KEYBYTES) {
+  if (NULL == key || keylen > BLAKE2S_KEYBYTES) {
     return -1;
   }
 
@@ -60,7 +60,7 @@
   uint8_t root[BLAKE2S_BLOCKBYTES];
   size_t i;
 
-  if (out == NULL) {
+  if (NULL == out) {
     return -1;
   }
 
@@ -149,28 +149,71 @@
 {
   uint8_t key[BLAKE2S_KEYBYTES];
   uint8_t buf[BLAKE2_KAT_LENGTH];
+  size_t i, step;
 
-  for( size_t i = 0; i < BLAKE2S_KEYBYTES; ++i ) {
+  for( i = 0; i < BLAKE2S_KEYBYTES; ++i ) {
     key[i] = ( uint8_t )i;
   }
 
-  for( size_t i = 0; i < BLAKE2_KAT_LENGTH; ++i ) {
+  for( i = 0; i < BLAKE2_KAT_LENGTH; ++i ) {
     buf[i] = ( uint8_t )i;
   }
 
-  for( size_t i = 1; i < BLAKE2_KAT_LENGTH; ++i )
+  /* Testing length of ouputs rather than inputs */
+  /* (Test of input lengths mostly covered by blake2s tests) */
+
+  /* Test simple API */
+  for( size_t outlen = 1; outlen <= BLAKE2_KAT_LENGTH; ++outlen )
   {
       uint8_t hash[BLAKE2_KAT_LENGTH] = {0};
-      blake2xs( hash, i, buf, BLAKE2_KAT_LENGTH, key, BLAKE2S_KEYBYTES );
+      blake2xs( hash, outlen, buf, BLAKE2_KAT_LENGTH, key, BLAKE2S_KEYBYTES );
 
-      for( size_t j = 0; j < i; ++j ) {
-          printf("%02x", hash[j]);
+#if 0
+      if( 0 != memcmp( hash, blake2xs_keyed_kat[i-1], i ) )
+      {
+        goto fail;
       }
-      printf("\n");
+#endif
   }
 
-  //puts( "ok" );
+  /* Test streaming API */
+  for(step = 1; step < BLAKE2S_BLOCKBYTES; ++step) {
+    for (size_t outlen = 1; outlen <= BLAKE2_KAT_LENGTH; ++outlen) {
+      uint8_t hash[BLAKE2S_OUTBYTES];
+      blake2xs_state S;
+      uint8_t * p = buf;
+      size_t mlen = BLAKE2_KAT_LENGTH;
+      int err = 0;
+
+      if( (err = blake2xs_init(&S, outlen, key, BLAKE2S_KEYBYTES)) < 0 ) {
+        goto fail;
+      }
+
+      while (mlen >= step) {
+        if ( (err = blake2xs_update(&S, p, step)) < 0 ) {
+          goto fail;
+        }
+        mlen -= step;
+        p += step;
+      }
+      if ( (err = blake2xs_update(&S, p, mlen)) < 0) {
+        goto fail;
+      }
+      if ( (err = blake2xs_final(&S, hash, outlen)) < 0) {
+        goto fail;
+      }
+
+      if (0 != memcmp(hash, blake2s_keyed_kat[outlen-1], outlen)) {
+        goto fail;
+      }
+    }
+  }
+
+  puts( "ok" );
   return 0;
+fail:
+  puts("error");
+  return -1;
 }
 #endif
 
--