break;
}
case 0x3b:
- MonInit(132); // or 66*wordsize ?
- MonMul(B,A,B);
+ if(!l) l=wordsize;
+ MonInit(wordsize*60+4*l);
+ I.GetLE(data,l<<3);
+ MonMul(B,I,B);
break;
case 0x3e:
{
DoMap(f,tmp,-((Get(0x48)<<16)|(Get(0x49)<<8)|Get(0x4a)));
AddCycles(MapCycles());
break;
+ case 0x3b:
+ size=Get(0x48); if(!size) size=wordsize;
+ GetMem(HILO(0x44),tmp,size<<3,0);
+ DoMap(f,tmp,size);
+ break;
case 0x3e:
GetMem(HILO(0x44),tmp,size,0);
DoMap(f,tmp,Get(0x48));
void cMapCore::MonMul(BIGNUM *o, BIGNUM *a, BIGNUM *b, BIGNUM *c, BIGNUM *d, BIGNUM *j)
{
- int words=(BN_num_bytes(d)+7)>>3;
+ int words=(BN_num_bytes(a)+7)>>3;
BN_zero(s);
for(int i=0; i<words;) {
BN_rshift(x,a,(i++)<<6);