Skip to content

Add HPKE (RFC 9180) C# wrapper#10171

Open
dgarske wants to merge 5 commits intowolfSSL:masterfrom
dgarske:hpke_csharp
Open

Add HPKE (RFC 9180) C# wrapper#10171
dgarske wants to merge 5 commits intowolfSSL:masterfrom
dgarske:hpke_csharp

Conversation

@dgarske
Copy link
Copy Markdown
Contributor

@dgarske dgarske commented Apr 8, 2026

Description

Add HPKE (RFC 9180) C# wrapper and tests

Testing

Done with CSharp tests

Checklist

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

@dgarske dgarske self-assigned this Apr 8, 2026
Copilot AI review requested due to automatic review settings April 8, 2026 21:38
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Note

Copilot was unable to run its full agentic suite in this review.

Adds a C# P/Invoke wrapper for HPKE (RFC 9180) plus a console-style test that exercises Base mode seal/open and public-key serialization round-trip.

Changes:

  • Added HPKE native imports and managed helper APIs (init, keygen, serialize/deserialize, seal/open, free).
  • Added HPKE Base mode test flow to the C# test runner.
  • Enabled HAVE_HPKE in the C# wrapper user settings.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 7 comments.

File Description
wrapper/CSharp/wolfSSL_CSharp/wolfCrypt.cs Adds HPKE P/Invoke bindings and managed convenience APIs for base-mode single-shot operations
wrapper/CSharp/wolfCrypt-Test/wolfCrypt-Test.cs Adds an HPKE base-mode functional test (keygen, serialize/deserialize, seal/open)
wrapper/CSharp/user_settings.h Enables HPKE in the C# wrapper build configuration

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

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

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


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

@dgarske dgarske assigned wolfSSL-Bot and unassigned dgarske Apr 9, 2026
@dgarske dgarske requested a review from SparkiDev April 9, 2026 21:52
Copilot AI review requested due to automatic review settings April 10, 2026 19:21
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

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


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

Comment on lines 22 to 24
using System;
using System.Collections.Concurrent;
using System.Runtime.InteropServices;
Copy link

Copilot AI Apr 10, 2026

Choose a reason for hiding this comment

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

System.Collections.Concurrent is used unconditionally, but this wrapper has #if WindowsCE support throughout the file. ConcurrentDictionary is not available on .NET Compact Framework/Windows CE, so defining WindowsCE will fail to compile. Consider wrapping the HPKE context tracking in #if !WindowsCE (or multi-targeting) and using a simpler Dictionary<IntPtr, HpkeContextState> + lock (or another CF-compatible collection) for WindowsCE builds.

Copilot uses AI. Check for mistakes.
Comment on lines +3561 to +3565
if (plaintext == null || plaintext.Length == 0)
{
log(ERROR_LOG, "HPKE seal base: invalid plaintext");
return null;
}
Copy link

Copilot AI Apr 10, 2026

Choose a reason for hiding this comment

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

HpkeSealBase currently rejects plaintext.Length == 0, but HPKE (and the native wc_HpkeSealBase API) can validly seal an empty plaintext (ciphertext would be just the AEAD tag). Consider allowing zero-length plaintexts (keep rejecting plaintext == null) so callers can encrypt empty messages and so the wrapper matches the native API semantics.

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants