/* hash.h — SHA-1 and SHA-256, the throughput-critical primitives. * * SHA-1 backs BitTorrent v1 (piece hashes + info-hash). SHA-256 backs v2 * (Merkle leaves + info-hash). SHA-256 has a runtime-dispatched SHA-NI path so * a single core verifies well above the 1.25 GB/s the 10 GbE target demands; * the portable scalar path is the fallback and the cross-check oracle. */ #ifndef NAUT_HASH_H #define NAUT_HASH_H #include "naut/common.h" #define NAUT_SHA1_LEN 20 #define NAUT_SHA256_LEN 32 /* --- SHA-1 ------------------------------------------------------------- */ typedef struct { uint32_t h[5]; uint64_t len; /* total bytes hashed */ uint8_t block[64]; size_t used; } naut_sha1_ctx; void naut_sha1_init(naut_sha1_ctx *c); void naut_sha1_update(naut_sha1_ctx *c, const void *data, size_t len); void naut_sha1_final(naut_sha1_ctx *c, uint8_t out[NAUT_SHA1_LEN]); void naut_sha1(const void *data, size_t len, uint8_t out[NAUT_SHA1_LEN]); /* --- SHA-256 ----------------------------------------------------------- */ typedef struct { uint32_t h[8]; uint64_t len; uint8_t block[64]; size_t used; } naut_sha256_ctx; void naut_sha256_init(naut_sha256_ctx *c); void naut_sha256_update(naut_sha256_ctx *c, const void *data, size_t len); void naut_sha256_final(naut_sha256_ctx *c, uint8_t out[NAUT_SHA256_LEN]); void naut_sha256(const void *data, size_t len, uint8_t out[NAUT_SHA256_LEN]); /* Which SHA-256 backend was selected at startup ("sha-ni" or "scalar"). */ const char *naut_sha256_backend(void); #endif /* NAUT_HASH_H */