<div dir="ltr">Hi All, <div><br></div><div>We upgraded our device to use OpenSSL 1.1.1k from OpenSSL 1.0.2h. Device is on an ARM processor. Embedded web server comes to ready state with compiler optimization set to -O0. </div><div>With value -O1 we are seeing issues in d2i_RSAPrivateKey. </div><div><br></div><div>I wrote a sample test program as below. The test program returns output of i2d_RSAPrivateKey as 1190 with optimization value -O0 and 1157 with optimization value -O1.</div><div><br></div><div>Has anyone faced this issue? Please let me know your thoughts and inputs.</div><div><br></div><div>Thanks and Regards,</div><div>Jayalakshmi</div><div><br></div><div>#define FALSE 0<br>#define ERROR -1<br>#define SSL_MAX_KEY_LEN 16342<br><br>#include <openssl/bio.h><br>#include <openssl/evp.h><br>#include <openssl/rsa.h><br>#include <openssl/err.h><br>#include <stdio.h><br>#include <string.h><br><br>int decodeBase64Data(char* base64Buf, char* decodeBuf, int dataLen, int bufLen, int  newlineFlag)<br>{<br>        BIO* bioBuf = NULL;      <br>        BIO* base64BioBuf = NULL;<br>        int returnVal = ERROR;   <br><br>        base64BioBuf = BIO_new(BIO_f_base64());<br>        if (base64BioBuf == NULL)<br>                return returnVal;<br><br>        if (newlineFlag == FALSE)<br>                BIO_set_flags(base64BioBuf, BIO_FLAGS_BASE64_NO_NL);<br><br>        bioBuf = BIO_new_mem_buf(base64Buf, dataLen);<br>        if (bioBuf == NULL)<br>                returnVal = ERROR;<br>        else<br>        {<br>                bioBuf = BIO_push(base64BioBuf, bioBuf);<br>                if (bioBuf != NULL)<br>                {<br>                        memset(decodeBuf, 0x0, bufLen);<br>                        dataLen = BIO_read(base64BioBuf,decodeBuf, bufLen);<br>                        returnVal = dataLen;<br>                } else  {<br>                        returnVal = ERROR;<br>                }<br>        }<br><br>        BIO_free_all(base64BioBuf);<br>        return returnVal;<br>}<br><br></div><div><br></div><div> void testCertKey()<br></div><div>{<br><br>        int IDkeyLen;<br>        unsigned char *certBuf          = NULL;<br>        int certLen                             = 1624;<br>        int i;<br>        unsigned char *cert_copy        = NULL;<br>        EVP_PKEY *evp_key               = NULL;<br>        RSA *rsa                                   = NULL;<br>        unsigned char *IDkey               = (unsigned char*)malloc(SSL_MAX_KEY_LEN);<br>        certBuf                                      = (unsigned char*)malloc(SSL_MAX_KEY_LEN);<br>        strcpy(certBuf,"MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDJgN8Eq1gAd4ev8lq/Dwz68CBYWLyVQvQcAfTgR6PTsMCUL00q3NdEBXzkPEAG/15+IEEEypjO+SgJcmaHtsDk/oP7ggrOWu/7kj+x3RNcVotvOtJK1QdXUSViOgaldoJdtKSY2Y8RPFwcMWiqMM22JYCC7JDpSbAs4MwCiixTZogtwFiXQeCG3/v/qHt1MEQ4Fv821a9RVLwZ4MooSVy5KvIxt7qOZ+NKOBzin0FS/DF/79fPcbptg56Jv0J40l2xWgiPnRCmbz4TXrrChPGgXDhA2rUNZDLW+NUl7oRbqn4FwOWHGzn6a/27xiT+wmW+A1wRTi2V+u0AmFhGK79LAgMBAAECggEANFiPFwZwAQcML6/01QdS5ul0bZ73torDIXd8prrVm0uia5xyHn1qSphmXmAsfeTfJkK4wUbkNXhSZ0nZys22BIb9wFuC9SJ4j1DpzQnSWr180XNlZ905X/yLip3qVheYPEGONMrnuKGGiChpuTSebAAIB3rvFjt3UeE//jTo2O0moBuQZXWjsk8AcynTnJAcKJqSBtCCLPyS3dIVsGoaDCsAeZKQ5ZaTLxZ9vT3KbWrJi3+whU9Cx4HXRDe910Gq3E4cXjzhlDmxOPKVlGLX2cXWN4OhtRoXu7A3kUGxG/ZXxwYoXO8M5EoBA30LbUT7XpO9Lxzx+2hEBuYSHbA0qQKBgQDxYeptkl/XRP+vPxRRXtyANqm+iTpkOILv7PBMkEgJGOA8491GiylKpnF7KEmDhS2eSpsq7sDRg9ZuhPHMwkyouojUcVHvfNdXEbC2xYz0cIvzgqRCYhhWJGATdDq3Bt80GX6RX5hRO8EhJdFqP8uIG/cd2x2C113M70vshlBpHQKBgQDVtLip//7YGmTxOKhkZMr+9Csgct18LzKqkARciRtg2rlHTUveNvLcGXkev0JNzrDc8a1U2lGbFhXr8lo3s5zRCb+0rU3LNgZPaW+a9Qm6kJwL0uP0BNfL1Go+hZSrq1LVZdyo4oRHtiiA/WCqDOxrsQH5/gqEdLCH+AFbf5XFhwKBgAncGwxQv1N2wQ7yf6z3OACQuwxKZLU1TbvpLMOj3R1qA7bZA+/evVgMRnRmZ+JUbVGa8I2nZP7p6Ldo/MuFYEZAIFi1LEihC9bFpTdCCIjvk/flbTo88YuLPtVsmP1i7XkeVXowsnMXAsOM3On/IxwzMDvq+GCg1XcKi0plDiHNAoGATCMv63lGHU4CCqMJ84Kpg/4P42apHFZgcb4Pn7xFYdNrUUjrr8bZ7aqxqU+w2rG5922vOFzz2BIdS0uz8sZuJ1eW0lMwNScRRnelCIsmpS5iOiAvkL+s9nS+SXokBqlqQJci75SMVlRCx/n913f1P0T4FE37B0ffoQGt0iB5hr8CgYA5UpOkFs8rDu0xAQCqD3I2Yg35f77ATK2F3ZWdJOi7KnO67uz39QIYHao9iwJW1u6UXgAs18DAjmdd8EQSvr1ayhdSMfFnt/AWM0QbMIOrhytEd2KD7rPPeeZSFeCACFO9tPXasTVxPmiV0YhZueMAgwnmi3CLwm3pg8PF+3T5gQ==");<br><br>        IDkeyLen  = decodeBase64Data(certBuf, IDkey, certLen, SSL_MAX_KEY_LEN, FALSE);<br><br></div><div>        cert_copy = IDkey;<br>        evp_key = d2i_AutoPrivateKey(NULL,&cert_copy,IDkeyLen);<br> </div><div>       if (evp_key == NULL)<br>        {<br>                printf("OpenSSL11k %d, %d, %s\n",IDkeyLen,ERR_get_error(),ERR_error_string(ERR_get_error(), NULL));<br>        }<br>        else<br>        {<br>                cert_copy = IDkey;<br>                rsa = EVP_PKEY_get1_RSA(evp_key); /*JEDI-11535 */<br>                IDkeyLen = i2d_RSAPrivateKey(rsa,&cert_copy);<br>                printf("OpenSSL11k: IDkeyLen %d %d \n",IDkeyLen,__LINE__);<br>        }      <br></div><div>}</div><div><br></div><div>int main()</div><div>{</div><div>     testCertKey();</div>}</div>