mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-03 03:32:32 +00:00
32 lines
989 B
Nim
32 lines
989 B
Nim
type
|
|
Hash*[bits: static[int]] = object
|
|
data*: array[bits div 8, uint8]
|
|
|
|
{.emit: """
|
|
|
|
void sha_256(void* input, int input_len, void* output, int output_len) {}
|
|
void sha_512(void* input, int input_len, void* output, int output_len) {}
|
|
|
|
void keccak_256(void* input, int input_len, void* output, int output_len) {}
|
|
void keccak_512(void* input, int input_len, void* output, int output_len) {}
|
|
|
|
""".}
|
|
|
|
template defineKeccak(bits: untyped) =
|
|
proc `extKeccak bits`(output: pointer, outSize: csize_t, input: pointer, inputSize: csize_t) {.nodecl, importc: "keccak_" & astToStr(bits).}
|
|
|
|
template defineSha(bits: static[int]) =
|
|
proc `extSha bits`(output: pointer, outSize: csize_t, input: pointer, inputSize: csize_t) {.nodecl, importc: "sha_" & astToStr(bits).}
|
|
|
|
template defineHashProcs(bits) =
|
|
defineSha(bits)
|
|
defineKeccak(bits)
|
|
|
|
defineHashProcs(256)
|
|
defineHashProcs(512)
|
|
|
|
extSha256(nil, 0, nil, 0)
|
|
extSha512(nil, 0, nil, 0)
|
|
extKeccak256(nil, 0, nil, 0)
|
|
extKeccak512(nil, 0, nil, 0)
|