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()
+ }
+}
}
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)