]> Cypherpunks.ru repositories - gogost.git/commitdiff
Fix private key value's assertion: it can not be equal to zero, not to the one
authorSergey Matveev <stargrave@stargrave.org>
Wed, 14 Dec 2016 08:48:24 +0000 (11:48 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Wed, 14 Dec 2016 08:48:24 +0000 (11:48 +0300)
src/cypherpunks.ru/gogost/gost3410/2001_test.go
src/cypherpunks.ru/gogost/gost3410/curve.go

index 3c13122a28c71535190d843e602f8fe979762e5f..a21c19588267092ea3e3135d9a9f24bde99b6f6c 100644 (file)
@@ -161,3 +161,24 @@ func BenchmarkVerify2001(b *testing.B) {
                pub.VerifyDigest(digest, sign)
        }
 }
+
+func TestPrvEqualsTo1(t *testing.T) {
+       c, _ := NewCurveFromParams(CurveParamsGostR34102001Test)
+       prv, err := NewPrivateKey(c, Mode2001, []byte{0x01})
+       if err != nil {
+               t.FailNow()
+       }
+       pub, err := prv.PublicKey()
+       if err != nil {
+               t.FailNow()
+       }
+       digest := []byte{0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}
+       sign, err := prv.SignDigest(digest, rand.Reader)
+       if err != nil {
+               t.FailNow()
+       }
+       valid, err := pub.VerifyDigest(digest, sign)
+       if err != nil || !valid {
+               t.FailNow()
+       }
+}
index 70f5a66c3596f11b89df39fea74ee1a0a4119da1..fb003752f6f601bf1ccb95cd5407d70581871046 100644 (file)
@@ -116,14 +116,14 @@ func (c *Curve) add(p1x, p1y, p2x, p2y *big.Int) {
 }
 
 func (c *Curve) Exp(degree, xS, yS *big.Int) (*big.Int, *big.Int, error) {
+       if degree.Cmp(zero) == 0 {
+               return nil, nil, errors.New("Bad degree value")
+       }
        dg := big.NewInt(0).Sub(degree, bigInt1)
        tx := big.NewInt(0).Set(xS)
        ty := big.NewInt(0).Set(yS)
        cx := big.NewInt(0).Set(xS)
        cy := big.NewInt(0).Set(yS)
-       if dg.Cmp(zero) == 0 {
-               return nil, nil, errors.New("Bad degree value")
-       }
        for dg.Cmp(zero) != 0 {
                if dg.Bit(0) == 1 {
                        c.add(tx, ty, cx, cy)