function [steps] = bgiant(a, b, N, s); %use: bgiant(a, b, N,s), baby step-giant step algorithm %(c) 1999, Oguz Yetkin, CS638 (Cryptography) xzero=0:s-1; xonerange=(N/s)-mod((N/s),1) %xonerange=N; xone=0:xonerange; lhs=mod(a*xzero,N); rhs=(b-a*xone*s); rhs=mod(rhs, N); lhs=sort(lhs) rhs=sort(rhs) %for i=1:s for i=s:-1:1 %for j=1:xonerange for j=xonerange:-1:1 if(lhs(i)==rhs(j)) fprintf('x=%d\n',xzero(i)); fprintf('steps=%d\n',i*j); steps=i*j; return ; end end end fprintf('found nothing'); steps=-1; return