nim-bearssl/bearssl/abi/bearssl_ec.nim

339 lines
9.4 KiB
Nim

import
"."/[bearssl_hash, bearssl_rand, csources, intx]
{.pragma: importcFunc, cdecl, gcsafe, noSideEffect, raises: [].}
{.used.}
const
bearEcPath = bearSrcPath & "ec/"
{.compile: bearEcPath & "ecdsa_atr.c".}
{.compile: bearEcPath & "ecdsa_default_sign_asn1.c".}
{.compile: bearEcPath & "ecdsa_default_sign_raw.c".}
{.compile: bearEcPath & "ecdsa_default_vrfy_asn1.c".}
{.compile: bearEcPath & "ecdsa_default_vrfy_raw.c".}
{.compile: bearEcPath & "ecdsa_i15_bits.c".}
{.compile: bearEcPath & "ecdsa_i15_sign_asn1.c".}
{.compile: bearEcPath & "ecdsa_i15_sign_raw.c".}
{.compile: bearEcPath & "ecdsa_i15_vrfy_asn1.c".}
{.compile: bearEcPath & "ecdsa_i15_vrfy_raw.c".}
{.compile: bearEcPath & "ecdsa_i31_bits.c".}
{.compile: bearEcPath & "ecdsa_i31_sign_asn1.c".}
{.compile: bearEcPath & "ecdsa_i31_sign_raw.c".}
{.compile: bearEcPath & "ecdsa_i31_vrfy_asn1.c".}
{.compile: bearEcPath & "ecdsa_i31_vrfy_raw.c".}
{.compile: bearEcPath & "ecdsa_rta.c".}
{.compile: bearEcPath & "ec_all_m15.c".}
{.compile: bearEcPath & "ec_all_m31.c".}
{.compile: bearEcPath & "ec_c25519_i15.c".}
{.compile: bearEcPath & "ec_c25519_i31.c".}
{.compile: bearEcPath & "ec_c25519_m15.c".}
{.compile: bearEcPath & "ec_c25519_m31.c".}
{.compile: bearEcPath & "ec_c25519_m62.c".}
{.compile: bearEcPath & "ec_c25519_m64.c".}
{.compile: bearEcPath & "ec_curve25519.c".}
{.compile: bearEcPath & "ec_default.c".}
{.compile: bearEcPath & "ec_keygen.c".}
{.compile: bearEcPath & "ec_p256_m15.c".}
{.compile: bearEcPath & "ec_p256_m31.c".}
{.compile: bearEcPath & "ec_p256_m62.c".}
{.compile: bearEcPath & "ec_p256_m64.c".}
{.compile: bearEcPath & "ec_prime_i15.c".}
{.compile: bearEcPath & "ec_prime_i31.c".}
{.compile: bearEcPath & "ec_pubkey.c".}
{.compile: bearEcPath & "ec_secp256r1.c".}
{.compile: bearEcPath & "ec_secp384r1.c".}
{.compile: bearEcPath & "ec_secp521r1.c".}
const
EC_sect163k1* = 1
const
EC_sect163r1* = 2
const
EC_sect163r2* = 3
const
EC_sect193r1* = 4
const
EC_sect193r2* = 5
const
EC_sect233k1* = 6
const
EC_sect233r1* = 7
const
EC_sect239k1* = 8
const
EC_sect283k1* = 9
const
EC_sect283r1* = 10
const
EC_sect409k1* = 11
const
EC_sect409r1* = 12
const
EC_sect571k1* = 13
const
EC_sect571r1* = 14
const
EC_secp160k1* = 15
const
EC_secp160r1* = 16
const
EC_secp160r2* = 17
const
EC_secp192k1* = 18
const
EC_secp192r1* = 19
const
EC_secp224k1* = 20
const
EC_secp224r1* = 21
const
EC_secp256k1* = 22
const
EC_secp256r1* = 23
const
EC_secp384r1* = 24
const
EC_secp521r1* = 25
const
EC_brainpoolP256r1* = 26
const
EC_brainpoolP384r1* = 27
const
EC_brainpoolP512r1* = 28
const
EC_curve25519* = 29
const
EC_curve448* = 30
type
EcPublicKey* {.importc: "br_ec_public_key", header: "bearssl_ec.h", bycopy.} = object
curve* {.importc: "curve".}: cint
q* {.importc: "q".}: ptr byte
qlen* {.importc: "qlen".}: uint
type
EcPrivateKey* {.importc: "br_ec_private_key", header: "bearssl_ec.h", bycopy.} = object
curve* {.importc: "curve".}: cint
x* {.importc: "x".}: ptr byte
xlen* {.importc: "xlen".}: uint
type
EcImpl* {.importc: "br_ec_impl", header: "bearssl_ec.h", bycopy.} = object
supportedCurves* {.importc: "supported_curves".}: uint32
generator* {.importc: "generator".}: proc (curve: cint; len: var uint): ptr byte {.
importcFunc.}
order* {.importc: "order".}: proc (curve: cint; len: var uint): ptr byte {.importcFunc.}
xoff* {.importc: "xoff".}: proc (curve: cint; len: var uint): uint {.importcFunc.}
mul* {.importc: "mul".}: proc (g: ptr byte; glen: uint; x: ptr byte;
xlen: uint; curve: cint): uint32 {.importcFunc.}
mulgen* {.importc: "mulgen".}: proc (r: ptr byte; x: ptr byte; xlen: uint;
curve: cint): uint {.importcFunc.}
muladd* {.importc: "muladd".}: proc (a: ptr byte; b: ptr byte; len: uint;
x: ptr byte; xlen: uint; y: ptr byte;
ylen: uint; curve: cint): uint32 {.importcFunc.}
var ecPrimeI31* {.importc: "br_ec_prime_i31", header: "bearssl_ec.h".}: EcImpl
var ecPrimeI15* {.importc: "br_ec_prime_i15", header: "bearssl_ec.h".}: EcImpl
var ecP256M15* {.importc: "br_ec_p256_m15", header: "bearssl_ec.h".}: EcImpl
var ecP256M31* {.importc: "br_ec_p256_m31", header: "bearssl_ec.h".}: EcImpl
var ecP256M62* {.importc: "br_ec_p256_m62", header: "bearssl_ec.h".}: EcImpl
proc ecP256M62Get*(): ptr EcImpl {.importcFunc, importc: "br_ec_p256_m62_get",
header: "bearssl_ec.h".}
var ecP256M64* {.importc: "br_ec_p256_m64", header: "bearssl_ec.h".}: EcImpl
proc ecP256M64Get*(): ptr EcImpl {.importcFunc, importc: "br_ec_p256_m64_get",
header: "bearssl_ec.h".}
var ecC25519I15* {.importc: "br_ec_c25519_i15", header: "bearssl_ec.h".}: EcImpl
var ecC25519I31* {.importc: "br_ec_c25519_i31", header: "bearssl_ec.h".}: EcImpl
var ecC25519M15* {.importc: "br_ec_c25519_m15", header: "bearssl_ec.h".}: EcImpl
var ecC25519M31* {.importc: "br_ec_c25519_m31", header: "bearssl_ec.h".}: EcImpl
var ecC25519M62* {.importc: "br_ec_c25519_m62", header: "bearssl_ec.h".}: EcImpl
proc ecC25519M62Get*(): ptr EcImpl {.importcFunc, importc: "br_ec_c25519_m62_get",
header: "bearssl_ec.h".}
var ecC25519M64* {.importc: "br_ec_c25519_m64", header: "bearssl_ec.h".}: EcImpl
proc ecC25519M64Get*(): ptr EcImpl {.importcFunc, importc: "br_ec_c25519_m64_get",
header: "bearssl_ec.h".}
var ecAllM15* {.importc: "br_ec_all_m15", header: "bearssl_ec.h".}: EcImpl
var ecAllM31* {.importc: "br_ec_all_m31", header: "bearssl_ec.h".}: EcImpl
proc ecGetDefault*(): ptr EcImpl {.importcFunc, importc: "br_ec_get_default",
header: "bearssl_ec.h".}
proc ecdsaRawToAsn1*(sig: pointer; sigLen: uint): uint {.importcFunc,
importc: "br_ecdsa_raw_to_asn1", header: "bearssl_ec.h".}
proc ecdsaAsn1ToRaw*(sig: pointer; sigLen: uint): uint {.importcFunc,
importc: "br_ecdsa_asn1_to_raw", header: "bearssl_ec.h".}
type
EcdsaSign* {.importc: "br_ecdsa_sign".} = proc (impl: ptr EcImpl; hf: ptr HashClass; hashValue: pointer;
sk: ptr EcPrivateKey; sig: pointer): uint {.importcFunc.}
type
EcdsaVrfy* {.importc: "br_ecdsa_vrfy".} = proc (impl: ptr EcImpl; hash: pointer; hashLen: uint;
pk: ptr EcPublicKey; sig: pointer; sigLen: uint): uint32 {.importcFunc.}
proc ecdsaI31SignAsn1*(impl: ptr EcImpl; hf: ptr HashClass; hashValue: pointer;
sk: ptr EcPrivateKey; sig: pointer): uint {.importcFunc,
importc: "br_ecdsa_i31_sign_asn1", header: "bearssl_ec.h".}
proc ecdsaI31SignRaw*(impl: ptr EcImpl; hf: ptr HashClass; hashValue: pointer;
sk: ptr EcPrivateKey; sig: pointer): uint {.importcFunc,
importc: "br_ecdsa_i31_sign_raw", header: "bearssl_ec.h".}
proc ecdsaI31VrfyAsn1*(impl: ptr EcImpl; hash: pointer; hashLen: uint;
pk: ptr EcPublicKey; sig: pointer; sigLen: uint): uint32 {.
importcFunc, importc: "br_ecdsa_i31_vrfy_asn1", header: "bearssl_ec.h".}
proc ecdsaI31VrfyRaw*(impl: ptr EcImpl; hash: pointer; hashLen: uint;
pk: ptr EcPublicKey; sig: pointer; sigLen: uint): uint32 {.
importcFunc, importc: "br_ecdsa_i31_vrfy_raw", header: "bearssl_ec.h".}
proc ecdsaI15SignAsn1*(impl: ptr EcImpl; hf: ptr HashClass; hashValue: pointer;
sk: ptr EcPrivateKey; sig: pointer): uint {.importcFunc,
importc: "br_ecdsa_i15_sign_asn1", header: "bearssl_ec.h".}
proc ecdsaI15SignRaw*(impl: ptr EcImpl; hf: ptr HashClass; hashValue: pointer;
sk: ptr EcPrivateKey; sig: pointer): uint {.importcFunc,
importc: "br_ecdsa_i15_sign_raw", header: "bearssl_ec.h".}
proc ecdsaI15VrfyAsn1*(impl: ptr EcImpl; hash: pointer; hashLen: uint;
pk: ptr EcPublicKey; sig: pointer; sigLen: uint): uint32 {.
importcFunc, importc: "br_ecdsa_i15_vrfy_asn1", header: "bearssl_ec.h".}
proc ecdsaI15VrfyRaw*(impl: ptr EcImpl; hash: pointer; hashLen: uint;
pk: ptr EcPublicKey; sig: pointer; sigLen: uint): uint32 {.
importcFunc, importc: "br_ecdsa_i15_vrfy_raw", header: "bearssl_ec.h".}
proc ecdsaSignAsn1GetDefault*(): EcdsaSign {.importcFunc,
importc: "br_ecdsa_sign_asn1_get_default", header: "bearssl_ec.h".}
proc ecdsaSignRawGetDefault*(): EcdsaSign {.importcFunc,
importc: "br_ecdsa_sign_raw_get_default", header: "bearssl_ec.h".}
proc ecdsaVrfyAsn1GetDefault*(): EcdsaVrfy {.importcFunc,
importc: "br_ecdsa_vrfy_asn1_get_default", header: "bearssl_ec.h".}
proc ecdsaVrfyRawGetDefault*(): EcdsaVrfy {.importcFunc,
importc: "br_ecdsa_vrfy_raw_get_default", header: "bearssl_ec.h".}
const
EC_KBUF_PRIV_MAX_SIZE* = 72
const
EC_KBUF_PUB_MAX_SIZE* = 145
proc ecKeygen*(rngCtx: PrngClassPointerConst; impl: ptr EcImpl; sk: ptr EcPrivateKey;
kbuf: pointer; curve: cint): uint {.importcFunc, importc: "br_ec_keygen",
header: "bearssl_ec.h".}
proc ecKeygen*(rngCtx: ptr ptr PrngClass; impl: ptr EcImpl; sk: ptr EcPrivateKey;
kbuf: pointer; curve: cint): uint =
ecKeygen(PrngClassPointerConst(rngCtx), impl, sk, kbuf, curve)
proc ecComputePub*(impl: ptr EcImpl; pk: ptr EcPublicKey; kbuf: pointer;
sk: ptr EcPrivateKey): uint {.importcFunc,
importc: "br_ec_compute_pub", header: "bearssl_ec.h".}