1
0
mirror of https://github.com/GOSTSec/gostcoin synced 2025-01-30 00:14:20 +00:00

signatures in DER format

This commit is contained in:
orignal 2017-03-31 19:27:51 -04:00
parent 21e0026e81
commit a758a62048
2 changed files with 11 additions and 7 deletions

2
i2pd

@ -1 +1 @@
Subproject commit 4448884a3ebf822ecca7b39f2fe9777a79ae1863
Subproject commit 3d1b6e29c6cf3f1c56c279819e8100b1c775b775

View File

@ -143,13 +143,17 @@ public:
bool Sign(const uint256 &hash, std::vector<unsigned char>& vchSig)
{
const BIGNUM * priv = EC_KEY_get0_private_key(pkey);
BIGNUM * r = BN_new (), * s = BN_new ();
BIGNUM * d = BN_bin2bn (hash.begin (), 32, nullptr);
i2p::crypto::GetGOSTR3410Curve (i2p::crypto::eGOSTR3410CryptoProA)->Sign (priv, d, r, s);
vchSig.resize(64);
i2p::crypto::bn2buf (r, &vchSig[0], 32);
i2p::crypto::bn2buf (s, &vchSig[32], 32);
BN_free (d); BN_free (r); BN_free (s);
ECDSA_SIG *sig = ECDSA_SIG_new ();
i2p::crypto::GetGOSTR3410Curve (i2p::crypto::eGOSTR3410CryptoProA)->Sign (priv, d, sig->r, sig->s);
// encode signature is in DER format
auto nSize = ECDSA_size (pkey); // max size
vchSig.resize(nSize);
auto p = &vchSig[0];
nSize = i2d_ECDSA_SIG (sig, &p);
vchSig.resize(nSize); // acutal size
BN_free (d);
ECDSA_SIG_free(sig);
return true;
}