openssl RSA_public_decrypt ion在x86和arm中有不同的结果

时间:2013-12-02 03:45:16

标签: gcc openssl

我的程序中嵌入的相同公钥作为char数组,在x86(256字节)和从RSA_size()返回的ARM926(252字节)中获得不同的密钥大小。 256是预期的,并且在x86上确实运行良好,当然在调用RSA_public_decryption()时在ARM中失败,如下所示。

unsigned char pubkbuf[] = 
"-----BEGIN PUBLIC KEY-----\n"
"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1E+0NuRsVNULh3SFsTvV\n"
"7vFrDs97YvrCFvLc01ZTE79CW8LokGoYhQUwhM+nuD4+JlpozTwVCNHOfp31thrt\n"
"vAwKmGLIi2UpGUJktTCHcB8lcP0xMY8+Q1Z/l4N5LP7LvHozXrlws8dEtOvJiPez\n"
"pQCuBoKl6Xpr8tHHiLiALaXueWhJ7xxuyZZUyk8xWbQufiqXz+MFJImLHQOyC9zc\n"
"W64QG0lu4QqLBOA/QzuuIbdZqPcydH+pW1GWBuPEVBe3nxooTSBl+R0xHZPzGCdq\n"
"GhecCciJLFtt8/C+05teXDWCPBSqJqZv47l1zEIiqjKWJ5k8A9yx76+EpcGN1Cx9\n"
"CQIDAQAB\n"
"-----END PUBLIC KEY-----\n"
;

int ksz = sizeof (pubkbuf);

bio = BIO_new_mem_buf (pubkbuf,ksz);

RSA* rsapubkey = RSA_new();

PEM_read_bio_RSA_PUBKEY(bio, &rsapubkey, NULL, NULL);

dump_buffer_hex (rsapubkey,272);

printf("key size= %d\n", (RSA_size(rsapubkey));

hdrbuf = (unsigned char*) malloc (RSA_size(rsapubkey));

hdrsz = RSA_public_decrypt (sigsz, sigbuf,
                            hdrbuf,
                            rsapubkey,
                            RSA_PKCS1_PADDING);

尝试过不同版本的编译器,gcc-4.1 / gcc-4.7(带/不带-m32 x86)和不同版本的libcrypto,libssl(x86中的32位和64位)。都得到了相同的结果。需要你的帮助来解决问题。

1 个答案:

答案 0 :(得分:1)

添加一些缺少的括号,我在mac上以32位模式获得256字节,在64位模式下获得segfault。

我发现添加了

#include <openssl/pem.h>

修复了段错误并得到了256.令人惊讶!

起初我怀疑你使用sizeof(pubkbuf)计算的额外空字节(你可以将-1传递给BIO_new_mem_buf以让它为你做strlen)。然后我想也许你应该使用PEM_read_bio_RSA_PUBKEY的返回值而不是第二个arg,虽然我无法在任何地方找到任何doco。

所以#include是我最好的猜测。

OpenSSL看起来像是一桶笑声。