GnuTLS | x509: add gnutls_x509_crl_set_crt_serial2() with revocation reason (!2113)

Read-only notification of GnuTLS library development activities <[email protected]> Tue, 23 Jun 2026 05:09:31 +0000
Newsgroups gmane.comp.encryption.gpg.gnutls.devel
Message-ID <[email protected]>
--===============8862328937291592634==
Content-Type: multipart/alternative;
 boundary="--==_mimepart_6a3a150b2598b_371971e8107794";
 charset=UTF-8
Content-Transfer-Encoding: 7bit


----==_mimepart_6a3a150b2598b_371971e8107794
Content-Type: text/plain;
 charset=UTF-8
Content-Transfer-Encoding: quoted-printable



David Mar=C3=ADn Carre=C3=B1o created a merge request: https://gitlab.com=
/gnutls/gnutls/-/merge_requests/2113

Project:Branches: davefx/gnutls:crl-entry-reason-code to gnutls/gnutls:ma=
ster
Author:   David Mar=C3=ADn Carre=C3=B1o



## Summary

`gnutls_x509_crl_set_crt_serial()` records a revoked certificate's serial=
 and
revocation time but provides no way to set an RFC 5280 **reasonCode** (OI=
D
2.5.29.21) CRL entry extension =E2=80=94 in fact it explicitly disables
`crlEntryExtensions`. Applications that manage a CA therefore cannot expr=
ess
*why* a certificate was revoked (keyCompromise, cessationOfOperation, =E2=
=80=A6).

This adds `gnutls_x509_crl_set_crt_serial2()`, identical to the existing
function plus a `reason` argument (a `gnutls_x509_crl_reason_t` value):

- reason `GNUTLS_X509_CRLREASON_UNSPECIFIED` =E2=86=92 no reasonCode exte=
nsion (RFC
  5280 =C2=A75.3.1 recommends omitting it over an explicit "unspecified")=
; behaviour
  identical to the original.
- any other reason =E2=86=92 a non-critical reasonCode entry extension is=
 added.

`gnutls_x509_crl_set_crt_serial()` now delegates to the new function with=

`UNSPECIFIED`, so its output is unchanged byte-for-byte (the existing
`crl_apis` golden-output assertions still pass).

## Changes

- `lib/x509/crl_write.c` =E2=80=94 new public function + refactor
- `lib/includes/gnutls/x509.h` =E2=80=94 declaration
- `lib/libgnutls.map` =E2=80=94 `GNUTLS_3_8_14` symbol version node
- `tests/crl_apis.c` =E2=80=94 test: reasonCode present with a reason, ab=
sent for
  unspecified, and the CRL still verifies
- `NEWS` =E2=80=94 entry

## Validation done locally

- `make -C lib` builds clean; symbol exported as
  `gnutls_x509_crl_set_crt_serial2@@GNUTLS_3_8_14`
- `tests/crl_apis` passes (new assertions + unchanged golden output)
- formatted with the repo's clang-format config

## Notes for review

- The implementation mirrors `_gnutls_x509_crl_set_extension()` but targe=
ts the
  per-entry `tbsCertList.revokedCertificates.?LAST.crlEntryExtensions` pa=
th =E2=80=94
  the same mechanism already used for CRL-level extensions.
- A `gnutls_x509_crl_set_crt2()` convenience wrapper (taking a cert inste=
ad of a
  raw serial) could be added symmetrically if you'd prefer; left out to k=
eep the
  MR focused.

## Disclosure

This patch was prepared with AI assistance; I have reviewed, built, and t=
ested
it, and take responsibility for it under the DCO `Signed-off-by`. Happy t=
o
adjust the attribution or approach per your preference.

-- =

Reply to this email directly or view it on GitLab: https://gitlab.com/gnu=
tls/gnutls/-/merge_requests/2113
You're receiving this email because of your account on gitlab.com. Unsubs=
cribe from this thread: https://gitlab.com/-/namespace/17175643/sent_noti=
fications/5-der2rrs51g5qaf107j8kaawg2-a84t7/unsubscribe | Manage all noti=
fications: https://gitlab.com/-/profile/notifications | Help: https://git=
lab.com/help



