]> Cypherpunks.ru repositories - gogost.git/blobdiff - gost3410/private.go
PrivateKeyReverseDigest and PrivateKeyReverseDigestAndSignature
[gogost.git] / gost3410 / private.go
index ae54424d7ef083c08fa9e2bdf5abc9cb17e59d38..645881bfd5c1944814637e5387899932a095a542 100644 (file)
@@ -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
+}