This is a translation of the [official reference implementation][1] with few other changes. The bad news is that the reference implementation is designed for simplicity and not speed, so there's a lot of room for performance improvement. The good news is that, according to the crypto benchmark, the implementation is still fast relative to the other hashing algorithms: ``` md5: 430 MiB/s sha1: 386 MiB/s sha256: 191 MiB/s sha512: 275 MiB/s sha3-256: 233 MiB/s sha3-512: 137 MiB/s blake2s: 464 MiB/s blake2b: 526 MiB/s blake3: 576 MiB/s poly1305: 1479 MiB/s hmac-md5: 653 MiB/s hmac-sha1: 553 MiB/s hmac-sha256: 222 MiB/s x25519: 8685 exchanges/s ``` [1]: https://github.com/BLAKE3-team/BLAKE3
60 lines
1.9 KiB
Zig
60 lines
1.9 KiB
Zig
pub const Md5 = @import("crypto/md5.zig").Md5;
|
|
pub const Sha1 = @import("crypto/sha1.zig").Sha1;
|
|
|
|
const sha2 = @import("crypto/sha2.zig");
|
|
pub const Sha224 = sha2.Sha224;
|
|
pub const Sha256 = sha2.Sha256;
|
|
pub const Sha384 = sha2.Sha384;
|
|
pub const Sha512 = sha2.Sha512;
|
|
|
|
const sha3 = @import("crypto/sha3.zig");
|
|
pub const Sha3_224 = sha3.Sha3_224;
|
|
pub const Sha3_256 = sha3.Sha3_256;
|
|
pub const Sha3_384 = sha3.Sha3_384;
|
|
pub const Sha3_512 = sha3.Sha3_512;
|
|
|
|
pub const gimli = @import("crypto/gimli.zig");
|
|
|
|
const blake2 = @import("crypto/blake2.zig");
|
|
pub const Blake2s224 = blake2.Blake2s224;
|
|
pub const Blake2s256 = blake2.Blake2s256;
|
|
pub const Blake2b384 = blake2.Blake2b384;
|
|
pub const Blake2b512 = blake2.Blake2b512;
|
|
|
|
pub const Blake3 = @import("crypto/blake3.zig").Blake3;
|
|
|
|
const hmac = @import("crypto/hmac.zig");
|
|
pub const HmacMd5 = hmac.HmacMd5;
|
|
pub const HmacSha1 = hmac.HmacSha1;
|
|
pub const HmacSha256 = hmac.HmacSha256;
|
|
pub const HmacBlake2s256 = hmac.HmacBlake2s256;
|
|
|
|
const import_chaCha20 = @import("crypto/chacha20.zig");
|
|
pub const chaCha20IETF = import_chaCha20.chaCha20IETF;
|
|
pub const chaCha20With64BitNonce = import_chaCha20.chaCha20With64BitNonce;
|
|
|
|
pub const Poly1305 = @import("crypto/poly1305.zig").Poly1305;
|
|
pub const X25519 = @import("crypto/x25519.zig").X25519;
|
|
|
|
const import_aes = @import("crypto/aes.zig");
|
|
pub const AES128 = import_aes.AES128;
|
|
pub const AES256 = import_aes.AES256;
|
|
|
|
const std = @import("std.zig");
|
|
pub const randomBytes = std.os.getrandom;
|
|
|
|
test "crypto" {
|
|
_ = @import("crypto/aes.zig");
|
|
_ = @import("crypto/blake2.zig");
|
|
_ = @import("crypto/blake3.zig");
|
|
_ = @import("crypto/chacha20.zig");
|
|
_ = @import("crypto/gimli.zig");
|
|
_ = @import("crypto/hmac.zig");
|
|
_ = @import("crypto/md5.zig");
|
|
_ = @import("crypto/poly1305.zig");
|
|
_ = @import("crypto/sha1.zig");
|
|
_ = @import("crypto/sha2.zig");
|
|
_ = @import("crypto/sha3.zig");
|
|
_ = @import("crypto/x25519.zig");
|
|
}
|