Module: EllipticCurve::Curve

Defined in:
lib/curve.rb

Overview

Elliptic Curve Equation

y^2 = x^3 + A*x + B (mod P)

Defined Under Namespace

Classes: CurveFp

Constant Summary collapse

SECP256K1 =
CurveFp.new(
    0x0000000000000000000000000000000000000000000000000000000000000000,
    0x0000000000000000000000000000000000000000000000000000000000000007,
    0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f,
    0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141,
    0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798,
    0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8,
    "secp256k1",
    [1, 3, 132, 0, 10],
    nil,
    # GLV endomorphism phi((x,y)) = (beta*x, y), equivalent to lambda*P.
    # Basis vectors from Gauss reduction; used to split a 256-bit scalar k
    # into two ~128-bit scalars (k1, k2) with k == k1 + k2*lambda (mod N).
    {
        :beta   => 0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee,
        :lambda => 0x5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72,
        :a1     => 0x3086d221a7d46bcde86c90e49284eb15,
        :b1     => -0xe4437ed6010e88286f547fa90abfe4c3,
        :a2     => 0x114ca50f7a8e2f3f657c1108d9d44cfd8,
        :b2     => 0x3086d221a7d46bcde86c90e49284eb15,
    }
)
PRIME256V1 =
CurveFp.new(
    0xffffffff00000001000000000000000000000000fffffffffffffffffffffffc,
    0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b,
    0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff,
    0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551,
    0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296,
    0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5,
    "prime256v1",
    [1, 2, 840, 10045, 3, 1, 7],
    "p-256",
)
P256 =
PRIME256V1

Class Method Summary collapse

Class Method Details

.add(curve) ⇒ Object



61
62
63
# File 'lib/curve.rb', line 61

def self.add(curve)
    @_curvesByOid[curve.oid] = curve
end

.getbyOid(oid) ⇒ Object



65
66
67
68
69
70
# File 'lib/curve.rb', line 65

def self.getbyOid(oid)
    if not @_curvesByOid.include?(oid)
        raise Exception.new("Unknown curve oid: #{oid}; The following are registered: #{@_curvesByOid.map{|k,v| v.name}}")
    end
    return @_curvesByOid[oid]
end