}
hasher := HasherByKeyAlgo(pub.A)
utils.MustWrite(hasher, signed)
+ hsh := hasher.Sum(nil)
var valid bool
- valid, err = pk.VerifyDigest(hasher.Sum(nil), signature)
+ valid, err = pk.VerifyDigest(hsh,
+ append(signature[len(signature)/2:], signature[:len(signature)/2]...))
if !valid {
err = ErrSigInvalid
}
hasher := HasherByKeyAlgo(parent.Pub[0].A)
utils.MustWrite(hasher, gyac.EncodeItem(nil, gyac.ItemFromGo(sdTBS)))
sig.Sign.A = parent.Pub[0].A
- var err error
- sig.Sign.V, err = prv.Sign(rand.Reader, hasher.Sum(nil), nil)
+ s, err := prv.Sign(rand.Reader, hasher.Sum(nil), nil)
+ sig.Sign.V = append(s[len(s)/2:], s[:len(s)/2]...)
if err != nil {
return err
}
GOST R 34.10-2012 must be used with Streebog (GOST R 34.11-2012) hash
function. Its digest must be big-endian serialised. Public key must be
-in @code{BE(X)||BE(Y)} format. Signature is in @code{BE(S)||BE(R)}
+in @code{BE(X)||BE(Y)} format. Signature is in @code{BE(R)||BE(S)}
format.
Following algorithm identifiers are acceptable for the hash: