@@ -6793,7 +6793,7 @@ CK_RV SoftHSM::C_WrapKey
67936793 emphKey->destroyObject ();
67946794 hEmphKey = CK_INVALID_HANDLE;
67956795
6796- CK_MECHANISM oaepMech = {CKM_RSA_PKCS_OAEP, params->oaep_params , sizeof (CK_RSA_AES_KEY_WRAP_PARAMS )};
6796+ CK_MECHANISM oaepMech = {CKM_RSA_PKCS_OAEP, params->oaep_params , sizeof (CK_RSA_PKCS_OAEP_PARAMS )};
67976797
67986798 // Wraps the AES emph key with the wrapping RSA key using CKM_RSA_PKCS_OAEP with parameters of OAEPParams.
67996799 rv = SoftHSM::WrapKeyAsym (&oaepMech, token, wrapKey, emphkeydata, wrapped_1);
@@ -7242,17 +7242,23 @@ CK_RV SoftHSM::C_UnwrapKey
72427242 CK_OBJECT_HANDLE hEmphKey = CK_INVALID_HANDLE;
72437243 CK_RSA_AES_KEY_WRAP_PARAMS_PTR params = (CK_RSA_AES_KEY_WRAP_PARAMS_PTR)pMechanism->pParameter ;
72447244 ByteString emphkeydata;
7245- ByteString pubexp = unwrapKey-> getByteStringValue (CKA_PUBLIC_EXPONENT) ;
7246- ByteString modulus = unwrapKey->getByteStringValue (CKA_MODULUS);
7247- CK_ULONG wrappedLen1 = modulus. size ();
7245+ ByteString modulus ;
7246+ ByteString modulusValue = unwrapKey->getByteStringValue (CKA_MODULUS);
7247+
72487248 if (isUnwrapKeyPrivate)
72497249 {
7250- wrappedLen1 = modulus.size () - pubexp.size ();
7250+ token->decrypt (modulusValue, modulus);
7251+ }
7252+ else
7253+ {
7254+ modulus = modulusValue;
72517255 }
7256+
7257+ CK_ULONG wrappedLen1 = modulus.size ();
72527258 CK_ULONG wrappedLen2 = ulWrappedKeyLen - wrappedLen1;
72537259
72547260 ByteString wrapped_1 (pWrappedKey, wrappedLen1); // the wrapped AES key
7255- CK_MECHANISM oaepMech = {CKM_RSA_PKCS_OAEP, params->oaep_params , sizeof (CK_RSA_AES_KEY_WRAP_PARAMS )};
7261+ CK_MECHANISM oaepMech = {CKM_RSA_PKCS_OAEP, params->oaep_params , sizeof (CK_RSA_PKCS_OAEP_PARAMS )};
72567262
72577263 // Un-wraps the temporary AES key from the first part with the private RSA key using CKM_RSA_PKCS_OAEP.
72587264 rv = UnwrapKeyAsym (&oaepMech, wrapped_1, token, unwrapKey, emphkeydata);
@@ -13119,14 +13125,9 @@ CK_RV SoftHSM::MechParamCheckRSAAESKEYWRAP(CK_MECHANISM_PTR pMechanism)
1311913125 ERROR_MSG (" oaep_params must be of type CK_RSA_PKCS_OAEP_PARAMS" );
1312013126 return CKR_ARGUMENTS_BAD;
1312113127 }
13122- if (params->oaep_params ->hashAlg != CKM_SHA_1)
13123- {
13124- ERROR_MSG (" hashAlg must be CKM_SHA_1" );
13125- return CKR_ARGUMENTS_BAD;
13126- }
13127- if (params->oaep_params ->mgf != CKG_MGF1_SHA1)
13128+ if (params->oaep_params ->mgf < 1UL || params->oaep_params ->mgf > 5UL )
1312813129 {
13129- ERROR_MSG (" mgf must be CKG_MGF1_SHA1 " );
13130+ ERROR_MSG (" mgf not supported " );
1313013131 return CKR_ARGUMENTS_BAD;
1313113132 }
1313213133 if (params->oaep_params ->source != CKZ_DATA_SPECIFIED)
0 commit comments