<div dir="ltr"><div>Hi,</div><div><br></div><div>Is it possible to make RSA signatures compatible between old and new crypto methods? I can't find a way how to do this. </div><div>Here's an example, run in R16B02:</div>
<div><br></div><div>crypto:start().</div><div><br></div><div>%% these two keys are valid RSA keypair</div><div>PrivateKey = [<<0,0,0,2,2,1>>,<<0,0,0,65,0,194,170,51,214,70,17,25,24,39,11,190,238,251,171,164,221,80,251,171,85,16,134,227,199,246,113,207,194,211,53,68,253,54,195,192,2,93,91,107,118,147,218,227,151,148,3,165,184,26,199,213,68,18,25,35,249,207,196,111,26,201,150,255,69>>,<<0,0,0,64,104,90,61,184,186,69,12,116,62,217,98,92,46,21,166,57,194,30,29,119,116,166,32,71,194,252,162,197,193,144,84,98,223,170,137,84,25,86,2,237,128,201,216,139,98,173,122,229,3,62,100,69,241,18,186,249,170,25,156,172,32,228,180,129>>].</div>
<div>PublicKey = [<<0,0,0,2,2,1>>,<<0,0,0,65,0,194,170,51,214,70,17,25,24,39,11,190,238,251,171,164,221,80,251,171,85,16,134,227,199,246,113,207,194,211,53,68,253,54,195,192,2,93,91,107,118,147,218,227,151,148,3,165,184,26,199,213,68,18,25,35,249,207,196,111,26,201,150,255,69>>].</div>
<div><br></div><div>SizedBinary = fun(Binary) -> <<(size(Binary)):32/integer, Binary/binary>> end.</div><div><br></div><div>Payload = <<"Launch the nukes.">>.</div><div><br></div><div>
Hash = crypto:sha(Payload).</div><div><br></div><div>%%signed with old method</div><div>Signature = crypto:rsa_sign(SizedBinary(Hash), PrivateKey).</div><div><br></div><div>%%verify with old method - returns true</div><div>
crypto:rsa_verify(SizedBinary(Hash), SizedBinary(Signature), PublicKey).</div><div><br></div><div>%%new method - returns false</div><div>crypto:verify(rsa, sha, {digest, Hash}, Signature, PublicKey). </div><div><br></div>
<div>%%another try of new method - throws an 'bad argument' exception</div><div>crypto:verify(rsa, sha, {digest, SizedBinary(Hash)}, SizedBinary(Signature), PublicKey).</div><div><br></div><div>%%new method yet again - returns false</div>
<div>crypto:verify(rsa, sha, {digest, Hash}, SizedBinary(Signature), PublicKey). </div></div>