diff --git a/secp256k1.nim b/secp256k1.nim index 1f450eb..51d191e 100644 --- a/secp256k1.nim +++ b/secp256k1.nim @@ -88,10 +88,12 @@ type ## Representation of recoverable signature. data: secp256k1_ecdsa_recoverable_signature - SkContext* = ref object + SkContextValue* = object ## Representation of Secp256k1 context object. context: ptr secp256k1_context + SkContext* = ref SkContextValue + SkMessage* = distinct array[SkMessageSize, byte] ## Message that can be signed or verified @@ -106,6 +108,10 @@ type SkResult*[T] = Result[T, cstring] +proc `=destroy`(ctx: var SkContextValue) = + if not(isNil(ctx.context)): + secp256k1_context_destroy(ctx.context) + ## ## Private procedures interface ## @@ -132,14 +138,9 @@ template ptr0(v: array|openArray): ptr cuchar = template ptr0(v: SkMessage): ptr cuchar = ptr0(distinctBase(v)) -func shutdownLibsecp256k1(ctx: SkContext) = - # TODO: use destructor when finalizer are deprecated for destructors - if not(isNil(ctx.context)): - secp256k1_context_destroy(ctx.context) - proc newSkContext(): SkContext = ## Create new Secp256k1 context object. - new(result, shutdownLibsecp256k1) + new result let flags = cuint(SECP256K1_CONTEXT_VERIFY or SECP256K1_CONTEXT_SIGN) result.context = secp256k1_context_create(flags) secp256k1_context_set_illegal_callback(