Commit 1264c688 authored by Geoff Simmons's avatar Geoff Simmons

add SHA3_384

parent 4b7261bd
......@@ -12,6 +12,7 @@ my @vals = (qw(
SHA512
SHA3_224
SHA3_256
SHA3_384
));
sub assert {
......
# looks like -*- vcl -*-
varnishtest "SHA3_384 hash"
# VMOD blobcode must be installed
varnish v1 -vcl {
import blobdigest from "${vmod_topbuild}/src/.libs/libvmod_blobdigest.so";
import blobcode;
backend b { .host = "${bad_ip}"; }
sub vcl_init {
# http://wolfgang-ehrhardt.de/hmac-sha3-testvectors.html
new k1 = blobcode.blob(HEX,
"0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b");
new ehrhardt1 = blobdigest.hmac(SHA3_384, k1.get());
new k2 = blobcode.blob(IDENTITY, "Jefe");
new ehrhardt2 = blobdigest.hmac(SHA3_384, k2.get());
new k3 = blobcode.blob(HEX,
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
new ehrhardt3 = blobdigest.hmac(SHA3_384, k3.get());
new k4 = blobcode.blob(HEX,
"0102030405060708090a0b0c0d0e0f10111213141516171819");
new ehrhardt4 = blobdigest.hmac(SHA3_384, k4.get());
new k5 = blobcode.blob(HEX,
"0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c");
new ehrhardt5 = blobdigest.hmac(SHA3_384, k5.get());
new k6 = blobcode.blob(HEX,
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
new ehrhardt6 = blobdigest.hmac(SHA3_384, k6.get());
new k7 = blobcode.blob(HEX,
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
new ehrhardt7 = blobdigest.hmac(SHA3_384, k7.get());
}
sub vcl_recv {
return(synth(200));
}
sub vcl_synth {
set resp.http.empty
= blobcode.encode(HEXUC, blobdigest.hash(SHA3_384,
blobcode.decode(IDENTITY, "")));
set resp.http.a
= blobcode.encode(HEXUC, blobdigest.hash(SHA3_384,
blobcode.decode(IDENTITY, "a")));
set resp.http.abc
= blobcode.encode(HEXUC, blobdigest.hash(SHA3_384,
blobcode.decode(IDENTITY, "abc")));
set resp.http.msgdigest
= blobcode.encode(HEXUC, blobdigest.hash(SHA3_384,
blobcode.decode(IDENTITY,
"message digest")));
set resp.http.alphalc
= blobcode.encode(HEXUC, blobdigest.hash(SHA3_384,
blobcode.decode(IDENTITY,
"abcdefghijklmnopqrstuvwxyz")));
set resp.http.alphasoup
= blobcode.encode(HEXLC, blobdigest.hash(SHA3_384,
blobcode.decode(IDENTITY,
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq")));
set resp.http.alphanum
= blobcode.encode(HEXUC, blobdigest.hash(SHA3_384,
blobcode.decode(IDENTITY,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789")));
set resp.http.digits
= blobcode.encode(HEXUC, blobdigest.hash(SHA3_384,
blobcode.decode(IDENTITY,
"12345678901234567890123456789012345678901234567890123456789012345678901234567890")));
set resp.http.pangram
= blobcode.encode(HEXUC, blobdigest.hash(SHA3_384,
blobcode.decode(IDENTITY,
"The quick brown fox jumps over the lazy dog")));
# all 384 byte values in ascending, big-endian order
set resp.http.allbytes
= blobcode.encode(HEXLC, blobdigest.hash(SHA3_384,
blobcode.decode(BASE64,
"AQACAQMCBAMFBAYFBwYIBwkICgkLCgwLDQwODQ8OEA8REBIRExIUExUUFhUXFhgXGRgaGRsaHBsdHB4dHx4gHyEgIiEjIiQjJSQmJScmKCcpKCopKyosKy0sLi0vLjAvMTAyMTMyNDM1NDY1NzY4Nzk4Ojk7Ojw7PTw+PT8+QD9BQEJBQ0JEQ0VERkVHRkhHSUhKSUtKTEtNTE5NT05QT1FQUlFTUlRTVVRWVVdWWFdZWFpZW1pcW11cXl1fXmBfYWBiYWNiZGNlZGZlZ2ZoZ2loamlramxrbWxubW9ucG9xcHJxc3J0c3V0dnV3dnh3eXh6eXt6fHt9fH59f36Afw==")));
set resp.http.ehrhardt1 = blobcode.encode(HEXLC,
ehrhardt1.hmac(blobcode.decode(IDENTITY, "Hi There")));
set resp.http.ehrhardt2
= blobcode.encode(HEXLC,
ehrhardt2.hmac(blobcode.decode(IDENTITY,
"what do ya want for nothing?")));
set resp.http.ehrhardt3
= blobcode.encode(HEXLC,
ehrhardt3.hmac(blobcode.decode(HEX,
"dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd")));
set resp.http.ehrhardt4
= blobcode.encode(HEXLC,
ehrhardt4.hmac(blobcode.decode(HEX,
"cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd")));
set resp.http.ehrhardt5
= blobcode.encode(HEXLC,
ehrhardt5.hmac(blobcode.decode(IDENTITY,
"Test With Truncation")));
set resp.http.ehrhardt6
= blobcode.encode(HEXLC,
ehrhardt6.hmac(blobcode.decode(IDENTITY,
"Test Using Larger Than Block-Size Key - Hash Key First")));
set resp.http.ehrhardt7
= blobcode.encode(HEXLC,
ehrhardt6.hmac(blobcode.decode(IDENTITY,
"This is a test using a larger than block-size key and a larger than block-size data. The key needs to be hashed before being used by the HMAC algorithm.")));
set resp.http.ehrhardt6a
= blobcode.encode(HEXLC,
ehrhardt7.hmac(blobcode.decode(IDENTITY,
"Test Using Larger Than Block-Size Key - Hash Key First")));
set resp.http.ehrhardt7a
= blobcode.encode(HEXLC,
ehrhardt7.hmac(blobcode.decode(IDENTITY,
"This is a test using a larger than block-size key and a larger than block-size data. The key needs to be hashed before being used by the HMAC algorithm.")));
}
} -start
client c1 {
txreq
rxresp
expect resp.status == 200
# from librhash
expect resp.http.empty == "0C63A75B845E4F7D01107D852E4C2485C51A50AAAA94FC61995E71BBEE983A2AC3713831264ADB47FB6BD1E058D5F004"
expect resp.http.a == "1815F774F320491B48569EFEC794D249EEB59AAE46D22BF77DAFE25C5EDC28D7EA44F93EE1234AA88F61C91912A4CCD9"
expect resp.http.abc == "EC01498288516FC926459F58E2C6AD8DF9B473CB0FC08C2596DA7CF0E49BE4B298D88CEA927AC7F539F1EDF228376D25"
expect resp.http.msgdigest == "D9519709F44AF73E2C8E291109A979DE3D61DC02BF69DEF7FBFFDFFFE662751513F19AD57E17D4B93BA1E484FC1980D5"
expect resp.http.alphalc == "FED399D2217AAF4C717AD0C5102C15589E1C990CC2B9A5029056A7F7485888D6AB65DB2370077A5CADB53FC9280D278F"
expect resp.http.alphanum == "D5B972302F5080D0830E0DE7B6B2CF383665A008F4C4F386A61112652C742D20CB45AA51BD4F542FC733E2719E999291"
expect resp.http.digits == "3C213A17F514638ACB3BF17F109F3E24C16F9F14F085B52A2F2B81ADC0DB83DF1A58DB2CE013191B8BA72D8FAE7E2A5E"
expect resp.http.pangram == "7063465E08A93BCE31CD89D2E3CA8F602498696E253592ED26F07BF7E703CF328581E1471A7BA7AB119B1A9EBDF8BE41"
# from http://www.di-mgt.com.au/sha_testvectors.html
expect resp.http.alphasoup == "991c665755eb3a4b6bbdfb75c78a492e8c56a22c5c4d7e429bfdbc32b9d4ad5aa04a1f076e62fea19eef51acd0657c22"
# verified with: base64 -d | rhash --sha3-384 -
expect resp.http.allbytes == "32fb1b34ba61b6391c089c94323d4f07fa2aa23de0115eea16cb1aac69f0362696db3d829f977a4614c7febccc4ae56c"
# cf. http://wolfgang-ehrhardt.de/hmac-sha3-testvectors.html
expect resp.http.ehrhardt1 == "68d2dcf7fd4ddd0a2240c8a437305f61fb7334cfb5d0226e1bc27dc10a2e723a20d370b47743130e26ac7e3d532886bd"
expect resp.http.ehrhardt2 == "f1101f8cbf9766fd6764d2ed61903f21ca9b18f57cf3e1a23ca13508a93243ce48c045dc007f26a21b3f5e0e9df4c20a"
expect resp.http.ehrhardt3 == "275cd0e661bb8b151c64d288f1f782fb91a8abd56858d72babb2d476f0458373b41b6ab5bf174bec422e53fc3135ac6e"
expect resp.http.ehrhardt4 == "3a5d7a879702c086bc96d1dd8aa15d9c46446b95521311c606fdc4e308f4b984da2d0f9449b3ba8425ec7fb8c31bc136"
expect resp.http.ehrhardt5 ~ "^47c51ace1ffacffd7494724682615783"
expect resp.http.ehrhardt6 == "0fc19513bf6bd878037016706a0e57bc528139836b9a42c3d419e498e0e1fb9616fd669138d33a1105e07c72b6953bcc"
expect resp.http.ehrhardt7 == "026fdf6b50741e373899c9f7d5406d4eb09fc6665636fc1a530029ddf5cf3ca5a900edce01f5f61e2f408cdf2fd3e7e8"
expect resp.http.ehrhardt6a == "713dff0302c85086ec5ad0768dd65a13ddd79068d8d4c6212b712e41649449111480230044185a99103ed82004ddbfcc"
expect resp.http.ehrhardt7a == "cad18a8ff6c4cc3ad487b95f9769e9b61c062aefd6952569e6e6421897054cfc70b5fdc6605c18457112fc6aaad45585"
} -run
......@@ -105,6 +105,9 @@ init(const enum algorithm hash, hash_ctx * const hctx)
case SHA3_256:
rhash_sha3_256_init(&hctx->sha3);
break;
case SHA3_384:
rhash_sha3_384_init(&hctx->sha3);
break;
default:
WRONG("illegal algorithm");
}
......@@ -133,6 +136,7 @@ update(const enum algorithm hash, hash_ctx *restrict const hctx,
break;
case SHA3_224:
case SHA3_256:
case SHA3_384:
rhash_sha3_update(&hctx->sha3, msg, len);
break;
default:
......@@ -163,6 +167,7 @@ final(const enum algorithm hash, hash_ctx *restrict const hctx,
break;
case SHA3_224:
case SHA3_256:
case SHA3_384:
rhash_sha3_final(&hctx->sha3, result);
break;
default:
......
......@@ -82,4 +82,8 @@ static const struct hashspec {
sha3_256_hash_size,
SHA3_BLOCKSZ(256),
},
[SHA3_384] = {
sha3_384_hash_size,
SHA3_BLOCKSZ(384),
},
};
......@@ -10,7 +10,7 @@
$Module blobdigest 3 digests and hmacs for the VCL blob type
$Object hmac(ENUM {MD5, SHA1, SHA224, SHA256, SHA384, SHA512, SHA3_224,
SHA3_256} hash, BLOB key)
SHA3_256, SHA3_384} hash, BLOB key)
Prototype
new OBJ = blobdigest.hmac(ENUM hash, BLOB key)
......@@ -33,7 +33,7 @@ Example
``set req.http.hmac = hmac.hmac(blobcode.decode(BASE64, "Zm9v"));``
$Function BLOB hash(ENUM {MD5, SHA1, SHA224, SHA256, SHA384, SHA512, SHA3_224,
SHA3_256} hash, BLOB msg)
SHA3_256, SHA3_384} hash, BLOB msg)
$Function STRING version()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment