<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html lang="en">
<head>
<meta content="text/html; charset=US-ASCII" http-equiv="Content-Type">
<title>
GitLab
</title>


<style>img {
max-width: 100%; height: auto;
}
</style>
</head>
<body>
<div class="content">

<p class="details" style="font-style: italic; color: #666;">
<a href="https://gitlab.com/dkg">Daniel Kahn Gillmor</a> created a merge request: <a href="https://gitlab.com/gnutls/gnutls/-/merge_requests/1428">!1428</a>
</p>
<p>
</p>
<div class="branch">
Project:Branches: dkg/gnutls:x25519-and-x448 to gnutls/gnutls:master
</div>
<div class="author">
Author: Daniel Kahn Gillmor
</div>
<div class="assignee">
Assignees: 
</div>
<div class="reviewer">
Reviewers: 
</div>
<div class="approvers">

</div>

<div>
<p dir="auto">I'm using certtool to generate certificates for use in CMS (S/MIME) for <a href="https://datatracker.ietf.org/doc/draft-ietf-lamps-samples/" rel="nofollow noreferrer noopener" target="_blank">draft-ietf-lamps-samples</a>.</p>
<p dir="auto">The LAMPS WG requested some sample certificates using Curve25519.  The verification certificates/signing keys (using EdDSA) were straightforward to generate, but the encryption certificates/decryption keys (using X25519) were not possible.</p>
<p dir="auto">This series of changes to GnuTLS adds support for generating and handling X25519 and X448, though of course those certificates are not yet useful in a CMS context from GnuTLS itself without completing work on <a href="https://gitlab.com/gnutls/gnutls/-/issues/1185" data-original="#1185" data-link="false" data-link-reference="false" data-project="179611" data-issue="79659041" data-reference-type="issue" data-container="body" data-placement="top" title="Feature request: CMS (PKCS#7) encryption (enveloped and authenveloped data) in `certtool`" class="gfm gfm-issue has-tooltip">#1185</a>.</p>
<p dir="auto">I don't consider this series ready to go yet; it would help me to get three specific pieces of feedback from GnuTLS devs upstream:</p>
<ul dir="auto">
<li>
<p>many of the commits in this series effectively duplicate code that was EdDSA-specific, and refers to these CFRG curves as "modern ECDH".  A different approach would be to take the (non-visible) pubkey and privkey handling functions that are currently named <code>*_eddsa_*</code> and expand them to handle X25519 and X448 as well, since their data representations are identical to Ed25519 and Ed448 to the best of my understanding.  If that is preferable to the current approach (less code duplication, but possibly some other entanglements), let me know and i can rework the series with that preference in mind.</p>
</li>
<li>
<p>I'm not sure what tests I should add.  Suggestions welcome!</p>
</li>
<li>
<p>I've exercised this code enough to be able to generate X25519 certificates using an Ed25519 CA using <code>certtool</code> in the way that I'm comfortable with already, but i am not sure that I've handled every possible codepath where an X25519 or X448 certificate, private key, or public key might show up.  Further review would be welcome.</p>
</li>
</ul>
<h2 dir="auto">
<a id="user-content-checklist" class="anchor" href="#checklist" aria-hidden="true"></a>Checklist</h2>
<ul class="task-list" dir="auto">
<li class="task-list-item">
<input type="checkbox" class="task-list-item-checkbox" checked disabled> Commits have <code>Signed-off-by:</code> with name/author being identical to the commit author</li>
<li class="task-list-item">
<input type="checkbox" class="task-list-item-checkbox" checked disabled> Code modified for feature</li>
<li class="task-list-item">
<input type="checkbox" class="task-list-item-checkbox" disabled> Test suite updated with functionality tests</li>
<li class="task-list-item">
<input type="checkbox" class="task-list-item-checkbox" disabled> Test suite updated with negative tests</li>
<li class="task-list-item">
<input type="checkbox" class="task-list-item-checkbox" disabled> Documentation updated / NEWS entry present (for non-trivial changes)</li>
<li class="task-list-item">
<input type="checkbox" class="task-list-item-checkbox" disabled> CI timeout is 2h or higher (see Settings/CICD/General pipelines/Timeout)</li>
</ul>
<h2 dir="auto">
<a id="user-content-reviewers-checklist" class="anchor" href="#reviewers-checklist" aria-hidden="true"></a>Reviewer's checklist:</h2>
<ul class="task-list" dir="auto">
<li class="task-list-item">
<input type="checkbox" class="task-list-item-checkbox" disabled> Any issues marked for closing are addressed</li>
<li class="task-list-item">
<input type="checkbox" class="task-list-item-checkbox" disabled> There is a test suite reasonably covering new functionality or modifications</li>
<li class="task-list-item">
<input type="checkbox" class="task-list-item-checkbox" disabled> Function naming, parameters, return values, types, etc., are consistent and according to <code>CONTRIBUTION.md</code>
</li>
<li class="task-list-item">
<input type="checkbox" class="task-list-item-checkbox" disabled> This feature/change has adequate documentation added</li>
<li class="task-list-item">
<input type="checkbox" class="task-list-item-checkbox" disabled> No obvious mistakes in the code</li>
</ul>
</div>

</div>
<div class="footer" style="margin-top: 10px;">
<p style="font-size: small; color: #666;">

<br>
Reply to this email directly or <a href="https://gitlab.com/gnutls/gnutls/-/merge_requests/1428">view it on GitLab</a>.
<br>
You're receiving this email because of your account on gitlab.com.
If you'd like to receive fewer emails, you can
<a href="https://gitlab.com/-/sent_notifications/3ac7f59323e1d760b2bd3d828a1035ea/unsubscribe">unsubscribe</a>
from this thread or
adjust your notification settings.
<script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","action":{"@type":"ViewAction","name":"View Merge request","url":"https://gitlab.com/gnutls/gnutls/-/merge_requests/1428"}}</script>


</p>
</div>
</body>
</html>