|
26 | 26 | #include <wolftpm/tpm2_wrap.h> |
27 | 27 | #include <wolftpm/tpm2_param_enc.h> |
28 | 28 |
|
| 29 | +/* Convert big-endian byte array to native word32 */ |
| 30 | +word32 wolfTPM2_RsaKey_Exponent(const byte* e, word32 eSz) |
| 31 | +{ |
| 32 | + word32 exponent = 0, i; |
| 33 | + for (i = 0; i < eSz && i < sizeof(word32); i++) { |
| 34 | + exponent = (exponent << 8) | e[i]; |
| 35 | + } |
| 36 | + return exponent; |
| 37 | +} |
| 38 | + |
29 | 39 | #ifndef WOLFTPM2_NO_WRAPPER |
30 | 40 |
|
31 | 41 | /* For some struct to buffer conversions */ |
@@ -3529,15 +3539,6 @@ int wolfTPM2_RsaKey_TpmToPemPub(WOLFTPM2_DEV* dev, WOLFTPM2_KEY* tpmKey, |
3529 | 3539 | #endif /* !NO_ASN */ |
3530 | 3540 |
|
3531 | 3541 | #ifndef NO_RSA |
3532 | | -static word32 wolfTPM2_RsaKey_Exponent(byte* e, word32 eSz) |
3533 | | -{ |
3534 | | - word32 exponent = 0, i; |
3535 | | - for (i=0; i<eSz && i<sizeof(word32); i++) { |
3536 | | - exponent |= ((word32)e[i]) << (i*8); |
3537 | | - } |
3538 | | - return exponent; |
3539 | | -} |
3540 | | - |
3541 | 3542 | int wolfTPM2_RsaKey_TpmToWolf(WOLFTPM2_DEV* dev, WOLFTPM2_KEY* tpmKey, |
3542 | 3543 | RsaKey* wolfKey) |
3543 | 3544 | { |
@@ -4144,22 +4145,22 @@ int wolfTPM2_SignHashScheme(WOLFTPM2_DEV* dev, WOLFTPM2_KEY* key, |
4144 | 4145 | /* Assemble R and S into signature (R then S) */ |
4145 | 4146 | sigOutSz = curveSize * 2; |
4146 | 4147 | if (sigOutSz > *sigSz || |
4147 | | - curveSize > ecdsa->signatureR.size || |
4148 | | - curveSize > ecdsa->signatureS.size) { |
| 4148 | + ecdsa->signatureR.size > curveSize || |
| 4149 | + ecdsa->signatureS.size > curveSize) { |
4149 | 4150 | #ifdef DEBUG_WOLFTPM |
4150 | 4151 | printf("TPM2_Sign: ECC result buffer too small %d -> %d\n", |
4151 | 4152 | sigOutSz, *sigSz); |
4152 | 4153 | #endif |
4153 | 4154 | return BUFFER_E; |
4154 | 4155 | } |
4155 | | - XMEMCPY(sig, ecdsa->signatureR.buffer, |
4156 | | - ecdsa->signatureR.size); |
4157 | | - XMEMSET(sig + ecdsa->signatureR.size, 0, |
4158 | | - curveSize - ecdsa->signatureR.size); |
4159 | | - XMEMCPY(sig + curveSize, ecdsa->signatureS.buffer, |
4160 | | - ecdsa->signatureS.size); |
4161 | | - XMEMSET(sig + curveSize + ecdsa->signatureS.size, 0, |
4162 | | - curveSize - ecdsa->signatureS.size); |
| 4156 | + /* Left-pad R */ |
| 4157 | + XMEMSET(sig, 0, curveSize - ecdsa->signatureR.size); |
| 4158 | + XMEMCPY(sig + curveSize - ecdsa->signatureR.size, |
| 4159 | + ecdsa->signatureR.buffer, ecdsa->signatureR.size); |
| 4160 | + /* Left-pad S */ |
| 4161 | + XMEMSET(sig + curveSize, 0, curveSize - ecdsa->signatureS.size); |
| 4162 | + XMEMCPY(sig + curveSize + (curveSize - ecdsa->signatureS.size), |
| 4163 | + ecdsa->signatureS.buffer, ecdsa->signatureS.size); |
4163 | 4164 | } |
4164 | 4165 | else if (key->pub.publicArea.type == TPM_ALG_RSA) { |
4165 | 4166 | /* RSA signature size and buffer (with padding depending on scheme) */ |
@@ -5857,7 +5858,7 @@ int wolfTPM2_EncryptDecryptBlock(WOLFTPM2_DEV* dev, WOLFTPM2_KEY* key, |
5857 | 5858 |
|
5858 | 5859 | /* update IV */ |
5859 | 5860 | if (iv) { |
5860 | | - if (ivSz < encDecOut.ivOut.size) |
| 5861 | + if (ivSz > encDecOut.ivOut.size) |
5861 | 5862 | ivSz = encDecOut.ivOut.size; |
5862 | 5863 | XMEMCPY(iv, encDecOut.ivOut.buffer, ivSz); |
5863 | 5864 | } |
|
0 commit comments