Skip to content

Commit 844bb81

Browse files
authored
Merge pull request #324 from padelsbach/mldsa-post
Ensure post write and post read are issued for ML-DSA
2 parents c7c3d1b + 53f1467 commit 844bb81

1 file changed

Lines changed: 35 additions & 40 deletions

File tree

src/wh_server_crypto.c

Lines changed: 35 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -5388,6 +5388,7 @@ static int _HandleMlDsaSignDma(whServerContext* ctx, uint16_t magic, int devId,
53885388
MlDsaKey key[1];
53895389
void* msgAddr = NULL;
53905390
void* sigAddr = NULL;
5391+
word32 sigLen = 0;
53915392

53925393
whMessageCrypto_MlDsaSignDmaRequest req;
53935394
whMessageCrypto_MlDsaSignDmaResponse res;
@@ -5448,7 +5449,7 @@ static int _HandleMlDsaSignDma(whServerContext* ctx, uint16_t magic, int devId,
54485449

54495450
if (ret == 0) {
54505451
/* Sign the message using appropriate FIPS 204 API */
5451-
word32 sigLen = req.sig.sz;
5452+
sigLen = req.sig.sz;
54525453
if (preHashType != WC_HASH_TYPE_NONE) {
54535454
ret = wc_MlDsaKey_SignCtxHash(
54545455
key, req_context, (byte)contextSz,
@@ -5461,26 +5462,21 @@ static int _HandleMlDsaSignDma(whServerContext* ctx, uint16_t magic, int devId,
54615462
sigAddr, &sigLen, msgAddr, req.msg.sz,
54625463
ctx->crypto->rng);
54635464
}
5465+
}
54645466

5465-
if (ret == 0) {
5466-
/* Post-write processing of signature buffer */
5467-
ret = wh_Server_DmaProcessClientAddress(
5468-
ctx, (uintptr_t)req.sig.addr, &sigAddr, sigLen,
5469-
WH_DMA_OPER_CLIENT_WRITE_POST,
5470-
(whServerDmaFlags){0});
5471-
5472-
if (ret == 0) {
5473-
/* Set response signature length */
5474-
res.sigLen = sigLen;
5475-
*outSize = sizeof(res);
5476-
}
5477-
5478-
/* Post-read processing of message buffer */
5479-
ret = wh_Server_DmaProcessClientAddress(
5480-
ctx, (uintptr_t)req.msg.addr, &msgAddr,
5481-
req.msg.sz, WH_DMA_OPER_CLIENT_READ_POST,
5482-
(whServerDmaFlags){0});
5483-
}
5467+
if (sigAddr != NULL) {
5468+
/* Post-write processing of signature buffer */
5469+
(void)wh_Server_DmaProcessClientAddress(
5470+
ctx, (uintptr_t)req.sig.addr, &sigAddr, sigLen,
5471+
WH_DMA_OPER_CLIENT_WRITE_POST,
5472+
(whServerDmaFlags){0});
5473+
}
5474+
if (msgAddr != NULL) {
5475+
/* Post-read processing of message buffer */
5476+
(void)wh_Server_DmaProcessClientAddress(
5477+
ctx, (uintptr_t)req.msg.addr, &msgAddr,
5478+
req.msg.sz, WH_DMA_OPER_CLIENT_READ_POST,
5479+
(whServerDmaFlags){0});
54845480
}
54855481
}
54865482

@@ -5495,12 +5491,13 @@ static int _HandleMlDsaSignDma(whServerContext* ctx, uint16_t magic, int devId,
54955491
}
54965492

54975493
if (ret == 0) {
5494+
/* Set response signature length */
5495+
res.sigLen = sigLen;
5496+
*outSize = sizeof(res);
54985497

54995498
/* Translate the response */
55005499
(void)wh_MessageCrypto_TranslateMlDsaSignDmaResponse(
55015500
magic, &res, (whMessageCrypto_MlDsaSignDmaResponse*)cryptoDataOut);
5502-
5503-
*outSize = sizeof(res);
55045501
}
55055502

55065503
return ret;
@@ -5597,26 +5594,21 @@ static int _HandleMlDsaVerifyDma(whServerContext* ctx, uint16_t magic,
55975594
key, sigAddr, req.sig.sz, req_context, (byte)contextSz,
55985595
msgAddr, req.msg.sz, &verified);
55995596
}
5597+
}
56005598

5601-
if (ret == 0) {
5602-
/* Post-read processing of signature buffer */
5603-
ret = wh_Server_DmaProcessClientAddress(
5604-
ctx, (uintptr_t)req.sig.addr, &sigAddr, req.sig.sz,
5605-
WH_DMA_OPER_CLIENT_READ_POST, (whServerDmaFlags){0});
5606-
5607-
if (ret == 0) {
5608-
/* Post-read processing of message buffer */
5609-
ret = wh_Server_DmaProcessClientAddress(
5610-
ctx, (uintptr_t)req.msg.addr, &msgAddr,
5611-
req.msg.sz, WH_DMA_OPER_CLIENT_READ_POST,
5612-
(whServerDmaFlags){0});
5599+
if (sigAddr != NULL) {
5600+
/* Post-read processing of signature buffer */
5601+
(void)wh_Server_DmaProcessClientAddress(
5602+
ctx, (uintptr_t)req.sig.addr, &sigAddr, req.sig.sz,
5603+
WH_DMA_OPER_CLIENT_READ_POST, (whServerDmaFlags){0});
5604+
}
56135605

5614-
if (ret == 0) {
5615-
/* Set verification result */
5616-
res.verifyResult = verified;
5617-
}
5618-
}
5619-
}
5606+
if (msgAddr != NULL) {
5607+
/* Post-read processing of message buffer */
5608+
(void)wh_Server_DmaProcessClientAddress(
5609+
ctx, (uintptr_t)req.msg.addr, &msgAddr,
5610+
req.msg.sz, WH_DMA_OPER_CLIENT_READ_POST,
5611+
(whServerDmaFlags){0});
56205612
}
56215613
}
56225614

@@ -5628,6 +5620,9 @@ static int _HandleMlDsaVerifyDma(whServerContext* ctx, uint16_t magic,
56285620
}
56295621

56305622
if (ret == 0) {
5623+
/* Set verification result */
5624+
res.verifyResult = verified;
5625+
56315626
/* Translate the response */
56325627
(void)wh_MessageCrypto_TranslateMlDsaVerifyDmaResponse(
56335628
magic, &res,

0 commit comments

Comments
 (0)