]> Cypherpunks.ru repositories - gogost.git/commitdiff
gost3410.PrivateKey satisfies crypto.Signer interface
authorSergey Matveev <stargrave@stargrave.org>
Fri, 26 Jul 2019 13:54:12 +0000 (16:54 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Fri, 26 Jul 2019 13:54:12 +0000 (16:54 +0300)
src/cypherpunks.ru/gogost/gost3410/private.go
src/cypherpunks.ru/gogost/gost3410/private_test.go [new file with mode: 0644]

index 03fd443335f1f4aa7885696cfccea78a31e2cc18..e445cfd22f0718e6995d63ddb1f9a8b3fef8a676 100644 (file)
@@ -17,6 +17,7 @@
 package gost3410
 
 import (
+       "crypto"
        "errors"
        "io"
        "math/big"
@@ -106,3 +107,15 @@ Retry:
                pad(r.Bytes(), int(prv.Mode))...,
        ), nil
 }
+
+func (prv *PrivateKey) Sign(rand io.Reader, digest []byte, opts crypto.SignerOpts) ([]byte, error) {
+       return prv.SignDigest(digest, rand)
+}
+
+func (prv *PrivateKey) Public() crypto.PublicKey {
+       pub, err := prv.PublicKey()
+       if err != nil {
+               panic(err)
+       }
+       return pub
+}
diff --git a/src/cypherpunks.ru/gogost/gost3410/private_test.go b/src/cypherpunks.ru/gogost/gost3410/private_test.go
new file mode 100644 (file)
index 0000000..40c62d3
--- /dev/null
@@ -0,0 +1,33 @@
+// GoGOST -- Pure Go GOST cryptographic functions library
+// Copyright (C) 2015-2019 Sergey Matveev <stargrave@stargrave.org>
+//
+// 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
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+package gost3410
+
+import (
+       "crypto"
+       "crypto/rand"
+       "testing"
+)
+
+func TestSignerInterface(t *testing.T) {
+       prvRaw := make([]byte, int(Mode2001))
+       rand.Read(prvRaw)
+       prv, err := NewPrivateKey(CurveIdGostR34102001TestParamSet(), Mode2001, prvRaw)
+       if err != nil {
+               t.FailNow()
+       }
+       var _ crypto.Signer = prv
+}