<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html;
      charset=windows-1252">
  </head>
  <body>
    There isn't an easy a way to do what you want in 1.1.1. 
    RAND_set_rand_method replaces the RNG for all of OpenSSL.  In theory
    your RAND_METHOD could detect which thread it is running in and do
    different things for each.  I'm not sure this is a good idea
    however.<br>
    <br>
    Why aren't the random number from your first thread good enough for
    the second?  Good random numbers are just that - random.  It should
    be impossible to distinguish the two streams.<br>
    <br>
    In OpenSSL 3.0 there are ways to achieve what you're wanting.<br>
    <br>
    <br>
    Pauli<br>
    <br>
    <div class="moz-cite-prefix">On 2/4/21 4:24 pm, Vishwanath
      Mahajanshetty wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:DM6PR02MB522551D032F8D483A1354D38BB7A9@DM6PR02MB5225.namprd02.prod.outlook.com">
      <meta http-equiv="Content-Type" content="text/html;
        charset=windows-1252">
      <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:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}.MsoChpDefault
        {mso-style-type:export-only;}div.WordSection1
        {page:WordSection1;}</style>
      <div class="WordSection1">
        <p class="MsoNormal"><span lang="EN-US">Hi,<o:p></o:p></span></p>
        <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span lang="EN-US">I have some
            doubts/questions on how to use methods (for ex:
            RAND_set_rand_method) in multi threaded application which
            use OpenSSL. In my application (running on OpenSSL 1.1.1d)
            there are two threads which use OpenSSL, both threads
            perform very different operations. The issue I am facing is
            as below:<o:p></o:p></span></p>
        <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span lang="EN-US">Thread T1 calls
            RAND_set_rand_method() and sets RAND_METHOD structure. This
            is very specific to T1s use case. When thread T2 wants to
            create SSL_CTX it calls SSL_CTX_new() which then calls
            RAND_priv_bytes(). I am observing that the function
            RAND_priv_bytes() is calling the function set by T1 by
            RAND_METHOD in RAND_set_rand_method().<o:p></o:p></span></p>
        <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span lang="EN-US">Essentially RAND_METHOD
            function set by thread T1 are getting called by thread T2.<o:p></o:p></span></p>
        <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
        <p class="MsoNormal"><b><span lang="EN-US">Q1: I want to know is
              there any way to avoid this problem? I want thread T2 to
              call default RAND methods and avoid calling methods set by
              thread T1. This is not only for RAND methods, but for any
              other methods.<o:p></o:p></span></b></p>
        <p class="MsoNormal"><b><span lang="EN-US"><o:p> </o:p></span></b></p>
        <p class="MsoNormal"><span lang="EN-US">Q2: Also, is it possible
            to run OpenSSL as separate instance per thread (where each
            thread can do its own OpenSSL initialization) so that they
            can avoid above mentioned problem?<o:p></o:p></span></p>
        <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span lang="EN-US">Thank you,<o:p></o:p></span></p>
        <p class="MsoNormal"><span lang="EN-US">Vishwanath M</span></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
      </div>
    </blockquote>
    <br>
  </body>
</html>