diff options
Diffstat (limited to 'source4/lib/crypto/hmacsha1test.c')
-rw-r--r-- | source4/lib/crypto/hmacsha1test.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/source4/lib/crypto/hmacsha1test.c b/source4/lib/crypto/hmacsha1test.c new file mode 100644 index 0000000000..2631fe1659 --- /dev/null +++ b/source4/lib/crypto/hmacsha1test.c @@ -0,0 +1,46 @@ +#include "includes.h" + +#include "lib/crypto/crypto.h" + +struct torture_context; + +BOOL torture_local_crypto_hmacsha1(struct torture_context *torture) +{ + BOOL ret = True; + uint32_t i; + struct { + DATA_BLOB key; + DATA_BLOB data; + DATA_BLOB digest; + } testarray[] = { + { + .key = strhex_to_data_blob("0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b"), + .data = data_blob_string_const("Hi There"), + .digest = strhex_to_data_blob("b617318655057264e28bc0b6fb378c8ef146be00") + } + }; + + for (i=0; i < ARRAY_SIZE(testarray); i++) { + struct HMACSHA1Context ctx; + uint8_t digest[SHA1HashSize]; + int e; + + hmac_sha1_init(testarray[i].key.data, testarray[i].key.length, &ctx); + hmac_sha1_update(testarray[i].data.data, testarray[i].data.length, &ctx); + hmac_sha1_final(digest, &ctx); + + e = memcmp(testarray[i].digest.data, + digest, + MIN(testarray[i].digest.length, SHA1HashSize)); + if (e != 0) { + printf("test[%u]: failed\n", i); + dump_data(0, testarray[i].key.data, testarray[i].key.length); + dump_data(0, testarray[i].data.data, testarray[i].data.length); + dump_data(0, testarray[i].digest.data, testarray[i].digest.length); + dump_data(0, digest, sizeof(digest)); + ret = False; + } + } + + return ret; +} |