Sourcestd/digest/hmac.d
import std.ascii : LetterCase;import std.digest : toHexString;import std.digest.sha : SHA1;import std.string : representation;auto secret ="secret".representation;assert("The quick brown fox jumps over the lazy dog" .representation .hmac!SHA1(secret) .toHexString!(LetterCase.lower) =="198ea1ea04c435c1246b586a06d5cf11c3ffcda6");
HMAC(H, size_t hashBlockSize) if (hashBlockSize % 8 == 0);hmac(H) if (isDigest!H && hasBlockSize!H)hmac(H, size_t blockSize)(scope const(ubyte)[]secret)import std.digest.sha : SHA1;import std.string : representation;string data1 ="Hello, world", data2 ="Hola mundo";autohmac =HMAC!SHA1("My s3cR3T keY".representation);auto digest =hmac.put(data1.representation) .put(data2.representation) .finish();staticimmutable expected = [ 197, 57, 52, 3, 13, 194, 13, 36, 117, 228, 8, 11, 111, 51, 165, 3, 123, 31, 251, 113];writeln(digest);// expected
secret);import std.digest.sha : SHA1;import std.string : representation;auto hmac = HMAC!SHA1("My s3cR3T keY".representation);hmac.put("Hello, world".representation);staticimmutable expected = [ 130, 32, 235, 44, 208, 141, 150, 232, 211, 214, 162, 195, 188, 127, 52, 89, 100, 68, 90, 216];writeln(hmac.finish());// expected
start() return;NoteThe constructor leaves the digest in an initialized state, so that this method only needs to be called if an unfinished digest is to be reused.
import std.digest.sha : SHA1;import std.string : representation;string data1 ="Hello, world", data2 ="Hola mundo";auto hmac = HMAC!SHA1("My s3cR3T keY".representation);hmac.put(data1.representation);hmac.start();// reset digesthmac.put(data2.representation);// start overstaticimmutable expected = [ 122, 151, 232, 240, 249, 80, 19, 178, 186, 77, 110, 23, 208, 52, 11, 88, 34, 151, 192, 255];writeln(hmac.finish());// expected
put(in ubyte[]data...) return;import std.digest.hmac, std.digest.sha;import std.string : representation;string data1 ="Hello, world", data2 ="Hola mundo";auto hmac = HMAC!SHA1("My s3cR3T keY".representation);hmac.put(data1.representation) .put(data2.representation);staticimmutable expected = [ 197, 57, 52, 3, 13, 194, 13, 36, 117, 228, 8, 11, 111, 51, 165, 3, 123, 31, 251, 113];writeln(hmac.finish());// expected
finish();import std.digest.sha : SHA1;import std.string : representation;string data1 ="Hello, world", data2 ="Hola mundo";auto hmac = HMAC!SHA1("My s3cR3T keY".representation);auto testDigest = hmac.put(data1.representation) .put(data2.representation) .finish();staticimmutable expected = [ 197, 57, 52, 3, 13, 194, 13, 36, 117, 228, 8, 11, 111, 51, 165, 3, 123, 31, 251, 113];writeln(testDigest);// expected