28#include <cryptopp/aes.h>
29#include <cryptopp/cmac.h>
30#include <cryptopp/dsa.h>
31#include <cryptopp/eccrypto.h>
32#include <cryptopp/filters.h>
33#include <cryptopp/hex.h>
34#include <cryptopp/osrng.h>
35#include <cryptopp/pssr.h>
36#include <cryptopp/rsa.h>
37#include <cryptopp/sha.h>
38#include <cryptopp/whrlpool.h>
39#include <cryptopp/xed25519.h>
40#include <glog/logging.h>
52SecretKey RsaGenerateHexKeyPair(
unsigned int key_size) {
55 CryptoPP::AutoSeededRandomPool rng;
58 CryptoPP::RSA::PrivateKey private_key;
59 private_key.GenerateRandomWithKeySize(rng, key_size);
60 CryptoPP::RSA::PublicKey public_key(private_key);
63 public_key.Save(CryptoPP::HexEncoder(
64 new CryptoPP::StringSink(*key_pair.mutable_public_key()))
66 private_key.Save(CryptoPP::HexEncoder(
new CryptoPP::StringSink(
67 *key_pair.mutable_private_key()))
74SecretKey ED25519GenerateKeys() {
75 CryptoPP::ed25519::Signer signer;
77 CryptoPP::AutoSeededRandomPool prng;
79 signer.AccessPrivateKey().GenerateRandom(prng);
81 const CryptoPP::ed25519PrivateKey &private_key =
82 dynamic_cast<const CryptoPP::ed25519PrivateKey &
>(signer.GetPrivateKey());
84 key_pair.mutable_private_key()->assign(
85 (
char *)private_key.GetPrivateKeyBytePtr(),
86 CryptoPP::ed25519PrivateKey::SECRET_KEYLENGTH);
87 key_pair.mutable_public_key()->assign(
88 (
char *)private_key.GetPublicKeyBytePtr(),
89 CryptoPP::ed25519PrivateKey::PUBLIC_KEYLENGTH);
95SecretKey CmacGenerateHexKey(
unsigned int key_size) {
97 std::string private_key;
98 CryptoPP::AutoSeededRandomPool prng;
100 CryptoPP::SecByteBlock key(key_size);
102 key.data(), key.size());
104 CryptoPP::StringSource ss(key.data(), key.size(),
true,
105 new CryptoPP::HexEncoder(
new CryptoPP::StringSink(
108 key_pair.set_private_key(private_key);
109 key_pair.set_public_key(private_key);
113SecretKey ECDSAGenerateKeys() {
114 CryptoPP::AutoSeededRandomPool prng;
115 CryptoPP::ECDSA<CryptoPP::ECP, CryptoPP::SHA256>::PrivateKey privateKey;
116 CryptoPP::DL_GroupParameters_EC<CryptoPP::ECP> params(
117 CryptoPP::ASN1::secp256k1());
118 privateKey.Initialize(prng, params);
120 CryptoPP::ECDSA<CryptoPP::ECP, CryptoPP::SHA256>::PublicKey publicKey;
121 privateKey.MakePublicKey(publicKey);
126 publicKey.Save(CryptoPP::HexEncoder(
127 new CryptoPP::StringSink(*key_pair.mutable_public_key()))
129 privateKey.Save(CryptoPP::HexEncoder(
130 new CryptoPP::StringSink(*key_pair.mutable_private_key()))
140 case SignatureInfo::RSA:
141 key = RsaGenerateHexKeyPair(3072);
143 case SignatureInfo::ED25519: {
144 key = ED25519GenerateKeys();
147 case SignatureInfo::CMAC_AES: {
148 key = CmacGenerateHexKey(16);
151 case SignatureInfo::ECDSA: {
152 key = ECDSAGenerateKeys();
158 key.set_hash_type(type);
static SecretKey GeneratorKeys(SignatureInfo::HashType type)