tiny-secp256k1-native
v1.1.0
Published
A tiny secp256k1 native wrapper
Downloads
21
Readme
tiny-secp256k1-native
This library is under development, and, like the secp256k1 C library it depends on, this is a research effort to determine an optimal API for end-users of the bitcoinjs ecosystem.
This library is the native component of tiny-secp256k1. It is an optional dependency so that npm install will not fail for tiny-secp256k1 and it will fallback to the JS implementation
Installation
npm
npm install tiny-secp256k1-native
yarn
yarn add tiny-secp256k1-native
If you are having problems, please read the guide at secp256k1-node, as the build instructions should be exactly the same (and this module is a direct derivation).
Documentation
isPoint (A)
isPoint :: Buffer -> Bool
Returns false
if
A
is not encoded with a sequence tag of0x02
,0x03
or0x04
A.x
is not in[1...p - 1]
A.y
is not in[1...p - 1]
isPointCompressed (A)
isPointCompressed :: Buffer -> Bool
Returns false
if the signature is not compressed.
isPrivate (d)
isPrivate :: Buffer -> Bool
Returns false
if
d
is not 256-bit, ord
is not in[1..order - 1]
pointAdd (A, B[, compressed])
pointAdd :: Buffer -> Buffer [-> Bool] -> Maybe Buffer
Returns null
if result is at infinity.
Throws:
Expected Point
if!isPoint(A)
Expected Point
if!isPoint(B)
pointAddScalar (A, tweak[, compressed])
pointAddScalar :: Buffer -> Buffer [-> Bool] -> Maybe Buffer
Returns null
if result is at infinity.
Throws:
Expected Point
if!isPoint(A)
Expected Tweak
iftweak
is not in[0...order - 1]
pointCompress (A, compressed)
pointCompress :: Buffer -> Bool -> Buffer
Throws:
Expected Point
if!isPoint(A)
pointFromScalar (d[, compressed])
pointFromScalar :: Buffer [-> Bool] -> Maybe Buffer
Returns null
if result is at infinity.
Throws:
Expected Private
if!isPrivate(d)
pointMultiply (A, tweak[, compressed])
pointMultiply :: Buffer -> Buffer [-> Bool] -> Maybe Buffer
Returns null
if result is at infinity.
Throws:
Expected Point
if!isPoint(A)
Expected Tweak
iftweak
is not in[0...order - 1]
privateAdd (d, tweak)
privateAdd :: Buffer -> Buffer -> Maybe Buffer
Returns null
if result is equal to 0
.
Throws:
Expected Private
if!isPrivate(d)
Expected Tweak
iftweak
is not in[0...order - 1]
privateSub (d, tweak)
privateSub :: Buffer -> Buffer -> Maybe Buffer
Returns null
if result is equal to 0
.
Throws:
Expected Private
if!isPrivate(d)
Expected Tweak
iftweak
is not in[0...order - 1]
sign (h, d)
sign :: Buffer -> Buffer -> Buffer
Returns normalized signatures, each of (r, s) values are guaranteed to less than order / 2
.
Uses RFC6979.
Throws:
Expected Private
if!isPrivate(d)
Expected Scalar
ifh
is not 256-bit
signWithEntropy (h, d, e)
sign :: Buffer -> Buffer -> Buffer -> Buffer
Returns normalized signatures, each of (r, s) values are guaranteed to less than order / 2
.
Uses RFC6979.
Adds e
as Added Entropy to the deterministic k generation.
Throws:
Expected Private
if!isPrivate(d)
Expected Scalar
ifh
is not 256-bitExpected Extra Data (32 bytes)
ife
is not 256-bit
verify (h, Q, signature[, strict = false])
verify :: Buffer -> Buffer -> Buffer -> Bool
Returns false
if any of (r, s) values are equal to 0
, or if the signature is rejected.
If strict
is true
, valid signatures with any of (r, s) values greater than order / 2
are rejected.
Throws:
Expected Point
if!isPoint(Q)
Expected Signature
ifsignature
has any (r, s) values not in range[0...order - 1]
Expected Scalar
ifh
is not 256-bit
Credit
This is a partially derived work of https://github.com/cryptocoinjs/secp256k1-node, specifically this commit.
This library uses the native library secp256k1 by the bitcoin-core developers, including derivatives of its tests and test vectors.