Module std.digest.sha
Computes SHA1 and SHA2 hashes of arbitrary data. SHA hashes are 20 to 64 byte quantities (depending on the SHA algorithm) that are like a checksum or CRC, but are more robust.
Category | Functions |
---|---|
Template API | SHA1
|
OOP API | SHA1Digest |
Helpers | sha1Of |
SHA2 comes in several different versions, all supported by this module: SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 and SHA-512/256.
This module conforms to the APIs defined in std
. To understand the
differences between the template and the OOP API, see std
.
This module publicly imports std
and can be used as a stand-alone
module.
CTFE
Digests do not work in CTFE
References
Example
//Template API
import std .digest .sha;
ubyte[20] hash1 = sha1Of("abc");
writeln(toHexString(hash1)); // "A9993E364706816ABA3E25717850C26C9CD0D89D"
ubyte[28] hash224 = sha224Of("abc");
writeln(toHexString(hash224)); // "23097D223405D8228642A477BDA255B32AADBCE4BDA0B3F7E36C9DA7"
//Feeding data
ubyte[1024] data;
SHA1 sha1;
sha1 .start();
sha1 .put(data[]);
sha1 .start(); //Start again
sha1 .put(data[]);
hash1 = sha1 .finish();
Example
//OOP API
import std .digest .sha;
auto sha1 = new SHA1Digest();
ubyte[] hash1 = sha1 .digest("abc");
writeln(toHexString(hash1)); // "A9993E364706816ABA3E25717850C26C9CD0D89D"
auto sha224 = new SHA224Digest();
ubyte[] hash224 = sha224 .digest("abc");
writeln(toHexString(hash224)); // "23097D223405D8228642A477BDA255B32AADBCE4BDA0B3F7E36C9DA7"
//Feeding data
ubyte[1024] data;
sha1 .put(data[]);
sha1 .reset(); //Start again
sha1 .put(data[]);
hash1 = sha1 .finish();
Functions
Name | Description |
---|---|
sha1Of(data)
|
These are convenience aliases for std using the
SHA implementation.
|
sha224Of(data)
|
These are convenience aliases for std using the
SHA implementation.
|
sha256Of(data)
|
These are convenience aliases for std using the
SHA implementation.
|
sha384Of(data)
|
These are convenience aliases for std using the
SHA implementation.
|
sha512Of(data)
|
These are convenience aliases for std using the
SHA implementation.
|
sha512_224Of(data)
|
These are convenience aliases for std using the
SHA implementation.
|
sha512_256Of(data)
|
These are convenience aliases for std using the
SHA implementation.
|
Structs
Name | Description |
---|---|
SHA
|
Template API SHA1/SHA2 implementation. Supports: SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 and SHA-512/256. |
Aliases
Name | Type | Description |
---|---|---|
SHA1
|
SHA!(512,160)
|
SHA alias for SHA-1, hash is ubyte[20] |
SHA1Digest
|
std
|
OOP API SHA1 and SHA2 implementations.
See std for differences between template and OOP API.
|
SHA224
|
SHA!(512,224)
|
SHA alias for SHA-224, hash is ubyte[28] |
SHA224Digest
|
std
|
OOP API SHA1 and SHA2 implementations.
See std for differences between template and OOP API.
|
SHA256
|
SHA!(512,256)
|
SHA alias for SHA-256, hash is ubyte[32] |
SHA256Digest
|
std
|
OOP API SHA1 and SHA2 implementations.
See std for differences between template and OOP API.
|
SHA384
|
SHA!(1024,384)
|
SHA alias for SHA-384, hash is ubyte[48] |
SHA384Digest
|
std
|
OOP API SHA1 and SHA2 implementations.
See std for differences between template and OOP API.
|
SHA512
|
SHA!(1024,512)
|
SHA alias for SHA-512, hash is ubyte[64] |
SHA512Digest
|
std
|
OOP API SHA1 and SHA2 implementations.
See std for differences between template and OOP API.
|
SHA512_224
|
SHA!(1024,224)
|
SHA alias for SHA-512/224, hash is ubyte[28] |
SHA512_224Digest
|
std
|
OOP API SHA1 and SHA2 implementations.
See std for differences between template and OOP API.
|
SHA512_256
|
SHA!(1024,256)
|
SHA alias for SHA-512/256, hash is ubyte[32] |
SHA512_256Digest
|
std
|
OOP API SHA1 and SHA2 implementations.
See std for differences between template and OOP API.
|
Authors
The routines and algorithms are derived from the
Secure Hash Signature Standard (SHS) (FIPS PUB 180-2).
Kai Nacke, Johannes Pfau, Nick Sabalausky