X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=gost3410%2Fprivate_test.go;h=6045c1e683c4c7f408ad1b7f78de49117ac1d745;hb=b7f69d1826caacffd042ca8660aba41d0945de0f;hp=7b8e75af12aa8976a80424403bab589db032a60c;hpb=c07494bbd559b9d00f391e28cfd070e18afe9900;p=gogost.git diff --git a/gost3410/private_test.go b/gost3410/private_test.go index 7b8e75a..6045c1e 100644 --- a/gost3410/private_test.go +++ b/gost3410/private_test.go @@ -1,5 +1,5 @@ // GoGOST -- Pure Go GOST cryptographic functions library -// Copyright (C) 2015-2019 Sergey Matveev +// Copyright (C) 2015-2023 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -18,15 +18,75 @@ package gost3410 import ( "crypto" "crypto/rand" + "io" "testing" ) func TestSignerInterface(t *testing.T) { - prvRaw := make([]byte, int(Mode2001)) - rand.Read(prvRaw) - prv, err := NewPrivateKey(CurveIdGostR34102001TestParamSet(), Mode2001, prvRaw) + c := CurveIdGostR34102001TestParamSet() + prvRaw := make([]byte, c.PointSize()) + _, err := io.ReadFull(rand.Reader, prvRaw) if err != nil { - t.FailNow() + 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() + } }