OS: Linux (SUSE 10.2 32-bit)
OpenSSL: 0.9.8g
Hi,
when I'm trying to peform multiplication
using code below, BN_GF2m_mod_mul() hangs and
CPU usage goes to 100%.
Do I miss something obvious ? Parameters are validated
using NTL library.
Thanks for any help,
Roman
/******************************************************************************/
#include <stdio.h>
#include "openssl/bn.h"
void printbytes(unsigned char *buf, int len)
{
int i = 0;
for(i = 0; i < len; i++)
printf("%02X ", buf[i]);
}
int main(int argc, char *argv[])
{
BN_CTX *ctx;
BIGNUM *a,*b, *c, *m, *p;
int status = 0;
unsigned char buf[32] = {0};
/* modulus */
unsigned char buf_m[] = {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x87};
/* a */
unsigned char buf_a[] = {0x33, 0x2E, 0xA3, 0xDE, 0x11, 0x43, 0x33, 0x01,
0x5E, 0x5F, 0xBA, 0x73, 0x97, 0xF0, 0x12, 0x92};
/* b */
unsigned char buf_b[] = {0x1E, 0x99, 0x12, 0xB3, 0x46, 0x44, 0x12, 0xCE,
0x4E, 0xF9, 0xAD, 0x8D, 0xE7, 0x7C, 0xE4, 0x65};
/* a * b mod m */
unsigned char buf_p[] = {0xEE, 0x93, 0x95, 0x84, 0xA5, 0xC2, 0x02, 0xC1,
0x9C, 0xC0, 0xC6, 0xA5, 0xE1, 0xE6, 0x1E, 0x89};
a=BN_new();
b=BN_new();
c=BN_new();
m=BN_new();
p=BN_new();
ctx=BN_CTX_new();
if (ctx == NULL)
return -1;
printf(" - m\n");
BN_bin2bn(buf_m, sizeof(buf_m), m);
status = BN_bn2bin(m, buf);
printf(" BN_bn2bin: %d\n", status);
printf(" m: \n"); printbytes(buf, BN_num_bytes(m)); printf("\n");
printf(" - a\n");
BN_bin2bn(buf_a, sizeof(buf_a), a);
status = BN_bn2bin(a, buf);
printf(" BN_bn2bin: %d\n", status);
printf(" a: \n"); printbytes(buf, BN_num_bytes(a)); printf("\n");
printf(" - b\n");
BN_bin2bn(buf_b, sizeof(buf_b), b);
status = BN_bn2bin(b, buf);
printf(" BN_bn2bin: %d\n", status);
printf(" a: \n"); printbytes(buf, BN_num_bytes(b)); printf("\n");
printf(" - expected a*b mod m\n");
BN_bin2bn(buf_p, sizeof(buf_p), p);
status = BN_bn2bin(p, buf);
printf(" BN_bn2bin: %d\n", status);
printf(" p: \n"); printbytes(buf, BN_num_bytes(p)); printf("\n");
printf("- c = a*b mod m\n");
status = BN_GF2m_mod_mul(c, a, b, m, ctx);
printf(" BN_GF2m_mod_mul(c, a, b, m): %d\n", status);
status = BN_bn2bin(c, buf);
printf(" BN_bn2bin: %d\n", status);
printf(" a*b mod m= \n"); printbytes(buf, BN_num_bytes(c)); printf("\n");
if(!BN_cmp(c, p))
printf(" OK\n");
else
printf(" ??\n");
BN_free(a);
BN_free(b);
BN_free(c);
BN_free(m);
BN_free(p);
return 0;
}
/******************************************************************************/
______________________________________________________________________
OpenSSL Project http://www.openssl.org
User Support Mailing List openssl-users@openssl.org
Automated List Manager [EMAIL PROTECTED]