----==_mimepart_6a3a150b2598b_371971e8107794
Content-Type: text/html;
 charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www=
.w3.org/TR/REC-html40/loose.dtd">
<html lang=3D"en" style=3D'--code-editor-font: var(--default-mono-font, "=
GitLab Mono"), JetBrains Mono, Menlo, DejaVu Sans Mono, Liberation Mono, =
Consolas, Ubuntu Mono, Courier New, andale mono, lucida console, monospac=
e;'>
<head>
<meta content=3D"text/html; charset=3Dutf-8" http-equiv=3D"Content-Type">=

<title>
GitLab
</title>

<style data-premailer=3D"ignore" type=3D"text/css">
a { color: #1068bf; }
</style>

<style>img {
max-width: 100%; height: auto;
}
body {
font-size: .875rem;
}
body {
-webkit-text-shadow: hsla(0,0%,100%,.01) 0 0 1px;
}
body {
font-family: "GitLab Sans",-apple-system,BlinkMacSystemFont,"Segoe UI",Ro=
boto,"Noto Sans",Ubuntu,Cantarell,"Helvetica Neue",sans-serif,"Apple Colo=
r Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"; font-size=
: inherit;
}
</style>
</head>
<body style=3D'font-size: inherit; -webkit-text-shadow: hsla(0,0%,100%,.0=
1) 0 0 1px; font-family: "GitLab Sans",-apple-system,BlinkMacSystemFont,"=
Segoe UI",Roboto,"Noto Sans",Ubuntu,Cantarell,"Helvetica Neue",sans-serif=
,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji=
";'>
<div class=3D"content">

<p class=3D"details" style=3D"font-style: italic; color: #626168;">
<a href=3D"https://gitlab.com/davefx">David Mar=C3=ADn Carre=C3=B1o</a> c=
reated a merge request: <a href=3D"https://gitlab.com/gnutls/gnutls/-/mer=
ge_requests/2113">!2113</a>
</p>
<div class=3D"branch">
Project:Branches: davefx/gnutls:crl-entry-reason-code to gnutls/gnutls:ma=
ster
</div>
<div class=3D"author">
Author: David Mar=C3=ADn Carre=C3=B1o
</div>
<div class=3D"assignee">
Assignees: =

</div>
<div class=3D"reviewer">
Reviewers: =

</div>
<div class=3D"md gl-mt-5" style=3D"position: relative; z-index: 1; color:=
 #3a383f; word-wrap: break-word; margin-top: 1rem;">
<h2 id=3D"user-content-summary" dir=3D"auto" style=3D"margin-top: 0px; ma=
rgin-bottom: 10px;" align=3D"initial">Summary<a href=3D"#summary" aria-la=
bel=3D"Link to heading 'Summary'" data-heading-content=3D"Summary" class=3D=
"anchor" style=3D"margin-top: 0px;"></a>
</h2>
<p dir=3D"auto" style=3D"color: #3a383f; margin: 0px 0px 1rem;" align=3D"=
initial"><code style=3D'font-size: 90%; color: #18171d; word-wrap: break-=
word; background-color: #ececef; border-radius: .25rem; margin-top: 0px; =
font-weight: inherit; overflow-wrap: break-word; white-space: break-space=
s; font-family: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mo=
no", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale=
 mono", "lucida console", monospace; font-variant-ligatures: none; word-b=
