<div dir="ltr"><p style="margin-top:0px;margin-bottom:0px;color:rgb(0,0,0)"><font face="tahoma, sans-serif"><span style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt"><br class="gmail-Apple-interchange-newline">Hi All,</span></font></p><p style="margin-top:0px;margin-bottom:0px;color:rgb(0,0,0)"><font face="tahoma, sans-serif"><span style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt">I have few queries on how to implement custom engine ECDH ec set_group method and it's return value. Any inputs are highly appreciated.</span></font></p><p style="margin-top:0px;margin-bottom:0px;color:rgb(0,0,0)"><font face="tahoma, sans-serif"><br></font></p><p style="margin-top:0px;margin-bottom:0px;color:rgb(0,0,0)"><font face="tahoma, sans-serif"><span style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt">While setting engine group,currently always default group is set.</span></font></p><p style="margin-top:0px;margin-bottom:0px;color:rgb(0,0,0)"><font face="tahoma, sans-serif"><br></font></p><p style="margin-top:0px;margin-bottom:0px;color:rgb(0,0,0)"></p><div><font face="tahoma, sans-serif"><span style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt">int EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group)</span></font></div><div><font face="tahoma, sans-serif"><span style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt"> {</span></font></div><div><font face="tahoma, sans-serif"><span style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt">     if (key->meth->set_group != NULL && key->meth->set_group(key, group) == 0) </span><b><span style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt">  </span><span style="background-color:rgb(255,255,0);font-family:Calibri,Helvetica,sans-serif;font-size:12pt">#Const object & pass by value,whatever the value set by custom engine is not reflected in the group object</span><span style="background-color:rgb(255,255,0);font-family:Calibri,Helvetica,sans-serif;font-size:12pt"> </span></b></font></div><div><font face="tahoma, sans-serif"><span style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt">         return 0;</span></font></div><div><font face="tahoma, sans-serif"><span style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt">     EC_GROUP_free(key->group);</span><span style="background-color:rgb(255,255,0)"><b><span style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt">#</span><span style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt">Freeing the key->group.</span></b></span></font></div><div><font face="tahoma, sans-serif"><span style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt">     key->group = EC_GROUP_dup(group); </span><span style="background-color:rgb(255,255,0)"><b><span style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt">#</span><span style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt">Assigning the same </span></b></span><span style="background-color:rgb(255,255,0)"><b><span style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt">group object</span></b></span></font></div><div><font face="tahoma, sans-serif"><span style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt">     return (key->group == NULL) ? 0 : 1;  </span></font></div><div><font face="tahoma, sans-serif"><span style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt"> }</span></font></div><div><br></div><div><font face="tahoma, sans-serif"><span style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt">Below is my engine set_group code.</span></font></div><p style="margin-top:0px;margin-bottom:0px"></p><p style="margin-top:0px;margin-bottom:0px;color:rgb(0,0,0)"><span style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt">int my_engine_set_group(EC_KEY *key, const EC_GROUP *grp)</span><br></p><p style="margin-top:0px;margin-bottom:0px;color:rgb(0,0,0)"><font face="tahoma, sans-serif"><span style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt">{</span></font></p><p style="margin-top:0px;margin-bottom:0px;color:rgb(0,0,0)"><font face="tahoma, sans-serif"><span style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt">      if(grp->curve_name==P256</span><span style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt">) </span></font></p><p style="margin-top:0px;margin-bottom:0px;color:rgb(0,0,0)"><font face="tahoma, sans-serif"><span style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt">          key->group = get_custom_group();</span></font></p><p style="margin-top:0px;margin-bottom:0px;color:rgb(0,0,0)"><span style="background-color:rgb(255,255,0);font-size:12pt;font-family:Calibri,Helvetica,sans-serif">    #<b>What should be the  return value for supported and non supported curves ?</b></span></p><p style="margin-top:0px;margin-bottom:0px;color:rgb(0,0,0)"><font face="tahoma, sans-serif"><span style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt">        return 1; </span></font></p><p style="margin-top:0px;margin-bottom:0px;color:rgb(0,0,0)"><font face="tahoma, sans-serif"><span style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt">       else #Other curves such as P384,P521</span></font></p><p style="margin-top:0px;margin-bottom:0px;color:rgb(0,0,0)"><font face="tahoma, sans-serif"><span style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt">         return 0;     </span></font></p><p style="margin-top:0px;margin-bottom:0px;color:rgb(0,0,0)"><font face="tahoma, sans-serif"><span style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt">}</span></font></p><p style="margin-top:0px;margin-bottom:0px;color:rgb(0,0,0)"><br></p><p style="margin-top:0px;margin-bottom:0px;color:rgb(0,0,0)"><font face="tahoma, sans-serif"><span style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt">Regards</span><br></font></p><p style="margin-top:0px;margin-bottom:0px;color:rgb(0,0,0)"><br class="gmail-Apple-interchange-newline"></p></div>