|
19 | 19 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA |
20 | 20 | */ |
21 | 21 |
|
22 | | -#include "wolfpkcs11/pkcs11.h" |
23 | 22 | #ifdef HAVE_CONFIG_H |
24 | 23 | #include <wolfpkcs11/config.h> |
25 | 24 | #endif |
@@ -2421,9 +2420,21 @@ static int wp11_Object_Decode_RsaKey(WP11_Object* object) |
2421 | 2420 | } |
2422 | 2421 | if (ret == 0) { |
2423 | 2422 | /* load public portion into wolf RsaKey structure */ |
| 2423 | + object->slot->tpmCtx.rsaKey = (WOLFTPM2_KEY*)&object->tpmKey; |
2424 | 2424 | ret = wolfTPM2_RsaKey_TpmToWolf(&object->slot->tpmDev, |
2425 | 2425 | (WOLFTPM2_KEY*)&object->tpmKey, &object->data.rsaKey); |
2426 | 2426 | } |
| 2427 | + if (ret == 0) { |
| 2428 | + /* load key into TPM (get handle) */ |
| 2429 | + if (object->tpmKey.priv.size == 0) { |
| 2430 | + ret = wolfTPM2_LoadPublicKey(&object->slot->tpmDev, |
| 2431 | + (WOLFTPM2_KEY*)&object->tpmKey, &object->tpmKey.pub); |
| 2432 | + } |
| 2433 | + else { |
| 2434 | + ret = wolfTPM2_LoadKey(&object->slot->tpmDev, &object->tpmKey, |
| 2435 | + &object->slot->tpmCtx.storageKey->handle); |
| 2436 | + } |
| 2437 | + } |
2427 | 2438 | } |
2428 | 2439 | else |
2429 | 2440 | #endif |
@@ -8243,21 +8254,22 @@ int WP11_Rsa_GenerateKeyPair(WP11_Object* pub, WP11_Object* priv, |
8243 | 8254 | { |
8244 | 8255 | int ret = 0; |
8245 | 8256 | unsigned char eData[sizeof(long)]; |
8246 | | - int i; |
| 8257 | + int i, eSz; |
8247 | 8258 | long e = 0; |
8248 | 8259 | WC_RNG rng; |
8249 | 8260 |
|
8250 | 8261 | /* Use public exponent if public key has one set. */ |
8251 | 8262 | if (!mp_iszero(&pub->data.rsaKey.e)) { |
8252 | 8263 | XMEMSET(eData, 0, sizeof(eData)); |
8253 | 8264 | /* Public exponent must be size of a long for API. */ |
8254 | | - if (mp_unsigned_bin_size(&pub->data.rsaKey.e) > (int)sizeof(eData)) |
| 8265 | + eSz = mp_unsigned_bin_size(&pub->data.rsaKey.e); |
| 8266 | + if (eSz > (int)sizeof(eData)) |
8255 | 8267 | ret = BAD_FUNC_ARG; |
8256 | 8268 | if (ret == 0) |
8257 | | - ret = mp_to_unsigned_bin(&pub->data.rsaKey.e, eData); |
| 8269 | + ret = mp_to_unsigned_bin_len(&pub->data.rsaKey.e, eData, eSz); |
8258 | 8270 | if (ret == 0) { |
8259 | 8271 | /* Convert big-endian data into number. */ |
8260 | | - for (i = sizeof(eData) - 1; i >= 0; i--) { |
| 8272 | + for (i = eSz - 1; i >= 0; i--) { |
8261 | 8273 | e <<= 8; |
8262 | 8274 | e |= eData[i]; |
8263 | 8275 | } |
|
0 commit comments