6363#include " GOSTPublicKey.h"
6464#include " GOSTPrivateKey.h"
6565#include " MLDSAParameters.h"
66+ #include " MLDSAMechanismParam.h"
6667#include " MLDSAPublicKey.h"
6768#include " MLDSAPrivateKey.h"
6869#include " MLDSAUtil.h"
@@ -4182,6 +4183,7 @@ CK_RV SoftHSM::AsymSignInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechan
41824183 AsymMech::Type mechanism = AsymMech::Unknown;
41834184 void * param = NULL ;
41844185 size_t paramLen = 0 ;
4186+ MechanismParam* mechanismParam = NULL ;
41854187 RSA_PKCS_PSS_PARAMS pssParam;
41864188 bool bAllowMultiPartOp;
41874189 bool isRSA = false ;
@@ -4194,7 +4196,7 @@ CK_RV SoftHSM::AsymSignInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechan
41944196#endif
41954197#ifdef WITH_ML_DSA
41964198 bool isMLDSA = false ;
4197- SIGN_ADDITIONAL_CONTEXT mldsaParam;
4199+ MLDSAMechanismParam mldsaParam;
41984200#endif
41994201 switch (pMechanism->mechanism ) {
42004202 case CKM_RSA_PKCS:
@@ -4493,12 +4495,9 @@ CK_RV SoftHSM::AsymSignInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechan
44934495 ERROR_MSG (" Invalid parameters" );
44944496 return CKR_ARGUMENTS_BAD;
44954497 }
4496- mldsaParam.additionalContext = new ByteString (ckSignAdditionalContext->pContext , ckSignAdditionalContext->ulContextLen );
4497- } else {
4498- mldsaParam.additionalContext = NULL ;
4498+ mldsaParam.additionalContext = ByteString (ckSignAdditionalContext->pContext , ckSignAdditionalContext->ulContextLen );
44994499 }
4500- param = &mldsaParam;
4501- paramLen = sizeof (mldsaParam);
4500+ mechanismParam = &mldsaParam;
45024501 }
45034502 break ;
45044503#endif
@@ -4651,6 +4650,7 @@ CK_RV SoftHSM::AsymSignInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechan
46514650 session->setAsymmetricCryptoOp (asymCrypto);
46524651 session->setMechanism (mechanism);
46534652 session->setParameters (param, paramLen);
4653+ session->setMechanismParam (mechanismParam);
46544654 session->setAllowMultiPartOp (bAllowMultiPartOp);
46554655 session->setAllowSinglePartOp (true );
46564656 session->setPrivateKey (privateKey);
@@ -4732,6 +4732,7 @@ static CK_RV AsymSign(Session* session, CK_BYTE_PTR pData, CK_ULONG ulDataLen, C
47324732 PrivateKey* privateKey = session->getPrivateKey ();
47334733 size_t paramLen;
47344734 void * param = session->getParameters (paramLen);
4735+ MechanismParam* mechanismParam = session->getMechanismParam ();
47354736 if (asymCrypto == NULL || !session->getAllowSinglePartOp () || privateKey == NULL )
47364737 {
47374738 session->resetOp ();
@@ -4781,7 +4782,7 @@ static CK_RV AsymSign(Session* session, CK_BYTE_PTR pData, CK_ULONG ulDataLen, C
47814782 return CKR_GENERAL_ERROR;
47824783 }
47834784 }
4784- else if (!asymCrypto->sign (privateKey,data,signature,mechanism,param,paramLen))
4785+ else if (!asymCrypto->sign (privateKey,data,signature,mechanism,param,paramLen,mechanismParam ))
47854786 {
47864787 session->resetOp ();
47874788 return CKR_GENERAL_ERROR;
@@ -5250,6 +5251,7 @@ CK_RV SoftHSM::AsymVerifyInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMech
52505251 AsymMech::Type mechanism = AsymMech::Unknown;
52515252 void * param = NULL ;
52525253 size_t paramLen = 0 ;
5254+ MechanismParam* mechanismParam = NULL ;
52535255 RSA_PKCS_PSS_PARAMS pssParam;
52545256 bool bAllowMultiPartOp;
52555257 bool isRSA = false ;
@@ -5262,7 +5264,7 @@ CK_RV SoftHSM::AsymVerifyInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMech
52625264#endif
52635265#ifdef WITH_ML_DSA
52645266 bool isMLDSA = false ;
5265- SIGN_ADDITIONAL_CONTEXT mldsaParam;
5267+ MLDSAMechanismParam mldsaParam;
52665268#endif
52675269 switch (pMechanism->mechanism ) {
52685270 case CKM_RSA_PKCS:
@@ -5555,12 +5557,13 @@ CK_RV SoftHSM::AsymVerifyInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMech
55555557 return CKR_ARGUMENTS_BAD;
55565558 }
55575559 if (ckSignAdditionalContext->ulContextLen > 0 ) {
5558- mldsaParam.additionalContext = new ByteString (ckSignAdditionalContext->pContext , ckSignAdditionalContext->ulContextLen );
5559- } else {
5560- mldsaParam.additionalContext = NULL ;
5560+ if (ckSignAdditionalContext->pContext == NULL_PTR) {
5561+ ERROR_MSG (" Invalid parameters" );
5562+ return CKR_ARGUMENTS_BAD;
5563+ }
5564+ mldsaParam.additionalContext = ByteString (ckSignAdditionalContext->pContext , ckSignAdditionalContext->ulContextLen );
55615565 }
5562- param = &mldsaParam;
5563- paramLen = sizeof (mldsaParam);
5566+ mechanismParam = &mldsaParam;
55645567 }
55655568 break ;
55665569#endif
@@ -5707,6 +5710,7 @@ CK_RV SoftHSM::AsymVerifyInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMech
57075710 session->setAsymmetricCryptoOp (asymCrypto);
57085711 session->setMechanism (mechanism);
57095712 session->setParameters (param, paramLen);
5713+ session->setMechanismParam (mechanismParam);
57105714 session->setAllowMultiPartOp (bAllowMultiPartOp);
57115715 session->setAllowSinglePartOp (true );
57125716 session->setPublicKey (publicKey);
@@ -5776,6 +5780,7 @@ static CK_RV AsymVerify(Session* session, CK_BYTE_PTR pData, CK_ULONG ulDataLen,
57765780 PublicKey* publicKey = session->getPublicKey ();
57775781 size_t paramLen;
57785782 void * param = session->getParameters (paramLen);
5783+ MechanismParam* mechanismParam = session->getMechanismParam ();
57795784 if (asymCrypto == NULL || !session->getAllowSinglePartOp () || publicKey == NULL )
57805785 {
57815786 session->resetOp ();
@@ -5815,7 +5820,7 @@ static CK_RV AsymVerify(Session* session, CK_BYTE_PTR pData, CK_ULONG ulDataLen,
58155820 return CKR_SIGNATURE_INVALID;
58165821 }
58175822 }
5818- else if (!asymCrypto->verify (publicKey,data,signature,mechanism,param,paramLen))
5823+ else if (!asymCrypto->verify (publicKey,data,signature,mechanism,param,paramLen,mechanismParam ))
58195824 {
58205825 session->resetOp ();
58215826 return CKR_SIGNATURE_INVALID;
0 commit comments