<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html lang="en" style='--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, monospace;'>
<head>
<meta content="text/html; charset=US-ASCII" http-equiv="Content-Type">
<title>
GitLab
</title>
<style data-premailer="ignore" type="text/css">
a { color: #1068bf; }
</style>
<style>img {
max-width: 100%; height: auto;
}
body {
font-size: .875rem;
}
body {
-webkit-text-shadow: rgba(255,255,255,.01) 0 0 1px;
}
body {
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"; font-size: inherit;
}
</style>
</head>
<body style='font-size: inherit; -webkit-text-shadow: rgba(255,255,255,.01) 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="content">
<p class="details" style="font-style: italic; color: #626168;">
<a href="https://gitlab.com/dueno">Daiki Ueno</a> created a merge request: <a href="https://gitlab.com/gnutls/gnutls/-/merge_requests/1907">!1907</a>
</p>
<div class="branch">
Project:Branches: dueno/gnutls:wip/dueno/post-optimize to gnutls/gnutls:master
</div>
<div class="author">
Author: Daiki Ueno
</div>
<div class="assignee">
Assignees:
</div>
<div class="reviewer">
Reviewers:
</div>
<div class="approvers">
</div>
<div class="md gl-mt-5" style="position: relative; z-index: 1; color: #3a383f; word-wrap: break-word; margin-top: 1rem;">
<ul dir="auto" style="text-align: initial; list-style-type: disc; margin: 0 0 1rem; padding: 0;">
<li style="margin-top: 0; line-height: 1.6em; margin-left: 25px; padding-left: 3px;">
<p style="color: #3a383f; margin: 0 0 1rem;">crypto-selftests-pk: skip negative tests by default</p>
</li>
<li style="line-height: 1.6em; margin-left: 25px; padding-left: 3px;">
<p style="color: #3a383f; margin: 0 0 1rem;">fips: skip compat API tests in AES self-tests</p>
</li>
<li style="line-height: 1.6em; margin-left: 25px; padding-left: 3px;">
<p style="color: #3a383f; margin: 0 0 1rem;">fips: perform RSA self-tests using RSA-PSS instead of PKCS#1 v1.5</p>
</li>
</ul>
<p dir="auto" style="color: #3a383f; margin: 0 0 1rem;" align="initial">Previously the RSA self-tests were using PKCS#1 v1.5, for both
signature generation and encryption/decryption, which turned a bit
problematic as GnuTLS now has a run-time option to disable that
scheme.</p>
<p dir="auto" style="color: #3a383f; margin: 0 0 1rem;" align="initial">According to FIPS 140-3 IG 10.3.A, for each FIPS 186-4 and FIPS 186-5
public key digital signature algorithm, a CAST shall be performed
using at least one of the schemes approved for use in the approved
mode. Similarly, the IG annex D.G mentions that if the RSA signature
generation algorithm and RSA un-encapsulation scheme use the same
implementation, only test for signature generation suffices.</p>
<p dir="auto" style="color: #3a383f; margin: 0 0 1rem;" align="initial">Therefore, this switches to using RSA-PSS only and drop the
RSA encryption/decryption self-tests.</p>
<ul dir="auto" style="text-align: initial; list-style-type: disc; margin: 0 0 1rem; padding: 0;">
<li style="margin-top: 0; line-height: 1.6em; margin-left: 25px; padding-left: 3px;">fips: defer PBKDF2 self-tests until the algorithm is actually used</li>
</ul>
<p dir="auto" style="color: #3a383f; margin: 0 0 1rem;" align="initial">FIPS 140-3 allows the module to perform self-tests for an algorithm at
any time before the algorithm is used. Since PBKDF2 self-tests are
costly, this defers them until gnutls_pbkdf2 is called for the first
time.</p>
<ul dir="auto" style="text-align: initial; list-style-type: disc; margin: 0 0 1rem; padding: 0;">
<li style="margin-top: 0; line-height: 1.6em; margin-left: 25px; padding-left: 3px;">fips: defer EdDSA self-tests until the algorithm is actually used</li>
</ul>
<p dir="auto" style="color: #3a383f; margin: 0 0 1rem;" align="initial">FIPS 140-3 allows the module to perform self-tests for an algorithm at
any time before the algorithm is used. This defers them until the key
generation, signing, or signature verification actually happens.</p>
<p dir="auto" style="color: #3a383f; margin: 0 0 1rem;" align="initial">Note that deferring self-tests for other public key algorithms is not
straightforward, because some of those algorithms change the internal
implementation based on whether the library is running the self-tests
or not, while we can't easily switch the library into that state in
later phases. For example, RSA self-tests switch the RNG to be a
deterministic version.</p>
<ul dir="auto" style="text-align: initial; list-style-type: disc; margin: 0 0 1rem; padding: 0;">
<li style="margin-top: 0; line-height: 1.6em; margin-left: 25px; padding-left: 3px;">fips: defer DH self-tests until the algorithm is actually used</li>
</ul>
<p dir="auto" style="color: #3a383f; margin: 0 0 1rem;" align="initial">FIPS 140-3 allows the module to perform self-tests for an algorithm at
any time before the algorithm is used. Since DH self-tests are costly,
this defers them until the key generation or derivation actually
happens.</p>
<ul dir="auto" style="text-align: initial; list-style-type: disc; margin: 0 0 1rem; padding: 0;">
<li style="margin-top: 0; line-height: 1.6em; margin-left: 25px; padding-left: 3px;">fips: only run the first test vector for each symmetric algorithm</li>
</ul>
<p dir="auto" style="color: #3a383f; margin: 0 0 1rem;" align="initial">FIPS 140-3 doesn't require to run multiple test vectors for a single
algorithm, and one of the test vector for PBKDF2, with an 80000
iteration count is known to be too costly. Therefore, this patch
changes gnutls_*_self_test to pick only the first test from the test
vectors, unless GNUTLS_SELF_TEST_FLAG_ALL is specified. The existing
test vectors have been reviewed and modified for the first element to
use the sane parameters, namely: aes128_gcm_vectors to use non-zero
key and non-empty AAD, aes256_gcm_vectors to use non-empty AAD, and
pbkdf2_sha256_vectors to use iteration count greater than 1.</p>
<ul dir="auto" style="text-align: initial; list-style-type: disc; margin: 0 0 1rem; padding: 0;">
<li style="margin-top: 0; line-height: 1.6em; margin-left: 25px; padding-left: 3px;">fips: run AES-256 self-tests with only a single mode</li>
</ul>
<p dir="auto" style="color: #3a383f; margin: 0 0 1rem;" align="initial">Previously we ran FIPS power-on self-tests for AES-256-CBC,
AES-256-GCM, AES-256-XTS, and AES-256-CFB8, though only one mode per
key size suffices according to FIPS 140-3 IG. This omits AES-256-CBC,
AES-256-XTS, and AES-256-CFB8, keeping AES-256-GCM for performance.</p>
<p dir="auto" style="color: #3a383f; margin: 0 0 1rem;" align="initial">Fixes: <a href="https://gitlab.com/gnutls/gnutls/-/issues/1577" data-reference-type="issue" data-original="#1577" data-link="false" data-link-reference="false" data-issue="152894035" data-project="179611" data-iid="1577" data-namespace-path="gnutls/gnutls" data-project-path="gnutls/gnutls" data-issue-type="issue" data-container="body" data-placement="top" title="Investigate the performance of FIPS self-tests" class="gfm gfm-issue" style="margin-top: 0;">#1577</a> <a href="https://gitlab.com/gnutls/gnutls/-/issues/1490" data-reference-type="issue" data-original="#1490" data-link="false" data-link-reference="false" data-issue="129947421" data-project="179611" data-iid="1490" data-namespace-path="gnutls/gnutls" data-project-path="gnutls/gnutls" data-issue-type="issue" data-container="body" data-placement="top" title="Run FIPS self-tests on-demand" class="gfm gfm-issue">#1490</a></p>
<h2 dir="auto" style="margin-top: 1.5rem; margin-bottom: 1rem; border-bottom-style: solid; border-bottom-color: #dcdcde; font-weight: 600; font-size: clamp(1.3125rem, 0.8680555556rem + 0.9259259259vw, 1.5625rem); letter-spacing: -0.01em; line-height: 1.25; color: #18171d; border-bottom-width: 1px; padding-bottom: 0.25rem;" align="initial">
<a href="#checklist" aria-hidden="true" class="anchor" id="user-content-checklist" style="margin-top: 0; float: left; margin-left: -20px; text-decoration: none; outline: none;"></a>Checklist</h2>
<ul class="task-list" dir="auto" style="text-align: initial; list-style-type: disc; margin: 0 0 1rem; padding: 0;">
<li class="task-list-item" style="margin-top: 0; line-height: 1.6em; margin-left: 25px; padding-left: 3px; list-style-type: none; position: relative; min-height: 22px; padding-inline-start: 28px; margin-inline-start: 0 !important;">
<task-button style="margin-top: 0;"></task-button><input type="checkbox" class="task-list-item-checkbox" checked disabled style="position: absolute; inset-inline-start: 8px; inset-block-start: 5px;"> Commits have <code style='font-size: 90%; color: #18171d; word-wrap: break-word; border-radius: .25rem; background-color: #ececef; font-family: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu 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;'>Signed-off-by:</code> with name/author being identical to the commit author</li>
<li class="task-list-item" style="line-height: 1.6em; margin-left: 25px; padding-left: 3px; list-style-type: none; position: relative; min-height: 22px; padding-inline-start: 28px; margin-inline-start: 0 !important;">
<task-button style="margin-top: 0;"></task-button><input type="checkbox" class="task-list-item-checkbox" disabled style="position: absolute; inset-inline-start: 8px; inset-block-start: 5px;"> Code modified for feature</li>
<li class="task-list-item" style="line-height: 1.6em; margin-left: 25px; padding-left: 3px; list-style-type: none; position: relative; min-height: 22px; padding-inline-start: 28px; margin-inline-start: 0 !important;">
<task-button style="margin-top: 0;"></task-button><input type="checkbox" class="task-list-item-checkbox" disabled style="position: absolute; inset-inline-start: 8px; inset-block-start: 5px;"> Test suite updated with functionality tests</li>
<li class="task-list-item" style="line-height: 1.6em; margin-left: 25px; padding-left: 3px; list-style-type: none; position: relative; min-height: 22px; padding-inline-start: 28px; margin-inline-start: 0 !important;">
<task-button style="margin-top: 0;"></task-button><input type="checkbox" class="task-list-item-checkbox" disabled style="position: absolute; inset-inline-start: 8px; inset-block-start: 5px;"> Test suite updated with negative tests</li>
<li class="task-list-item" style="line-height: 1.6em; margin-left: 25px; padding-left: 3px; list-style-type: none; position: relative; min-height: 22px; padding-inline-start: 28px; margin-inline-start: 0 !important;">
<task-button style="margin-top: 0;"></task-button><input type="checkbox" class="task-list-item-checkbox" disabled style="position: absolute; inset-inline-start: 8px; inset-block-start: 5px;"> Documentation updated / NEWS entry present (for non-trivial changes)</li>
<li class="task-list-item" style="line-height: 1.6em; margin-left: 25px; padding-left: 3px; list-style-type: none; position: relative; min-height: 22px; padding-inline-start: 28px; margin-inline-start: 0 !important;">
<task-button style="margin-top: 0;"></task-button><input type="checkbox" class="task-list-item-checkbox" disabled style="position: absolute; inset-inline-start: 8px; inset-block-start: 5px;"> CI timeout is 2h or higher (see Settings/CICD/General pipelines/Timeout)</li>
</ul>
<h2 dir="auto" style="margin-top: 1.5rem; margin-bottom: 1rem; border-bottom-style: solid; border-bottom-color: #dcdcde; font-weight: 600; font-size: clamp(1.3125rem, 0.8680555556rem + 0.9259259259vw, 1.5625rem); letter-spacing: -0.01em; line-height: 1.25; color: #18171d; border-bottom-width: 1px; padding-bottom: 0.25rem;" align="initial">
<a href="#reviewers-checklist" aria-hidden="true" class="anchor" id="user-content-reviewers-checklist" style="margin-top: 0; float: left; margin-left: -20px; text-decoration: none; outline: none;"></a>Reviewer's checklist:</h2>
<ul class="task-list" dir="auto" style="text-align: initial; list-style-type: disc; margin: 0; padding: 0;">
<li class="task-list-item" style="margin-top: 0; line-height: 1.6em; margin-left: 25px; padding-left: 3px; list-style-type: none; position: relative; min-height: 22px; padding-inline-start: 28px; margin-inline-start: 0 !important;">
<task-button style="margin-top: 0;"></task-button><input type="checkbox" class="task-list-item-checkbox" disabled style="position: absolute; inset-inline-start: 8px; inset-block-start: 5px;"> Any issues marked for closing are addressed</li>
<li class="task-list-item" style="line-height: 1.6em; margin-left: 25px; padding-left: 3px; list-style-type: none; position: relative; min-height: 22px; padding-inline-start: 28px; margin-inline-start: 0 !important;">
<task-button style="margin-top: 0;"></task-button><input type="checkbox" class="task-list-item-checkbox" disabled style="position: absolute; inset-inline-start: 8px; inset-block-start: 5px;"> There is a test suite reasonably covering new functionality or modifications</li>
<li class="task-list-item" style="line-height: 1.6em; margin-left: 25px; padding-left: 3px; list-style-type: none; position: relative; min-height: 22px; padding-inline-start: 28px; margin-inline-start: 0 !important;">
<task-button style="margin-top: 0;"></task-button><input type="checkbox" class="task-list-item-checkbox" disabled style="position: absolute; inset-inline-start: 8px; inset-block-start: 5px;"> Function naming, parameters, return values, types, etc., are consistent and according to <code style='font-size: 90%; color: #18171d; word-wrap: break-word; border-radius: .25rem; background-color: #ececef; font-family: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu 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;'>CONTRIBUTION.md</code>
</li>
<li class="task-list-item" style="line-height: 1.6em; margin-left: 25px; padding-left: 3px; list-style-type: none; position: relative; min-height: 22px; padding-inline-start: 28px; margin-inline-start: 0 !important;">
<task-button style="margin-top: 0;"></task-button><input type="checkbox" class="task-list-item-checkbox" disabled style="position: absolute; inset-inline-start: 8px; inset-block-start: 5px;"> This feature/change has adequate documentation added</li>
<li class="task-list-item" style="line-height: 1.6em; margin-left: 25px; padding-left: 3px; list-style-type: none; position: relative; min-height: 22px; padding-inline-start: 28px; margin-inline-start: 0 !important;">
<task-button style="margin-top: 0;"></task-button><input type="checkbox" class="task-list-item-checkbox" disabled style="position: absolute; inset-inline-start: 8px; inset-block-start: 5px;"> No obvious mistakes in the code</li>
</ul>
</div>
</div>
<div class="footer" style="margin-top: 10px;">
<p style="font-size: small; color: #626168;">
—
<br>
Reply to this email directly or <a href="https://gitlab.com/gnutls/gnutls/-/merge_requests/1907">view it on GitLab</a>.
<br>
You're receiving this email because of your account on <a target="_blank" rel="noopener noreferrer" href="https://gitlab.com">gitlab.com</a>. <a href="https://gitlab.com/-/sent_notifications/5f83f26b8218ce7301e2783d6f3fbddc/unsubscribe" target="_blank" rel="noopener noreferrer">Unsubscribe</a> from this thread · <a href="https://gitlab.com/-/profile/notifications" target="_blank" rel="noopener noreferrer" class="mng-notif-link">Manage all notifications</a> · <a href="https://gitlab.com/help" target="_blank" rel="noopener noreferrer" class="help-link">Help</a>
<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/1907"}}</script>
</p>
</div>
</body>
</html>