does anyone here know how to decrypt DES without the obivous "do everything backwards" way? or at least know where to get the reverse key schedules?

I finally released DES for the 83/84 calcs!

Can anyone check if im missing anything?

::"DES ENCRYPTION

:ClrHome

:Input "DATA(8 CHARS):",Str1

:Input "KEY(8 CHARS):",Str2

:startTmr→V

:" nuvw?ÌÌÌx□┼∙Ì3Ì?-12ÌorT≤=≥‾EÌ?Ì !Ì?Ì??'()*+,-./0123456789:?<=>??ABCDEFGHIJKLMNOPQRSTUVWXYZθ?]^?Ìabcdefghijklmnopqrstuvwxyz{?}?Ì0-9ÁÀÂÄáàâäÉÈÊËéèêìÌÌÎÏíìîïÓÒÔÖãâäæÚÙÛÜêéëìÇçÑñ¿¡αβγΔδε[λμρƩφΩχστ[yhat]→Str0

:ClrHome

:" →Str4:" →Str3

:For(X,1,8

:inString(Str0,sub(Str1,X,1→A

:inString(Str0,sub(Str2,X,1→B

:For(Y,7,0,‾1

:If A≥2^Y

:Then

:Str3+"1→Str3

:A-2^Y→A

:Else

:Str3+"0→Str3

:End

:If B≥2^Y

:Then

:Str4+"1→Str4

:B-2^Y→B

:Else

:Str4+"0→Str4

:End

:End

:End

:sub(Str3,2,64→Str1

:sub(Str4,2,64→Str2

:

:

:

:{57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4→KEYPE

:{1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1→ROT

:{14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32→COMPR

:" →Str3:" →Str4

:For(X,1,56

:Str3+sub(Str2,∟KEYPE(X),1→Str3

:End

:For(X,8,64,8

:Str4+sub(Str2,X,1→Str4

:End

:sub(Str3,2,56→Str2

:sub(Str4,2,8→Y1

:0→A:" →Str7

:

:

:For(X,1,16

:sub(Str2,29,28→Str4:Str4+Str4→Str4

:sub(Str2,1,28→Str3:Str3+Str3→Str3

:A+∟ROT(X)→A

:sub(Str3,A,28→Str5

:sub(Str4,A,28→Str6

:Str5+Str6→Str2

:Str2→Str3:" →Str4

:For(Y,1,48

:Str4+sub(Str3,∟COMPR(Y),1→Str4

:End

:Str7+sub(Str4,2,48→Str7

:End

:sub(Str7,2,768→Str7

:DelVar Str2DelVar ∟COMPRDelVar ∟KEYPEDelVar ∟ROT

:

:

:{58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3,61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7→∟INIPE

:" →Str3

:For(X,1,64

:Str3+sub(Str1,∟INIPE(X),1→Str3

:End

:sub(Str3,2,64→Str1

:

:DelVar ∟INIPE

:{32,1,2,3,4,5,4,5,6,7,8,9,8,9,10,11,12,13,12,13,14,15,16,17,16,17,18,19,20,21,20,21,22,23,24,25,24,25,26,27,28,29,28,29,30,31,32,1→EX

:{14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7,0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8,4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0,15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13→S1

:{15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10,3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5,0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15,13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9→S2

:{10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8,13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1,13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7,1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12→S3

:{7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15,13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9,10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4,3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14→S4

:{2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9,14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6,4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14,11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3→S5

:{12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11,10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8,9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6,4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13→S6

:{4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1,13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6,1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2,6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12→S7

:{13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7,1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2,7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8,2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11→S8

:{16,7,20,21,29,12,28,17,1,15,23,26,5,18,31,10,2,8,24,14,32,27,3,9,19,13,30,6,22,11,4,25→PBOX

:For(Y,1,16

:sub(Str1,1,32→Str3

:sub(Str1,33,32→Str4

:Str4→Str2

:" →Str5

:For(X,1,48

:Str5+sub(Str4,∟EX(X),1→Str5

:End

:sub(Str5,2,48→Str4

:" →Str5

:sub(Str7,48Y-47,48→Str6

:For(X,1,48

:If sub(Str4,X,1)=sub(Str6,X,1

:Then

:Str5+"0→Str5

:Else

:Str5+"1→Str5

:End

:End

:" →Str9

:sub(Str5,2,48→Str4

:sub(Str4,1,6→Str5

:sub(Str5,1,1)+sub(Str5,6,1→Str6

:sub(Str5,2,4→Str8

:0→D

:For(X,3,0,‾1:If sub(Str8,4-X,1)="1":D+2^X→D:End

:If Str6="00":0→C

:If Str6="01":1→C

:If Str6="10":2→C

:If Str6="11":3→C

:16C+D+1→E:∟S1(E→F

:For(X,3,0,‾1

:If F≥2^X

:Then

:Str9+"1→Str9

:Else

:Str9+"0→Str9

:End

:End

:sub(Str4,7,6→Str5

:sub(Str5,1,1)+sub(Str5,6,1→Str6

:sub(Str5,2,4→Str8

:0→D

:For(X,3,0,‾1:If sub(Str8,4-X,1)="1":D+2^X→D:End

:If Str6="00":0→C

:If Str6="01":1→C

:If Str6="10":2→C

:If Str6="11":3→C

:16C+D+1→E:∟S2(E→F

:For(X,3,0,‾1

:If F≥2^X

:Then

:Str9+"1→Str9

:Else

:Str9+"0→Str9

:End

:End

:sub(Str4,13,6→Str5

:sub(Str5,1,1)+sub(Str5,6,1→Str6

:sub(Str5,2,4→Str8

:0→D

:For(X,3,0,‾1:If sub(Str8,4-X,1)="1":D+2^X→D:End

:If Str6="00":0→C

:If Str6="01":1→C

:If Str6="10":2→C

:If Str6="11":3→C

:16C+D+1→E:∟S3(E→F

:For(X,3,0,‾1

:If F≥2^X

:Then

:Str9+"1→Str9

:Else

:Str9+"0→Str9

:End

:End

:sub(Str4,19,6→Str5

:sub(Str5,1,1)+sub(Str5,6,1→Str6

:sub(Str5,2,4→Str8

:0→D

:For(X,3,0,‾1:If sub(Str8,4-X,1)="1":D+2^X→D:End

:If Str6="00":0→C

:If Str6="01":1→C

:If Str6="10":2→C

:If Str6="11":3→C

:16C+D+1→E:∟S4(E→F

:For(X,3,0,‾1

:If F≥2^X

:Then

:Str9+"1→Str9

:Else

:Str9+"0→Str9

:End

:End

:sub(Str4,25,6→Str5

:sub(Str5,1,1)+sub(Str5,6,1→Str6

:sub(Str5,2,4→Str8

:0→D

:For(X,3,0,‾1:If sub(Str8,4-X,1)="1":D+2^X→D:End

:If Str6="00":0→C

:If Str6="01":1→C

:If Str6="10":2→C

:If Str6="11":3→C

:16C+D+1→E:∟S5(E→F

:For(X,3,0,‾1

:If F≥2^X

:Then

:Str9+"1→Str9

:Else

:Str9+"0→Str9

:End

:End

:sub(Str4,31,6→Str5

:sub(Str5,1,1)+sub(Str5,6,1→Str6

:sub(Str5,2,4→Str8

:0→D

:For(X,3,0,‾1:If sub(Str8,4-X,1)="1":D+2^X→D:End

:If Str6="00":0→C

:If Str6="01":1→C

:If Str6="10":2→C

:If Str6="11":3→C

:16C+D+1→E:∟S6(E→F

:For(X,3,0,‾1

:If F≥2^X

:Then

:Str9+"1→Str9

:Else

:Str9+"0→Str9

:End

:End

:sub(Str4,37,6→Str5

:sub(Str5,1,1)+sub(Str5,6,1→Str6

:sub(Str5,2,4→Str8

:0→D

:For(X,3,0,‾1:If sub(Str8,4-X,1)="1":D+2^X→D:End

:If Str6="00":0→C

:If Str6="01":1→C

:If Str6="10":2→C

:If Str6="11":3→C

:16C+D+1→E:∟S7(E→F

:For(X,3,0,‾1

:If F≥2^X

:Then

:Str9+"1→Str9

:Else

:Str9+"0→Str9

:End

:End

:sub(Str4,43,6→Str5

:sub(Str5,1,1)+sub(Str5,6,1→Str6

:sub(Str5,2,4→Str8

:0→D

:For(X,3,0,‾1:If sub(Str8,4-X,1)="1":D+2^X→D:End

:If Str6="00":0→C

:If Str6="01":1→C

:If Str6="10":2→C

:If Str6="11":3→C

:16C+D+1→E:∟S8(E→F

:For(X,3,0,‾1

:If F≥2^X

:Then

:Str9+"1→Str9

:Else

:Str9+"0→Str9

:End

:End

:sub(Str9,2,32→Str4

:" →Str5

:For(X,1,32

:Str5+sub(Str4,∟PBOX(X),1→Str5

:End

:sub(Str5,2,32→Str4

:" →Str5

:For(X,1,32

:If sub(Str3,X,1)=sub(Str4,X,1)

:Then

:Str5+"0→Str5

:Else

:Str5+"1→Str5

:End

:End

:sub(Str5,2,32→Str4

:DelVar Str5DelVar Str6DelVar Str8DelVar Str9

:Str2+Str4→Str1

:End

:DelVar ∟S1DelVar ∟S2DelVar ∟S3DelVar ∟S4DelVar ∟S5DelVar ∟S6DelVar ∟S7DelVar ∟S8DelVar ∟EXDelVar ∟PBOX

:{40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31,38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27,34,2,42,10,50,18,58,26,33,1,41,9,49,17,57,25→∟FINPE

:" →Str3

:For(X,1,64

:Str3+sub(Str1,∟FINPE(X),1→Str3

:End

:DelVar ∟FINPEDelVar Str4

:Equ►Str(Y1,Str2

:DelVar Y1

:sub(Str3,2,64→Str1

:DelVar Str3

:Output(1,1,"Ciphertext:

:Output(2,1,Str1

:Output(6,1,"Parity Check"

:Output(7,1,Str2

:Pause

:ClrHome

:Output(1,1,"

Visit Calccrypto for info on crypto

KC2ZOF