Skip to content

Force-zero wc_AesSivDecrypt*() output buffer on authentication failure#10668

Merged
dgarske merged 4 commits into
wolfSSL:masterfrom
holtrop-wolfssl:f-5394
Jun 12, 2026
Merged

Force-zero wc_AesSivDecrypt*() output buffer on authentication failure#10668
dgarske merged 4 commits into
wolfSSL:masterfrom
holtrop-wolfssl:f-5394

Conversation

@holtrop-wolfssl

Copy link
Copy Markdown
Contributor

Description

Force-zero wc_AesSivDecrypt*() output buffer on authentication failure

Fixes F-5394

Testing

How did you test?

Checklist

  • added tests
  • updated/added doxygen
  • updated appropriate READMEs
  • Updated manual and documentation

@holtrop-wolfssl holtrop-wolfssl self-assigned this Jun 11, 2026
Copilot AI review requested due to automatic review settings June 11, 2026 20:04

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates AES-SIV decryption to wipe (ForceZero) the caller-provided plaintext output buffer when authentication fails, preventing accidental plaintext disclosure after an AES_SIV_AUTH_E return.

Changes:

  • In AesSivCipher() (AES-SIV decrypt path), zeroize out on authentication/verification failure.
  • Ensure SIV comparison is only performed when S2V computation succeeded (ret == 0).
  • Add a negative test intended to assert output buffer zeroization on auth failure.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
wolfcrypt/src/aes.c Zeroizes AES-SIV decrypt output buffer on verification failure; avoids overwriting earlier errors by guarding SIV compare with ret == 0.
wolfcrypt/test/test.c Adds a negative test for AES-SIV auth failure intended to verify output buffer is wiped.
Comments suppressed due to low confidence (1)

wolfcrypt/test/test.c:74812

  • The new negative test intends to verify that plaintext output is force-zeroed on authentication failure, but it uses testVectors[0], whose plaintextSz is 0 (empty plaintext). As a result, the loop never checks any output bytes and the test will pass even if the decrypt function does not wipe the output buffer. Use a vector with non-zero plaintextSz (e.g., index 2 in this table) so the zeroization assertion is meaningful.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@holtrop-wolfssl

Copy link
Copy Markdown
Contributor Author

retest this please (build removed)

@holtrop-wolfssl

Copy link
Copy Markdown
Contributor Author

retest this please (org.jenkinsci.plugins.workflow.support.steps.AgentOfflineException: Unable to create live FilePath for wolf-linux-cloud-node-sgx898; wolf-linux-cloud-node-sgx898 was marked offline: Connection was broken)

@holtrop-wolfssl holtrop-wolfssl added the For This Release Release version 5.9.2 label Jun 12, 2026
dgarske
dgarske previously approved these changes Jun 12, 2026

@dgarske dgarske left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Skoll Code Review

Scan type: reviewOverall recommendation: COMMENT
Findings: 2 total — 2 posted, 0 skipped
2 finding(s) posted as inline comments (see file-level comments below)

Posted findings

  • [Low] Output buffer not zeroed when AES-CTR step fails during decryptwolfcrypt/src/aes.c:17073-17105
  • [Info] Negative test hardcodes magic vector index [5]wolfcrypt/test/test.c:74796-74823

Review generated by Skoll

Comment thread wolfcrypt/src/aes.c
Comment thread wolfcrypt/test/test.c Outdated
Comment thread wolfcrypt/test/test.c Outdated

@dgarske dgarske left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Skoll Code Review

Scan type: reviewOverall recommendation: COMMENT
Findings: 3 total — 3 posted, 0 skipped
3 finding(s) posted as inline comments (see file-level comments below)

Posted findings

  • [Low] Allman brace style inconsistent with file's K&R conventionwolfcrypt/test/test.c:74797-74805
  • [Low] New test lines exceed 80-column widthwolfcrypt/test/test.c:74787,74808-74824
  • [Low] Naming/type inconsistent with sibling SIV test helperswolfcrypt/test/test.c:74787-74794

Review generated by Skoll

Comment thread wolfcrypt/test/test.c Outdated
Comment thread wolfcrypt/test/test.c Outdated
Comment thread wolfcrypt/test/test.c Outdated
@holtrop-wolfssl holtrop-wolfssl requested a review from dgarske June 12, 2026 18:57
@holtrop-wolfssl holtrop-wolfssl removed their assignment Jun 12, 2026
@holtrop-wolfssl

Copy link
Copy Markdown
Contributor Author

retest this please (org.jenkinsci.plugins.workflow.support.steps.AgentOfflineException: Unable to create live FilePath for wolf-linux-cloud-node-pbjn3e; wolf-linux-cloud-node-pbjn3e was marked offline: Connection was broken)

@holtrop-wolfssl

Copy link
Copy Markdown
Contributor Author

retest this please (ERROR: script returned exit code 255)

@dgarske

dgarske commented Jun 12, 2026

Copy link
Copy Markdown
Member

Jenkins retest this please: "Build 'wolfSSL/PRB-fips-repo-and-harness-test-v3-part2' failed with result: FAILURE"

@dgarske

dgarske commented Jun 12, 2026

Copy link
Copy Markdown
Member

Jenkins retest this please: "Build 'wolfSSL/PRB-fips-repo-and-harness-test-v3-part2' failed with result: ABORTED"

@dgarske dgarske merged commit f42a698 into wolfSSL:master Jun 12, 2026
306 of 307 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

For This Release Release version 5.9.2

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants