X-Git-Url: http://www.git.cypherpunks.ru/?p=gogost.git;a=blobdiff_plain;f=gost3410%2Fprivate.go;h=645881bfd5c1944814637e5387899932a095a542;hp=ae54424d7ef083c08fa9e2bdf5abc9cb17e59d38;hb=5d6df51d96f29e1188cb7a4a8bec06a9d970484b;hpb=15d288d2e44aa4b243bdcf2bc78d8353a260693c diff --git a/gost3410/private.go b/gost3410/private.go index ae54424..645881b 100644 --- a/gost3410/private.go +++ b/gost3410/private.go @@ -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 +}