// GoGOST -- Pure Go GOST cryptographic functions library
-// Copyright (C) 2015-2020 Sergey Matveev <stargrave@stargrave.org>
+// Copyright (C) 2015-2021 Sergey Matveev <stargrave@stargrave.org>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
bigInt1 *big.Int = big.NewInt(1)
bigInt2 *big.Int = big.NewInt(2)
bigInt3 *big.Int = big.NewInt(3)
+ bigInt4 *big.Int = big.NewInt(4)
)
type Curve struct {
P *big.Int // Characteristic of the underlying prime field
Q *big.Int // Elliptic curve subgroup order
+ Co *big.Int // Cofactor
+
// Equation coefficients of the elliptic curve in canonical form
A *big.Int
B *big.Int
edT *big.Int
}
-func NewCurve(p, q, a, b, x, y, e, d *big.Int) (*Curve, error) {
+func NewCurve(p, q, a, b, x, y, e, d, co *big.Int) (*Curve, error) {
c := Curve{
Name: "unknown",
P: p,
c.E = e
c.D = d
}
+ if co == nil {
+ c.Co = bigInt1
+ } else {
+ c.Co = co
+ }
return &c, nil
}
+func (c *Curve) PointSize() int {
+ return PointSize(c.P)
+}
+
func (c *Curve) pos(v *big.Int) {
if v.Cmp(zero) < 0 {
v.Add(v, c.P)