10 'This is a sample program which uses the DES module to decrypt files 20 'in either CBC or ECB mode. Mode controlled by 'CIPHR.MOD$' string. 30 ' 100 DEFINT A-Z 110 CIPHR.SEG=&H1F00 'This is the absolute load addr. (offset=0) 112 'The DES module MUST be loaded at offset 0. 114 '(The segment may be in any unused area of mem.) 115 ' 120 DEF SEG=CIPHR.SEG 130 BLOAD "DESMODUL.BSV",0 'Load the module. 140 DEF SEG 145 ' 146 CIPHR.MOD$="CBC" 'Set ciphering mode to CBC 148 DEC.FNC=&HFF 'ENCRYPT/DECRYPT code (ENC=0; DEC=0FFh) 149 'This prog. will NOT ENCRYPT in CBC mode. 150 CPR.TXT$="########"+"" 'Make room for ciphertext (see Basic manual, 152 'page C-9). 153 PLN.TXT$="########"+"" 'Save dummy string into PLN.TXT too (same reason) 155 ' This is also the Initializing Vector for CBC 160 SET.KEY=15 'Entry point for SET.KEY subroutine (offset) 170 DO.XOR=12 'Entry point for XOR subroutine 180 CIPHER=9 'Entry point for CIPHER subroutine 182 ' 184 INPUT "Ciphertext file"; CTXT$ 186 INPUT "Plaintext file"; PTXT$ 188 ' 190 OPEN CTXT$ AS #1 LEN=8 200 OPEN PTXT$ AS #2 LEN=8 210 FIELD #1, 8 AS A$ 220 FIELD #2, 8 AS B$ 'Open files for random I/O 230 ' 260 DEF SEG=CIPHR.SEG 270 POKE 0,DEF.FNC 'Set 'ENCRYPT' flag 280 DEF SEG 290 ' 300 HEX.KEY$="AAAAAAAA" 'Key (=41h,41h,41h,...in this example) 310 DEF SEG=CIPHR.SEG 320 CALL SET.KEY(HEX.KEY$) 'Make subkeys for ENCRYPT 330 DEF SEG 340 ' 350 FOR J=1 TO (LOF(1)+7)\8 360 GET #1,J 365 CPR.TXT.LAST$=CPR.TXT$ 'Save old ciphertext block for XOR. 370 CPR.TXT$=A$ 'Get new ciphertext block 380 ' 390 DEF SEG=CIPHR.SEG 410 CALL CIPHER(CPR.TXT$,PLN.TXT$) 'Perform decryption 415 IF (CIPHR.MOD$="CBC") THEN CALL DO.XOR(PLN.TXT$,CPR.TXT$) 416 'ARG1=ARG1 XOR ARG2 420 DEF SEG 430 ' 440 LSET B$=PLN.TXT$ 455 IF J MOD 128 = 0 THEN PRINT J\128; "k "; 450 PUT #2,J 460 NEXT J 470 CLOSE 480 ' 490 END