summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordimitri staessens <[email protected]>2017-04-16 09:40:32 +0200
committerdimitri staessens <[email protected]>2017-04-16 09:40:32 +0200
commitffc4468030398955ec56dac17934b43adfeab68b (patch)
tree5586e971b0924d6a888cbe11ff09f68bcba12edb /src
parente543c43c9f911bbe40371e3c6ca5c916cb3365a9 (diff)
downloadouroboros-ffc4468030398955ec56dac17934b43adfeab68b.tar.gz
ouroboros-ffc4468030398955ec56dac17934b43adfeab68b.zip
lib: Fix minor things in sha3 implementation
Diffstat (limited to 'src')
-rw-r--r--src/lib/sha3.c4
-rw-r--r--src/lib/tests/sha3_test.c37
2 files changed, 40 insertions, 1 deletions
diff --git a/src/lib/sha3.c b/src/lib/sha3.c
index f80cc4bd..2c8a4614 100644
--- a/src/lib/sha3.c
+++ b/src/lib/sha3.c
@@ -268,7 +268,9 @@ void rhash_sha3_update(struct sha3_ctx * ctx,
size_t block_size = (size_t) ctx->block_size;
uint8_t * msg = (uint8_t *) pmsg;
- if (ctx->rest & SHA3_FINALIZED) return;
+ if (ctx->rest & SHA3_FINALIZED)
+ return;
+
ctx->rest = (unsigned) ((ctx->rest + size) % block_size);
/* fill partial block */
diff --git a/src/lib/tests/sha3_test.c b/src/lib/tests/sha3_test.c
index 8f1bce05..0d0e8d0a 100644
--- a/src/lib/tests/sha3_test.c
+++ b/src/lib/tests/sha3_test.c
@@ -149,6 +149,12 @@ int sha3_test(int argc,
"ijklmnopjklmnopqklmnopqrlmnopqrs"
"mnopqrstnopqrstu";
+ char * str4_inp2 =
+ " abcdefghbcdefghicdefghijdefghijk"
+ "efghijklfghijklmghijklmnhijklmno"
+ "ijklmnopjklmnopqklmnopqrlmnopqrs"
+ "mnopqrstnopqrstu";
+
char * str4_224 =
"543e6868e1666c1a643630df77367ae5"
"a62a85070a51c14cbf665cbc";
@@ -292,5 +298,36 @@ int sha3_test(int argc,
if (check_hash(str4_512, res, SHA3_512_HASH_LEN))
return -1;
+ /* unaligned 4th input string. */
+ printf("test: %s.\n\n", str4_inp2 + 1);
+
+ rhash_sha3_224_init(&ctx);
+ rhash_sha3_update(&ctx, str4_inp2 + 1, strlen(str4_inp2 + 1));
+ rhash_sha3_final(&ctx, res);
+
+ if (check_hash(str4_224, res, SHA3_224_HASH_LEN))
+ return -1;
+
+ rhash_sha3_256_init(&ctx);
+ rhash_sha3_update(&ctx, str4_inp2 + 1, strlen(str4_inp2 + 1));
+ rhash_sha3_final(&ctx, res);
+
+ if (check_hash(str4_256, res, SHA3_256_HASH_LEN))
+ return -1;
+
+ rhash_sha3_384_init(&ctx);
+ rhash_sha3_update(&ctx, str4_inp2 + 1, strlen(str4_inp2 + 1));
+ rhash_sha3_final(&ctx, res);
+
+ if (check_hash(str4_384, res, SHA3_384_HASH_LEN))
+ return -1;
+
+ rhash_sha3_512_init(&ctx);
+ rhash_sha3_update(&ctx, str4_inp2 + 1, strlen(str4_inp2 + 1));
+ rhash_sha3_final(&ctx, res);
+
+ if (check_hash(str4_512, res, SHA3_512_HASH_LEN))
+ return -1;
+
return 0;
}