]> Cypherpunks.ru repositories - gogost.git/blobdiff - gost3410/private_test.go
PublicKeyReverseDigest, PublicKeyReverseDigestAndSignature
[gogost.git] / gost3410 / private_test.go
index 924cad8442183e7378685e14b4da8c87bfb1eae1..6045c1e683c4c7f408ad1b7f78de49117ac1d745 100644 (file)
@@ -18,15 +18,75 @@ package gost3410
 import (
        "crypto"
        "crypto/rand"
+       "io"
        "testing"
 )
 
 func TestSignerInterface(t *testing.T) {
-       prvRaw := make([]byte, 32)
-       rand.Read(prvRaw)
-       prv, err := NewPrivateKey(CurveIdGostR34102001TestParamSet(), prvRaw)
+       c := CurveIdGostR34102001TestParamSet()
+       prvRaw := make([]byte, c.PointSize())
+       _, err := io.ReadFull(rand.Reader, prvRaw)
+       if err != nil {
+               t.Fatal(err)
+       }
+       prv, err := NewPrivateKey(c, prvRaw)
        if err != nil {
                t.Fatal(err)
        }
        var _ crypto.Signer = prv
+       var _ crypto.Signer = &PrivateKeyReverseDigest{prv}
+       var _ crypto.Signer = &PrivateKeyReverseDigestAndSignature{prv}
+}
+
+func TestSignerReverseDigest(t *testing.T) {
+       dgst := make([]byte, 32)
+       _, err := io.ReadFull(rand.Reader, dgst)
+       if err != nil {
+               t.Fatal(err)
+       }
+       prv0, err := GenPrivateKey(CurveIdGostR34102001TestParamSet(), rand.Reader)
+       if err != nil {
+               t.Fatal(err)
+       }
+       pub0 := prv0.Public().(*PublicKey)
+       sign, err := prv0.Sign(rand.Reader, dgst, nil)
+       if err != nil {
+               t.Fatal(err)
+       }
+       valid, err := pub0.VerifyDigest(dgst, sign)
+       if err != nil {
+               t.Fatal(err)
+       }
+       if !valid {
+               t.FailNow()
+       }
+       var _ crypto.PublicKey = pub0
+
+       prv1 := PrivateKeyReverseDigest{prv0}
+       pub1 := PublicKeyReverseDigest{prv1.Public().(*PublicKey)}
+       sign, err = prv1.Sign(rand.Reader, dgst, nil)
+       if err != nil {
+               t.Fatal(err)
+       }
+       valid, err = pub1.VerifyDigest(dgst, sign)
+       if err != nil {
+               t.Fatal(err)
+       }
+       if !valid {
+               t.FailNow()
+       }
+
+       prv2 := PrivateKeyReverseDigestAndSignature{prv0}
+       pub2 := PublicKeyReverseDigestAndSignature{prv2.Public().(*PublicKey)}
+       sign, err = prv2.Sign(rand.Reader, dgst, nil)
+       if err != nil {
+               t.Fatal(err)
+       }
+       valid, err = pub2.VerifyDigest(dgst, sign)
+       if err != nil {
+               t.Fatal(err)
+       }
+       if !valid {
+               t.FailNow()
+       }
 }