|
|
|
#include <memory>
|
|
|
|
#include <cryptopp/integer.h>
|
|
|
|
#include <cryptopp/eccrypto.h>
|
|
|
|
#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
|