@@ -4195,8 +4195,6 @@ CK_RV SoftHSM::AsymSignInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechan
41954195#ifdef WITH_ML_DSA
41964196 bool isMLDSA = false ;
41974197 SIGN_ADDITIONAL_CONTEXT mldsaParam;
4198- void * additionalContext = NULL ;
4199- size_t additionalContextLen = 0 ;
42004198#endif
42014199 switch (pMechanism->mechanism ) {
42024200 case CKM_RSA_PKCS:
@@ -4485,13 +4483,20 @@ CK_RV SoftHSM::AsymSignInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechan
44854483 return CKR_ARGUMENTS_BAD;
44864484 }
44874485 CK_SIGN_ADDITIONAL_CONTEXT* ckSignAdditionalContext = (CK_SIGN_ADDITIONAL_CONTEXT*) pMechanism->pParameter ;
4488- CK_RV rv = MLDSAUtil::setHedge (ckSignAdditionalContext->hedgeVariant , &mldsaParam);
4486+ CK_RV rv = MLDSAUtil::setHedge (ckSignAdditionalContext->hedgeVariant , &mldsaParam. hedgeType );
44894487 if (rv != CKR_OK) {
44904488 ERROR_MSG (" Invalid parameters" );
44914489 return CKR_ARGUMENTS_BAD;
44924490 }
4493- additionalContext = ckSignAdditionalContext->pContext ;
4494- additionalContextLen = ckSignAdditionalContext->ulContextLen ;
4491+ if (ckSignAdditionalContext->ulContextLen > 0 ) {
4492+ if (ckSignAdditionalContext->pContext == NULL_PTR) {
4493+ ERROR_MSG (" Invalid parameters" );
4494+ return CKR_ARGUMENTS_BAD;
4495+ }
4496+ mldsaParam.additionalContext = new ByteString (ckSignAdditionalContext->pContext , ckSignAdditionalContext->ulContextLen );
4497+ } else {
4498+ mldsaParam.additionalContext = NULL ;
4499+ }
44954500 param = &mldsaParam;
44964501 paramLen = sizeof (mldsaParam);
44974502 }
@@ -4646,9 +4651,6 @@ CK_RV SoftHSM::AsymSignInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechan
46464651 session->setAsymmetricCryptoOp (asymCrypto);
46474652 session->setMechanism (mechanism);
46484653 session->setParameters (param, paramLen);
4649- #ifdef WITH_ML_DSA
4650- session->setAdditionalContext (additionalContext, additionalContextLen);
4651- #endif
46524654 session->setAllowMultiPartOp (bAllowMultiPartOp);
46534655 session->setAllowSinglePartOp (true );
46544656 session->setPrivateKey (privateKey);
@@ -4730,8 +4732,6 @@ static CK_RV AsymSign(Session* session, CK_BYTE_PTR pData, CK_ULONG ulDataLen, C
47304732 PrivateKey* privateKey = session->getPrivateKey ();
47314733 size_t paramLen;
47324734 void * param = session->getParameters (paramLen);
4733- size_t additionalContextLen;
4734- void * additionalContext = session->getAdditionalContext (additionalContextLen);
47354735 if (asymCrypto == NULL || !session->getAllowSinglePartOp () || privateKey == NULL )
47364736 {
47374737 session->resetOp ();
@@ -4781,7 +4781,7 @@ static CK_RV AsymSign(Session* session, CK_BYTE_PTR pData, CK_ULONG ulDataLen, C
47814781 return CKR_GENERAL_ERROR;
47824782 }
47834783 }
4784- else if (!asymCrypto->sign (privateKey,data,signature,mechanism,param,paramLen,additionalContext,additionalContextLen ))
4784+ else if (!asymCrypto->sign (privateKey,data,signature,mechanism,param,paramLen))
47854785 {
47864786 session->resetOp ();
47874787 return CKR_GENERAL_ERROR;
@@ -5263,8 +5263,6 @@ CK_RV SoftHSM::AsymVerifyInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMech
52635263#ifdef WITH_ML_DSA
52645264 bool isMLDSA = false ;
52655265 SIGN_ADDITIONAL_CONTEXT mldsaParam;
5266- void * additionalContext = NULL ;
5267- size_t additionalContextLen = 0 ;
52685266#endif
52695267 switch (pMechanism->mechanism ) {
52705268 case CKM_RSA_PKCS:
@@ -5551,13 +5549,16 @@ CK_RV SoftHSM::AsymVerifyInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMech
55515549 return CKR_ARGUMENTS_BAD;
55525550 }
55535551 CK_SIGN_ADDITIONAL_CONTEXT* ckSignAdditionalContext = (CK_SIGN_ADDITIONAL_CONTEXT*) pMechanism->pParameter ;
5554- CK_RV rv = MLDSAUtil::setHedge (ckSignAdditionalContext->hedgeVariant , &mldsaParam);
5552+ CK_RV rv = MLDSAUtil::setHedge (ckSignAdditionalContext->hedgeVariant , &mldsaParam. hedgeType );
55555553 if (rv != CKR_OK) {
55565554 ERROR_MSG (" Invalid parameters" );
55575555 return CKR_ARGUMENTS_BAD;
55585556 }
5559- additionalContext = ckSignAdditionalContext->pContext ;
5560- additionalContextLen = ckSignAdditionalContext->ulContextLen ;
5557+ if (ckSignAdditionalContext->ulContextLen > 0 ) {
5558+ mldsaParam.additionalContext = new ByteString (ckSignAdditionalContext->pContext , ckSignAdditionalContext->ulContextLen );
5559+ } else {
5560+ mldsaParam.additionalContext = NULL ;
5561+ }
55615562 param = &mldsaParam;
55625563 paramLen = sizeof (mldsaParam);
55635564 }
@@ -5706,9 +5707,6 @@ CK_RV SoftHSM::AsymVerifyInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMech
57065707 session->setAsymmetricCryptoOp (asymCrypto);
57075708 session->setMechanism (mechanism);
57085709 session->setParameters (param, paramLen);
5709- #ifdef WITH_ML_DSA
5710- session->setAdditionalContext (additionalContext, additionalContextLen);
5711- #endif
57125710 session->setAllowMultiPartOp (bAllowMultiPartOp);
57135711 session->setAllowSinglePartOp (true );
57145712 session->setPublicKey (publicKey);
@@ -5778,8 +5776,6 @@ static CK_RV AsymVerify(Session* session, CK_BYTE_PTR pData, CK_ULONG ulDataLen,
57785776 PublicKey* publicKey = session->getPublicKey ();
57795777 size_t paramLen;
57805778 void * param = session->getParameters (paramLen);
5781- size_t additionalContextLen;
5782- void * additionalContext = session->getAdditionalContext (additionalContextLen);
57835779 if (asymCrypto == NULL || !session->getAllowSinglePartOp () || publicKey == NULL )
57845780 {
57855781 session->resetOp ();
@@ -5819,7 +5815,7 @@ static CK_RV AsymVerify(Session* session, CK_BYTE_PTR pData, CK_ULONG ulDataLen,
58195815 return CKR_SIGNATURE_INVALID;
58205816 }
58215817 }
5822- else if (!asymCrypto->verify (publicKey,data,signature,mechanism,param,paramLen,additionalContext,additionalContextLen ))
5818+ else if (!asymCrypto->verify (publicKey,data,signature,mechanism,param,paramLen))
58235819 {
58245820 session->resetOp ();
58255821 return CKR_SIGNATURE_INVALID;
@@ -10176,6 +10172,10 @@ CK_RV SoftHSM::generateMLDSA
1017610172 if (pPublicKeyTemplate[i].ulValueLen != sizeof (CK_ULONG)) {
1017710173 INFO_MSG (" CKA_PARAMETER_SET must be sizeof(CK_ULONG)" );
1017810174 return CKR_ATTRIBUTE_VALUE_INVALID;
10175+ }
10176+ if (pPublicKeyTemplate[i].pValue == NULL ) {
10177+ INFO_MSG (" CKA_PARAMETER_SET must have a value" );
10178+ return CKR_ATTRIBUTE_VALUE_INVALID;
1017910179 }
1018010180 paramSet = *(CK_ULONG*)pPublicKeyTemplate[i].pValue ;
1018110181 break ;
0 commit comments