diff options
Diffstat (limited to 'src/tss2-esys/api/Esys_RSA_Decrypt.c')
-rw-r--r-- | src/tss2-esys/api/Esys_RSA_Decrypt.c | 49 |
1 files changed, 5 insertions, 44 deletions
diff --git a/src/tss2-esys/api/Esys_RSA_Decrypt.c b/src/tss2-esys/api/Esys_RSA_Decrypt.c index 0a39b90e..5782f446 100644 --- a/src/tss2-esys/api/Esys_RSA_Decrypt.c +++ b/src/tss2-esys/api/Esys_RSA_Decrypt.c @@ -15,38 +15,6 @@ #include "util/log.h" #include "util/aux_util.h" -/** Store command parameters inside the ESYS_CONTEXT for use during _Finish */ -static void store_input_parameters ( - ESYS_CONTEXT *esysContext, - ESYS_TR keyHandle, - const TPM2B_PUBLIC_KEY_RSA *cipherText, - const TPMT_RSA_DECRYPT *inScheme, - const TPM2B_DATA *label) -{ - esysContext->in.RSA_Decrypt.keyHandle = keyHandle; - if (cipherText == NULL) { - esysContext->in.RSA_Decrypt.cipherText = NULL; - } else { - esysContext->in.RSA_Decrypt.cipherTextData = *cipherText; - esysContext->in.RSA_Decrypt.cipherText = - &esysContext->in.RSA_Decrypt.cipherTextData; - } - if (inScheme == NULL) { - esysContext->in.RSA_Decrypt.inScheme = NULL; - } else { - esysContext->in.RSA_Decrypt.inSchemeData = *inScheme; - esysContext->in.RSA_Decrypt.inScheme = - &esysContext->in.RSA_Decrypt.inSchemeData; - } - if (label == NULL) { - esysContext->in.RSA_Decrypt.label = NULL; - } else { - esysContext->in.RSA_Decrypt.labelData = *label; - esysContext->in.RSA_Decrypt.label = - &esysContext->in.RSA_Decrypt.labelData; - } -} - /** One-Call function for TPM2_RSA_Decrypt * * This function invokes the TPM2_RSA_Decrypt command in a one-call @@ -192,10 +160,9 @@ Esys_RSA_Decrypt_Async( return r; esysContext->state = _ESYS_STATE_INTERNALERROR; - /* Check and store input parameters */ + /* Check input parameters */ r = check_session_feasibility(shandle1, shandle2, shandle3, 1); return_state_if_error(r, _ESYS_STATE_INIT, "Check session usage"); - store_input_parameters(esysContext, keyHandle, cipherText, inScheme, label); /* Retrieve the metadata objects for provided handles */ r = esys_GetResourceObject(esysContext, keyHandle, &keyHandleNode); @@ -281,7 +248,8 @@ Esys_RSA_Decrypt_Finish( } /* Check for correct sequence and set sequence to irregular for now */ - if (esysContext->state != _ESYS_STATE_SENT) { + if (esysContext->state != _ESYS_STATE_SENT && + esysContext->state != _ESYS_STATE_RESUBMISSION) { LOG_ERROR("Esys called in bad sequence."); return TSS2_ESYS_RC_BAD_SEQUENCE; } @@ -307,20 +275,13 @@ Esys_RSA_Decrypt_Finish( if (r == TPM2_RC_RETRY || r == TPM2_RC_TESTING || r == TPM2_RC_YIELDED) { LOG_DEBUG("TPM returned RETRY, TESTING or YIELDED, which triggers a " "resubmission: %" PRIx32, r); - if (esysContext->submissionCount >= _ESYS_MAX_SUBMISSIONS) { + if (esysContext->submissionCount++ >= _ESYS_MAX_SUBMISSIONS) { LOG_WARNING("Maximum number of (re)submissions has been reached."); esysContext->state = _ESYS_STATE_INIT; goto error_cleanup; } esysContext->state = _ESYS_STATE_RESUBMISSION; - r = Esys_RSA_Decrypt_Async(esysContext, - esysContext->in.RSA_Decrypt.keyHandle, - esysContext->session_type[0], - esysContext->session_type[1], - esysContext->session_type[2], - esysContext->in.RSA_Decrypt.cipherText, - esysContext->in.RSA_Decrypt.inScheme, - esysContext->in.RSA_Decrypt.label); + r = Tss2_Sys_ExecuteAsync(esysContext->sys); if (r != TSS2_RC_SUCCESS) { LOG_WARNING("Error attempting to resubmit"); /* We do not set esysContext->state here but inherit the most recent |