;************************************************************************* ;| ;| PROGARM : DES.asm ;| ;| FUNCTIONS: ENCRYPTION/EDCRYPTION ;| COMPILER : CROSS ASSEMBLER V1.2h ;| ;| USED IN : 80C52 ;| ;| AUTHORS : KIWI CHEN ;| ;| WRITTEN AT : 30-11-99 ;| ;| VERSION : V 1.0 ;| ;| UPDATES : ;| ;| INPUT: 1.Acc #0EH--------ENCRYPT ;| #ODH--------DECRYPT ;| OTHERS------RETURN ;| 2.DATA 08H~0FH ;| 3.KEY 20H~27H ;| OUTPUT: 00H~07H ;| SP: 40H ;| Free RAM 48H~7FH ;************************************************************************* KEYTEMP EQU 080H PSW EQU 0D0H RB3 EQU 018H TEMP EQU 020H ACC EQU 0E0H B EQU 0F0H XOR_TEMP EQU 038H ENCODE EQU 030H KeyGen_TEMP EQU 039H CODETEMP EQU 03AH MOV_COUNT EQU 03CH SOURCE EQU 03DH DISTINATION EQU 03EH SP EQU 081H DPL EQU 082H ;LOW BYTE OF DPTR DPH EQU 083H ;HIGH BYTE OF DPTR ORG 00H MOV SP,#40H CJNE A,#0DH,NEXT ;INSTRUCT DECRYPT AJMP DECRYPT NEXT: CJNE A,#0EH,END2 ;INSTRUCT ENCRYPT AJMP ENCRYPT END2: LJMP END1 ENCRYPT: ;---GENERATE KEY DATA --------------------------------------------------- ACALL KEY_GENERATOR ;---INITIAL ARRANGE------------------------------------------------------- MOV SOURCE,#08H MOV DISTINATION,#20H ACALL MOV_8_BYTES ACALL I_A MOV SOURCE,#00H MOV DISTINATION,#20H ACALL MOV_8_BYTES ;------------------------------------------------------------------------ MOV B,#080H MOV CODETEMP,#16 COCO: ACALL F_FUNCTION ACALL XOR_4_BYTES CALL MOVE_MOVE DJNZ CODETEMP,COCO ;--------FINAL ARRANGE------------------------ ACALL FINAL_ARRANGE LJMP END1 ;DECRYPTION------------------------------------------------------------ DECRYPT: ;---DECORD---------------------------------------------------------------- ;---GENERATE KEY DATA --------------------------------------------------- ACALL KEY_GENERATOR ;---INITIAL ARRANGE------------------------------------------------------- MOV SOURCE,#08H MOV DISTINATION,#20H ACALL MOV_8_BYTES ACALL I_A MOV SOURCE,#00H MOV DISTINATION,#20H ACALL MOV_8_BYTES ;--------------------------------------------------------------------------- MOV B,#0FFH MOV CODETEMP,#16 DEDE: ACALL F_FUNCTION_DECORD ACALL XOR_4_BYTES ACALL MOVE_MOVE DJNZ CODETEMP,DEDE ;--------FINAL ARRANGE------------------------ ACALL FINAL_ARRANGE LJMP END1 ;------END MAIN PROGRAM------------------------------------------------ I_A: ;---INITIAL ARRANGE PUSH PSW CLR PSW.3 CLR PSW.4 CLR A JNB 27H.1,IA1 SETB ACC.0 IA1: JNB 26H.1,IA2 SETB ACC.1 IA2: JNB 25H.1,IA3 SETB ACC.2 IA3: JNB 24H.1,IA4 SETB ACC.3 IA4: JNB 23H.1,IA5 SETB ACC.4 IA5: JNB 22H.1,IA6 SETB ACC.5 IA6: JNB 21H.1,IA7 SETB ACC.6 IA7: JNB 20H.1,IA8 SETB ACC.7 IA8: MOV R0,A ;----R1 CLR A JNB 27H.3,IA9 SETB ACC.0 IA9: JNB 26H.3,IA10 SETB ACC.1 IA10:JNB 25H.3,IA11 SETB ACC.2 IA11:JNB 24H.3,IA12 SETB ACC.3 IA12:JNB 23H.3,IA13 SETB ACC.4 IA13:JNB 22H.3,IA14 SETB ACC.5 IA14:JNB 21H.3,IA15 SETB ACC.6 IA15:JNB 20H.3,IA16 SETB ACC.7 IA16:MOV R1,A ;---R2 CLR A JNB 27H.5,IA17 SETB ACC.0 IA17:JNB 26H.5,IA18 SETB ACC.1 IA18:JNB 25H.5,IA19 SETB ACC.2 IA19:JNB 24H.5,IA20 SETB ACC.3 IA20:JNB 23H.5,IA21 SETB ACC.4 IA21:JNB 22H.5,IA22 SETB ACC.5 IA22:JNB 21H.5,IA23 SETB ACC.6 IA23:JNB 20H.5,IA24 SETB ACC.7 IA24:MOV R2,A ;---R3 CLR A JNB 27H.7,IA25 SETB ACC.0 IA25:JNB 26H.7,IA26 SETB ACC.1 IA26:JNB 25H.7,IA27 SETB ACC.2 IA27:JNB 24H.7,IA28 SETB ACC.3 IA28:JNB 23H.7,IA29 SETB ACC.4 IA29:JNB 22H.7,IA30 SETB ACC.5 IA30:JNB 21H.7,IA31 SETB ACC.6 IA31:JNB 20H.7,IA32 SETB ACC.7 IA32:MOV R3,A ;---R4 CLR A JNB 27H.0,IA33 SETB ACC.0 IA33:JNB 26H.0,IA34 SETB ACC.1 IA34:JNB 25H.0,IA35 SETB ACC.2 IA35:JNB 24H.0,IA36 SETB ACC.3 IA36:JNB 23H.0,IA37 SETB ACC.4 IA37:JNB 22H.0,IA38 SETB ACC.5 IA38:JNB 21H.0,IA39 SETB ACC.6 IA39:JNB 20H.0,IA40 SETB ACC.7 IA40:MOV R4,A ;---R5 CLR A JNB 27H.2,IA41 SETB ACC.0 IA41:JNB 26H.2,IA42 SETB ACC.1 IA42:JNB 25H.2,IA43 SETB ACC.2 IA43:JNB 24H.2,IA44 SETB ACC.3 IA44:JNB 23H.2,IA45 SETB ACC.4 IA45:JNB 22H.2,IA46 SETB ACC.5 IA46:JNB 21H.2,IA47 SETB ACC.6 IA47: JNB 20H.2,IA48 SETB ACC.7 IA48:MOV R5,A ;---R6 CLR A JNB 27H.4,IA49 SETB ACC.0 IA49:JNB 26H.4,IA50 SETB ACC.1 IA50:JNB 25H.4,IA51 SETB ACC.2 IA51:JNB 24H.4,IA52 SETB ACC.3 IA52:JNB 23H.4,IA53 SETB ACC.4 IA53:JNB 22H.4,IA54 SETB ACC.5 IA54:JNB 21H.4,IA55 SETB ACC.6 IA55:JNB 20H.4,IA56 SETB ACC.7 IA56:MOV R6,A ;---R7 CLR A JNB 27H.6,IA57 SETB ACC.0 IA57:JNB 26H.6,IA58 SETB ACC.1 IA58:JNB 25H.6,IA59 SETB ACC.2 IA59:JNB 24H.6,IA60 SETB ACC.3 IA60:JNB 23H.6,IA61 SETB ACC.4 IA61:JNB 22H.6,IA62 SETB ACC.5 IA62:JNB 21H.6,IA63 SETB ACC.6 IA63:JNB 20H.6,IA64 SETB ACC.7 IA64:MOV R7,A IA8X:POP PSW RET ;---END INITIAL ARRANGE----------------------------------------------------- MOVE_DB_TO_20H_27H: ;----MOVE DATA FROM CODE TO 20H~27H L0: CLR A MOVC A,@A+DPTR XCH A,@R0 INC DPTR INC R0 CJNE R0,#28H,L0 RET MOV_8_BYTES: PUSH PSW SETB PSW.4 CLR PSW.3 MOV MOV_COUNT,#8 MOV R0,SOURCE MOV R1,DISTINATION COUNT: MOV A,@R0 XCH A,@R1 INC R1 INC R0 DJNZ MOV_COUNT,COUNT POP PSW RET ;---END INITIAL ARRANGE----------------------------------------------------- ;---------------------------------------------------------------------------- F_FUNCTION: ACALL EXPAND_ARRANGE ACALL XOR_80H_18H ACALL S_BOXES ACALL SHRINK_ARRANGE RET ;---------------------------------------------------------------------------- ;---------------------------------------------------------------------------- F_FUNCTION_DECORD: ACALL EXPAND_ARRANGE ACALL XOR_FFH_1FH ACALL S_BOXES ACALL SHRINK_ARRANGE RET ;**************************************************************************** EXPAND_ARRANGE: ;---EXPAND_ARRANGE--------------------------------- ;Expand the 24H~27H(32bits) to RB3(**** **00)48bits ;---R0------------------------------ CLR A JNB 27H.7,E_A1 SETB ACC.2 E_A1: JNB 24H.0,E_A2 SETB ACC.3 E_A2: JNB 24H.1,E_A3 SETB ACC.4 E_A3: JNB 24H.2,E_A4 SETB ACC.5 E_A4: JNB 24H.3,E_A5 SETB ACC.6 E_A5: JNB 24H.4,E_A6 SETB ACC.7 E_A6: MOV 18H,A ;---R1------------------------- E_AX1: CLR A JNB 24H.3,E_A7 SETB ACC.2 E_A7: JNB 24H.4,E_A8 SETB ACC.3 E_A8: JNB 24H.5,E_A9 SETB ACC.4 E_A9: JNB 24H.6,E_A10 SETB ACC.5 E_A10: JNB 24H.7,E_A11 SETB ACC.6 E_A11: JNB 25H.0,E_A12 SETB ACC.7 E_A12: MOV 19H,A ;---R2------------------------------------ E_AX2: CLR A JNB 24H.7,E_A13 SETB ACC.2 E_A13: JNB 25H.0,E_A14 SETB ACC.3 E_A14: JNB 25H.1,E_A15 SETB ACC.4 E_A15: JNB 25H.2,E_A16 SETB ACC.5 E_A16: JNB 25H.3,E_A17 SETB ACC.6 E_A17: JNB 25H.4,E_A18 SETB ACC.7 E_A18: MOV 1AH,A ;---R3------------------------------------ E_AX3: CLR A JNB 25H.3,E_A19 SETB ACC.2 E_A19: JNB 25H.4,E_A20 SETB ACC.3 E_A20: JNB 25H.5,E_A21 SETB ACC.4 E_A21: JNB 25H.6,E_A22 SETB ACC.5 E_A22: JNB 25H.7,E_A23 SETB ACC.6 E_A23: JNB 26H.0,E_A24 SETB ACC.7 E_A24: MOV 1BH,A ;---R4------------------------------------ E_AX4: CLR A JNB 25H.7,E_A25 SETB ACC.2 E_A25: JNB 26H.0,E_A26 SETB ACC.3 E_A26: JNB 26H.1,E_A27 SETB ACC.4 E_A27: JNB 26H.2,E_A28 SETB ACC.5 E_A28: JNB 26H.3,E_A29 SETB ACC.6 E_A29: JNB 26H.4,E_A30 SETB ACC.7 E_A30: MOV 1CH,A ;---R5------------------------------------ E_AX5: CLR A JNB 26H.3,E_A31 SETB ACC.2 E_A31: JNB 26H.4,E_A32 SETB ACC.3 E_A32: JNB 26H.5,E_A33 SETB ACC.4 E_A33: JNB 26H.6,E_A34 SETB ACC.5 E_A34: JNB 26H.7,E_A35 SETB ACC.6 E_A35: JNB 27H.0,E_A36 SETB ACC.7 E_A36: MOV 1DH,A ;---R6------------------------------------ E_AX6: CLR A JNB 26H.7,E_A37 SETB ACC.2 E_A37: JNB 27H.0,E_A38 SETB ACC.3 E_A38: JNB 27H.1,E_A39 SETB ACC.4 E_A39: JNB 27H.2,E_A40 SETB ACC.5 E_A40: JNB 27H.3,E_A41 SETB ACC.6 E_A41: JNB 27H.4,E_A42 SETB ACC.7 E_A42: MOV 1EH,A ;---R7------------------------------------ E_AX7: CLR A JNB 27H.3,E_A43 SETB ACC.2 E_A43: JNB 27H.4,E_A44 SETB ACC.3 E_A44: JNB 27H.5,E_A45 SETB ACC.4 E_A45: JNB 27H.6,E_A46 SETB ACC.5 E_A46: JNB 27H.7,E_A47 SETB ACC.6 E_A47: JNB 24H.0,E_A48 SETB ACC.7 E_A48: MOV 1FH,A RET ;---END EXPAND_ARRANGE------------------------------------------------------- ;**************************************************************************** XOR_80H_18H: PUSH PSW CLR PSW.3 SETB PSW.4 ;-------------RB3 MOV R0,B MOV R1,#RB3 MOV XOR_TEMP,#020H XORR: MOV A,@R0 XRL A,@R1 INC R0 INC R1 PUSH 011H ;----PUSH R1 MOV R1,XOR_TEMP MOV @R1,A INC R1 MOV XOR_TEMP,R1 POP 011H CJNE R1,#20H,XORR MOV B,R0 POP PSW RET ;---END XOR 80H~88H TO RB3--------------------------------------------------- ;*********************************************************************************** XOR_FFH_1FH: ;---USE RB2 TO -------------------- PUSH PSW CLR PSW.3 SETB PSW.4 MOV R0,B MOV R1,#1FH MOV XOR_TEMP,#027H XORR1: MOV A,@R0 XRL A,@R1 DEC R0 DEC R1 PUSH 011H ;----PUSH R1 MOV R1,XOR_TEMP MOV @R1,A DEC R1 MOV XOR_TEMP,R1 POP 011H CJNE R1,#17H,XORR1 MOV B,R0 POP PSW RET ;**************************************************************************** XOR_4_BYTES: ;---00H~03H XOR 18H~1BH STORE IN 24H~27H--------------------- MOV A,18H XRL A,00H MOV 24H,A MOV A,19H XRL A,01H MOV 25H,A MOV A,1AH XRL A,02H MOV 26H,A MOV A,1BH XRL A,03H MOV 27H,A RET ;---END XOR 4 BYTES---------------------------------------------------------- ;**************************************************************************** S_BOXES: ;---USE RB3 TO STORE S_BOXES'S DATA PUSH PSW SETB PSW.4 SETB PSW.3 MOV DPTR,#S_BOXES_DATA ;---20H------------------------------------ CLR A JNB 20H.2,S1 SETB ACC.5 S1: JNB 20H.7,S2 SETB ACC.4 S2: JNB 20H.3,S3 SETB ACC.3 S3: JNB 20H.4,S4 SETB ACC.2 S4: JNB 20H.5,S5 SETB ACC.1 S5: JNB 20H.6,S6 SETB ACC.0 S6: MOVC A,@A+DPTR MOV R0,A SX: LCALL DPTR_add_40H ;----21H----------------------------- CLR A JNB 21H.2,S7 SETB ACC.5 S7: JNB 21H.7,S8 SETB ACC.4 S8: JNB 21H.3,S9 SETB ACC.3 S9: JNB 21H.4,S10 SETB ACC.2 S10: JNB 21H.5,S11 SETB ACC.1 S11: JNB 21H.6,S12 SETB ACC.0 S12: MOVC A,@A+DPTR MOV R1,A SX1: LCALL DPTR_add_40H ;----22H----------------------------- CLR A JNB 22H.2,S13 SETB ACC.5 S13: JNB 22H.7,S14 SETB ACC.4 S14: JNB 22H.3,S15 SETB ACC.3 S15: JNB 22H.4,S16 SETB ACC.2 S16: JNB 22H.5,S17 SETB ACC.1 S17: JNB 22H.6,S18 SETB ACC.0 S18: MOVC A,@A+DPTR MOV R2,A SX2: LCALL DPTR_add_40H ;----23H----------------------------- CLR A JNB 23H.2,S19 SETB ACC.5 S19: JNB 23H.7,S20 SETB ACC.4 S20: JNB 23H.3,S21 SETB ACC.3 S21: JNB 23H.4,S22 SETB ACC.2 S22: JNB 23H.5,S23 SETB ACC.1 S23: JNB 23H.6,S24 SETB ACC.0 S24: MOVC A,@A+DPTR MOV R3,A SX3: LCALL DPTR_add_40H ;----24H----------------------------- CLR A JNB 24H.2,S25 SETB ACC.5 S25: JNB 24H.7,S26 SETB ACC.4 S26: JNB 24H.3,S27 SETB ACC.3 S27: JNB 24H.4,S28 SETB ACC.2 S28: JNB 24H.5,S29 SETB ACC.1 S29: JNB 24H.6,S30 SETB ACC.0 S30: MOVC A,@A+DPTR MOV R4,A SX4: LCALL DPTR_add_40H ;----25H----------------------------- CLR A JNB 25H.2,S31 SETB ACC.5 S31: JNB 25H.7,S32 SETB ACC.4 S32: JNB 25H.3,S33 SETB ACC.3 S33: JNB 25H.4,S34 SETB ACC.2 S34: JNB 25H.5,S35 SETB ACC.1 S35: JNB 25H.6,S36 SETB ACC.0 S36: MOVC A,@A+DPTR MOV R5,A SX5: LCALL DPTR_add_40H ;----26H----------------------------- CLR A JNB 26H.2,S37 SETB ACC.5 S37: JNB 26H.7,S38 SETB ACC.4 S38: JNB 26H.3,S39 SETB ACC.3 S39: JNB 26H.4,S40 SETB ACC.2 S40: JNB 26H.5,S41 SETB ACC.1 S41: JNB 26H.6,S42 SETB ACC.0 S42: MOVC A,@A+DPTR MOV R6,A SX6: LCALL DPTR_add_40H ;----27H----------------------------- CLR A JNB 27H.2,S43 SETB ACC.5 S43: JNB 27H.7,S44 SETB ACC.4 S44: JNB 27H.3,S45 SETB ACC.3 S45: JNB 27H.4,S46 SETB ACC.2 S46: JNB 27H.5,S47 SETB ACC.1 S47: JNB 27H.6,S48 SETB ACC.0 S48: MOVC A,@A+DPTR MOV R7,A SX7: POP PSW RET ;**************************************************************************** SHRINK_ARRANGE: ;---SHRINK ARRANGE--------------------------------------- ;---MOV S_BOXES'S DATA FROM RB3(18H~1FH) TO 20H~27H MOV SOURCE,#18H MOV DISTINATION,#20H ACALL MOV_8_BYTES ;---USE RB3(18H~1FH) TO STORE THE SHRINK ARRANGE TABLE------------------------------------ PUSH PSW SETB PSW.4 SETB PSW.3 ;---18H-------------------------------------------------------------------- CLR A JNB 23H.0,SA1 SETB ACC.0 SA1: JNB 21H.1,SA2 SETB ACC.1 SA2: JNB 24H.0,SA3 SETB ACC.2 SA3: JNB 25H.3,SA4 SETB ACC.3 SA4: JNB 27H.3,SA5 SETB ACC.4 SA5: JNB 22H.0,SA6 SETB ACC.5 SA6: JNB 26H.0,SA7 SETB ACC.6 SA7: JNB 24H.3,SA8 SETB ACC.7 SA8: MOV R0,A ;---19H-------------------------------------------------------------------- SAX1: CLR A JNB 20H.3,SA9 SETB ACC.0 SA9: JNB 23H.1,SA10 SETB ACC.1 SA10: JNB 25H.1,SA11 SETB ACC.2 SA11: JNB 26H.2,SA12 SETB ACC.3 SA12: JNB 21H.3,SA13 SETB ACC.4 SA13: JNB 24H.2,SA14 SETB ACC.5 SA14: JNB 27H.1,SA15 SETB ACC.6 SA15: JNB 22H.2,SA16 SETB ACC.7 SA16: MOV R1,A ;---1AH-------------------------------------------------------------------- SAX2: CLR A JNB 20H.2,SA17 SETB ACC.0 SA17: JNB 21H.0,SA18 SETB ACC.1 SA18: JNB 25H.0,SA19 SETB ACC.2 SA19: JNB 23H.2,SA20 SETB ACC.3 SA20: JNB 27H.0,SA21 SETB ACC.4 SA21: JNB 26H.1,SA22 SETB ACC.5 SA22: JNB 20H.1,SA23 SETB ACC.6 SA23: JNB 22H.3,SA24 SETB ACC.7 SA24: MOV R2,A ;---1BH-------------------------------------------------------------------- SAX3: CLR A JNB 24H.1,SA25 SETB ACC.0 SA25: JNB 23H.3,SA26 SETB ACC.1 SA26: JNB 27H.2,SA27 SETB ACC.2 SA27: JNB 21H.2,SA28 SETB ACC.3 SA28: JNB 25H.2,SA29 SETB ACC.4 SA29: JNB 22H.1,SA30 SETB ACC.5 SA30: JNB 20H.0,SA31 SETB ACC.6 SA31: JNB 26H.3,SA32 SETB ACC.7 SA32: MOV R3,A SAX4: POP PSW RET MOVE_MOVE: ;---MOVE 04H~07H TO 00H~03H MOV 00H,04H MOV 01H,05H MOV 02H,06H MOV 03H,07H ;--- MOVE 24H~27H TO 04H~07H: MOV 04H,24H MOV 05H,25H MOV 06H,26H MOV 07H,27H RET ;---DPTR ADD 40H SUBRETUTION ------------------------------------------------ DPTR_add_40H: MOV A,#40H ADD A,DPL XCH A,DPL JNC END_ADD INC DPH END_ADD: RET ;---------------------------------------------------------------------------- ;---------------------------------------------------------------------------- ;*************************************************************************** FINAL_ARRANGE: ;----MOVE DATA TO 20H~27H MOV 20H,04H MOV 21H,05H MOV 22H,06H MOV 23H,07H MOV 24H,00H MOV 25H,01H MOV 26H,02H MOV 27H,03H ;---PC-1 ARRANGE ;---USE RB0 TO REGISTER PC-1 DATA ;---R0 CLR A JNB 24H.7,FA1 SETB ACC.0 FA1:JNB 20H.7,FA2 SETB ACC.1 FA2:JNB 25H.7,FA3 SETB ACC.2 FA3:JNB 21H.7,FA4 SETB ACC.3 FA4:JNB 26H.7,FA5 SETB ACC.4 FA5:JNB 22H.7,FA6 SETB ACC.5 FA6:JNB 27H.7,FA7 SETB ACC.6 FA7:JNB 23H.7,FA8 SETB ACC.7 FA8:MOV R0,A ;---R1 FAX1:CLR A JNB 24H.6,FA9 SETB ACC.0 FA9: JNB 20H.6,FA10 SETB ACC.1 FA10:JNB 25H.6,FA11 SETB ACC.2 FA11:JNB 21H.6,FA12 SETB ACC.3 FA12:JNB 26H.6,FA13 SETB ACC.4 FA13:JNB 22H.6,FA14 SETB ACC.5 FA14:JNB 27H.6,FA15 SETB ACC.6 FA15:JNB 23H.6,FA16 SETB ACC.7 FA16:MOV R1,A ;---R2 FAX2:CLR A JNB 24H.5,FA17 SETB ACC.0 FA17:JNB 20H.5,FA18 SETB ACC.1 FA18:JNB 25H.5,FA19 SETB ACC.2 FA19:JNB 21H.5,FA20 SETB ACC.3 FA20:JNB 26H.5,FA21 SETB ACC.4 FA21:JNB 22H.5,FA22 SETB ACC.5 FA22:JNB 27H.5,FA23 SETB ACC.6 FA23:JNB 23H.5,FA24 SETB ACC.7 FA24:MOV R2,A ;---R3 FAX3:CLR A JNB 24H.4,FA25 SETB ACC.0 FA25:JNB 20H.4,FA26 SETB ACC.1 FA26:JNB 25H.4,FA27 SETB ACC.2 FA27:JNB 21H.4,FA28 SETB ACC.3 FA28:JNB 26H.4,FA29 SETB ACC.4 FA29:JNB 22H.4,FA30 SETB ACC.5 FA30:JNB 27H.4,FA31 SETB ACC.6 FA31:JNB 23H.4,FA32 SETB ACC.7 FA32:MOV R3,A ;---R4 FAX4:CLR A JNB 24H.3,FA33 SETB ACC.0 FA33:JNB 20H.3,FA34 SETB ACC.1 FA34:JNB 25H.3,FA35 SETB ACC.2 FA35:JNB 21H.3,FA36 SETB ACC.3 FA36:JNB 26H.3,FA37 SETB ACC.4 FA37:JNB 22H.3,FA38 SETB ACC.5 FA38:JNB 27H.3,FA39 SETB ACC.6 FA39:JNB 23H.3,FA40 SETB ACC.7 FA40:MOV R4,A ;---R5 FAX5:CLR A JNB 24H.2,FA41 SETB ACC.0 FA41:JNB 20H.2,FA42 SETB ACC.1 FA42:JNB 25H.2,FA43 SETB ACC.2 FA43:JNB 21H.2,FA44 SETB ACC.3 FA44:JNB 26H.2,FA45 SETB ACC.4 FA45:JNB 22H.2,FA46 SETB ACC.5 FA46:JNB 27H.2,FA47 SETB ACC.6 FA47:JNB 23H.2,FA48 SETB ACC.7 FA48:MOV R5,A ;---R6 FAX6:CLR A JNB 24H.1,FA49 SETB ACC.0 FA49:JNB 20H.1,FA50 SETB ACC.1 FA50:JNB 25H.1,FA51 SETB ACC.2 FA51:JNB 21H.1,FA52 SETB ACC.3 FA52:JNB 26H.1,FA53 SETB ACC.4 FA53:JNB 22H.1,FA54 SETB ACC.5 FA54:JNB 27H.1,FA55 SETB ACC.6 FA55:JNB 23H.1,FA56 SETB ACC.7 FA56:MOV R6,A ;---R7 FAX7:CLR A JNB 24H.0,FA57 SETB ACC.0 FA57:JNB 20H.0,FA58 SETB ACC.1 FA58:JNB 25H.0,FA59 SETB ACC.2 FA59:JNB 21H.0,FA60 SETB ACC.3 FA60:JNB 26H.0,FA61 SETB ACC.4 FA61:JNB 22H.0,FA62 SETB ACC.5 FA62:JNB 27H.0,FA63 SETB ACC.6 FA63:JNB 23H.0,FA64 SETB ACC.7 FA64:MOV R7,A FAX8: RET ;---------------------------------------------------------------------------- ;************************************************************************* ;* Function: Key Generation ;* Input : 20h~27h(8bytes) ;* Return : 80h~FFh(128bytes) ;* Change : ;************************************************************************* KEY_GENERATOR: ACALL PC_1_ARRANGE ;---After PC-1 arrange the data stored in RB0 ;----MOVE PC-1DATA(RB0) TO 20H~27H MOV SOURCE,#00H MOV DISTINATION,#20H ACALL MOV_8_BYTES ;---KEY GENERATION LOOP---------------------------------------- MOV R0,#KEYTEMP MOV KeyGEN_TEMP,#16 ;--ROLATION 16 TIMES MOV DPTR,#ROL_TIMES CLR A KeyGen: MOVC A,@A+DPTR XCH A,B ;--------MOV A TO B ROL: ACALL ROLATION_RIGHT DJNZ B,ROL LCALL PC_2_ARRANGE INC DPTR DJNZ KeyGEN_TEMP,KeyGen ;----------------------------------------------------------------------------------- RET ;------------------------------------------------------------------------------- ROLATION_RIGHT: ;---Rolation right 20H~27H--------------------------------------------------- ;----ROLATION_RIGHT 20H~23H 1 BIT JB 20H.0,L1 CLR 23H.7 AJMP L1B L1: SETB 23H.7 L1B: CLR C XCH A,23H RRC A XCH A,23H JC L2 CLR 22H.7 AJMP L2B L2: SETB 22H.7 L2B: CLR C XCH A,22H RRC A XCH A,22H JC L3 CLR 21H.7 AJMP L3B L3: SETB 21H.7 L3B: CLR C XCH A,21H RRC A XCH A,21H JC L4 CLR 20H.7 AJMP L4B L4: SETB 20H.7 L4B: CLR C XCH A,20H RRC A XCH A,20H ;----ROLATION_RIGHT 24H~27H 1 BIT JB 24H.0,L5 CLR 27H.7 AJMP L5B L5: SETB 27H.7 L5B: CLR C XCH A,27H RRC A XCH A,27H JC L6 CLR 26H.7 AJMP L6B L6: SETB 26H.7 L6B: CLR C XCH A,26H RRC A XCH A,26H JC L7 CLR 25H.7 AJMP L7B L7: SETB 25H.7 L7B: CLR C XCH A,25H RRC A XCH A,25H JC L8 CLR 24H.7 AJMP L8B L8: SETB 24H.7 L8B: CLR C XCH A,24H RRC A XCH A,24H RET ;--------------------------------------------------------------------------- PC_1_ARRANGE: ;---PC-1 ARRANGE---------------------------------- ;----MOVE KEY_DATA TO 20H~27H ;---PC-1 ARRANGE ;---USE RB0 TO REGISTER PC-1 DATA ;---R0 CLR A JNB 27H.0,PC11 SETB ACC.0 PC11:JNB 26H.0,PC12 SETB ACC.1 PC12:JNB 25H.0,PC13 SETB ACC.2 PC13:JNB 24H.0,PC14 SETB ACC.3 PC14:JNB 23H.0,PC15 SETB ACC.4 PC15:JNB 22H.0,PC16 SETB ACC.5 PC16:JNB 21H.0,PC17 SETB ACC.6 PC17:MOV R0,A ;---R1 PC1X2:CLR A JNB 20H.0,PC18 SETB ACC.0 PC18: JNB 27H.1,PC19 SETB ACC.1 PC19: JNB 26H.1,PC110 SETB ACC.2 PC110:JNB 25H.1,PC111 SETB ACC.3 PC111:JNB 24H.1,PC112 SETB ACC.4 PC112:JNB 23H.1,PC113 SETB ACC.5 PC113:JNB 22H.1,PC114 SETB ACC.6 PC114:MOV R1,A ;---R2 PC1X3:CLR A JNB 21H.1,PC115 SETB ACC.0 PC115:JNB 20H.1,PC116 SETB ACC.1 PC116:JNB 27H.2,PC117 SETB ACC.2 PC117:JNB 26H.2,PC118 SETB ACC.3 PC118:JNB 25H.2,PC119 SETB ACC.4 PC119:JNB 24H.2,PC120 SETB ACC.5 PC120:JNB 23H.2,PC121 SETB ACC.6 PC121:MOV R2,A ;---R3 PC1X4:CLR A JNB 22H.2,PC122 SETB ACC.0 PC122:JNB 21H.2,PC123 SETB ACC.1 PC123:JNB 20H.2,PC124 SETB ACC.2 PC124:JNB 27H.3,PC125 SETB ACC.3 PC125:JNB 26H.3,PC126 SETB ACC.4 PC126:JNB 25H.3,PC127 SETB ACC.5 PC127:JNB 24H.3,PC128 SETB ACC.6 PC128:MOV R3,A ;---R4 PC1X5:CLR A JNB 27H.6,PC129 SETB ACC.0 PC129:JNB 26H.6,PC130 SETB ACC.1 PC130:JNB 25H.6,PC131 SETB ACC.2 PC131:JNB 24H.6,PC132 SETB ACC.3 PC132:JNB 23H.6,PC133 SETB ACC.4 PC133:JNB 22H.6,PC134 SETB ACC.5 PC134:JNB 21H.6,PC135 SETB ACC.6 PC135:MOV R4,A ;---R5 PC1X6:CLR A JNB 20H.6,PC136 SETB ACC.0 PC136:JNB 27H.5,PC137 SETB ACC.1 PC137:JNB 26H.5,PC138 SETB ACC.2 PC138:JNB 25H.5,PC139 SETB ACC.3 PC139:JNB 24H.5,PC140 SETB ACC.4 PC140:JNB 23H.5,PC141 SETB ACC.5 PC141:JNB 22H.5,PC142 SETB ACC.6 PC142:MOV R5,A ;---R6 PC1X7: CLR A JNB 21H.5,PC143 SETB ACC.0 PC143:JNB 20H.5,PC144 SETB ACC.1 PC144:JNB 27H.4,PC145 SETB ACC.2 PC145:JNB 26H.4,PC146 SETB ACC.3 PC146:JNB 25H.4,PC147 SETB ACC.4 PC147:JNB 24H.4,PC148 SETB ACC.5 PC148:JNB 23H.4,PC149 SETB ACC.6 PC149:MOV R6,A ;---R7 PC1X8: CLR A JNB 22H.4,PC150 SETB ACC.0 PC150:JNB 21H.4,PC151 SETB ACC.1 PC151:JNB 20H.4,PC152 SETB ACC.2 PC152:JNB 23H.3,PC153 SETB ACC.3 PC153:JNB 22H.3,PC154 SETB ACC.4 PC154:JNB 21H.3,PC155 SETB ACC.5 PC155:JNB 20H.3,PC156 SETB ACC.6 PC156:MOV R7,A RET ;---END PC-1 ARRANGE------------------------------- PC_2_ARRANGE: ;---PC-2 ARRANGE------------------------------------- ;---MOVE TO 80H CLR A JNB 21H.6,PC21 SETB ACC.2 PC21: JNB 22H.2,PC22 SETB ACC.3 PC22: JNB 21H.3,PC23 SETB ACC.4 PC23: JNB 23H.2,PC24 SETB ACC.5 PC24: JNB 20H.0,PC25 SETB ACC.6 PC25: JNB 20H.4,PC26 SETB ACC.7 PC26: XCH A,@R0 INC R0 ;---MOVE TO 81H PC2X1: CLR A JNB 20H.2,PC27 SETB ACC.2 PC27: JNB 23H.6,PC28 SETB ACC.3 PC28: JNB 22H.0,PC29 SETB ACC.4 PC29: JNB 20H.5,PC210 SETB ACC.5 PC210: JNB 22H.6,PC211 SETB ACC.6 PC211: JNB 21H.2,PC212 SETB ACC.7 PC212: XCH A,@R0 INC R0 ;---MOVE TO 82H PC2X2: CLR A JNB 23H.1,PC213 SETB ACC.2 PC213: JNB 22H.4,PC214 SETB ACC.3 PC214: JNB 21H.4,PC215 SETB ACC.4 PC215: JNB 20H.3,PC216 SETB ACC.5 PC216: JNB 23H.4,PC217 SETB ACC.6 PC217: JNB 21H.0,PC218 SETB ACC.7 PC218: XCH A,@R0 INC R0 ;---MOVE T0 83H PC2X3: CLR A JNB 22H.1,PC219 SETB ACC.2 PC219: JNB 20H.6,PC220 SETB ACC.3 PC220: JNB 23H.5,PC221 SETB ACC.4 PC221: JNB 22H.5,PC222 SETB ACC.5 PC222: JNB 21H.5,PC223 SETB ACC.6 PC223: JNB 20H.1,PC224 SETB ACC.7 PC224: XCH A,@R0 INC R0 ;---MOVE TO 84H PC2X4: CLR A JNB 25H.5,PC225 SETB ACC.2 PC225: JNB 27H.2,PC226 SETB ACC.3 PC226: JNB 24H.2,PC227 SETB ACC.4 PC227: JNB 25H.1,PC228 SETB ACC.5 PC228: JNB 26H.4,PC229 SETB ACC.6 PC229: JNB 27H.5,PC230 SETB ACC.7 PC230: XCH A,@R0 INC R0 ;---MOVE TO 85H PC2X5: CLR A JNB 24H.1,PC231 SETB ACC.2 PC231: JNB 25H.4,PC232 SETB ACC.3 PC232: JNB 27H.1,PC233 SETB ACC.4 PC233: JNB 26H.2,PC234 SETB ACC.5 PC234: JNB 24H.4,PC235 SETB ACC.6 PC235: JNB 26H.5,PC236 SETB ACC.7 PC236: XCH A,@R0 INC R0 ;---MOVE TO 86H PC2X6: CLR A JNB 26H.1,PC237 SETB ACC.2 PC237: JNB 26H.6,PC238 SETB ACC.3 PC238: JNB 25H.3,PC239 SETB ACC.4 PC239: JNB 27H.6,PC240 SETB ACC.5 PC240: JNB 24H.5,PC241 SETB ACC.6 PC241: JNB 27H.3,PC242 SETB ACC.7 PC242: XCH A,@R0 INC R0 ;---MOVE TO 87H PC2X7: CLR A JNB 26H.3,PC243 SETB ACC.2 PC243: JNB 25H.6,PC244 SETB ACC.3 PC244: JNB 27H.0,PC245 SETB ACC.4 PC245: JNB 25H.0,PC246 SETB ACC.5 PC246: JNB 24H.0,PC247 SETB ACC.6 PC247: JNB 24H.3,PC248 SETB ACC.7 PC248: XCH A,@R0 INC R0 RET ROL_TIMES: DB 01H,01H,02H,02H,02H,02H,02H,02H DB 01H,02H,02H,02H,02H,02H,02H,01H S_BOXES_DATA: DB 0EH,04H,0DH,01H,02H,0FH,0BH,08H,03H,0AH,06H,0CH,05H,09H,00H,07H DB 00H,0FH,07H,04H,0EH,02H,0DH,01H,0AH,06H,0CH,0BH,09H,05H,03H,08H DB 04H,01H,0EH,08H,0DH,06H,02H,0BH,0FH,0CH,09H,07H,03H,0AH,05H,00H DB 0FH,0CH,08H,02H,04H,09H,01H,07H,05H,0BH,03H,0EH,0AH,00H,06H,0DH DB 0FH,01H,08H,0EH,06H,0BH,03H,04H,09H,07H,02H,0DH,0CH,00H,05H,0AH DB 03H,0DH,04H,07H,0FH,02H,08H,0EH,0CH,00H,01H,0AH,06H,09H,0BH,05H DB 00H,0EH,07H,0BH,0AH,04H,0DH,01H,05H,08H,0CH,06H,09H,03H,02H,0FH DB 0DH,08H,0AH,01H,03H,0FH,04H,02H,0BH,06H,07H,0CH,00H,05H,0EH,09H DB 0AH,00H,09H,0EH,06H,03H,0FH,05H,01H,0DH,0CH,07H,0BH,04H,02H,08H DB 0DH,07H,00H,09H,03H,04H,06H,0AH,02H,08H,05H,0EH,0CH,0BH,0FH,01H DB 0DH,06H,04H,09H,08H,0FH,03H,00H,0BH,01H,02H,0CH,05H,0AH,0EH,07H DB 01H,0AH,0DH,00H,06H,09H,08H,07H,04H,0FH,0EH,03H,0BH,05H,02H,0CH DB 07H,0DH,0EH,03H,00H,06H,09H,0AH,01H,02H,08H,05H,0BH,0CH,04H,0FH DB 0DH,08H,0BH,05H,06H,0FH,00H,03H,04H,07H,02H,0CH,01H,0AH,0EH,09H DB 0AH,06H,09H,00H,0CH,0BH,07H,0DH,0FH,01H,03H,0EH,05H,02H,08H,04H DB 03H,0FH,00H,06H,0AH,01H,0DH,08H,09H,04H,05H,0BH,0CH,07H,02H,0EH DB 02H,0CH,04H,01H,07H,0AH,0BH,06H,08H,05H,03H,0FH,0DH,00H,0EH,09H DB 0EH,0BH,02H,0CH,04H,07H,0DH,01H,05H,00H,0FH,0AH,03H,09H,08H,06H DB 04H,02H,01H,0BH,0AH,0DH,07H,08H,0FH,09H,0CH,05H,06H,03H,00H,0EH DB 0BH,08H,0CH,07H,01H,0EH,02H,0DH,06H,0FH,00H,09H,0AH,04H,05H,03H DB 0CH,01H,0AH,0FH,09H,02H,06H,08H,00H,0DH,03H,04H,0EH,07H,05H,0BH DB 0AH,0FH,04H,02H,07H,0CH,09H,05H,06H,01H,0DH,0EH,00H,0BH,03H,08H DB 09H,0EH,0FH,05H,02H,08H,0CH,03H,07H,00H,04H,0AH,01H,0DH,0BH,06H DB 04H,03H,02H,0CH,09H,05H,0FH,0AH,0BH,0EH,01H,07H,06H,00H,08H,0DH DB 04H,0BH,02H,0EH,0FH,00H,08H,0DH,03H,0CH,09H,07H,05H,0AH,06H,01H DB 0DH,00H,0BH,07H,04H,09H,01H,0AH,0EH,03H,05H,0CH,02H,0FH,08H,06H DB 01H,04H,0BH,0DH,0CH,03H,07H,0EH,0AH,0FH,06H,08H,00H,05H,09H,02H DB 06H,0BH,0DH,08H,01H,04H,0AH,07H,09H,05H,00H,0FH,0EH,02H,03H,0CH DB 0DH,02H,08H,04H,06H,0FH,0BH,01H,0AH,09H,03H,0EH,05H,00H,0CH,07H DB 01H,0FH,0DH,08H,0AH,03H,07H,04H,0CH,05H,06H,0BH,00H,0EH,09H,02H DB 07H,0BH,04H,01H,09H,0CH,0EH,02H,00H,06H,0AH,0DH,0FH,03H,05H,08H DB 02H,01H,0EH,07H,04H,0AH,08H,0DH,0FH,0CH,09H,00H,03H,05H,06H,0BH END1: END