reak: keep-all; padding: 0.125rem 0.25rem;'>gnutls_x509_crl_set_crt_seria=
l()</code> records a revoked certificate's serial and
revocation time but provides no way to set an RFC 5280 <strong style=3D"f=
ont-weight: 600;">reasonCode</strong> (OID
2.5.29.21) CRL entry extension =E2=80=94 in fact it explicitly disables
<code style=3D'font-size: 90%; color: #18171d; word-wrap: break-word; bac=
kground-color: #ececef; border-radius: .25rem; font-weight: inherit; over=
flow-wrap: break-word; white-space: break-spaces; font-family: "GitLab Mo=
no", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Liberation Mono", "C=
onsolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", =
monospace; font-variant-ligatures: none; word-break: keep-all; padding: 0=
.125rem 0.25rem;'>crlEntryExtensions</code>. Applications that manage a C=
A therefore cannot express
<em>why</em> a certificate was revoked (keyCompromise, cessationOfOperati=
on, =E2=80=A6).</p>
<p dir=3D"auto" style=3D"color: #3a383f; margin: 0px 0px 1rem;" align=3D"=
initial">This adds <code style=3D'font-size: 90%; color: #18171d; word-wr=
ap: break-word; background-color: #ececef; border-radius: .25rem; margin-=
top: 0px; font-weight: inherit; overflow-wrap: break-word; white-space: b=
reak-spaces; font-family: "GitLab Mono", "JetBrains Mono", "Menlo", "Deja=
Vu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New=
", "andale mono", "lucida console", monospace; font-variant-ligatures: no=
ne; word-break: keep-all; padding: 0.125rem 0.25rem;'>gnutls_x509_crl_set=
_crt_serial2()</code>, identical to the existing
function plus a <code style=3D'font-size: 90%; color: #18171d; word-wrap:=
 break-word; background-color: #ececef; border-radius: .25rem; font-weigh=
t: inherit; overflow-wrap: break-word; white-space: break-spaces; font-fa=
mily: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Libe=
ration Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "l=
ucida console", monospace; font-variant-ligatures: none; word-break: keep=
-all; padding: 0.125rem 0.25rem;'>reason</code> argument (a <code style=3D=
'font-size: 90%; color: #18171d; word-wrap: break-word; background-color:=
 #ececef; border-radius: .25rem; font-weight: inherit; overflow-wrap: bre=
ak-word; white-space: break-spaces; font-family: "GitLab Mono", "JetBrain=
s Mono", "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubu=
ntu Mono", "Courier New", "andale mono", "lucida console", monospace; fon=
t-variant-ligatures: none; word-break: keep-all; padding: 0.125rem 0.25re=
m;'>gnutls_x509_crl_reason_t</code> value):</p>
<ul dir=3D"auto" style=3D"text-align: initial; list-style-type: disc; mar=
gin: 0px 0px 1rem; padding: 0;">
<li style=3D"margin-top: 0px; line-height: 1.6em; margin-left: 25px; padd=
ing-left: 3px;">reason <code style=3D'font-size: 90%; color: #18171d; wor=
d-wrap: break-word; background-color: #ececef; border-radius: .25rem; mar=
gin-top: 0px; font-family: "GitLab Mono", "JetBrains Mono", "Menlo", "Dej=
aVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier Ne=
w", "andale mono", "lucida console", monospace; font-variant-ligatures: n=
one; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-a=
ll; padding: 0.125rem 0.25rem;'>GNUTLS_X509_CRLREASON_UNSPECIFIED</code> =
=E2=86=92 no reasonCode extension (RFC
5280 =C2=A75.3.1 recommends omitting it over an explicit "unspecified"); =
behaviour
identical to the original.</li>
<li style=3D"line-height: 1.6em; margin-left: 25px; padding-left: 3px;">a=
ny other reason =E2=86=92 a non-critical reasonCode entry extension is ad=
ded.</li>
</ul>
<p dir=3D"auto" style=3D"color: #3a383f; margin: 0px 0px 1rem;" align=3D"=
initial"><code style=3D'font-size: 90%; color: #18171d; word-wrap: break-=
word; background-color: #ececef; border-radius: .25rem; margin-top: 0px; =
font-weight: inherit; overflow-wrap: break-word; white-space: break-space=
s; font-family: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mo=
no", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale=
 mono", "lucida console", monospace; font-variant-ligatures: none; word-b=
