Skip to content

Commit 4ff60ad

Browse files
author
Antoine Lochet
committed
Another additional context parameters processing
1 parent b36591d commit 4ff60ad

31 files changed

+205
-196
lines changed

src/lib/SoftHSM.cpp

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -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;

src/lib/crypto/AsymmetricAlgorithm.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,7 @@ AsymmetricAlgorithm::AsymmetricAlgorithm()
4747
// Signing functions
4848
bool AsymmetricAlgorithm::sign(PrivateKey* privateKey, const ByteString& dataToSign,
4949
ByteString& signature, const AsymMech::Type mechanism,
50-
const void* param /* = NULL */, const size_t paramLen /* = 0 */,
51-
const void* /* additionalContext = NULL */, const size_t /* additionalContextLen = 0 */)
50+
const void* param /* = NULL */, const size_t paramLen /* = 0 */)
5251
{
5352
// Compose from multi-part operations
5453
return (signInit(privateKey, mechanism, param, paramLen) && signUpdate(dataToSign) && signFinal(signature));
@@ -96,8 +95,7 @@ bool AsymmetricAlgorithm::signFinal(ByteString& /*signature*/)
9695
// Verification functions
9796
bool AsymmetricAlgorithm::verify(PublicKey* publicKey, const ByteString& originalData,
9897
const ByteString& signature, const AsymMech::Type mechanism,
99-
const void* param /* = NULL */, const size_t paramLen /* = 0 */,
100-
const void* /* additionalContext = NULL */, const size_t /* additionalContextLen = 0 */)
98+
const void* param /* = NULL */, const size_t paramLen /* = 0 */)
10199
{
102100
// Compose from multi-part operations
103101
return (verifyInit(publicKey, mechanism, param, paramLen) && verifyUpdate(originalData) && verifyFinal(signature));

src/lib/crypto/AsymmetricAlgorithm.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ struct Hedge
134134
struct SIGN_ADDITIONAL_CONTEXT
135135
{
136136
Hedge::Type hedgeType;
137+
ByteString* additionalContext;
137138
};
138139

139140
class AsymmetricAlgorithm
@@ -146,13 +147,13 @@ class AsymmetricAlgorithm
146147
virtual ~AsymmetricAlgorithm() { }
147148

148149
// Signing functions
149-
virtual bool sign(PrivateKey* privateKey, const ByteString& dataToSign, ByteString& signature, const AsymMech::Type mechanism, const void* param = NULL, const size_t paramLen = 0, const void* additionalContext = NULL, const size_t additionalContextLen = 0);
150+
virtual bool sign(PrivateKey* privateKey, const ByteString& dataToSign, ByteString& signature, const AsymMech::Type mechanism, const void* param = NULL, const size_t paramLen = 0);
150151
virtual bool signInit(PrivateKey* privateKey, const AsymMech::Type mechanism, const void* param = NULL, const size_t paramLen = 0);
151152
virtual bool signUpdate(const ByteString& dataToSign);
152153
virtual bool signFinal(ByteString& signature);
153154

154155
// Verification functions
155-
virtual bool verify(PublicKey* publicKey, const ByteString& originalData, const ByteString& signature, const AsymMech::Type mechanism, const void* param = NULL, const size_t paramLen = 0, const void* additionalContext = NULL, const size_t additionalContextLen = 0);
156+
virtual bool verify(PublicKey* publicKey, const ByteString& originalData, const ByteString& signature, const AsymMech::Type mechanism, const void* param = NULL, const size_t paramLen = 0);
156157
virtual bool verifyInit(PublicKey* publicKey, const AsymMech::Type mechanism, const void* param = NULL, const size_t paramLen = 0);
157158
virtual bool verifyUpdate(const ByteString& originalData);
158159
virtual bool verifyFinal(const ByteString& signature);

src/lib/crypto/BotanDSA.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,7 @@ BotanDSA::~BotanDSA()
6161
// Signing functions
6262
bool BotanDSA::sign(PrivateKey* privateKey, const ByteString& dataToSign,
6363
ByteString& signature, const AsymMech::Type mechanism,
64-
const void* param /* = NULL */, const size_t paramLen /* = 0 */,
65-
const void* /* additionalContext = NULL*/, const size_t /* additionalContextLen = 0 */)
64+
const void* param /* = NULL */, const size_t paramLen /* = 0 */)
6665
{
6766
std::string emsa;
6867

@@ -279,8 +278,7 @@ bool BotanDSA::signFinal(ByteString& signature)
279278
// Verification functions
280279
bool BotanDSA::verify(PublicKey* publicKey, const ByteString& originalData,
281280
const ByteString& signature, const AsymMech::Type mechanism,
282-
const void* param /* = NULL */, const size_t paramLen /* = 0 */,
283-
const void* /* additionalContext = NULL*/, const size_t /* additionalContextLen = 0 */)
281+
const void* param /* = NULL */, const size_t paramLen /* = 0 */)
284282
{
285283
std::string emsa;
286284

src/lib/crypto/BotanDSA.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,13 @@ class BotanDSA : public AsymmetricAlgorithm
4747
virtual ~BotanDSA();
4848

4949
// Signing functions
50-
virtual bool sign(PrivateKey* privateKey, const ByteString& dataToSign, ByteString& signature, const AsymMech::Type mechanism, const void* param = NULL, const size_t paramLen = 0, const void* additionalContext = NULL, const size_t additionalContextLen = 0);
50+
virtual bool sign(PrivateKey* privateKey, const ByteString& dataToSign, ByteString& signature, const AsymMech::Type mechanism, const void* param = NULL, const size_t paramLen = 0);
5151
virtual bool signInit(PrivateKey* privateKey, const AsymMech::Type mechanism, const void* param = NULL, const size_t paramLen = 0);
5252
virtual bool signUpdate(const ByteString& dataToSign);
5353
virtual bool signFinal(ByteString& signature);
5454

5555
// Verification functions
56-
virtual bool verify(PublicKey* publicKey, const ByteString& originalData, const ByteString& signature, const AsymMech::Type mechanism, const void* param = NULL, const size_t paramLen = 0, const void* additionalContext = NULL, const size_t additionalContextLen = 0);
56+
virtual bool verify(PublicKey* publicKey, const ByteString& originalData, const ByteString& signature, const AsymMech::Type mechanism, const void* param = NULL, const size_t paramLen = 0);
5757
virtual bool verifyInit(PublicKey* publicKey, const AsymMech::Type mechanism, const void* param = NULL, const size_t paramLen = 0);
5858
virtual bool verifyUpdate(const ByteString& originalData);
5959
virtual bool verifyFinal(const ByteString& signature);

src/lib/crypto/BotanECDSA.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,7 @@ BotanECDSA::~BotanECDSA()
6363
// Signing functions
6464
bool BotanECDSA::sign(PrivateKey* privateKey, const ByteString& dataToSign,
6565
ByteString& signature, const AsymMech::Type mechanism,
66-
const void* /* param = NULL */, const size_t /* paramLen = 0 */,
67-
const void* /* additionalContext = NULL */, const size_t /* additionalContextLen = 0 */)
66+
const void* /* param = NULL */, const size_t /* paramLen = 0 */)
6867
{
6968
std::string emsa = "Raw";
7069

@@ -195,8 +194,7 @@ bool BotanECDSA::signFinal(ByteString& /*signature*/)
195194
// Verification functions
196195
bool BotanECDSA::verify(PublicKey* publicKey, const ByteString& originalData,
197196
const ByteString& signature, const AsymMech::Type mechanism,
198-
const void* /* param = NULL */, const size_t /* paramLen = 0 */,
199-
const void* /* additionalContext = NULL*/, const size_t /* additionalContextLen = 0 */)
197+
const void* /* param = NULL */, const size_t /* paramLen = 0 */)
200198
{
201199
std::string emsa = "Raw";
202200

src/lib/crypto/BotanECDSA.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,13 @@ class BotanECDSA : public AsymmetricAlgorithm
4747
virtual ~BotanECDSA();
4848

4949
// Signing functions
50-
virtual bool sign(PrivateKey* privateKey, const ByteString& dataToSign, ByteString& signature, const AsymMech::Type mechanism, const void* param = NULL, const size_t paramLen = 0, const void* additionalContext = NULL, const size_t additionalContextLen = 0);
50+
virtual bool sign(PrivateKey* privateKey, const ByteString& dataToSign, ByteString& signature, const AsymMech::Type mechanism, const void* param = NULL, const size_t paramLen = 0);
5151
virtual bool signInit(PrivateKey* privateKey, const AsymMech::Type mechanism, const void* param = NULL, const size_t paramLen = 0);
5252
virtual bool signUpdate(const ByteString& dataToSign);
5353
virtual bool signFinal(ByteString& signature);
5454

5555
// Verification functions
56-
virtual bool verify(PublicKey* publicKey, const ByteString& originalData, const ByteString& signature, const AsymMech::Type mechanism, const void* param = NULL, const size_t paramLen = 0, const void* additionalContext = NULL, const size_t additionalContextLen = 0);
56+
virtual bool verify(PublicKey* publicKey, const ByteString& originalData, const ByteString& signature, const AsymMech::Type mechanism, const void* param = NULL, const size_t paramLen = 0);
5757
virtual bool verifyInit(PublicKey* publicKey, const AsymMech::Type mechanism, const void* param = NULL, const size_t paramLen = 0);
5858
virtual bool verifyUpdate(const ByteString& originalData);
5959
virtual bool verifyFinal(const ByteString& signature);

src/lib/crypto/BotanEDDSA.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,7 @@ BotanEDDSA::~BotanEDDSA()
6565
// Signing functions
6666
bool BotanEDDSA::sign(PrivateKey* privateKey, const ByteString& dataToSign,
6767
ByteString& signature, const AsymMech::Type mechanism,
68-
const void* /* param = NULL */, const size_t /* paramLen = 0 */,
69-
const void* /* additionalContext = NULL */, const size_t /* additionalContextLen = 0 */)
68+
const void* /* param = NULL */, const size_t /* paramLen = 0 */)
7069
{
7170
std::string emsa;
7271

@@ -163,8 +162,7 @@ bool BotanEDDSA::signFinal(ByteString& /*signature*/)
163162
// Verification functions
164163
bool BotanEDDSA::verify(PublicKey* publicKey, const ByteString& originalData,
165164
const ByteString& signature, const AsymMech::Type mechanism,
166-
const void* /* param = NULL */, const size_t /* paramLen = 0 */,
167-
const void* /* additionalContext = NULL*/, const size_t /* additionalContextLen = 0 */)
165+
const void* /* param = NULL */, const size_t /* paramLen = 0 */)
168166
{
169167
std::string emsa;
170168

src/lib/crypto/BotanEDDSA.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,13 @@ class BotanEDDSA : public AsymmetricAlgorithm
4747
virtual ~BotanEDDSA();
4848

4949
// Signing functions
50-
virtual bool sign(PrivateKey* privateKey, const ByteString& dataToSign, ByteString& signature, const AsymMech::Type mechanism, const void* param = NULL, const size_t paramLen = 0, const void* additionalContext = NULL, const size_t additionalContextLen = 0);
50+
virtual bool sign(PrivateKey* privateKey, const ByteString& dataToSign, ByteString& signature, const AsymMech::Type mechanism, const void* param = NULL, const size_t paramLen = 0);
5151
virtual bool signInit(PrivateKey* privateKey, const AsymMech::Type mechanism, const void* param = NULL, const size_t paramLen = 0);
5252
virtual bool signUpdate(const ByteString& dataToSign);
5353
virtual bool signFinal(ByteString& signature);
5454

5555
// Verification functions
56-
virtual bool verify(PublicKey* publicKey, const ByteString& originalData, const ByteString& signature, const AsymMech::Type mechanism, const void* param = NULL, const size_t paramLen = 0, const void* additionalContext = NULL, const size_t additionalContextLen = 0);
56+
virtual bool verify(PublicKey* publicKey, const ByteString& originalData, const ByteString& signature, const AsymMech::Type mechanism, const void* param = NULL, const size_t paramLen = 0);
5757
virtual bool verifyInit(PublicKey* publicKey, const AsymMech::Type mechanism, const void* param = NULL, const size_t paramLen = 0);
5858
virtual bool verifyUpdate(const ByteString& originalData);
5959
virtual bool verifyFinal(const ByteString& signature);

src/lib/crypto/BotanRSA.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,7 @@ BotanRSA::~BotanRSA()
6060
// Signing functions
6161
bool BotanRSA::sign(PrivateKey* privateKey, const ByteString& dataToSign,
6262
ByteString& signature, const AsymMech::Type mechanism,
63-
const void* param /* = NULL */, const size_t paramLen /* = 0 */,
64-
const void* /* additionalContext = NULL*/, const size_t /* additionalContextLen = 0 */)
63+
const void* param /* = NULL */, const size_t paramLen /* = 0 */)
6564
{
6665
std::string emsa = "";
6766

@@ -408,8 +407,7 @@ bool BotanRSA::signFinal(ByteString& signature)
408407
// Verification functions
409408
bool BotanRSA::verify(PublicKey* publicKey, const ByteString& originalData,
410409
const ByteString& signature, const AsymMech::Type mechanism,
411-
const void* param /* = NULL */, const size_t paramLen /* = 0 */,
412-
const void* /* additionalContext = NULL*/, const size_t /* additionalContextLen = 0 */)
410+
const void* param /* = NULL */, const size_t paramLen /* = 0 */)
413411
{
414412
std::string emsa = "";
415413

0 commit comments

Comments
 (0)