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]

Reply via email to