RodBird
Oct 8, 2017
=Cryptology with Liberty BASIC : 103= //author// [[toc|flat]] ---- =First Part Title= Text here. [[code format="lb"]] dimstats(11)dimstats(11) dim SmallPrimes(1000)[begin] print[begin] print "Liberty Basic RSA Demonstration"forfor i=1 to 1000readread xSmallPrimes(i)=x next NoOfSmallPrimes=1000 printSmallPrimes(i)=x next NoOfSmallPrimes=1000 print NoOfSmallPrimes;" Primes Loaded"print"Generatingprint"Generating Random Primes"forfor i=1 to 2t1=time$("ms") [TryAnother] print printt1=time$("ms") [TryAnother] print print "Prime No ";iifif i=1 then x=Random(30) else x=Random(30)iterations=0 [Loop] iterations=iterations+1 ifiterations=0 [Loop] iterations=iterations+1 if MillerRabin(x,7)=1 thenx=x+2 gotox=x+2 goto [Loop]else t2=time$("ms") printelse t2=time$("ms") print x;" Probably Prime. Generated in ";t2-t1;" milliseconds"end ifend if if p then q=x else p=xnextnext iprint printprint print "p=";dechex$(p)[Retry] restore print[Retry] restore print "q=";dechex$(q)'Common'Common modulus N=(p)(q)n=p*q printn=p*q print "Key Length ";len(dechex$(n))*4;" bits "print 'Eulerprint 'Euler Totient Number M=(p-1)(q-1)m=(p-1)*(q-1) 'Choosem=(p-1)*(q-1) 'Choose a suitable prime E relatively prime to Mforfor i=1 to 12readread eifif (GCD(e,m)=1) then goto [Start]nextnext i[Start] print[Start] print "Common Modulus, n=";dechex$(n)d=ExtBinEuclid(d=ExtBinEuclid( e, m )DIMDIM TEST(10)DIMDIM ENCR(10)DIMDIM DECR(10)TEST(1)=TEXT2DEC("LIBERTYTEST(1)=TEXT2DEC("LIBERTY BASIC IS THE BEST")TEST(2)=TEXT2DEC("WHICHTEST(2)=TEXT2DEC("WHICH BASIC CAN DO THIS ")TEST(3)=TEXT2DEC("WITHOUTTEST(3)=TEXT2DEC("WITHOUT CALLING EXT DLL ?")TEST(4)=TEXT2DEC("LBTEST(4)=TEXT2DEC("LB CAN DO BIG INTEGERS ! ")TEST(5)=TEXT2DEC("UNDOCUMENTEDTEST(5)=TEXT2DEC("UNDOCUMENTED LB FEATURE. ")print printprint print "RSA ENCRYPTION DEMO"forfor i=1 to 5t1=time$("ms") ENCR(i)=FastExp(TEST(i),t1=time$("ms") ENCR(i)=FastExp(TEST(i), e, n)t2=time$("ms") printt2=time$("ms") print TEST(i);print nextprint next iprint printprint print ""print printprint print "RSA DECRYPTION DEMO"forfor i=1 to 5t1=time$("ms") DECR(i)=FastExp(ENCR(i),t1=time$("ms") DECR(i)=FastExp(ENCR(i), d, n)t2=time$("ms") printt2=time$("ms") print ENCR(i);print nextprint next iprint printprint print "RSA Demo Finished."[stop]END Function[stop] END Function GCD( m,n )'' Find greatest common divisor with Extend Euclidian Algorithm'' Knuth Vol 1 P.13 Algorithm Eapap =1 :b =1 :a =0 :bp =0: c =m :d =n[StepE2] q[StepE2] q = int(c/d) :r = c-q*difif r<>0 thenc=dc=d :d=r :t=ap :ap=a :a=t-q*a :t=bp :bp=b :b=t-q*bgotogoto [StepE2]endend ifGCD=a*m+b*n 'printGCD=a*m+b*n 'print ap;" ";b;" ";a;" ";bp;" ";c;" ";d;" ";t;" ";q End Function 'Extended Euclidian GCDFunctionFunction ExtBinEuclid( u, v )k=0k=0 :t1=0 :t2=0 :t3=0ifif u<v thentemp=u u=v v=temp endtemp=u u=v v=temp end ifwhilewhile (IsEven( u ) and IsEven( v ))kk = k+1uu = int(u/2)vv = int(v/2)wend u1wend u1 = 1: u2 = 0: u3 =u: t1 =v: t2 =u-1: t3 =v[Loop1] 'two[Loop1] 'two labels with no code![Loop2] '[Loop2] ' print "*"ifif (IsEven(u3)) thenifif IsOdd(u1) or IsOdd(u2) thenu1=u1+v u2=u2+u end if u1=int(u1/2) u2=int(u2/2) u3=int(u3/2) endu1=u1+v u2=u2+u end if u1=int(u1/2) u2=int(u2/2) u3=int(u3/2) end if if IsEven(t3) or (u3<t3) thentemp=u1:temp=u1: u1=t1: t1=temptemp=u2:temp=u2: u2=t2: t2=temptemp=u3:temp=u3: u3=t3: t3=tempend ifend if if IsEven(u3) thengotogoto [Loop2]endend ifwhilewhile u1<t1 OR u2<t2u1=u1+v:u1=u1+v: u2=u2+uwend u1=u1-t1:wend u1=u1-t1: u2=u2-t2: u3=u3-t3ifif (t3>0) thengotogoto [Loop1]endend ifwhilewhile u1>=v AND u2>=uu1=ul-v:u1=ul-v: u2=u2-uwend ExtBinEuclid=u-u2Endwend ExtBinEuclid=u-u2 End Functionfunctionfunction IsEven( x )ifif ( x MOD 2 )=0 thenIsEven=1 else IsEven=0 end ifendIsEven=1 else IsEven=0 end if end functionfunctionfunction IsOdd( x )ifif ( x MOD 2 )=0 thenIsOdd=0 else IsOdd=1 end ifendIsOdd=0 else IsOdd=1 end if end functionFunctionFunction FastExp(x, y, N)ifif (y=1) then 'MOD(x,N)FastExp=x-int(x/N)*N gotoFastExp=x-int(x/N)*N goto [ExitFunction]end ifend if if ( y and 1) = 0 thendum1=y/2 dum2=y-int(y/2)*2dum1=y/2 dum2=y-int(y/2)*2 'MOD(y,2)temp=FastExp(x,dum1,N) z=temp*temp FastExp=z-int(z/N)*Ntemp=FastExp(x,dum1,N) z=temp*temp FastExp=z-int(z/N)*N 'MOD(temp*temp,N)gotogoto [ExitFunction]else dum1=y-1 dum1=dum1/2 temp=FastExp(x,dum1,N) dum2=temp*temp temp=dum2-int(dum2/N)*Nelse dum1=y-1 dum1=dum1/2 temp=FastExp(x,dum1,N) dum2=temp*temp temp=dum2-int(dum2/N)*N 'MOD(dum2,N)z=temp*x FastExp=z-int(z/N)*Nz=temp*x FastExp=z-int(z/N)*N 'MOD(temp*x,N)gotogoto [ExitFunction]endend if[ExitFunction]end[ExitFunction] end functionFunctionFunction PowMod( a, n, m)rr = 1whilewhile (n > 0)ifif (n AND 1) then '/* test lowest bit */rr = MulMod(r, a, m) '/* multiply (mod m) */endend ifaa = MulMod(a, a, m) '/* square */nn = int(n/2) '/* divided by 2 */wend PowMod=rEndwend PowMod=r End FunctionFunctionFunction MulMod( a, b, m)ifif (m = 0) thenMulMod=aMulMod=a * b ' /* (mod 0) */Else rElse r = 0whilewhile (a > 0)ifif (a AND 1) then ' /* test lowest bit */r=r= r+bifif (r > m) thenrr = (r MOD m) ' /* add (mod m) */endend ifendend ifaa = int(a/2) ' /* divided by 2 */bb = b*2ifif (b > m) thenbb = (b MOD m) ' /* times 2 (mod m) */endend ifwend MulMod=r End IfEndwend MulMod=r End If End FunctionFunctionFunction rand( x )x=x*5 x=x+1 rand=xEndx=x*5 x=x+1 rand=x End FunctionFunctionFunction MillerRabin(n,b)'t1=time$("ms") if't1=time$("ms") if IsEven(n) thenMillerRabin=1 gotoMillerRabin=1 goto [ExtFn]end if i=0 [Loop] i=i+1end if i=0 [Loop] i=i+1 if i>1000 then goto [Continue]ifif ( n MOD SmallPrimes(i) )=0 thenMillerRabin=1 gotoMillerRabin=1 goto [ExtFn]endend ifgotogoto [Loop][Continue] if[Continue] if GCD(n,b)>1 thenMillerRabin=1 gotoMillerRabin=1 goto [ExtFn]endend ifq=n-1 t=0 whileq=n-1 t=0 while (int(q) AND 1 )=0t=t+1 q=int(q/2) wend r=FastExp(b,t=t+1 q=int(q/2) wend r=FastExp(b, q, n)ifif ( r <> 1 ) thene=0 whilee=0 while ( e < (t-1) )ifif ( r <> (n-1) ) thenr=FastExp(r,r=FastExp(r, r, n)else Exitelse Exit Whileend if e=e+1 wend [ExitLoop] endend if e=e+1 wend [ExitLoop] end if if ( (r=1) OR (r=(n-1)) ) thenMillerRabin=0 else MillerRabin=1 endMillerRabin=0 else MillerRabin=1 end if[ExtFn]End[ExtFn] End FunctionFunctionFunction Random( Digits)') ' x=INT(RND(1)*TIME$("ms")*9912812828239112219) * INT(RND(1)*9912166437771297131373)*'* ' INT(RND(1)*71777126181142123) * INT(RND(1)*7119119672435637981)*'* ' INT(RND(1)*991216643912127789) * INT(RND(1)*79126181142123)*'* ' INT(RND(1)*711911128376332417) * INT(RND(1)*991216643123129)*'* ' INT(RND(1)*79126181142123) *INT(RND(1)*6661912727312317)'INT(RND(1)*6661912727312317) ' Random=INT(VAL(RIGHT$(STR$(x,1)))x=INT(RND(1)*TIME$("ms")*9912812828239112219)x=INT(RND(1)*TIME$("ms")*9912812828239112219) * INT(RND(1)*9912166437771297131373) *_INT(RND(1)*71777126181142123)INT(RND(1)*71777126181142123) * INT(RND(1)*7119119672435637981) *_INT(RND(1)*991216643912127789)INT(RND(1)*991216643912127789) * INT(RND(1)*79126181142123) *_INT(RND(1)*711911128376332417) x=x*x+x+41 y$=mid$(str$(x),INT(rnd(1)*30+1),DigitsINT(RND(1)*711911128376332417) x=x*x+x+41 y$=mid$(str$(x),INT(rnd(1)*30+1),Digits )ldg=val(right$(y$,1)) z=0 ifldg=val(right$(y$,1)) z=0 if ldg=0 then z=1ifif ldg=2 then z=1ifif ldg=4 then z=1ifif ldg=6 then z=1ifif ldg=8 then z=1Random=val(y$)+zEndRandom=val(y$)+z End FunctionFUNCTIONFUNCTION TEXT2DEC( x$ )a$=UPPER$(x$) y$="" FORa$=UPPER$(x$) y$="" FOR i=1 TO LEN(a$)y$=y$+STR$(ASC(MID$(a$,i,1))) NEXT TEXT2DEC=VAL(y$)ENDy$=y$+STR$(ASC(MID$(a$,i,1))) NEXT TEXT2DEC=VAL(y$) END FUNCTIONFUNCTIONFUNCTION DEC2TEXT$( n )a$=STR$(n) y$="" FORa$=STR$(n) y$="" FOR i=1 TO LEN(a$)-1 STEP 2m=VAL(MID$(a$,i,2)) ifm=VAL(MID$(a$,i,2)) if m>30 and m<99 then y$=y$+CHR$(m) else y$=y$+"."NEXT DEC2TEXT$=y$ENDNEXT DEC2TEXT$=y$ END FUNCTIONdatadata 2, 3, 5, 7, 11, 13, 17, 19, 23,29data29 data 31, 37, 41, 43, 47, 53, 59, 61, 67,71data71 data 73, 79, 83, 89, 97, 101, 103, 107, 109,113data113 data 127, 131, 137, 139, 149, 151, 157, 163, 167,173data173 data 179, 181, 191, 193, 197, 199, 211, 223, 227,229data229 data 233, 239, 241, 251, 257, 263, 269, 271, 277,281data281 data 283, 293, 307, 311, 313, 317, 331, 337, 347,349data349 data 353, 359, 367, 373, 379, 383, 389, 397, 401,409data409 data 419, 421, 431, 433, 439, 443, 449, 457, 461,463data463 data 467, 479, 487, 491, 499, 503, 509, 521, 523,541data541 data 547, 557, 563, 569, 571, 577, 587, 593, 599,601data601 data 607, 613, 617, 619, 631, 641, 643, 647, 653,659data659 data 661, 673, 677, 683, 691, 701, 709, 719, 727,733data733 data 739, 743, 751, 757, 761, 769, 773, 787, 797,809data809 data 811, 821, 823, 827, 829, 839, 853, 857, 859,863data863 data 877, 881, 883, 887, 907, 911, 919, 929, 937,941data941 data 947, 953, 967, 971, 977, 983, 991, 997, 1009,1013data1013 data 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061, 1063,1069data1069 data 1087, 1091, 1093, 1097, 1103, 1109, 1117, 1123, 1129,1151data1151 data 1153, 1163, 1171, 1181, 1187, 1193, 1201, 1213, 1217,1223data1223 data 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283, 1289,1291data1291 data 1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361, 1367,1373data1373 data 1381, 1399, 1409, 1423, 1427, 1429, 1433, 1439, 1447,1451data1451 data 1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493, 1499,1511data1511 data 1523, 1531, 1543, 1549, 1553, 1559, 1567, 1571, 1579,1583data1583 data 1597, 1601, 1607, 1609, 1613, 1619, 1621, 1627, 1637,1657data1657 data 1663, 1667, 1669, 1693, 1697, 1699, 1709, 1721, 1723,1733data1733 data 1741, 1747, 1753, 1759, 1777, 1783, 1787, 1789, 1801,1811data1811 data 1823, 1831, 1847, 1861, 1867, 1871, 1873, 1877, 1879,1889data1889 data 1901, 1907, 1913, 1931, 1933, 1949, 1951, 1973, 1979,1987data1987 data 1993, 1997, 1999, 2003, 2011, 2017, 2027, 2029, 2039,2053data2053 data 2063, 2069, 2081, 2083, 2087, 2089, 2099, 2111, 2113,2129data2129 data 2131, 2137, 2141, 2143, 2153, 2161, 2179, 2203, 2207,2213data2213 data 2221, 2237, 2239, 2243, 2251, 2267, 2269, 2273, 2281,2287data2287 data 2293, 2297, 2309, 2311, 2333, 2339, 2341, 2347, 2351,2357data2357 data 2371, 2377, 2381, 2383, 2389, 2393, 2399, 2411, 2417,2423data2423 data 2437, 2441, 2447, 2459, 2467, 2473, 2477, 2503, 2521,2531data2531 data 2539, 2543, 2549, 2551, 2557, 2579, 2591, 2593, 2609,2617data2617 data 2621, 2633, 2647, 2657, 2659, 2663, 2671, 2677, 2683,2687data2687 data 2689, 2693, 2699, 2707, 2711, 2713, 2719, 2729, 2731,2741data2741 data 2749, 2753, 2767, 2777, 2789, 2791, 2797, 2801, 2803,2819data2819 data 2833, 2837, 2843, 2851, 2857, 2861, 2879, 2887, 2897,2903data2903 data 2909, 2917, 2927, 2939, 2953, 2957, 2963, 2969, 2971,2999data2999 data 3001, 3011, 3019, 3023, 3037, 3041, 3049, 3061, 3067,3079data3079 data 3083, 3089, 3109, 3119, 3121, 3137, 3163, 3167, 3169,3181data3181 data 3187, 3191, 3203, 3209, 3217, 3221, 3229, 3251, 3253,3257data3257 data 3259, 3271, 3299, 3301, 3307, 3313, 3319, 3323, 3329,3331data3331 data 3343, 3347, 3359, 3361, 3371, 3373, 3389, 3391, 3407,3413data3413 data 3433, 3449, 3457, 3461, 3463, 3467, 3469, 3491, 3499,3511data3511 data 3517, 3527, 3529, 3533, 3539, 3541, 3547, 3557, 3559,3571data3571 data 3581, 3583, 3593, 3607, 3613, 3617, 3623, 3631, 3637,3643data3643 data 3659, 3671, 3673, 3677, 3691, 3697, 3701, 3709, 3719,3727data3727 data 3733, 3739, 3761, 3767, 3769, 3779, 3793, 3797, 3803,3821data3821 data 3823, 3833, 3847, 3851, 3853, 3863, 3877, 3881, 3889,3907data3907 data 3911, 3917, 3919, 3923, 3929, 3931, 3943, 3947, 3967,3989data3989 data 4001, 4003, 4007, 4013, 4019, 4021, 4027, 4049, 4051,4057data4057 data 4073, 4079, 4091, 4093, 4099, 4111, 4127, 4129, 4133,4139data4139 data 4153, 4157, 4159, 4177, 4201, 4211, 4217, 4219, 4229,4231data4231 data 4241, 4243, 4253, 4259, 4261, 4271, 4273, 4283, 4289,4297data4297 data 4327, 4337, 4339, 4349, 4357, 4363, 4373, 4391, 4397,4409data4409 data 4421, 4423, 4441, 4447, 4451, 4457, 4463, 4481, 4483,4493data4493 data 4507, 4513, 4517, 4519, 4523, 4547, 4549, 4561, 4567,4583data4583 data 4591, 4597, 4603, 4621, 4637, 4639, 4643, 4649, 4651,4657data4657 data 4663, 4673, 4679, 4691, 4703, 4721, 4723, 4729, 4733,4751data4751 data 4759, 4783, 4787, 4789, 4793, 4799, 4801, 4813, 4817,4831data4831 data 4861, 4871, 4877, 4889, 4903, 4909, 4919, 4931, 4933,4937data4937 data 4943, 4951, 4957, 4967, 4969, 4973, 4987, 4993, 4999,5003data5003 data 5009, 5011, 5021, 5023, 5039, 5051, 5059, 5077, 5081,5087data5087 data 5099, 5101, 5107, 5113, 5119, 5147, 5153, 5167, 5171,5179data5179 data 5189, 5197, 5209, 5227, 5231, 5233, 5237, 5261, 5273,5279data5279 data 5281, 5297, 5303, 5309, 5323, 5333, 5347, 5351, 5381,5387data5387 data 5393, 5399, 5407, 5413, 5417, 5419, 5431, 5437, 5441,5443data5443 data 5449, 5471, 5477, 5479, 5483, 5501, 5503, 5507, 5519,5521data5521 data 5527, 5531, 5557, 5563, 5569, 5573, 5581, 5591, 5623,5639data5639 data 5641, 5647, 5651, 5653, 5657, 5659, 5669, 5683, 5689,5693data5693 data 5701, 5711, 5717, 5737, 5741, 5743, 5749, 5779, 5783,5791data5791 data 5801, 5807, 5813, 5821, 5827, 5839, 5843, 5849, 5851,5857data5857 data 5861, 5867, 5869, 5879, 5881, 5897, 5903, 5923, 5927,5939data5939 data 5953, 5981, 5987, 6007, 6011, 6029, 6037, 6043, 6047,6053data6053 data 6067, 6073, 6079, 6089, 6091, 6101, 6113, 6121, 6131,6133data6133 data 6143, 6151, 6163, 6173, 6197, 6199, 6203, 6211, 6217,6221data6221 data 6229, 6247, 6257, 6263, 6269, 6271, 6277, 6287, 6299,6301data6301 data 6311, 6317, 6323, 6329, 6337, 6343, 6353, 6359, 6361,6367data6367 data 6373, 6379, 6389, 6397, 6421, 6427, 6449, 6451, 6469,6473data6473 data 6481, 6491, 6521, 6529, 6547, 6551, 6553, 6563, 6569,6571data6571 data 6577, 6581, 6599, 6607, 6619, 6637, 6653, 6659, 6661,6673data6673 data 6679, 6689, 6691, 6701, 6703, 6709, 6719, 6733, 6737,6761data6761 data 6763, 6779, 6781, 6791, 6793, 6803, 6823, 6827, 6829,6833data6833 data 6841, 6857, 6863, 6869, 6871, 6883, 6899, 6907, 6911,6917data6917 data 6947, 6949, 6959, 6961, 6967, 6971, 6977, 6983, 6991,6997data6997 data 7001, 7013, 7019, 7027, 7039, 7043, 7057, 7069, 7079,7103data7103 data 7109, 7121, 7127, 7129, 7151, 7159, 7177, 7187, 7193,7207data7207 data 7211, 7213, 7219, 7229, 7237, 7243, 7247, 7253, 7283,7297data7297 data 7307, 7309, 7321, 7331, 7333, 7349, 7351, 7369, 7393,7411data7411 data 7417, 7433, 7451, 7457, 7459, 7477, 7481, 7487, 7489,7499data7499 data 7507, 7517, 7523, 7529, 7537, 7541, 7547, 7549, 7559,7561data7561 data 7573, 7577, 7583, 7589, 7591, 7603, 7607, 7621, 7639,7643data7643 data 7649, 7669, 7673, 7681, 7687, 7691, 7699, 7703, 7717,7723data7723 data 7727, 7741, 7753, 7757, 7759, 7789, 7793, 7817, 7823,7829data7829 data 7841, 7853, 7867, 7873, 7877, 7879, 7883, 7901, 7907, 7919 [[code]] [[toc|flat]]