View Source Tezex.Crypto.ECDSA (tezex v0.1.0)

Decode compressed public key and verify signatures using the Elliptic Curve Digital Signature Algorithm (ECDSA).

Link to this section Summary

Functions

Decodes a compressed public key to the EC public key it is representing on EC curve.

Verifies a message signature based on a public key

Link to this section Functions

Link to this function

decode_point(compressed_pubkey, curve)

View Source
Link to this function

decode_public_key(compressed_pubkey, curve_name)

View Source

Decodes a compressed public key to the EC public key it is representing on EC curve.

Here is a sample curve, P-256 with curve parameters from https://neuromancer.sk/std/nist/:

%EllipticCurve.Curve{
    name: :prime256v1,
    A: 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC,
    B: 0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B,
    P: 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF,
    N: 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551,
    G: %Point{
      x: 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296,
      y: 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5
    },
    oid: [1, 2, 840, 10045, 3, 1, 7]
  }

Parameters:

  • compressed_pubkey [binary]: the public key to decode
  • curve [%EllipticCurve.Curve{}]: the curve to use (or one of :prime256v1, :secp256k1 for the two known curves supported by default)

Returns:

  • public_key [%EllipticCurve.PublicKey{}]: a struct containing the public point and the curve;
Link to this function

verify?(message, signature, public_key, options \\ [])

View Source

Verifies a message signature based on a public key

Parameters:

  • message [binary]: message that was signed
  • signature [%EllipticCurve.Signature{}]: signature associated with the message
  • public_key [%EllipticCurve.PublicKey{}]: public key associated with the message signer
  • options [kw list]: refines request
    • :hashfunc [fun/1]: hash function applied to the message. Default: fn msg -> :crypto.hash(:sha256, msg) end

Returns:

  • verified [bool]: true if message, public key and signature are compatible, false otherwise