--- /dev/null
+function [ret mat] = babgiatstep(y,base,group)\r
+%% Step 1\r
+n = group-1;\r
+m = floor(sqrt(n));\r
+L1 = [0:m-1];\r
+L2 = mod(base.^L1,group);\r
+L = [ L2' L1'];\r
+h=mod(invA(base,group)^m,group);\r
+i=0;\r
+%% Step 2\r
+\r
+j = L(:,1)==y;\r
+mat(1,1:2) = [y,i];\r
+\r
+\r
+while(sum(j)==0)\r
+ i = i+1;\r
+ y = mod(y * h,group);\r
+ mat(i+1,1:2)=[y,i];\r
+ j = L(:,1)==y;\r
+end\r
+\r
+mat;\r
+ret = i*m+find(j)-1;\r
+end
\ No newline at end of file
--- /dev/null
+function [ret mat] = babygiantstep(y,base,group)\r
+%% Step 1\r
+n = group-1;\r
+m = floor(sqrt(n));\r
+L1 = [0:m-1];\r
+gInv = invA(base,group);\r
+L2 = mod(y.*gInv.^L1,group);\r
+L = [ L2' L1'];\r
+h=mod(base^m,group);\r
+p=1;\r
+i=0;\r
+%% Step 2\r
+\r
+j = L(:,1)==p;\r
+mat(1,1:2) = [p,i];\r
+\r
+\r
+while(sum(j)==0)\r
+ i = i+1;\r
+ p = mod(p * h,group);\r
+ mat(i+1,1:2)=[p,i];\r
+ j = L(:,1)==p;\r
+end\r
+\r
+mat;\r
+ret = i*m+find(j)-1;\r
+end
\ No newline at end of file
--- /dev/null
+function [ret mat] = pollard(y,base,group)\r
+\r
+mat(1,1:7)=[0 1 0 0 1 0 0];\r
+\r
+i=1;\r
+\r
+while ((mat(i,2)~=mat(i,5))||(i==1))\r
+ i=i+1;\r
+ mat(i,1)=i+1;\r
+ mat(i,2:4)=f(mat(i-1,2:4));\r
+ mat(i,5:7)=f(f(mat(i-1,5:7)));\r
+end\r
+ret=mod((mat(i,3)-mat(i,6))*invA((mat(i,7)-mat(i,4)),group-1),group-1);\r
+\r
+end\r
+\r
+function y = f(x)\r
+ if(mod(x(1),3)==0)\r
+ y=[mod(2*x(1),59),mod(x(2)+1,59-1),mod(x(3),58)];\r
+ elseif(mod(x(1),3)==1)\r
+ y=[mod(13*x(1),59),mod(x(2),58),mod(x(3)+1,58)];\r
+ else %(mod(x(1),3)==2)\r
+ y=[mod(x(1)^2,59),mod(2*x(2),58),mod(2*x(3),58)];\r
+ end\r
+ \r
+end
\ No newline at end of file