]> Cypherpunks.ru repositories - gogost.git/blobdiff - gost3410/private.go
PrivateKeyReverseDigest and PrivateKeyReverseDigestAndSignature
[gogost.git] / gost3410 / private.go
index 231f45e552934c7bcee1f44a31a929d2a72ca336..645881bfd5c1944814637e5387899932a095a542 100644 (file)
@@ -1,5 +1,5 @@
 // GoGOST -- Pure Go GOST cryptographic functions library
-// Copyright (C) 2015-2019 Sergey Matveev <stargrave@stargrave.org>
+// Copyright (C) 2015-2020 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
@@ -119,3 +119,38 @@ func (prv *PrivateKey) Public() crypto.PublicKey {
        }
        return pub
 }
+
+type PrivateKeyReverseDigest struct {
+       Prv *PrivateKey
+}
+
+func (prv *PrivateKeyReverseDigest) Public() crypto.PublicKey {
+       return prv.Prv.Public()
+}
+
+func (prv *PrivateKeyReverseDigest) Sign(rand io.Reader, digest []byte, opts crypto.SignerOpts) ([]byte, error) {
+       d := make([]byte, len(digest))
+       copy(d, digest)
+       reverse(d)
+       return prv.Prv.Sign(rand, d, opts)
+}
+
+type PrivateKeyReverseDigestAndSignature struct {
+       Prv *PrivateKey
+}
+
+func (prv *PrivateKeyReverseDigestAndSignature) Public() crypto.PublicKey {
+       return prv.Prv.Public()
+}
+
+func (prv *PrivateKeyReverseDigestAndSignature) Sign(rand io.Reader, digest []byte, opts crypto.SignerOpts) ([]byte, error) {
+       d := make([]byte, len(digest))
+       copy(d, digest)
+       reverse(d)
+       sign, err := prv.Prv.Sign(rand, d, opts)
+       if err != nil {
+               return sign, err
+       }
+       reverse(sign)
+       return sign, err
+}