# Copied and modified from , Copyright (c) 2020 Stark Bank S.A, MIT License. defmodule Tezex.Crypto.KnownCurves do @moduledoc """ The supported elliptic curves """ alias Tezex.Crypto.Curve alias Tezex.Crypto.Point @secp256k1name :secp256k1 @prime256v1name :prime256v1 @p256name :p256 @spec get_curve_by_name(:prime256v1 | :secp256k1 | :p256) :: Curve.t() def get_curve_by_name(name) do case name do @secp256k1name -> secp256k1() @prime256v1name -> prime256v1() @p256name -> prime256v1() end end def secp256k1() do %Curve{ name: @secp256k1name, A: 0x0000000000000000000000000000000000000000000000000000000000000000, B: 0x0000000000000000000000000000000000000000000000000000000000000007, P: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F, N: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141, G: %Point{ x: 0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798, y: 0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8 } } end def prime256v1() do %Curve{ name: @prime256v1name, A: 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC, B: 0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B, P: 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF, N: 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551, G: %Point{ x: 0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296, y: 0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 } } end end