template class xf::security::ecdsaSecp256k1

#include "ecdsa_jocobian.hpp"

Overview

Elliptic Curve Digital Signature Algorithm on curve secp256k1. This class provide signing and verifying functions.

Parameters:

HashW Bit Width of digest that used for signting and verifying.
template <int HashW>
class ecdsaSecp256k1

// fields

ap_uint <256> a
ap_uint <256> b
ap_uint <256> p
ap_uint <256> Gx
ap_uint <256> Gy
ap_uint <256> n
ap_uint <256> preComputeX[64]
ap_uint <256> preComputeY[64]

Fields

ap_uint <256> b

Elliptic-curve definition parameter for y^2 = x^3 + ax + b in GF(p)

ap_uint <256> p

Elliptic-curve definition parameter for y^2 = x^3 + ax + b in GF(p)

ap_uint <256> Gx

X coordinate of generation point of curve secp256k1.

ap_uint <256> Gy

Y coordinate of generation point of curve secp256k1.

ap_uint <256> n

Order of curve secp256k1.

Methods

init

void init ()

Setup parameters for curve y^2 = x^3 + ax + b in GF(p)

generatePubKey

void generatePubKey (
    ap_uint <256> privateKey,
    ap_uint <256>& Qx,
    ap_uint <256>& Qy
    )

Generate Public Key point Q from private key.

Parameters:

privateKey Private Key.
Qx X coordinate of point Q.
Qy Y coordinate of point Q.

sign

bool sign (
    ap_uint <HashW> hash,
    ap_uint <256> k,
    ap_uint <256> privateKey,
    ap_uint <256>& r,
    ap_uint <256>& s
    )

signing function. It will return true if input parameters are legal, otherwise return false.

Parameters:

hash Digest value of message to be signed.
k A random key to sign the message, should kept different each time to be used.
privateKey Private Key to sign the message
r part of signing pair {r, s}
s part of signing pair {r, s}

verify

bool verify (
    ap_uint <256> r,
    ap_uint <256> s,
    ap_uint <HashW> hash,
    ap_uint <256> Px,
    ap_uint <256> Py
    )

verifying function. It will return true if verified, otherwise false.

Parameters:

r part of signing pair {r, s}
s part of signing pair {r, s}
hash Digest value of message to be signed.
Px X coordinate of public key point P.
Py Y coordinate of public key point P.

verifyPubKey

bool verifyPubKey (
    ap_uint <256> Px,
    ap_uint <256> Py
    )

Verifying Public Key. It will return true if verified, otherwise false.

Parameters:

Px X coordinate of public key point P.
Py Y coordinate of public key point P.