<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>