10 'This is a sample program which uses the DES module to encrypt 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 ENC.FNC=0 'ENCRYPT/DECRYPT code (ENC=0; DEC=0FFh) 149 'This prog. will NOT DECRYPT in CBC mode. 150 CPR.TXT$="########"+"" 'Make room for ciphertext (see Basic manual, 152 'page C-9). 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 "Plaintext file"; PTXT$ 186 INPUT "Ciphertext file"; CTXT$ 188 ' 190 OPEN PTXT$ AS #1 LEN=8 200 OPEN CTXT$ 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,ENC.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 370 PLN.TXT$=A$ 'Get plaintext block 380 ' 390 DEF SEG=CIPHR.SEG 400 IF (CIPHR.MOD$="CBC") THEN CALL DO.XOR(PLN.TXT$,CPR.TXT$) 401 'ARG1=ARG1 XOR ARG2 410 CALL CIPHER(PLN.TXT$,CPR.TXT$) 'Perform encryption. 420 DEF SEG 430 ' 440 LSET B$=CPR.TXT$ 455 IF J MOD 128 = 0 THEN PRINT J\128; "k "; 450 PUT #2,J 460 NEXT J 470 CLOSE 480 ' 490 END