Thanks Matt for your reply. The purpose I am doing this is to find the modulus and exponent in the RSA public key. My sample code and the current results are shown below. ========================================================= void fnStr2Hex(char* out, char* in) { int data_len = strlen(in); char * pStr = in; int i; for(i=0; i<data_len/2; i++) { char buf[2] = {0,}; memcpy(buf, pStr, sizeof(buf)); out[i] = (unsigned char)strtol(buf, NULL, 16); // need to check strol 2nd arguments... for error checking.. printf("i:%d, pArr[i]:%02X \n", i, out[i]); pStr+=2; } } int main() { char raw_data[] = "30819F300D06092A864886F70D010101050003818D0030818902818100AA18ABA43B50DEEF38598FAF87D2AB634E4571C130A9BCA7B878267414FAAB8B471BD8965F5C9FC3818485EAF529C26246F3055064A8DE19C8C338BE5496CBAEB059DC0B358143B44A35449EB264113121A455BD7FDE3FAC919E94B56FB9BB4F651CDB23EAD439D6CD523EB08191E75B35FD13A7419B3090F24787BD4F4E19670203010001"; int data_len = strlen(raw_data); // Q) I think this is the problem. How many lengths should I allocate? unsigned char * pArr = (unsigned char *)malloc(data_len); memset(pArr, 0x00, data_len); // raw_data is a string. Not in hex state. So I changed the contents of raw_data [] to hex in pArr. // The implementation of this function is above main function. fnStr2Hex(pArr, raw_data); STDout=BIO_new_fp(stdout,BIO_NOCLOSE); pub_rsa=d2i_RSAPublicKey(NULL,&pArr,(long)data_len); if(pub_rsa == NULL) { printf("error : failed d2i_RSAPublicKey \n"); return -1; } BN_print(STDout,pub_rsa->n); // print modulus bignum BN_print(STDout,pub_rsa->e); // print exponent bignum return 0; } result : error : failed d2i_RSAPublicKey I wrote the above, but I think data_len is the problem. I do not know how much size I should enter. And do I have to enter the string source without the string to hex in the d2i_RSAPublicKey function? And you said you need prefix and postfix to do PEM format. Is raw_data [] as shown below? raw_data[] = { "-----BEGIN PUBLIC KEY-----"\ "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAirjFSROMxZ9gW1AmX2ns"\ "O4zjs+mvXhdNJs/iQmUBBL6gUQEYlnbHopLMa1rnGeEZ46wp6dOtna3NpJby9xhf"\ "nAxIcqLbEk8BmSsjjoP9WC2KKQ8pc/nPdE8eU/iqU6IlwSKZscw2WPtgfLWrpXmD"\ "LWwmh/cTAKTfPfHBQH4X0ipcGcgw7QxYJAcjCaYSuz5PsznyW7vP4pmfQ0IRBkmr"\ "rF9L/qKlnNOMFzl5pnmv3Iuqy06H61Cs+AbPt0B1BL2sEQz7y5nAQicDHhRrnzuD"\ "d8hwNWkDCfrphy4se5PoN1/M3rxPmL4dV0JpxROkNZT2uIYfdGSDKumeus6uD8w6"\ "xQIDAQAB"\ "-----END PUBLIC KEY----- " After that, I coded as follows. int data_len = strlen(raw_data); BIO *bufio = NULL; RSA *pub_rsa = NULL; unsigned char * pArr = (unsigned char *)malloc(data_len); memset(pArr, 0x00, data_len); fnStr2Hex(pArr, raw_data); // for converting hex bufio = BIO_new_mem_buf((void*)pArr, data_len); if(bufio == NULL) { printf("Error (1) \n"); return -1; } PEM_read_bio_RSAPublicKey(bufio, &pub_rsa, 0, NULL); if(pub_rsa == NULL) { printf("Error (2) \n"); return -1; } } // end of main When I execute the above code, Error (2) is output. I want to be helped with the above two (DER, PEM) situations. Again, I want to find the modulus and public exponent in the RSA public key. BR, -- Sent from: http://openssl.6102.n7.nabble.com/OpenSSL-User-f3.html -- openssl-users mailing list To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-users