#include #include #include #include "util/Log.h" #include "Signature.h" namespace i2p { namespace crypto { DSASigner::DSASigner(const uint8_t * signingPrivateKey) { m_PrivateKey.Initialize( dsap, dsaq, dsag, CryptoPP::Integer(signingPrivateKey, DSA_PRIVATE_KEY_LENGTH) ); } void DSASigner::Sign(CryptoPP::RandomNumberGenerator& rnd, const uint8_t * buf, int len, uint8_t * signature) const { CryptoPP::DSA::Signer signer(m_PrivateKey); signer.SignMessage(rnd, buf, len, signature); } void CreateDSARandomKeys(CryptoPP::RandomNumberGenerator& rnd, uint8_t* signingPrivateKey, uint8_t* signingPublicKey) { CryptoPP::DSA::PrivateKey privateKey; CryptoPP::DSA::PublicKey publicKey; privateKey.Initialize(rnd, dsap, dsaq, dsag); privateKey.MakePublicKey(publicKey); privateKey.GetPrivateExponent().Encode(signingPrivateKey, DSA_PRIVATE_KEY_LENGTH); publicKey.GetPublicElement().Encode(signingPublicKey, DSA_PUBLIC_KEY_LENGTH); } } // crypto } // i2p