reak: keep-all; padding: 0.125rem 0.25rem;'>gnutls_x509_crl_set_crt_seria=
l()</code> now delegates to the new function with
<code style=3D'font-size: 90%; color: #18171d; word-wrap: break-word; bac=
kground-color: #ececef; border-radius: .25rem; font-weight: inherit; over=
flow-wrap: break-word; white-space: break-spaces; font-family: "GitLab Mo=
no", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Liberation Mono", "C=
onsolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", =
monospace; font-variant-ligatures: none; word-break: keep-all; padding: 0=
.125rem 0.25rem;'>UNSPECIFIED</code>, so its output is unchanged byte-for=
-byte (the existing
<code style=3D'font-size: 90%; color: #18171d; word-wrap: break-word; bac=
kground-color: #ececef; border-radius: .25rem; font-weight: inherit; over=
flow-wrap: break-word; white-space: break-spaces; font-family: "GitLab Mo=
no", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Liberation Mono", "C=
onsolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", =
monospace; font-variant-ligatures: none; word-break: keep-all; padding: 0=
.125rem 0.25rem;'>crl_apis</code> golden-output assertions still pass).</=
p>
<h2 id=3D"user-content-changes" dir=3D"auto" style=3D"margin-top: 20px; m=
argin-bottom: 10px;" align=3D"initial">Changes<a href=3D"#changes" aria-l=
abel=3D"Link to heading 'Changes'" data-heading-content=3D"Changes" class=
=3D"anchor" style=3D"margin-top: 0px;"></a>
</h2>
<ul dir=3D"auto" style=3D"text-align: initial; list-style-type: disc; mar=
gin: 0px 0px 1rem; padding: 0;">
<li style=3D"margin-top: 0px; line-height: 1.6em; margin-left: 25px; padd=
ing-left: 3px;">
<code style=3D'font-size: 90%; color: #18171d; word-wrap: break-word; bac=
kground-color: #ececef; border-radius: .25rem; margin-top: 0px; font-fami=
ly: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Libera=
tion Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "luc=
ida console", monospace; font-variant-ligatures: none; white-space: pre-w=
rap; overflow-wrap: break-word; word-break: keep-all; padding: 0.125rem 0=
.25rem;'>lib/x509/crl_write.c</code> =E2=80=94 new public function + refa=
ctor</li>
<li style=3D"line-height: 1.6em; margin-left: 25px; padding-left: 3px;">
<code style=3D'font-size: 90%; color: #18171d; word-wrap: break-word; bac=
kground-color: #ececef; border-radius: .25rem; margin-top: 0px; font-fami=
ly: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Libera=
tion Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "luc=
ida console", monospace; font-variant-ligatures: none; white-space: pre-w=
rap; overflow-wrap: break-word; word-break: keep-all; padding: 0.125rem 0=
.25rem;'>lib/includes/gnutls/x509.h</code> =E2=80=94 declaration</li>
<li style=3D"line-height: 1.6em; margin-left: 25px; padding-left: 3px;">
<code style=3D'font-size: 90%; color: #18171d; word-wrap: break-word; bac=
kground-color: #ececef; border-radius: .25rem; margin-top: 0px; font-fami=
ly: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Libera=
tion Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "luc=
ida console", monospace; font-variant-ligatures: none; white-space: pre-w=
rap; overflow-wrap: break-word; word-break: keep-all; padding: 0.125rem 0=
.25rem;'>lib/libgnutls.map</code> =E2=80=94 <code style=3D'font-size: 90%=
; color: #18171d; word-wrap: break-word; background-color: #ececef; borde=
r-radius: .25rem; font-family: "GitLab Mono", "JetBrains Mono", "Menlo", =
"DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courie=
r New", "andale mono", "lucida console", monospace; font-variant-ligature=
s: none; white-space: pre-wrap; overflow-wrap: break-word; word-break: ke=
ep-all; padding: 0.125rem 0.25rem;'>GNUTLS_3_8_14</code> symbol version n=
ode</li>
<li style=3D"line-height: 1.6em; margin-left: 25px; padding-left: 3px;">
<code style=3D'font-size: 90%; color: #18171d; word-wrap: break-word; bac=
kground-color: #ececef; border-radius: .25rem; margin-top: 0px; font-fami=
ly: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Libera=
tion Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "luc=
ida console", monospace; font-variant-ligatures: none; white-space: pre-w=
rap; overflow-wrap: break-word; word-break: keep-all; padding: 0.125rem 0=
.25rem;'>tests/crl_apis.c</code> =E2=80=94 test: reasonCode present with =
a reason, absent for
unspecified, and the CRL still verifies</li>
<li style=3D"line-height: 1.6em; margin-left: 25px; padding-left: 3px;">
<code style=3D'font-size: 90%; color: #18171d; word-wrap: break-word; bac=
kground-color: #ececef; border-radius: .25rem; margin-top: 0px; font-fami=
ly: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Libera=
tion Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "luc=
ida console", monospace; font-variant-ligatures: none; white-space: pre-w=
rap; overflow-wrap: break-word; word-break: keep-all; padding: 0.125rem 0=
.25rem;'>NEWS</code> =E2=80=94 entry</li>
</ul>
<h2 id=3D"user-content-validation-done-locally" dir=3D"auto" style=3D"mar=
gin-top: 20px; margin-bottom: 10px;" align=3D"initial">Validation done lo=
cally<a href=3D"#validation-done-locally" aria-label=3D"Link to heading '=
Validation done locally'" data-heading-content=3D"Validation done locally=
" class=3D"anchor" style=3D"margin-top: 0px;"></a>
</h2>
<ul dir=3D"auto" style=3D"text-align: initial; list-style-type: disc; mar=
gin: 0px 0px 1rem; padding: 0;">
<li style=3D"margin-top: 0px; line-height: 1.6em; margin-left: 25px; padd=
ing-left: 3px;">
<code style=3D'font-size: 90%; color: #18171d; word-wrap: break-word; bac=
kground-color: #ececef; border-radius: .25rem; margin-top: 0px; font-fami=
ly: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Libera=
tion Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "luc=
ida console", monospace; font-variant-ligatures: none; white-space: pre-w=
rap; overflow-wrap: break-word; word-break: keep-all; padding: 0.125rem 0=
.25rem;'>make -C lib</code> builds clean; symbol exported as
<code style=3D'font-size: 90%; color: #18171d; word-wrap: break-word; bac=
kground-color: #ececef; border-radius: .25rem; font-family: "GitLab Mono"=
, "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Cons=
olas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", mon=
ospace; font-variant-ligatures: none; white-space: pre-wrap; overflow-wra=
p: break-word; word-break: keep-all; padding: 0.125rem 0.25rem;'>gnutls_x=
509_crl_set_crt_serial2@@GNUTLS_3_8_14</code>
</li>
<li style=3D"line-height: 1.6em; margin-left: 25px; padding-left: 3px;">
<code style=3D'font-size: 90%; color: #18171d; word-wrap: break-word; bac=
kground-color: #ececef; border-radius: .25rem; margin-top: 0px; font-fami=
ly: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Libera=
tion Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "luc=
ida console", monospace; font-variant-ligatures: none; white-space: pre-w=
rap; overflow-wrap: break-word; word-break: keep-all; padding: 0.125rem 0=
.25rem;'>tests/crl_apis</code> passes (new assertions + unchanged golden =
output)</li>
<li style=3D"line-height: 1.6em; margin-left: 25px; padding-left: 3px;">f=
ormatted with the repo's clang-format config</li>
</ul>
<h2 id=3D"user-content-notes-for-review" dir=3D"auto" style=3D"margin-top=
: 20px; margin-bottom: 10px;" align=3D"initial">Notes for review<a href=3D=
"#notes-for-review" aria-label=3D"Link to heading 'Notes for review'" dat=
a-heading-content=3D"Notes for review" class=3D"anchor" style=3D"margin-t=
op: 0px;"></a>
</h2>
<ul dir=3D"auto" style=3D"text-align: initial; list-style-type: disc; mar=
gin: 0px 0px 1rem; padding: 0;">
<li style=3D"margin-top: 0px; line-height: 1.6em; margin-left: 25px; padd=
ing-left: 3px;">The implementation mirrors <code style=3D'font-size: 90%;=
 color: #18171d; word-wrap: break-word; background-color: #ececef; border=
