<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
Have you considered using the provided for this:
OSSL_PROVIDER_self_test()?<br>
<a class="moz-txt-link-freetext" href="https://www.openssl.org/docs/man3.0/man3/OSSL_PROVIDER.html">https://www.openssl.org/docs/man3.0/man3/OSSL_PROVIDER.html</a><br>
<br>
Pauli<br>
<br>
<div class="moz-cite-prefix">On 8/2/22 17:41, Gahlot, Ashish Kumar
wrote:<br>
</div>
<blockquote type="cite"
cite="mid:MW4PR03MB664909062F3F0EFF271BFC71DB2D9@MW4PR03MB6649.namprd03.prod.outlook.com">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="Generator" content="Microsoft Word 15 (filtered
medium)">
<style>@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}a:link, span.MsoHyperlink
{mso-style-priority:99;
color:#0563C1;
text-decoration:underline;}span.EmailStyle17
{mso-style-type:personal-compose;
font-family:"Calibri",sans-serif;
color:windowtext;}.MsoChpDefault
{mso-style-type:export-only;
font-family:"Calibri",sans-serif;}div.WordSection1
{page:WordSection1;}</style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
<div class="WordSection1">
<p class="MsoNormal">Hello All,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I’m trying to execute self-tests that FIPS
runs after installation manually by calling the APIs. I’m
using code from
<a
href="https://github.com/openssl/openssl/blob/7cce994d3e57345ba729388b9321d9bf8b661b4f/providers/fips/self_test_kats.c"
moz-do-not-send="true" class="moz-txt-link-freetext">
https://github.com/openssl/openssl/blob/7cce994d3e57345ba729388b9321d9bf8b661b4f/providers/fips/self_test_kats.c</a>
but I’m getting NULL when I’m trying to fetch the encryption
algorithm. Is there a way to perform self-tests that FIPS runs
after installation because I did not find any code in
fipsinstall.c where it is directly calling the APIs.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">int self_test_digest(const ST_KAT_DIGEST
*t, OSSL_SELF_TEST *st, OSSL_LIB_CTX *libctx)<o:p></o:p></p>
<p class="MsoNormal">{<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> int ok = 0;<o:p></o:p></p>
<p class="MsoNormal"> unsigned char out[EVP_MAX_MD_SIZE];<o:p></o:p></p>
<p class="MsoNormal"> unsigned int out_len = 0;<o:p></o:p></p>
<p class="MsoNormal"> EVP_MD_CTX *ctx = EVP_MD_CTX_new();<o:p></o:p></p>
<p class="MsoNormal"> EVP_MD *md = EVP_MD_fetch(libctx,
t->algorithm, NULL);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> OSSL_SELF_TEST_onbegin(st,
OSSL_SELF_TEST_TYPE_KAT_DIGEST, t->desc);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> if (ctx == NULL)<o:p></o:p></p>
<p class="MsoNormal"> {syslog(LOG_NOTICE, "ctx NULL"); goto
err;}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> if (md == NULL)<o:p></o:p></p>
<p class="MsoNormal"> {syslog(LOG_NOTICE, "md is NULL"); goto
err;} // <------------------- This is getting failed!<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> if (!EVP_DigestInit_ex(ctx, md, NULL))<o:p></o:p></p>
<p class="MsoNormal"> {syslog(LOG_NOTICE, "digest failed");
goto err;}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> if (!EVP_DigestUpdate(ctx, sha1_pt,
t->pt_len))<o:p></o:p></p>
<p class="MsoNormal"> {syslog(LOG_NOTICE, "digest update
failed"); goto err;}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> if (!EVP_DigestFinal(ctx, out,
&out_len))<o:p></o:p></p>
<p class="MsoNormal"> {syslog(LOG_NOTICE, "digest final
failed"); goto err;}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> /* Optional corruption */<o:p></o:p></p>
<p class="MsoNormal"> OSSL_SELF_TEST_oncorrupt_byte(st, out);<o:p></o:p></p>
<p class="MsoNormal"> for (int i=0; i <
(int)t->expected_len; i++)<o:p></o:p></p>
<p class="MsoNormal"> {syslog(LOG_NOTICE, "%x", out[i]);}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> if (out_len != t->expected_len<o:p></o:p></p>
<p class="MsoNormal"> || memcmp(out, sha1_digest,
out_len) != 0)<o:p></o:p></p>
<p class="MsoNormal"> goto err;<o:p></o:p></p>
<p class="MsoNormal"> ok = 1;<o:p></o:p></p>
<p class="MsoNormal">err:<o:p></o:p></p>
<p class="MsoNormal"> EVP_MD_free(md);<o:p></o:p></p>
<p class="MsoNormal"> EVP_MD_CTX_free(ctx);<o:p></o:p></p>
<p class="MsoNormal"> OSSL_SELF_TEST_onend(st, ok);<o:p></o:p></p>
<p class="MsoNormal"> return ok;<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">static int self_test_digests(OSSL_LIB_CTX
*libctx)<o:p></o:p></p>
<p class="MsoNormal">{<o:p></o:p></p>
<p class="MsoNormal"> OSSL_SELF_TEST *st = NULL;<o:p></o:p></p>
<p class="MsoNormal"> st = OSSL_SELF_TEST_new(SelfTestCb,
NULL);<o:p></o:p></p>
<p class="MsoNormal"> if (st == NULL)<o:p></o:p></p>
<p class="MsoNormal"> syslog(LOG_NOTICE,
"OSSL_SELF_TEST_new failed");<o:p></o:p></p>
<p class="MsoNormal"> int i, ret = 1;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> for (i = 0; i <
(int)OSSL_NELEM(st_kat_digest_tests); ++i) {<o:p></o:p></p>
<p class="MsoNormal"> if
(!self_test_digest(&st_kat_digest_tests[i], st, libctx))<o:p></o:p></p>
<p class="MsoNormal"> ret = 0;<o:p></o:p></p>
<p class="MsoNormal"> }<o:p></o:p></p>
<p class="MsoNormal"> return ret;<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">if
(!EVP_default_properties_enable_fips(libctx,1))<o:p></o:p></p>
<p class="MsoNormal">{<o:p></o:p></p>
<p class="MsoNormal"> ...<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">self_test_digests(libctx);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
<p class="MsoNormal">Ashish<o:p></o:p></p>
</div>
<br clear="all">
Notice: This e-mail together with any attachments may contain
information of Ribbon Communications Inc. and its Affiliates that
is confidential and/or proprietary for the sole use of the
intended recipient. Any review, disclosure, reliance or
distribution by others or forwarding without express permission is
strictly prohibited. If you are not the intended recipient, please
notify the sender immediately and then delete all copies,
including any attachments.<br>
</blockquote>
<br>
</body>
</html>