|
58 | 58 | #include "ECParameters.h" |
59 | 59 | #include "EDPublicKey.h" |
60 | 60 | #include "EDPrivateKey.h" |
| 61 | +#ifdef WITH_EDDSA |
| 62 | +#include "EDDSAMechanismParam.h" |
| 63 | +#endif |
61 | 64 | #include "DHParameters.h" |
62 | 65 | #include "DHPublicKey.h" |
63 | 66 | #include "DHPrivateKey.h" |
@@ -4320,6 +4323,7 @@ CK_RV SoftHSM::AsymSignInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechan |
4320 | 4323 | #endif |
4321 | 4324 | #ifdef WITH_EDDSA |
4322 | 4325 | bool isEDDSA = false; |
| 4326 | + EDDSAMechanismParam eddsaParam; |
4323 | 4327 | #endif |
4324 | 4328 | #ifdef WITH_ML_DSA |
4325 | 4329 | bool isMLDSA = false; |
@@ -4585,6 +4589,46 @@ CK_RV SoftHSM::AsymSignInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechan |
4585 | 4589 | mechanism = AsymMech::EDDSA; |
4586 | 4590 | bAllowMultiPartOp = false; |
4587 | 4591 | isEDDSA = true; |
| 4592 | + DEBUG_MSG("SignInit EDDSA mechanism, parameterLen=%lu, pParameter=%p", (unsigned long)pMechanism->ulParameterLen, pMechanism->pParameter); |
| 4593 | + if (pMechanism->pParameter == NULL_PTR) |
| 4594 | + { |
| 4595 | + DEBUG_MSG("EDDSA mechanism parameters not specified, using default values"); |
| 4596 | + if (pMechanism->ulParameterLen != 0) |
| 4597 | + { |
| 4598 | + ERROR_MSG("Invalid parameters"); |
| 4599 | + return CKR_ARGUMENTS_BAD; |
| 4600 | + } |
| 4601 | + // Default EdDSA parameters |
| 4602 | + eddsaParam.flag = false; |
| 4603 | + } |
| 4604 | + else |
| 4605 | + { |
| 4606 | + DEBUG_MSG("EDDSA mechanism parameters specified, parameterLen=%lu", (unsigned long)pMechanism->ulParameterLen); |
| 4607 | + if (pMechanism->ulParameterLen != sizeof(CK_EDDSA_PARAMS)) |
| 4608 | + { |
| 4609 | + ERROR_MSG("Invalid parameters"); |
| 4610 | + return CKR_ARGUMENTS_BAD; |
| 4611 | + } |
| 4612 | + CK_EDDSA_PARAMS* ckEddsaParams = (CK_EDDSA_PARAMS*) pMechanism->pParameter; |
| 4613 | + if (ckEddsaParams->ulContextDataLen > 255) |
| 4614 | + { |
| 4615 | + ERROR_MSG("Invalid parameters"); |
| 4616 | + return CKR_ARGUMENTS_BAD; |
| 4617 | + } |
| 4618 | + DEBUG_MSG("SignInit EDDSA flag=%s, contextDataLen=%lu", ckEddsaParams->phFlag != 0x00 ? "true" : "false", (unsigned long)ckEddsaParams->ulContextDataLen); |
| 4619 | + eddsaParam.flag = (ckEddsaParams->phFlag != 0x00); |
| 4620 | + if (ckEddsaParams->ulContextDataLen > 0) |
| 4621 | + { |
| 4622 | + if (ckEddsaParams->pContextData == NULL_PTR) |
| 4623 | + { |
| 4624 | + ERROR_MSG("Invalid parameters"); |
| 4625 | + return CKR_ARGUMENTS_BAD; |
| 4626 | + } |
| 4627 | + eddsaParam.contextData = ByteString(ckEddsaParams->pContextData, ckEddsaParams->ulContextDataLen); |
| 4628 | + DEBUG_MSG("Sign EdDSA flag=%s, contextDataLen=%lu", eddsaParam.flag ? "true" : "false", (unsigned long)eddsaParam.contextData.size()); |
| 4629 | + } |
| 4630 | + mechanismParam = &eddsaParam; |
| 4631 | + } |
4588 | 4632 | break; |
4589 | 4633 | #endif |
4590 | 4634 | #ifdef WITH_ML_DSA |
@@ -5410,6 +5454,7 @@ CK_RV SoftHSM::AsymVerifyInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMech |
5410 | 5454 | #endif |
5411 | 5455 | #ifdef WITH_EDDSA |
5412 | 5456 | bool isEDDSA = false; |
| 5457 | + EDDSAMechanismParam eddsaParam; |
5413 | 5458 | #endif |
5414 | 5459 | #ifdef WITH_ML_DSA |
5415 | 5460 | bool isMLDSA = false; |
@@ -5674,6 +5719,45 @@ CK_RV SoftHSM::AsymVerifyInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMech |
5674 | 5719 | mechanism = AsymMech::EDDSA; |
5675 | 5720 | bAllowMultiPartOp = false; |
5676 | 5721 | isEDDSA = true; |
| 5722 | + DEBUG_MSG("Found EDDSA mechanism, checking parameters"); |
| 5723 | + if (pMechanism->pParameter == NULL_PTR) |
| 5724 | + { |
| 5725 | + if (pMechanism->ulParameterLen != 0) |
| 5726 | + { |
| 5727 | + ERROR_MSG("Invalid parameters"); |
| 5728 | + return CKR_ARGUMENTS_BAD; |
| 5729 | + } |
| 5730 | + // Default EdDSA parameters |
| 5731 | + eddsaParam.flag = false; |
| 5732 | + DEBUG_MSG("EDDSA parameters not specified, using default values"); |
| 5733 | + } |
| 5734 | + else |
| 5735 | + { |
| 5736 | + DEBUG_MSG("EDDSA parameters specified, checking values"); |
| 5737 | + if (pMechanism->ulParameterLen != sizeof(CK_EDDSA_PARAMS)) |
| 5738 | + { |
| 5739 | + ERROR_MSG("Invalid parameters"); |
| 5740 | + return CKR_ARGUMENTS_BAD; |
| 5741 | + } |
| 5742 | + CK_EDDSA_PARAMS* ckEddsaParams = (CK_EDDSA_PARAMS*) pMechanism->pParameter; |
| 5743 | + if (ckEddsaParams->ulContextDataLen > 255) |
| 5744 | + { |
| 5745 | + ERROR_MSG("Invalid parameters"); |
| 5746 | + return CKR_ARGUMENTS_BAD; |
| 5747 | + } |
| 5748 | + eddsaParam.flag = (ckEddsaParams->phFlag != 0x00); |
| 5749 | + if (ckEddsaParams->ulContextDataLen > 0) |
| 5750 | + { |
| 5751 | + if (ckEddsaParams->pContextData == NULL_PTR) |
| 5752 | + { |
| 5753 | + ERROR_MSG("Invalid parameters"); |
| 5754 | + return CKR_ARGUMENTS_BAD; |
| 5755 | + } |
| 5756 | + eddsaParam.contextData = ByteString(ckEddsaParams->pContextData, ckEddsaParams->ulContextDataLen); |
| 5757 | + DEBUG_MSG("Verify EdDSA flag=%s, contextDataLen=%lu", eddsaParam.flag ? "true" : "false", (unsigned long)eddsaParam.contextData.size()); |
| 5758 | + } |
| 5759 | + mechanismParam = &eddsaParam; |
| 5760 | + } |
5677 | 5761 | break; |
5678 | 5762 | #endif |
5679 | 5763 | #ifdef WITH_ML_DSA |
|
0 commit comments