-radius: .25rem; margin-top: 0px; font-family: "GitLab Mono", "JetBrains =
Mono", "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubunt=
u Mono", "Courier New", "andale mono", "lucida console", monospace; font-=
variant-ligatures: none; white-space: pre-wrap; overflow-wrap: break-word=
; word-break: keep-all; padding: 0.125rem 0.25rem;'>_gnutls_x509_crl_set_=
extension()</code> but targets the
per-entry <code style=3D'font-size: 90%; color: #18171d; word-wrap: break=
-word; background-color: #ececef; border-radius: .25rem; font-family: "Gi=
tLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Liberation Mo=
no", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida con=
sole", monospace; font-variant-ligatures: none; white-space: pre-wrap; ov=
erflow-wrap: break-word; word-break: keep-all; padding: 0.125rem 0.25rem;=
'>tbsCertList.revokedCertificates.?LAST.crlEntryExtensions</code> path =E2=
=80=94
the same mechanism already used for CRL-level extensions.</li>
<li style=3D"line-height: 1.6em; margin-left: 25px; padding-left: 3px;">A=
 <code style=3D'font-size: 90%; color: #18171d; word-wrap: break-word; ba=
ckground-color: #ececef; border-radius: .25rem; margin-top: 0px; font-fam=
ily: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Liber=
ation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lu=
cida console", monospace; font-variant-ligatures: none; white-space: pre-=
wrap; overflow-wrap: break-word; word-break: keep-all; padding: 0.125rem =
0.25rem;'>gnutls_x509_crl_set_crt2()</code> convenience wrapper (taking a=
 cert instead of a
