]> Cypherpunks.ru repositories - gogost.git/commitdiff
Fixed VKO cofactor bug v4.3.0
authorSergey Matveev <stargrave@stargrave.org>
Sun, 2 Aug 2020 12:50:34 +0000 (15:50 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Sun, 2 Aug 2020 12:56:00 +0000 (15:56 +0300)
VERSION
gost3410/2012_test.go
gost3410/curve.go
gost3410/params.go
gost3410/vko.go
install.texi
news.texi

diff --git a/VERSION b/VERSION
index cf78d5b6a17867cab54d7a3c80e5291a4047c964..80895903a15c8a6a7df7ca72da9a3ed78fe07eca 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-4.2.4
+4.3.0
index 422ed7c43420380cf937d799fab5d35312211729..592418491fc6deadf1d746467427fb8fe0553f0d 100644 (file)
@@ -126,6 +126,7 @@ func TestStdVector2(t *testing.T) {
                }),
                nil,
                nil,
+               nil,
        )
        if err != nil {
                t.FailNow()
@@ -322,6 +323,7 @@ func TestGCL3Vectors(t *testing.T) {
                bytes2big(y),
                nil,
                nil,
+               nil,
        )
        if err != nil {
                t.FailNow()
index 696beabed9a68889675f9b96237a924fff30ea91..a3685ce047e7be3b7c11ea58f649c09761255d46 100644 (file)
@@ -25,6 +25,7 @@ var (
        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 {
@@ -33,6 +34,8 @@ 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
@@ -55,7 +58,7 @@ type Curve struct {
        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,
@@ -85,6 +88,11 @@ func NewCurve(p, q, a, b, x, y, e, d *big.Int) (*Curve, error) {
                c.E = e
                c.D = d
        }
+       if co == nil {
+               c.Co = bigInt1
+       } else {
+               c.Co = co
+       }
        return &c, nil
 }
 
index 196ff2f8e99a9d4c2d11094adebad25ae0cf639d..ebbb9afe6d4f87ec0ebd849a398987ef8e2222a9 100644 (file)
@@ -61,6 +61,7 @@ var (
                        }),
                        nil,
                        nil,
+                       nil,
                )
                if err != nil {
                        panic(err)
@@ -109,6 +110,7 @@ var (
                        }),
                        nil,
                        nil,
+                       nil,
                )
                if err != nil {
                        panic(err)
@@ -157,6 +159,7 @@ var (
                        }),
                        nil,
                        nil,
+                       nil,
                )
                if err != nil {
                        panic(err)
@@ -205,6 +208,7 @@ var (
                        }),
                        nil,
                        nil,
+                       nil,
                )
                if err != nil {
                        panic(err)
@@ -253,6 +257,7 @@ var (
                        }),
                        nil,
                        nil,
+                       nil,
                )
                if err != nil {
                        panic(err)
@@ -318,6 +323,7 @@ var (
                                0x2B, 0x9D, 0xF6, 0x28, 0x97, 0x00, 0x9A, 0xF7,
                                0xE5, 0x22, 0xC3, 0x2D, 0x6D, 0xC7, 0xBF, 0xFB,
                        }),
+                       bigInt4,
                )
                if err != nil {
                        panic(err)
@@ -408,6 +414,7 @@ var (
                        }),
                        nil,
                        nil,
+                       nil,
                )
                if err != nil {
                        panic(err)
@@ -480,6 +487,7 @@ var (
                        }),
                        nil,
                        nil,
+                       nil,
                )
                if err != nil {
                        panic(err)
@@ -561,6 +569,7 @@ var (
                                0x91, 0xA0, 0xCF, 0xC2, 0xBC, 0x2A, 0x22, 0xB4,
                                0xCA, 0x30, 0x2D, 0xBB, 0x33, 0xEE, 0x75, 0x50,
                        }),
+                       bigInt4,
                )
                if err != nil {
                        panic(err)
index 1ac5ea3722f108b7b1860bffeccb2f71b9b48b44..e373e4a6c2a63ef290fd77ec0652f436d1a68f28 100644 (file)
@@ -24,6 +24,7 @@ func (prv *PrivateKey) KEK(pub *PublicKey, ukm *big.Int) ([]byte, error) {
        if err != nil {
                return nil, err
        }
+       ukm = ukm.Mul(ukm, prv.C.Co)
        if ukm.Cmp(bigInt1) != 0 {
                keyX, keyY, err = prv.C.Exp(ukm, keyX, keyY)
                if err != nil {
index c7b52c7260b54073a6fed7838a0910ee818f1f4f..cd6c450fdd096e16ec7bee603b43b27b0285fc76 100644 (file)
@@ -1,7 +1,7 @@
 @node Download
 @unnumbered Download
 
-@set VERSION 4.2.4
+@set VERSION 4.3.0
 
 Preferable way is to download tarball with the signature from
 website and, for example, run tests with benchmarks:
index 7d139e1593f5a21a81256e52b219589c2e05df2e..68ee9069696f0b2c91c050b77cbd6a44af5eebf0 100644 (file)
--- a/news.texi
+++ b/news.texi
@@ -3,6 +3,11 @@
 
 @table @strong
 
+@anchor{Release 4.3.0}
+@item 4.3.0
+    @strong{Fixed} nasty bug with Edwards curves using in 34.10-VKO
+    functions: curve's cofactor has not been used.
+
 @anchor{Release 4.2.4}
 @item 4.2.4
     @code{gost3410.PrivateKeyReverseDigest} reversed digests and