Skip to content

std.crypto

sha-1/256/512 (fips 180-4), hmac (rfc 2104); not audited for adversarial use

pub fnv1a_64 :: fn(data: []const u8) -> u64
pub fnv1a_32 :: fn(data: []const u8) -> u32
pub crc32 :: fn(data: []const u8) -> u32

ieee 802.3 polynomial (zip, png)

pub SHA256_LEN :: 32usize

sha256_into’s out must be at least this long

pub Digest :: struct {
bytes: [32]u8,
}
pub Sha256 :: struct {
h: [8]u32,
block: [64]u8,
buffered: usize,
total: u64,
}

incremental; also a hash::Hasher; a partial block waits in block

pub update :: fn(self: *Self, data: []const u8)
pub final :: fn(self: *Self) -> Digest

digest so far; self unchanged

pub sha256_start :: fn() -> Sha256
pub sha256_into :: fn(data: []const u8, out: []u8)

out must be >= SHA256_LEN bytes; caller owns it

pub sha256 :: fn(data: []const u8) -> Digest
pub hex :: fn(a: *Arena, bytes: []const u8) -> []const u8

lowercase hex, in a

pub to_hex :: fn(a: *Arena, d: Digest) -> []const u8

64 lowercase hex chars, in a

pub Sha512Digest :: struct {
bytes: [64]u8,
}
pub Sha512 :: struct {
h: [8]u64,
block: [128]u8,
buffered: usize,
total: u64,
}

incremental; also a hash::Hasher

  • total: bytes; low 67 bits of the 128-bit length
pub update :: fn(self: *Self, data: []const u8)
pub final :: fn(self: *Self) -> Sha512Digest

digest so far; self unchanged

pub sha512_start :: fn() -> Sha512
pub sha512 :: fn(data: []const u8) -> Sha512Digest
pub Sha1Digest :: struct {
bytes: [20]u8,
}
pub Sha1 :: struct {
h: [5]u32,
block: [64]u8,
buffered: usize,
total: u64,
}

incremental; also a hash::Hasher

pub update :: fn(self: *Self, data: []const u8)
pub final :: fn(self: *Self) -> Sha1Digest

digest so far; self unchanged

pub sha1_start :: fn() -> Sha1
pub sha1 :: fn(data: []const u8) -> Sha1Digest
pub hmac_sha256 :: fn(key: []const u8, msg: []const u8) -> Digest
pub hmac_sha512 :: fn(key: []const u8, msg: []const u8) -> Sha512Digest
pub equal_secure :: fn(a: []const u8, b: []const u8) -> bool

constant-time compare (length not hidden); compare MACs with this, never ==