RodBird
Oct 8, 2017
- "Reverted to Oct 14, 2016 8:07 pm: Erasing cryptoman edits"
Submit Articles Here for Liberty BASIC Programmer's Encyclopedia
Liberty BASIC Programmer's EncyclopediaAnybody can submit articles to the Liberty BASIC Programmer's Encyclopedia. You do not need to be a member of this site. The public may edit existing pages. Only persons with a Wikispaces account may create new pages. You may get a free Wikispaces account here.
License
By adding content to the Liberty BASIC Programmer's Encyclopedia, you are bound by the license. If you do not want to release your work under this license, do not submit articles. Click HERE to read the License.
Article Guidelines
The Liberty BASIC Programmer's Encyclopedia is a place for full-length technical articles. Authors should make sure that articles are well-structured, that words are spelled correctly, and that all code works properly. Click HERE for help on technical writing.
When you submit an article, be aware this is not the end of your involvement. Few of us get it Just Right the very first time. Expect an LBPE editor to contact you with questions, suggestions, possible edits, etcetera for you to look over and take the proper action.
Adding Articles
- Click the edit button at the top of this page.
- Add your article to the list at the bottom of this page . If you are using the formatted text editor, simply click the link button on the editing toolbar and invoke a dialog to add the link. Type the name of your new page in the
"wiki link""wiki link" area and click the"okay""okay" button.If you are using the plain text editor, do this by typing a name for your page inside of double square brackets. If your article is called"Using Arrays","Using Arrays", your link would look like this: * [[Using Arrays]] Save the editing of this page. - View this page and click on the link you just created.
- On the new page, click the edit link and type or paste your article.
- Please place your name and the date at the top of your article, along with a descriptive title.
- Save your edits. That's all there is to it!
Having trouble submitting an article? Try Visual Directions for Submitting an Article
Editing Articles
To learn how to use WikiText markup to edit site content, click HERE. You don't need to know WikiText, though. When you are editing a page, there is a button near the bottom to
Additional Files
If your article requires images or other additional files, simply upload them and include links in your article. When you are editing a page there is a link in the upper right for
Article Placement
One of the organizers of the Liberty BASIC Programmer's Encyclopedia will tag your article for editing. If the organizers find it to be a viable article for the encyclopedia, it will be added to all the appropriate categories.
Confirmation
Organizers of the Liberty BASIC Programmer's Encyclopedia will make any modifications they feel are needed. Authors may accept or reject these changes before articles are listed in the appropriate categories and locked.
Article Modification in the Future
One of the advantages of this format is that it affords us the ability to update and modify the information. Organizers reserve the right to modify, expand, or delete articles as they determine such actions to be appropriate.
Who Can Edit Articles
Articles can be edited by the original authors and by the site organizers. Others should suggest changes via the site's discussion feature.
LIST ARTICLES HERE
- ArduinoAsSlaveBoard - -
mmiscool Edit - Debugging Techniques - -
JackKelly6 6…Cryptography with Liberty Basic103: Public Key Cryptography: RSA AlgorithmBy Onur Alver (CryptoMan)INTRODUCTIONTable of ContentsCryptography with Liberty Basic103: Public Key Cryptography: RSA AlgorithmWe will continue in our series of articles about Cryptography with Public Key Cryptography.RSA ALGORITHMRSA Algorithm is based on the assumption on the difficulty of factoring large composite numbers.Code:dim stats(11)dim SmallPrimes(1000)data 2, 3, 5, 7, 11, 13, 17, 19, 23, 29data 31, 37, 41, 43, 47, 53, 59, 61, 67, 71data 73, 79, 83, 89, 97, 101, 103, 107, 109, 113data 127, 131, 137, 139, 149, 151, 157, 163, 167, 173data 179, 181, 191, 193, 197, 199, 211, 223, 227, 229data 233, 239, 241, 251, 257, 263, 269, 271, 277, 281data 283, 293, 307, 311, 313, 317, 331, 337, 347, 349data 353, 359, 367, 373, 379, 383, 389, 397, 401, 409data 419, 421, 431, 433, 439, 443, 449, 457, 461, 463data 467, 479, 487, 491, 499, 503, 509, 521, 523, 541data 547, 557, 563, 569, 571, 577, 587, 593, 599, 601data 607, 613, 617, 619, 631, 641, 643, 647, 653, 659data 661, 673, 677, 683, 691, 701, 709, 719, 727, 733data 739, 743, 751, 757, 761, 769, 773, 787, 797, 809data 811, 821, 823, 827, 829, 839, 853, 857, 859, 863data 877, 881, 883, 887, 907, 911, 919, 929, 937, 941data 947, 953, 967, 971, 977, 983, 991, 997, 1009, 1013data 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061, 1063, 1069data 1087, 1091, 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151data 1153, 1163, 1171, 1181, 1187, 1193, 1201, 1213, 1217, 1223data 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283, 1289, 1291data 1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361, 1367, 1373data 1381, 1399, 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451data 1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493, 1499, 1511data 1523, 1531, 1543, 1549, 1553, 1559, 1567, 1571, 1579, 1583data 1597, 1601, 1607, 1609, 1613, 1619, 1621, 1627, 1637, 1657data 1663, 1667, 1669, 1693, 1697, 1699, 1709, 1721, 1723, 1733data 1741, 1747, 1753, 1759, 1777, 1783, 1787, 1789, 1801, 1811data 1823, 1831, 1847, 1861, 1867, 1871, 1873, 1877, 1879, 1889data 1901, 1907, 1913, 1931, 1933, 1949, 1951, 1973, 1979, 1987data 1993, 1997, 1999, 2003, 2011, 2017, 2027, 2029, 2039, 2053data 2063, 2069, 2081, 2083, 2087, 2089, 2099, 2111, 2113, 2129data 2131, 2137, 2141, 2143, 2153, 2161, 2179, 2203, 2207, 2213data 2221, 2237, 2239, 2243, 2251, 2267, 2269, 2273, 2281, 2287data 2293, 2297, 2309, 2311, 2333, 2339, 2341, 2347, 2351, 2357data 2371, 2377, 2381, 2383, 2389, 2393, 2399, 2411, 2417, 2423data 2437, 2441, 2447, 2459, 2467, 2473, 2477, 2503, 2521, 2531data 2539, 2543, 2549, 2551, 2557, 2579, 2591, 2593, 2609, 2617data 2621, 2633, 2647, 2657, 2659, 2663, 2671, 2677, 2683, 2687data 2689, 2693, 2699, 2707, 2711, 2713, 2719, 2729, 2731, 2741data 2749, 2753, 2767, 2777, 2789, 2791, 2797, 2801, 2803, 2819data 2833, 2837, 2843, 2851, 2857, 2861, 2879, 2887, 2897, 2903data 2909, 2917, 2927, 2939, 2953, 2957, 2963, 2969, 2971, 2999data 3001, 3011, 3019, 3023, 3037, 3041, 3049, 3061, 3067, 3079data 3083, 3089, 3109, 3119, 3121, 3137, 3163, 3167, 3169, 3181data 3187, 3191, 3203, 3209, 3217, 3221, 3229, 3251, 3253, 3257data 3259, 3271, 3299, 3301, 3307, 3313, 3319, 3323, 3329, 3331data 3343, 3347, 3359, 3361, 3371, 3373, 3389, 3391, 3407, 3413data 3433, 3449, 3457, 3461, 3463, 3467, 3469, 3491, 3499, 3511data 3517, 3527, 3529, 3533, 3539, 3541, 3547, 3557, 3559, 3571data 3581, 3583, 3593, 3607, 3613, 3617, 3623, 3631, 3637, 3643data 3659, 3671, 3673, 3677, 3691, 3697, 3701, 3709, 3719, 3727data 3733, 3739, 3761, 3767, 3769, 3779, 3793, 3797, 3803, 3821data 3823, 3833, 3847, 3851, 3853, 3863, 3877, 3881, 3889, 3907data 3911, 3917, 3919, 3923, 3929, 3931, 3943, 3947, 3967, 3989data 4001, 4003, 4007, 4013, 4019, 4021, 4027, 4049, 4051, 4057data 4073, 4079, 4091, 4093, 4099, 4111, 4127, 4129, 4133, 4139data 4153, 4157, 4159, 4177, 4201, 4211, 4217, 4219, 4229, 4231data 4241, 4243, 4253, 4259, 4261, 4271, 4273, 4283, 4289, 4297data 4327, 4337, 4339, 4349, 4357, 4363, 4373, 4391, 4397, 4409data 4421, 4423, 4441, 4447, 4451, 4457, 4463, 4481, 4483, 4493data 4507, 4513, 4517, 4519, 4523, 4547, 4549, 4561, 4567, 4583data 4591, 4597, 4603, 4621, 4637, 4639, 4643, 4649, 4651, 4657data 4663, 4673, 4679, 4691, 4703, 4721, 4723, 4729, 4733, 4751data 4759, 4783, 4787, 4789, 4793, 4799, 4801, 4813, 4817, 4831data 4861, 4871, 4877, 4889, 4903, 4909, 4919, 4931, 4933, 4937data 4943, 4951, 4957, 4967, 4969, 4973, 4987, 4993, 4999, 5003data 5009, 5011, 5021, 5023, 5039, 5051, 5059, 5077, 5081, 5087data 5099, 5101, 5107, 5113, 5119, 5147, 5153, 5167, 5171, 5179data 5189, 5197, 5209, 5227, 5231, 5233, 5237, 5261, 5273, 5279data 5281, 5297, 5303, 5309, 5323, 5333, 5347, 5351, 5381, 5387data 5393, 5399, 5407, 5413, 5417, 5419, 5431, 5437, 5441, 5443data 5449, 5471, 5477, 5479, 5483, 5501, 5503, 5507, 5519, 5521data 5527, 5531, 5557, 5563, 5569, 5573, 5581, 5591, 5623, 5639data 5641, 5647, 5651, 5653, 5657, 5659, 5669, 5683, 5689, 5693data 5701, 5711, 5717, 5737, 5741, 5743, 5749, 5779, 5783, 5791data 5801, 5807, 5813, 5821, 5827, 5839, 5843, 5849, 5851, 5857data 5861, 5867, 5869, 5879, 5881, 5897, 5903, 5923, 5927, 5939data 5953, 5981, 5987, 6007, 6011, 6029, 6037, 6043, 6047, 6053data 6067, 6073, 6079, 6089, 6091, 6101, 6113, 6121, 6131, 6133data 6143, 6151, 6163, 6173, 6197, 6199, 6203, 6211, 6217, 6221data 6229, 6247, 6257, 6263, 6269, 6271, 6277, 6287, 6299, 6301data 6311, 6317, 6323, 6329, 6337, 6343, 6353, 6359, 6361, 6367data 6373, 6379, 6389, 6397, 6421, 6427, 6449, 6451, 6469, 6473data 6481, 6491, 6521, 6529, 6547, 6551, 6553, 6563, 6569, 6571data 6577, 6581, 6599, 6607, 6619, 6637, 6653, 6659, 6661, 6673data 6679, 6689, 6691, 6701, 6703, 6709, 6719, 6733, 6737, 6761data 6763, 6779, 6781, 6791, 6793, 6803, 6823, 6827, 6829, 6833data 6841, 6857, 6863, 6869, 6871, 6883, 6899, 6907, 6911, 6917data 6947, 6949, 6959, 6961, 6967, 6971, 6977, 6983, 6991, 6997data 7001, 7013, 7019, 7027, 7039, 7043, 7057, 7069, 7079, 7103data 7109, 7121, 7127, 7129, 7151, 7159, 7177, 7187, 7193, 7207data 7211, 7213, 7219, 7229, 7237, 7243, 7247, 7253, 7283, 7297data 7307, 7309, 7321, 7331, 7333, 7349, 7351, 7369, 7393, 7411data 7417, 7433, 7451, 7457, 7459, 7477, 7481, 7487, 7489, 7499data 7507, 7517, 7523, 7529, 7537, 7541, 7547, 7549, 7559, 7561data 7573, 7577, 7583, 7589, 7591, 7603, 7607, 7621, 7639, 7643data 7649, 7669, 7673, 7681, 7687, 7691, 7699, 7703, 7717, 7723data 7727, 7741, 7753, 7757, 7759, 7789, 7793, 7817, 7823, 7829data 7841, 7853, 7867, 7873, 7877, 7879, 7883, 7901, 7907, 7919playwave "ding.wav", asyncprint "Liberty Basic RSA Demonstration"print "Loading Small Primes"for i=1 to 1000: read x : SmallPrimes(i)=x :next :NoOfSmallPrimes=1000print NoOfSmallPrimes;" Primes Loaded"print"Generating Random Primes"'goto [Jump]for i=1 to 2t1=time$("ms")[TryAnother]printprint "Prime No ";iif i=1 then x=Random(30) else x=Random(30)iterations=0[Loop]iterations=iterations+1if MillerRabin(x,7)=1 then'print "Composite"x=x+2goto [Loop]elset2=time$("ms")print x;" Probably Prime. Generated in ";t2-t1;" milliseconds"playwave "tada.wav", asyncend ifif p then q=x else p=xnext iprintplaywave "tada.wav", asyncprintprint "p=";dechex$(p)[Retry]restoreprint "q=";dechex$(q)'Common modulus N=(p)(q)n=p*qprint "Key Length ";len(dechex$(n))*4;" bits "print'Euler Totient Number M=(p-1)(q-1)m=(p-1)*(q-1)'Choose a suitable prime E relatively prime to Mfor i=1 to 12read eif (GCD(e,m)=1) then goto [Start]next i[Start]print "Common Modulus, n=";dechex$(n)print "Euler-Totient No, m=";dechex$(m)print "Public Exponent, e=";dechex$(e)d=ExtBinEuclid( e, m )print "Secret Exponent, d=";dechex$(d)DIM TEST(10)DIM ENCR(10)DIM DECR(10)TEST(1)=TEXT2DEC("LIBERTY BASIC IS THE BEST")TEST(2)=TEXT2DEC("WHICH BASIC CAN DO THIS ")TEST(3)=TEXT2DEC("WITHOUT CALLING EXT DLL ?")TEST(4)=TEXT2DEC("LB CAN DO BIG INTEGERS ! ")TEST(5)=TEXT2DEC("UNDOCUMENTED LB FEATURE. ")printprint "RSA ENCRYPTION DEMO"for i=1 to 5t1=time$("ms")ENCR(i)=FastExp(TEST(i), e, n)t2=time$("ms")print TEST(i);print " ";ENCR(i);print " ";t2-t1;" ms"print DEC2TEXT$( TEST(i) );" --> ";DEC2TEXT$( ENCR(i) )printnext iprintprint ""printprint "RSA DECRYPTION DEMO"for i=1 to 5t1=time$("ms")DECR(i)=FastExp(ENCR(i), d, n)t2=time$("ms")print ENCR(i);print " ";DECR(i);print " ";t2-t1;" ms"print DEC2TEXT$( ENCR(i) );" --> ";DEC2TEXT$( DECR(i) )printnext iprint " "printprint "RSA Demo Finished."playwave "ding.wav", async[stop]ENDFunction GCD( m,n )' Find greatest common divisor with Extend Euclidian Algorithm' Knuth Vol 1 P.13 Algorithm Eap =1 :b =1 :a =0 :bp =0: c =m :d =n[StepE2]q = int(c/d) :r = c-q*dif r<>0 thenc=d :d=r :t=ap :ap=a :a=t-q*a :t=bp :bp=b :b=t-q*b'print ap;" ";b;" ";a;" ";bp;" ";c;" ";d;" ";t;" ";qgoto [StepE2]end ifGCD=a*m+b*n'print ap;" ";b;" ";a;" ";bp;" ";c;" ";d;" ";t;" ";qEnd Function 'Extended Euclidian GCDFunction ExtBinEuclid( u, v )k=0 :t1=0 :t2=0 :t3=0if u<v thentemp=uu=vv=tempend ifwhile (IsEven( u ) and IsEven( v ))k = k+1u = int(u/2)v = int(v/2)wendu1 = 1: u2 = 0: u3 =u: t1 =v: t2 =u-1: t3 =v[Loop1][Loop2]' print "*"if (IsEven(u3)) thenif IsOdd(u1) or IsOdd(u2) thenu1=u1+vu2=u2+uend ifu1=int(u1/2)u2=int(u2/2)u3=int(u3/2)end ifif IsEven(t3) or (u3<t3) thentemp=u1: u1=t1: t1=temptemp=u2: u2=t2: t2=temptemp=u3: u3=t3: t3=tempend ifif IsEven(u3) thengoto [Loop2]end ifwhile u1<t1 OR u2<t2u1=u1+v: u2=u2+uwendu1=u1-t1: u2=u2-t2: u3=u3-t3if (t3>0) thengoto [Loop1]end ifwhile u1>=v AND u2>=uu1=ul-v: u2=u2-uwendExtBinEuclid=u-u2End Functionfunction IsEven( x )if ( x MOD 2 )=0 thenIsEven=1elseIsEven=0end ifend functionfunction IsOdd( x )if ( x MOD 2 )=0 thenIsOdd=0elseIsOdd=1end ifend functionFunction FastExp(x, y, N)if (y=1) then 'MOD(x,N)FastExp=x-int(x/N)*Ngoto [ExitFunction]end ifif ( y and 1) = 0 thendum1=y/2dum2=y-int(y/2)*2 'MOD(y,2)temp=FastExp(x,dum1,N)z=temp*tempFastExp=z-int(z/N)*N 'MOD(temp*temp,N)goto [ExitFunction]elsedum1=y-1dum1=dum1/2temp=FastExp(x,dum1,N)dum2=temp*temptemp=dum2-int(dum2/N)*N 'MOD(dum2,N)z=temp*xFastExp=z-int(z/N)*N 'MOD(temp*x,N)goto [ExitFunction]end if[ExitFunction]end functionFunction PowMod( a, n, m)r = 1while (n > 0)if (n AND 1) then '/* test lowest bit */r = MulMod(r, a, m) '/* multiply (mod m) */end ifa = MulMod(a, a, m) '/* square */n = int(n/2) '/* divided by 2 */wendPowMod=rEnd FunctionFunction MulMod( a, b, m)if (m = 0) thenMulMod=a * b ' /* (mod 0) */Elser = 0while (a > 0)if (a AND 1) then ' /* test lowest bit */r= r+bif (r > m) thenr = (r MOD m) ' /* add (mod m) */end ifend ifa = int(a/2) ' /* divided by 2 */b = b*2if (b > m) thenb = (b MOD m) ' /* times 2 (mod m) */end ifwendMulMod=rEnd IfEnd FunctionFunction rand( x )x=x*5x=x+1rand=xEnd FunctionFunction MillerRabin(n,b)'print "Miller Rabin"'t1=time$("ms")if IsEven(n) thenMillerRabin=1goto [ExtFn]end ifi=0[Loop]i=i+1if i>1000 then goto [Continue]if ( n MOD SmallPrimes(i) )=0 thenMillerRabin=1goto [ExtFn]end ifgoto [Loop][Continue]if GCD(n,b)>1 thenMillerRabin=1goto [ExtFn]end ifq=n-1t=0while (int(q) AND 1 )=0t=t+1q=int(q/2)wendr=FastExp(b, q, n)if ( r <> 1 ) thene=0while ( e < (t-1) )if ( r <> (n-1) ) thenr=FastExp(r, r, n)elseExit Whileend ife=e+1wend[ExitLoop]end ifif ( (r=1) OR (r=(n-1)) ) thenMillerRabin=0elseMillerRabin=1end if[ExtFn]End FunctionFunction 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)' Random=INT(VAL(RIGHT$(STR$(x,1)))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)x=x*x+x+41y$=mid$(str$(x),INT(rnd(1)*30+1),Digits )ldg=val(right$(y$,1))z=0if ldg=0 then z=1if ldg=2 then z=1if ldg=4 then z=1if ldg=6 then z=1if ldg=8 then z=1Random=val(y$)+zEnd FunctionFUNCTION TEXT2DEC( x$ )a$=UPPER$(x$)y$=""FOR i=1 TO LEN(a$)y$=y$+STR$(ASC(MID$(a$,i,1)))NEXTTEXT2DEC=VAL(y$)END FUNCTIONFUNCTION DEC2TEXT$( n )a$=STR$(n)y$=""FOR i=1 TO LEN(a$)-1 STEP 2m=VAL(MID$(a$,i,2))if m>30 and m<99 then y$=y$+CHR$(m) else y$=y$+"."NEXTDEC2TEXT$=y$END FUNCTION