-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgeneratekey.cpp
90 lines (67 loc) · 3.29 KB
/
generatekey.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include "generatekey.h"
#include <botan/p11_rsa.h>
#include <iostream>
namespace pkcs11 {
GenerateKey::GenerateKey(boost::filesystem::path pkcs11Module, Botan::PKCS11::secure_string password, Botan::PKCS11::SlotId id)
:
session_(Session::create(pkcs11Module, password, id)),
rng_{}
{
}
bool GenerateKey::generate()
{
/* Botan::PKCS11::RSA_PrivateKeyGenerationProperties privProps;
privProps.set_label("Encryption key");
privProps.set_token(true);
privProps.set_private(true);
privProps.set_sign(false);
privProps.set_decrypt(true);
Botan::PKCS11::RSA_PublicKeyGenerationProperties pubProps( 2048UL );
pubProps.set_pub_exponent();
pubProps.set_label("Encryption key");
pubProps.set_token(true);
pubProps.set_encrypt(true);
pubProps.set_verify(false);
pubProps.set_private(false);
session_->doItInsideSession([&](Botan::PKCS11::Session& session)
{
Botan::PKCS11::PKCS11_RSA_KeyPair rsaKeypair =
Botan::PKCS11::generate_rsa_keypair( session, pubProps, privProps );
Botan::PKCS11::PKCS11_RSA_PublicKey pubKey = rsaKeypair.first;
std::cout << "Public key fingerprint: " << pubKey.fingerprint_public() << '\n';
Botan::PKCS11::PKCS11_RSA_PrivateKey privKey = rsaKeypair.second;
std::cout << "Private key fingerprint: " << privKey.fingerprint_public() << '\n';
});*/
Botan::RSA_PrivateKey privKeySw(rng_, 2048UL);
// set the private key import properties
Botan::PKCS11::RSA_PrivateKeyImportProperties privProps(privKeySw.get_n(), privKeySw.get_d());
privProps.set_pub_exponent(privKeySw.get_e());
privProps.set_prime_1(privKeySw.get_p());
privProps.set_prime_2(privKeySw.get_q());
privProps.set_coefficient(privKeySw.get_c());
privProps.set_exponent_1(privKeySw.get_d1());
privProps.set_exponent_2(privKeySw.get_d2());
privProps.set_label("Encryption key");
privProps.set_token(true);
privProps.set_private(true);
privProps.set_sign(false);
privProps.set_decrypt(true);
// import
session_->doItInsideSession([&](Botan::PKCS11::Session& session)
{
Botan::PKCS11::PKCS11_RSA_PrivateKey privKey( session, privProps );
// set the public key import properties
Botan::PKCS11::RSA_PublicKeyImportProperties pubProps(privKey.get_n(), privKey.get_e());
pubProps.set_label("Encryption key");
pubProps.set_token(true);
pubProps.set_encrypt(true);
pubProps.set_verify(false);
pubProps.set_private(false);
// import
Botan::PKCS11::PKCS11_RSA_PublicKey publicKey( session, pubProps );
std::cout << "Private key fingerprint: " << privKey.fingerprint_public() << '\n';
std::cout << "Public key fingerprint: " << publicKey.fingerprint_public() << '\n';
});
return true;
}
} // namespace pkcs11