X-Git-Url: http://www.git.cypherpunks.ru/?p=gogost.git;a=blobdiff_plain;f=gost3410%2Fprivate_test.go;fp=gost3410%2Fprivate_test.go;h=6045c1e683c4c7f408ad1b7f78de49117ac1d745;hp=924cad8442183e7378685e14b4da8c87bfb1eae1;hb=b7f69d1826caacffd042ca8660aba41d0945de0f;hpb=e077d5f903e233fbefed0815be21be5f8f482017 diff --git a/gost3410/private_test.go b/gost3410/private_test.go index 924cad8..6045c1e 100644 --- a/gost3410/private_test.go +++ b/gost3410/private_test.go @@ -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() + } }