Hi All,

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.
With value -O1 we are seeing issues in d2i_RSAPrivateKey.

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.

Has anyone faced this issue? Please let me know your thoughts and inputs.

Thanks and Regards,
Jayalakshmi

#define FALSE 0
#define ERROR -1
#define SSL_MAX_KEY_LEN 16342

#include <openssl/bio.h>
#include <openssl/evp.h>
#include <openssl/rsa.h>
#include <openssl/err.h>
#include <stdio.h>
#include <string.h>

int decodeBase64Data(char* base64Buf, char* decodeBuf, int dataLen, int
bufLen, int  newlineFlag)
{
        BIO* bioBuf = NULL;
        BIO* base64BioBuf = NULL;
        int returnVal = ERROR;

        base64BioBuf = BIO_new(BIO_f_base64());
        if (base64BioBuf == NULL)
                return returnVal;

        if (newlineFlag == FALSE)
                BIO_set_flags(base64BioBuf, BIO_FLAGS_BASE64_NO_NL);

        bioBuf = BIO_new_mem_buf(base64Buf, dataLen);
        if (bioBuf == NULL)
                returnVal = ERROR;
        else
        {
                bioBuf = BIO_push(base64BioBuf, bioBuf);
                if (bioBuf != NULL)
                {
                        memset(decodeBuf, 0x0, bufLen);
                        dataLen = BIO_read(base64BioBuf,decodeBuf, bufLen);
                        returnVal = dataLen;
                } else  {
                        returnVal = ERROR;
                }
        }

        BIO_free_all(base64BioBuf);
        return returnVal;
}


 void testCertKey()
{

        int IDkeyLen;
        unsigned char *certBuf          = NULL;
        int certLen                             = 1624;
        int i;
        unsigned char *cert_copy        = NULL;
        EVP_PKEY *evp_key               = NULL;
        RSA *rsa                                   = NULL;
        unsigned char *IDkey               = (unsigned
char*)malloc(SSL_MAX_KEY_LEN);
        certBuf                                      = (unsigned
char*)malloc(SSL_MAX_KEY_LEN);

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==");

        IDkeyLen  = decodeBase64Data(certBuf, IDkey, certLen,
SSL_MAX_KEY_LEN, FALSE);

        cert_copy = IDkey;
        evp_key = d2i_AutoPrivateKey(NULL,&cert_copy,IDkeyLen);

       if (evp_key == NULL)
        {
                printf("OpenSSL11k %d, %d,
%s\n",IDkeyLen,ERR_get_error(),ERR_error_string(ERR_get_error(), NULL));
        }
        else
        {
                cert_copy = IDkey;
                rsa = EVP_PKEY_get1_RSA(evp_key); /*JEDI-11535 */
                IDkeyLen = i2d_RSAPrivateKey(rsa,&cert_copy);
                printf("OpenSSL11k: IDkeyLen %d %d \n",IDkeyLen,__LINE__);
        }
}

int main()
{
     testCertKey();
}

Reply via email to