X-Git-Url: http://www.git.cypherpunks.ru/?p=gogost.git;a=blobdiff_plain;f=gost3410%2Fprivate.go;fp=gost3410%2Fprivate.go;h=be10c1f394905cc4858c25fd2f08015e5e4de756;hp=18549a29cf1f0f8718af45fef3059ba0183c7977;hb=b7f69d1826caacffd042ca8660aba41d0945de0f;hpb=e077d5f903e233fbefed0815be21be5f8f482017 diff --git a/gost3410/private.go b/gost3410/private.go index 18549a2..be10c1f 100644 --- a/gost3410/private.go +++ b/gost3410/private.go @@ -139,8 +139,11 @@ Retry: ), nil } -// Sign the digest. opts argument is unused. -func (prv *PrivateKey) Sign(rand io.Reader, digest []byte, opts crypto.SignerOpts) ([]byte, error) { +// Sign the digest. opts argument is unused. That is identical to SignDigest, +// but kept to be friendly to crypto.Signer. +func (prv *PrivateKey) Sign( + rand io.Reader, digest []byte, opts crypto.SignerOpts, +) ([]byte, error) { return prv.SignDigest(digest, rand) } @@ -160,11 +163,14 @@ 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) +func (prv *PrivateKeyReverseDigest) Sign( + rand io.Reader, digest []byte, opts crypto.SignerOpts, +) ([]byte, error) { + dgst := make([]byte, len(digest)) + for i := 0; i < len(digest); i++ { + dgst[i] = digest[len(digest)-i-1] + } + return prv.Prv.Sign(rand, dgst, opts) } type PrivateKeyReverseDigestAndSignature struct { @@ -175,11 +181,14 @@ 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) +func (prv *PrivateKeyReverseDigestAndSignature) Sign( + rand io.Reader, digest []byte, opts crypto.SignerOpts, +) ([]byte, error) { + dgst := make([]byte, len(digest)) + for i := 0; i < len(digest); i++ { + dgst[i] = digest[len(digest)-i-1] + } + sign, err := prv.Prv.Sign(rand, dgst, opts) if err != nil { return sign, err }