Report a bug If you spot a problem with this page, click here to create a Bugzilla issue. Improve this page Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using local clone.

std.digest.hmac

This package implements the hash-based message authentication code (HMAC) algorithm as defined in RFC2104. See also the corresponding Wikipedia article.
License:

Source: std/digest/hmac.d

struct HMAC(H, size_t hashBlockSize) if (hashBlockSize % 8 == 0);
Overload of HMAC to be used if H doesn't provide information about its block size.
this(scope const(ubyte)[] secret);
Constructs the HMAC digest using the specified secret.
Examples:
import std.digest.sha, std.digest.hmac;
import std.string : representation;
auto hmac = HMAC!SHA1("My s3cR3T keY".representation);
hmac.put("Hello, world".representation);
static immutable expected = [130, 32, 235, 44, 208, 141, 150, 232, 211, 214, 162, 195, 188, 127, 52, 89, 100, 68, 90, 216];
assert(hmac.finish() == expected);
ref return HMAC!(H, blockSize) start();
Reinitializes the digest, making it ready for reuse.

Note: The 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.

Returns:
A reference to the digest for convenient chaining.
Examples:
import std.digest.sha, std.digest.hmac;
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 digest
hmac.put(data2.representation); // start over
static immutable expected = [122, 151, 232, 240, 249, 80, 19, 178, 186, 77, 110, 23, 208, 52, 11, 88, 34, 151, 192, 255];
assert(hmac.finish() == expected);
ref return HMAC!(H, blockSize) put(in ubyte[] data...);
Feeds a piece of data into the hash computation. This method allows the type to be used as an std.range.OutputRange.
Returns:
A reference to the digest for convenient chaining.
Examples:
import std.digest.sha, std.digest.hmac;
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);
static immutable expected = [197, 57, 52, 3, 13, 194, 13, 36, 117, 228, 8, 11, 111, 51, 165, 3, 123, 31, 251, 113];
assert(hmac.finish() == expected);
DigestType!H finish();
Resets the digest and returns the finished hash.
Examples:
import std.digest.sha, std.digest.hmac;
import std.string : representation;
string data1 = "Hello, world", data2 = "Hola mundo";
auto hmac = HMAC!SHA1("My s3cR3T keY".representation);
auto digest = hmac.put(data1.representation)
                  .put(data2.representation)
                  .finish();
static immutable expected = [197, 57, 52, 3, 13, 194, 13, 36, 117, 228, 8, 11, 111, 51, 165, 3, 123, 31, 251, 113];
assert(digest == expected);