}
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
+}
@node Download
@unnumbered Download
-@set VERSION 4.2.3
+@set VERSION 4.2.4
Preferable way is to download tarball with the signature from
website and, for example, run tests with benchmarks:
@table @strong
+@anchor{Release 4.2.4}
+@item 4.2.4
+ @code{gost3410.PrivateKeyReverseDigest} reversed digests and
+ @code{PrivateKeyReverseDigestAndSignature} with also reversed signatures
+ signers appeared for convenience.
+
@anchor{Release 4.2.3}
@item 4.2.3
Panic on all possible hash @code{Write} errors.