/crypto

Small, fast, header only, zero dependency cryptographic library.

Primary LanguageC++MIT LicenseMIT

Crypto

Small, fast, header only, zero dependency cryptographic library written in C++2a.

Cryptographic hash functions

Cryptographic Hash Functions (CHFs) are a family of algorithms that take an input (or message) and produce a fixed-size output, known as the hash value or digest. This process is a one-way function, meaning it is computationally infeasible to reverse the hash value to obtain the original input. Additionally, small changes in the input will result in significantly different hash values.

Algorithms

Class Word bits Size bits Block bits Rounds State bits Output bits
MD4 32 64 512 3 128 128
MD5 32 64 512 64 128 128
RMD<128> 32 64 512 64 128 128
RMD<160> 32 64 512 80 160 160
RMD<256> 32 64 512 64 256 256
RMD<320> 32 64 512 80 320 320
SHA1 32 64 512 80 160 160
SHA2<256,224> 32 64 512 64 256 224
SHA2<256,256> 32 64 512 64 256 256
SHA2<512,224> 64 128 1024 80 512 224
SHA2<512,256> 64 128 1024 80 512 256
SHA2<512,384> 64 128 1024 80 512 384
SHA2<512,512> 64 128 1024 80 512 512

Examples

Double hashing the contents of a container holding trivially copyable objects with the help of SHA2<256> and RMD<160>. Note that rmd<160>(message) is an alias for RMD<160>().update(message).digest().

#include <crypto/rmd.h>
#include <crypto/sha2.h>

using namespace crypto;

auto
hash(const auto &trivially_copyable_objects) {

    auto hasher = SHA2<256>();

    for (const auto &entry: trivially_copyable_objects) {
        hasher.update(entry);
    }

    return rmd<160>(hasher.update("secret").digest());
}

Message authentication codes

Message Authentication Codes (MACs) are cryptographic mechanisms used to ensure the integrity and authenticity of a message or data transmission. They provide a way to verify that a message has not been tampered with during transmission and that it originates from a trusted source.

Algorithms

Only the hash-based message authentication code (HMAC) is supported at the moment.

Examples

Double hashing the contents of a container holding trivially copyable objects with the help of HMAC, SHA2<256> and RMD<160>. Note that hmac<RMD<160>>(secret, message) is an alias for HMAC<RMD<160>>(secret).update(message).digest().

#include <crypto/rmd.h>
#include <crypto/sha2.h>
#include <crypto/hmac.h>

using namespace crypto;

auto
hash(const auto &trivially_copyable_objects) {

    auto hasher = HMAC<SHA2<256>>("secret 1");

    for (const auto &entry: trivially_copyable_objects) {
        hasher.update(entry);
    }

    return hmac<RMD<160>>("secret 2", hasher.digest());
}

Installation

Download the sources to the folder of choice and include the desired headers.

Contributing

Feature requests, bug reports and success stories are most welcome.

Copyright

Copyright 2018 Quasis - The MIT License