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