9 #ifndef BOTAN_P11_RSA_H__
10 #define BOTAN_P11_RSA_H__
12 #include <botan/build.h>
13 #include <botan/p11.h>
14 #include <botan/p11_session.h>
15 #include <botan/p11_object.h>
17 #if defined(BOTAN_HAS_RSA)
18 #include <botan/rsa.h>
25 class BOTAN_DLL RSA_PublicKeyGenerationProperties final :
public PublicKeyProperties
29 explicit RSA_PublicKeyGenerationProperties(
Ulong bits);
32 inline void set_pub_exponent(
const BigInt& pub_exponent = BigInt(0x10001))
37 virtual ~RSA_PublicKeyGenerationProperties() =
default;
41 class BOTAN_DLL RSA_PublicKeyImportProperties final :
public PublicKeyProperties
46 RSA_PublicKeyImportProperties(
const BigInt& modulus,
const BigInt& pub_exponent);
49 inline const BigInt& modulus()
const
55 inline const BigInt& pub_exponent()
const
57 return m_pub_exponent;
60 virtual ~RSA_PublicKeyImportProperties() =
default;
62 const BigInt m_modulus;
63 const BigInt m_pub_exponent;
67 class BOTAN_DLL PKCS11_RSA_PublicKey final :
public RSA_PublicKey,
78 PKCS11_RSA_PublicKey(Session& session,
ObjectHandle handle);
85 PKCS11_RSA_PublicKey(Session& session,
const RSA_PublicKeyImportProperties& pubkey_props);
87 std::unique_ptr<PK_Ops::Encryption>
88 create_encryption_op(RandomNumberGenerator& rng,
89 const std::string& params,
90 const std::string& provider)
const override;
92 std::unique_ptr<PK_Ops::Verification>
93 create_verification_op(
const std::string& params,
94 const std::string& provider)
const override;
98 class BOTAN_DLL RSA_PrivateKeyImportProperties final :
public PrivateKeyProperties
105 RSA_PrivateKeyImportProperties(
const BigInt& modulus,
const BigInt& priv_exponent);
108 inline void set_pub_exponent(
const BigInt& pub_exponent)
114 inline void set_prime_1(
const BigInt& prime1)
120 inline void set_prime_2(
const BigInt& prime2)
126 inline void set_exponent_1(
const BigInt& exp1)
132 inline void set_exponent_2(
const BigInt& exp2)
138 inline void set_coefficient(
const BigInt& coeff)
144 inline const BigInt& modulus()
const
150 inline const BigInt& priv_exponent()
const
152 return m_priv_exponent;
155 virtual ~RSA_PrivateKeyImportProperties() =
default;
158 const BigInt m_modulus;
159 const BigInt m_priv_exponent;
163 class BOTAN_DLL RSA_PrivateKeyGenerationProperties final :
public PrivateKeyProperties
166 RSA_PrivateKeyGenerationProperties()
170 virtual ~RSA_PrivateKeyGenerationProperties() =
default;
174 class BOTAN_DLL PKCS11_RSA_PrivateKey final :
public Private_Key,
175 public RSA_PublicKey,
182 PKCS11_RSA_PrivateKey(Session& session,
ObjectHandle handle);
189 PKCS11_RSA_PrivateKey(Session& session,
const RSA_PrivateKeyImportProperties& priv_key_props);
198 PKCS11_RSA_PrivateKey(Session& session, uint32_t bits,
const RSA_PrivateKeyGenerationProperties& priv_key_props);
201 RSA_PrivateKey export_key()
const;
203 secure_vector<uint8_t> private_key_bits()
const override;
205 std::unique_ptr<PK_Ops::Decryption>
206 create_decryption_op(RandomNumberGenerator& rng,
207 const std::string& params,
208 const std::string& provider)
const override;
210 std::unique_ptr<PK_Ops::Signature>
211 create_signature_op(RandomNumberGenerator& rng,
212 const std::string& params,
213 const std::string& provider)
const override;
216 using PKCS11_RSA_KeyPair = std::pair<PKCS11_RSA_PublicKey, PKCS11_RSA_PrivateKey>;
224 BOTAN_DLL PKCS11_RSA_KeyPair generate_rsa_keypair(Session& session,
const RSA_PublicKeyGenerationProperties& pub_props,
225 const RSA_PrivateKeyGenerationProperties& priv_props);
CK_OBJECT_HANDLE ObjectHandle
static std::vector< uint8_t > encode(const BigInt &n, Base base=Binary)