www.pudn.com > miracl.zip > BRICK.C


/* 
 *   Test program to implement Brickell et al's method for fast 
 *   computation of g^x mod n, for fixed g and n, using precomputation.  
 *   This idea can be used to substantially speed up certain phases  
 *   of the Digital Signature Standard (DSS). 
 * 
 *   See "Fast Exponentiation with Precomputation" 
 *   by E. Brickell et al. in Proceedings Eurocrypt 1992 
 * 
 *   Copyright (c) 1988-1997 Shamus Software Ltd. 
 */ 
 
#include  
#include  
 
int main() 
{ 
    FILE *fp;  
    big e,n,g,a; 
    brick binst; 
    int i,d,ndig,nb,best,time,store,base,bits; 
    miracl *mip=mirsys(100,0); 
    n=mirvar(0); 
    e=mirvar(0); 
    a=mirvar(0); 
    g=mirvar(0); 
    fp=fopen("common.dss","r"); 
    fscanf(fp,"%d\n",&bits); 
    mip->IOBASE=16; 
    cinnum(n,fp); 
    cinnum(g,fp); 
    cinnum(g,fp);   
    mip->IOBASE=10;   
 
    printf("modulus is %d bits in length\n",logb2(n)); 
    printf("Enter size of exponent in bits = "); 
    scanf("%d",&nb); 
    getchar(); 
 
    brick_init(&binst,g,n,nb); 
 
    printf("%d big numbers have been precomputed and stored\n",binst.store); 
    printf("Using base %d\n",binst.base); 
 
    bigdig(nb,2,e);  /* random exponent */   
 
    printf("naive method\n"); 
    powmod(g,e,n,a); 
    cotnum(a,stdout); 
 
    printf("Brickel et al method\n"); 
    pow_brick(&binst,e,a); 
 
    brick_end(&binst); 
     
    cotnum(a,stdout); 
 
    return 0; 
}