mirror of
https://github.com/logos-storage/nim-bearssl.git
synced 2026-01-03 14:03:12 +00:00
* split `decls.nim` into smaller modules - allows using parts of the ABI without compiling all of `bearssl` * deprecate functions with `Br` prefix - there are duplicate exports both with and without `Br` for the same function and we use both in consumers like `chronos` and `libp2p` * fix several cases of incorrectly mapped types * use `var` for certain arguments that can't be `nil` * add script to regenerate ABI with `c2nim` * consistently use `uint` for length (`int` was sometimes used) The Split likely needs more cleanup work - this is a first cut to get the idea in place. In the new layout, `bearssl/abi/` contains "raw" nim mappings while hand-written helpers are in `bearssl/`.
57 lines
1.8 KiB
Nim
57 lines
1.8 KiB
Nim
import
|
|
"."/[bearssl_hash, csources, inner]
|
|
|
|
{.pragma: importcFunc, cdecl, gcsafe, noSideEffect, raises: [].}
|
|
{.used.}
|
|
|
|
const
|
|
bearMacPath = bearSrcPath / "mac"
|
|
|
|
{.compile: bearMacPath / "hmac.c".}
|
|
{.compile: bearMacPath / "hmac_ct.c".}
|
|
|
|
type
|
|
HmacKeyContext* {.importc: "br_hmac_key_context", header: "bearssl_hmac.h", bycopy.} = object
|
|
digVtable* {.importc: "dig_vtable".}: ptr HashClass
|
|
ksi* {.importc: "ksi".}: array[64, byte]
|
|
kso* {.importc: "kso".}: array[64, byte]
|
|
|
|
|
|
|
|
proc hmacKeyInit*(kc: var HmacKeyContext; digestVtable: ptr HashClass; key: pointer;
|
|
keyLen: uint) {.importcFunc, importc: "br_hmac_key_init",
|
|
header: "bearssl_hmac.h".}
|
|
|
|
proc hmacKeyGetDigest*(kc: var HmacKeyContext): ptr HashClass {.inline.} =
|
|
return kc.digVtable
|
|
|
|
|
|
type
|
|
HmacContext* {.importc: "br_hmac_context", header: "bearssl_hmac.h", bycopy.} = object
|
|
dig* {.importc: "dig".}: HashCompatContext
|
|
kso* {.importc: "kso".}: array[64, byte]
|
|
outLen* {.importc: "out_len".}: uint
|
|
|
|
|
|
|
|
proc hmacInit*(ctx: var HmacContext; kc: var HmacKeyContext; outLen: uint) {.importcFunc,
|
|
importc: "br_hmac_init", header: "bearssl_hmac.h".}
|
|
|
|
proc hmacSize*(ctx: var HmacContext): uint {.inline, importcFunc, importc: "br_hmac_size".} =
|
|
return ctx.outLen
|
|
|
|
|
|
proc hmacGetDigest*(hc: var HmacContext): ptr HashClass {.inline.} =
|
|
return hc.dig.vtable
|
|
|
|
|
|
proc hmacUpdate*(ctx: var HmacContext; data: pointer; len: uint) {.importcFunc,
|
|
importc: "br_hmac_update", header: "bearssl_hmac.h".}
|
|
|
|
proc hmacOut*(ctx: var HmacContext; `out`: pointer): uint {.importcFunc,
|
|
importc: "br_hmac_out", header: "bearssl_hmac.h".}
|
|
|
|
proc hmacOutCT*(ctx: var HmacContext; data: pointer; len: uint; minLen: uint;
|
|
maxLen: uint; `out`: pointer): uint {.importcFunc,
|
|
importc: "br_hmac_outCT", header: "bearssl_hmac.h".}
|