diff options
author | Andrey Pronin <apronin@chromium.org> | 2016-12-21 18:38:03 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2016-12-21 18:38:03 +0000 |
commit | 8666be20c9f3934b16a7028d51fa6b573383c0bc (patch) | |
tree | 2d6048884195ca1156232290b71e80c62d8c670e | |
parent | 309743335b7587ddc60ae0aa368ffb91ebb3e857 (diff) | |
parent | 2ba96f18ca0bd9bea98b9935d9a4ac2f70f9433b (diff) | |
download | tpm2-8666be20c9f3934b16a7028d51fa6b573383c0bc.tar.gz |
tpm2: add support for padding-only RSASSA am: 569c3c58dc am: be42694d9f am: acdff2ed61 am: abf58a352b
am: 2ba96f18ca
Change-Id: I5d06675027c4bc201e4cc093bd9e29fd1b408461
-rw-r--r-- | CpriRSA.c | 12 | ||||
-rw-r--r-- | Implementation.h | 1 | ||||
-rw-r--r-- | Sign.c | 6 | ||||
-rw-r--r-- | tpm_generated.c | 4 |
4 files changed, 20 insertions, 3 deletions
@@ -805,11 +805,19 @@ RSASSA_Encode( INT32 fillSize; pAssert(eOut != NULL && hIn != NULL); // Can't use this scheme if the algorithm doesn't have a DER string defined. - if(derSize == 0 ) + if( +#if defined(SUPPORT_PADDING_ONLY_RSASSA) && SUPPORT_PADDING_ONLY_RSASSA == YES + hashAlg != TPM_ALG_NULL && +#endif + derSize == 0) return CRYPT_SCHEME; // If the digest size of 'hashAl' doesn't match the input digest size, then // the DER will misidentify the digest so return an error - if((unsigned)_cpri__GetDigestSize(hashAlg) != hInSize) + if( +#if defined(SUPPORT_PADDING_ONLY_RSASSA) && SUPPORT_PADDING_ONLY_RSASSA == YES + hashAlg != TPM_ALG_NULL && +#endif + (unsigned)_cpri__GetDigestSize(hashAlg) != hInSize) return CRYPT_PARAMETER; fillSize = eOutSize - derSize - hInSize - 3; // Make sure that this combination will fit in the provided space diff --git a/Implementation.h b/Implementation.h index 755945e..0d12c45 100644 --- a/Implementation.h +++ b/Implementation.h @@ -357,6 +357,7 @@ typedef UINT16 TPM_ALG_ID; #define ALG_SM4_VALUE 0x0013 #if defined ALG_RSASSA && ALG_RSASSA == YES #define TPM_ALG_RSASSA (TPM_ALG_ID)(0x0014) +#define SUPPORT_PADDING_ONLY_RSASSA YES #endif #define ALG_RSASSA_VALUE 0x0014 #if defined ALG_RSAES && ALG_RSAES == YES @@ -63,7 +63,11 @@ TPM2_Sign( // NOTE: this does not guarantee that the 'digest' is actually produced using // the indicated hash algorithm, but at least it might be. { - if( in->digest.t.size + if( +#if defined(SUPPORT_PADDING_ONLY_RSASSA) && SUPPORT_PADDING_ONLY_RSASSA == YES + in->inScheme.details.any.hashAlg != TPM_ALG_NULL && +#endif + in->digest.t.size != CryptGetHashDigestSize(in->inScheme.details.any.hashAlg)) return TPM_RC_SIZE + RC_Sign_digest; } diff --git a/tpm_generated.c b/tpm_generated.c index b471be1..e3c72ab 100644 --- a/tpm_generated.c +++ b/tpm_generated.c @@ -2349,7 +2349,11 @@ UINT16 TPMS_SIG_SCHEME_RSASSA_Marshal(TPMS_SIG_SCHEME_RSASSA* source, TPM_RC TPMS_SIG_SCHEME_RSASSA_Unmarshal(TPMS_SIG_SCHEME_RSASSA* target, BYTE** buffer, INT32* size) { +#if defined(SUPPORT_PADDING_ONLY_RSASSA) && SUPPORT_PADDING_ONLY_RSASSA == YES + return TPMI_ALG_HASH_Unmarshal(&target->hashAlg, buffer, size, TRUE); +#else return TPMS_SCHEME_HASH_Unmarshal(target, buffer, size); +#endif } UINT16 TPMS_ENC_SCHEME_OAEP_Marshal(TPMS_ENC_SCHEME_OAEP* source, |