On 08/06/18 11:29, Sangsub wrote: > char buf[2] = {0,}; > memcpy(buf, pStr, sizeof(buf)); > > out[i] = (unsigned char)strtol(buf, NULL, 16); This looks wrong. "buf" is not NUL terminated so strtol could give an incorrect result. > // 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); The function is converting from a hex string to binary data so I find it confusingly named. But it seems to be doing the right thing AFAICT aside from the issue I noted above, although I haven't tested it. > 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); PEM_read_bio_RSAPublicKey() expects a PEM encoded string which is what is contained in your raw_data buffer. It is incorrect to call fnStr2Hex() on it first - this will cause it to fail. As I mentioned in my previous email you should be using PEM_read_RSA_PUBKEY() instead (or PEM_read_bio_RSA_PUBKEY() etc). If you use the "non bio" version there is no need to create the mem BIO first. It will just read directly from your memory buffer. Matt -- openssl-users mailing list To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-users