View source code Display the source code in std/digest/sha.d from which this page was generated on github. 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. Page wiki View or edit the community-maintained wiki page associated with this page.

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.digest.digest. To understand the differences between the template and the OOP API, see std.digest.digest.

This module publicly imports std.digest.digest 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");
assert(toHexString(hash1) == "A9993E364706816ABA3E25717850C26C9CD0D89D");

ubyte[28] hash224 = sha224Of("abc");
assert(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");
assert(toHexString(hash1) == "A9993E364706816ABA3E25717850C26C9CD0D89D");

auto sha224 = new SHA224Digest();
ubyte[] hash224 = sha224.digest("abc");
assert(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 These are convenience aliases for std.digest.digest.digest using the SHA implementation.
sha224Of These are convenience aliases for std.digest.digest.digest using the SHA implementation.
sha256Of These are convenience aliases for std.digest.digest.digest using the SHA implementation.
sha384Of These are convenience aliases for std.digest.digest.digest using the SHA implementation.
sha512Of These are convenience aliases for std.digest.digest.digest using the SHA implementation.
sha512_224Of These are convenience aliases for std.digest.digest.digest using the SHA implementation.
sha512_256Of These are convenience aliases for std.digest.digest.digest 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 WrapperDigest!(std.digest.sha.SHA!(512,160).SHA) OOP API SHA1 and SHA2 implementations. See std.digest.digest for differences between template and OOP API.
SHA224 SHA!(512,224) SHA alias for SHA-224, hash is ubyte[28]
SHA224Digest WrapperDigest!(std.digest.sha.SHA!(512,224).SHA) OOP API SHA1 and SHA2 implementations. See std.digest.digest for differences between template and OOP API.
SHA256 SHA!(512,256) SHA alias for SHA-256, hash is ubyte[32]
SHA256Digest WrapperDigest!(std.digest.sha.SHA!(512,256).SHA) OOP API SHA1 and SHA2 implementations. See std.digest.digest for differences between template and OOP API.
SHA384 SHA!(1024,384) SHA alias for SHA-384, hash is ubyte[48]
SHA384Digest WrapperDigest!(std.digest.sha.SHA!(1024,384).SHA) OOP API SHA1 and SHA2 implementations. See std.digest.digest for differences between template and OOP API.
SHA512 SHA!(1024,512) SHA alias for SHA-512, hash is ubyte[64]
SHA512Digest WrapperDigest!(std.digest.sha.SHA!(1024,512).SHA) OOP API SHA1 and SHA2 implementations. See std.digest.digest for differences between template and OOP API.
SHA512_224 SHA!(1024,224) SHA alias for SHA-512/224, hash is ubyte[28]
SHA512_224Digest WrapperDigest!(std.digest.sha.SHA!(1024,224).SHA) OOP API SHA1 and SHA2 implementations. See std.digest.digest for differences between template and OOP API.
SHA512_256 SHA!(1024,256) SHA alias for SHA-512/256, hash is ubyte[32]
SHA512_256Digest WrapperDigest!(std.digest.sha.SHA!(1024,256).SHA) OOP API SHA1 and SHA2 implementations. See std.digest.digest 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

License

Boost License 1.0.

Comments