raw serial) could be added symmetrically if you'd prefer; left out to kee=
p the
MR focused.</li>
</ul>
<h2 id=3D"user-content-disclosure" dir=3D"auto" style=3D"margin-top: 20px=
; margin-bottom: 10px;" align=3D"initial">Disclosure<a href=3D"#disclosur=
e" aria-label=3D"Link to heading 'Disclosure'" data-heading-content=3D"Di=
sclosure" class=3D"anchor" style=3D"margin-top: 0px;"></a>
</h2>
<p dir=3D"auto" style=3D"color: #3a383f; margin: 0px;" align=3D"initial">=
This patch was prepared with AI assistance; I have reviewed, built, and t=
ested
it, and take responsibility for it under the DCO <code style=3D'font-size=
: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; =
border-radius: .25rem; margin-top: 0px; font-weight: inherit; overflow-wr=
ap: break-word; white-space: break-spaces; font-family: "GitLab Mono", "J=
etBrains Mono", "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas=
", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospa=
ce; font-variant-ligatures: none; word-break: keep-all; padding: 0.125rem=
 0.25rem;'>Signed-off-by</code>. Happy to
adjust the attribution or approach per your preference.</p>
</div>

</div>
<div class=3D"footer" style=3D"margin-top: 10px;">
<p style=3D"font-size: small; color: #626168;">
=E2=80=94
<br>
Reply to this email directly or <a href=3D"https://gitlab.com/gnutls/gnut=
ls/-/merge_requests/2113">view it on GitLab</a>.
<br>
You're receiving this email because of your account on <a target=3D"_blan=
k" rel=3D"noopener noreferrer" href=3D"https://gitlab.com">gitlab.com</a>=
. <a href=3D"https://gitlab.com/-/namespace/17175643/sent_notifications/5=
-der2rrs51g5qaf107j8kaawg2-a84t7/unsubscribe" target=3D"_blank" rel=3D"no=
opener noreferrer">Unsubscribe</a> from this thread =C2=B7 <a href=3D"htt=
ps://gitlab.com/-/profile/notifications" target=3D"_blank" rel=3D"noopene=
r noreferrer" class=3D"mng-notif-link">Manage all notifications</a> =C2=B7=
 <a href=3D"https://gitlab.com/help" target=3D"_blank" rel=3D"noopener no=
referrer" class=3D"help-link">Help</a>
<span style=3D"color: transparent; font-size: 0; display: none; overflow:=
 hidden; opacity: 0; width: 0; height: 0; max-width: 0; max-height: 0;">
Notification message regarding https://gitlab.com/gnutls/gnutls/-/merge_r=
equests/2113 at 1782191371
</span>
<script type=3D"application/ld+json">{"@context":"http://schema.org","@ty=
pe":"EmailMessage","action":{"@type":"ViewAction","name":"View Merge requ=
est","url":"https://gitlab.com/gnutls/gnutls/-/merge_requests/2113"}}</sc=
ript>


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

----==_mimepart_6a3a150b2598b_371971e8107794--


--===============8862328937291592634==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Gnutls-devel mailing list
[email protected]
http://lists.gnupg.org/mailman/listinfo/gnutls-devel

--===============8862328937291592634==--