Simple class to build and hold the data for a CK_MECHANISM struct for RSA (encryption/decryption, signature/verification) and EC (ECDSA signature/verification, ECDH key derivation).
Definition at line 25 of file p11_mechanism.h.
| MechanismWrapper Botan::PKCS11::MechanismWrapper::create_ecdh_mechanism |
( |
std::string_view | params | ) |
|
|
static |
Creates the CK_MECHANISM data for ECDH key derivation (CKM_ECDH1_DERIVE or CKM_ECDH1_COFACTOR_DERIVE)
- Parameters
-
| params | specifies the key derivation function to use. Supported KDFs are Raw and SHA-1 to SHA-512. Params can also include the string "Cofactor" if the cofactor key derivation mechanism should be used, for example "SHA-512,Cofactor" |
Definition at line 277 of file p11_mechanism.cpp.
277 {
278
279 static const std::map<std::string_view, KeyDerivation> EcdhHash = {{
"Raw",
KeyDerivation::Null},
285
286 const std::vector<std::string> param_parts =
split_on(params,
',');
287
288 if(param_parts.empty() || param_parts.size() > 2) {
289 throw Invalid_Argument(
fmt(
"PKCS #11 ECDH key derivation bad params {}", params));
290 }
291
292
293 bool use_cofactor = false;
294 std::string kdf_name;
295 for(const auto& part : param_parts) {
296 if(part == "Cofactor") {
297 if(use_cofactor) {
298 throw Invalid_Argument(
fmt(
"PKCS #11 ECDH key derivation bad params {}", params));
299 }
300 use_cofactor = true;
301 } else {
302 if(!kdf_name.empty()) {
303 throw Invalid_Argument(
fmt(
"PKCS #11 ECDH key derivation bad params {}", params));
304 }
305 kdf_name = part;
306 }
307 }
308
309 if(kdf_name.empty()) {
310 throw Invalid_Argument(
fmt(
"PKCS #11 ECDH key derivation bad params {}", params));
311 }
312
313 auto kdf = EcdhHash.find(kdf_name);
314 if(kdf == EcdhHash.end()) {
315 throw Lookup_Error("PKCS#11 ECDH key derivation does not support KDF " + kdf_name);
316 }
318 mech.m_parameters = std::make_shared<MechanismParameters>();
319 mech.m_parameters->ecdh_params.kdf =
static_cast<CK_EC_KDF_TYPE>(kdf->second);
320 mech.m_mechanism.pParameter = mech.m_parameters.get();
322 return mech;
323}
MechanismWrapper(MechanismType mechanism_type)
CK_ECDH1_DERIVE_PARAMS Ecdh1DeriveParams
std::string fmt(std::string_view format, const T &... args)
std::vector< std::string > split_on(std::string_view str, char delim)
References Botan::PKCS11::Ecdh1CofactorDerive, Botan::PKCS11::Ecdh1Derive, Botan::fmt(), MechanismWrapper(), Botan::PKCS11::Null, CK_MECHANISM::pParameter, Botan::PKCS11::Sha1Kdf, Botan::PKCS11::Sha224Kdf, Botan::PKCS11::Sha256Kdf, Botan::PKCS11::Sha384Kdf, Botan::PKCS11::Sha512Kdf, Botan::split_on(), and CK_MECHANISM::ulParameterLen.
| MechanismWrapper Botan::PKCS11::MechanismWrapper::create_rsa_crypt_mechanism |
( |
std::string_view | padding | ) |
|
|
static |
Creates the CK_MECHANISM data for RSA encryption/decryption
- Parameters
-
| padding | supported paddings are Raw (X.509), EME-PKCS1-v1_5 (PKCS#1 v1.5) and OAEP (PKCS#1 OAEP) |
Definition at line 119 of file p11_mechanism.cpp.
119 {
120
121 static const std::map<std::string_view, RSA_CryptMechanism> CryptMechanisms = {
123
127 {"OAEP(SHA-224)",
129 {"OAEP(SHA-256)",
131 {"OAEP(SHA-384)",
133 {"OAEP(SHA-512)",
135
136 auto mechanism_info_it = CryptMechanisms.find(padding);
137 if(mechanism_info_it == CryptMechanisms.end()) {
138
139 throw Lookup_Error(
fmt(
"PKCS#11 RSA encrypt/decrypt does not support padding with '{}'", padding));
140 }
141 const RSA_CryptMechanism mechanism_info = mechanism_info_it->second;
142
145 mech.m_parameters = std::make_shared<MechanismParameters>();
146 mech.m_parameters->oaep_params.hashAlg =
static_cast<CK_MECHANISM_TYPE>(mechanism_info.hash());
149 mech.m_parameters->oaep_params.pSourceData = nullptr;
150 mech.m_parameters->oaep_params.ulSourceDataLen = 0;
151 mech.m_mechanism.pParameter = mech.m_parameters.get();
153 }
154 mech.m_padding_size = mechanism_info.padding_size();
155 return mech;
156}
CK_RSA_PKCS_OAEP_PARAMS RsaPkcsOaepParams
#define CKZ_DATA_SPECIFIED
CK_ULONG CK_RSA_PKCS_MGF_TYPE
References CKZ_DATA_SPECIFIED, Botan::fmt(), MechanismWrapper(), Botan::PKCS11::Mgf1Sha1, Botan::PKCS11::Mgf1Sha224, Botan::PKCS11::Mgf1Sha256, Botan::PKCS11::Mgf1Sha384, Botan::PKCS11::Mgf1Sha512, CK_MECHANISM::pParameter, Botan::PKCS11::RsaPkcs, Botan::PKCS11::RsaPkcsOaep, Botan::PKCS11::RsaX509, Botan::PKCS11::Sha1, Botan::PKCS11::Sha224, Botan::PKCS11::Sha256, Botan::PKCS11::Sha384, Botan::PKCS11::Sha512, and CK_MECHANISM::ulParameterLen.
| MechanismWrapper Botan::PKCS11::MechanismWrapper::create_rsa_sign_mechanism |
( |
std::string_view | padding | ) |
|
|
static |
Creates the CK_MECHANISM data for RSA signature/verification
- Parameters
-
| padding | supported paddings are Raw (X.509), EMSA3 (PKCS#1 v1.5), EMSA4 (PKCS#1 PSS), EMSA2 (ANSI X9.31) and ISO9796 (ISO/IEC 9796) |
Definition at line 158 of file p11_mechanism.cpp.
158 {
159
160 static const std::map<std::string_view, RSA_SignMechanism> SignMechanisms = {
162
163
166
167
173
174
176
179
182
185
188
191
192
193
195
196
197
200
207
213
217
221
225
229 };
230
231 auto mechanism_info_it = SignMechanisms.find(padding);
232 if(mechanism_info_it == SignMechanisms.end()) {
233
234 throw Lookup_Error(
fmt(
"PKCS#11 RSA sign/verify does not support padding with '{}'", padding));
235 }
236 const RSA_SignMechanism mechanism_info = mechanism_info_it->second;
237
239 if(PssOptions().contains(mechanism_info.type())) {
240 mech.m_parameters = std::make_shared<MechanismParameters>();
241 mech.m_parameters->pss_params.hashAlg =
static_cast<CK_MECHANISM_TYPE>(mechanism_info.hash());
244 mech.m_mechanism.pParameter = mech.m_parameters.get();
246 }
247 return mech;
248}
Ulong checked_ulong_cast(size_t v)
CK_RSA_PKCS_PSS_PARAMS RsaPkcsPssParams
References Botan::PKCS11::checked_ulong_cast(), Botan::fmt(), MechanismWrapper(), CK_MECHANISM::pParameter, Botan::PKCS11::Rsa9796, Botan::PKCS11::RsaPkcs, Botan::PKCS11::RsaPkcsPss, Botan::PKCS11::RsaX509, Botan::PKCS11::RsaX931, Botan::PKCS11::Sha1RsaPkcs, Botan::PKCS11::Sha1RsaPkcsPss, Botan::PKCS11::Sha1RsaX931, Botan::PKCS11::Sha224RsaPkcs, Botan::PKCS11::Sha224RsaPkcsPss, Botan::PKCS11::Sha256RsaPkcs, Botan::PKCS11::Sha256RsaPkcsPss, Botan::PKCS11::Sha384RsaPkcs, Botan::PKCS11::Sha384RsaPkcsPss, Botan::PKCS11::Sha512RsaPkcs, Botan::PKCS11::Sha512RsaPkcsPss, and CK_MECHANISM::ulParameterLen.