; PROCEDURE ExpandKey(bigKey: Bytes32; smallKey: DoubleWord); EXPANDKEY PROC EXPORT MOVEM.L A0-A6/D2-D7,-(A7) MOVEA.L $0038(A7),A3 ; A3 points to small key MOVEA.L $003C(A7),A4 ; A4 points to big key MOVEQ #0,D5 MOVEA.L D5,A6 SUBA.L A0,A0 MOVE.B $0007(A3),D3 MOVE.B $0006(A3),D2 MOVE.B $0005(A3),D1 MOVE.B $0004(A3),D0 MOVE.B $0003(A3),D6 MOVE.B $0002(A3),D7 SWAP D7 SWAP D6 MOVE.B $0001(A3),D7 MOVE.B (A3),D6 @1 MOVE.B D2,D4 SWAP D4 MOVE.B D1,D4 MOVEA.L D4,A2 EOR.L D5,D4 MOVEA.L D4,A5 MOVE.B D3,D4 SWAP D4 MOVE.B D0,D4 MOVEA.L D4,A1 MOVE.L A6,D5 EOR.L D5,D4 MOVEA.L D6,A6 MOVE.L D7,D5 MOVE.L D6,D1 EOR.L D7,D1 MOVE.L D1,D2 SWAP D2 EOR.B D2,D4 ADD.B D4,D1 ADDQ.B #1,D1 ROL.B #2,D1 EXG D4,A5 EOR.B D1,D4 ADD.B D4,D2 ROL.B #2,D2 SWAP D4 EOR.B D1,D4 MOVE.B D6,D0 ADD.B D4,D0 ROL.B #2,D0 MOVE.L A5,D4 SWAP D4 EOR.B D2,D4 MOVE.B D4,D3 SWAP D6 ADD.B D6,D3 ADDQ.B #1,D3 ROL.B #2,D3 MOVE.L A1,D6 MOVE.L A2,D7 MOVE.B D0,(A4)+ MOVE.B D1,(A4)+ MOVE.B D2,(A4)+ MOVE.B D3,(A4)+ ADDQ.L #1,A0 CMPA.W #8,A0 BNE.B @1 MOVEM.L (A7)+,D2-D7/A0-A6 MOVE.L (A7)+,A0 LEA 8(A7),A7 JMP (A0) ENDPROC ; PROCEDURE EncryptAsm(size: Longint; key: Bytes32; p: Pointer); ENCRYPTASM PROC EXPORT MOVEM.L A0-A6/D2-D7,-(A7) MOVEA.L $0038(A7),A1 MOVEA.L $003C(A7),A0 MOVEA.L $0040(A7),A6 @1 MOVE.L (A1),D3 MOVE.L $0004(A1),D6 MOVE.L $0010(A0),D0 MOVE.L $0014(A0),D1 EOR.L D0,D3 EOR.L D1,D6 EOR.L D3,D6 MOVE.B D6,D7 SWAP D6 MOVE.B D6,D5 ROR.L #8,D6 MOVE.B D6,D4 SWAP D6 MOVE.L D3,D2 ROR.L #8,D2 SUBA.L A3,A3 MOVEA.L A0,A4 @2 MOVE.W D4,D1 SWAP D1 MOVE.W D6,D1 MOVEA.L D1,A2 MOVE.W D5,D1 SWAP D1 MOVE.W D7,D1 EOR.B D4,D5 MOVE.B (A4)+,D0 EOR.B D0,D5 EOR.B D7,D6 MOVE.B (A4)+,D0 EOR.B D0,D6 ADD.B D6,D5 ADDQ.B #1,D5 ROL.B #2,D5 ADD.B D5,D6 ROL.B #2,D6 ADD.B D5,D4 ADD.B D6,D7 ROL.B #2,D4 ADDQ.L #1,D7 ROL.B #2,D7 EOR.B D3,D7 EOR.B D2,D6 SWAP D3 SWAP D2 EOR.B D3,D5 EOR.B D2,D4 MOVE.L D1,D3 MOVE.L A2,D2 ADDQ.W #1,A3 CMPA.W #8,A3 BNE.B @2 MOVE.W D4,D1 SWAP D1 MOVE.W D6,D1 MOVEA.L D1,A2 MOVE.W D5,D1 SWAP D1 MOVE.W D7,D1 EOR.B D3,D7 EOR.B D2,D6 SWAP D3 SWAP D2 EOR.B D3,D5 EOR.B D2,D4 MOVE.L #$00FF00FF,D0 AND.L D0,D1 MOVE.L A2,D3 AND.L D0,D3 ROL.L #8,D3 OR.L D1,D3 SWAP D6 MOVE.B D4,D6 ROL.L #8,D6 MOVE.B D5,D6 SWAP D6 MOVE.B D7,D6 MOVE.L $0018(A0),D0 MOVE.L $001C(A0),D1 EOR.L D0,D3 EOR.L D1,D6 MOVE.L D3,(A1)+ MOVE.L D6,(A1)+ SUBQ.L #8,A6 CMPA.W #0,A6 BNE.W @1 MOVEM.L (A7)+,D2-D7/A0-A6 MOVE.L (A7)+,A0 LEA 12(A7),A7 JMP (A0) ENDPROC ; PROCEDURE DecryptAsm(size: Longint; key: Bytes32; p: Ptr); DECRYPTASM PROC EXPORT MOVEM.L A0-A6/D2-D7,-(A7) MOVEA.L $0038(A7),A1 MOVEA.L $003C(A7),A0 MOVEA.L $0040(A7),A6 @1 MOVE.L (A1),D3 MOVE.L $0004(A1),D6 MOVE.L $0018(A0),D0 MOVE.L $001C(A0),D1 EOR.L D0,D3 EOR.L D1,D6 EOR.L D3,D6 MOVE.B D6,D7 SWAP D6 MOVE.B D6,D5 ROR.L #8,D6 MOVE.B D6,D4 SWAP D6 MOVE.L D3,D2 ROR.L #8,D2 SUBA.L A3,A3 LEA $000E(A0),A4 @2 MOVE.W D4,D1 SWAP D1 MOVE.W D6,D1 MOVEA.L D1,A2 MOVE.W D5,D1 SWAP D1 MOVE.W D7,D1 EOR.B D4,D5 MOVE.B (A4)+,D0 EOR.B D0,D5 EOR.B D7,D6 MOVE.B (A4)+,D0 EOR.B D0,D6 ADD.B D6,D5 ADDQ.B #1,D5 ROL.B #2,D5 ADD.B D5,D6 ROL.B #2,D6 ADD.B D5,D4 ADD.B D6,D7 ROL.B #2,D4 ADDQ.L #1,D7 ROL.B #2,D7 EOR.B D3,D7 EOR.B D2,D6 SWAP D3 SWAP D2 EOR.B D3,D5 EOR.B D2,D4 MOVE.L D1,D3 MOVE.L A2,D2 SUBQ.L #4,A4 ADDQ.W #1,A3 CMPA.W #$0008,A3 BNE.B @2 MOVE.W D4,D1 SWAP D1 MOVE.W D6,D1 MOVEA.L D1,A2 MOVE.W D5,D1 SWAP D1 MOVE.W D7,D1 EOR.B D3,D7 EOR.B D2,D6 SWAP D3 SWAP D2 EOR.B D3,D5 EOR.B D2,D4 MOVE.L #$00FF00FF,D0 AND.L D0,D1 MOVE.L A2,D3 AND.L D0,D3 ROL.L #8,D3 OR.L D1,D3 SWAP D6 MOVE.B D4,D6 ROL.L #8,D6 MOVE.B D5,D6 SWAP D6 MOVE.B D7,D6 MOVE.L $0010(A0),D0 MOVE.L $0014(A0),D1 EOR.L D0,D3 EOR.L D1,D6 MOVE.L D3,(A1)+ MOVE.L D6,(A1)+ SUBQ.L #8,A6 CMPA.W #0,A6 BNE.W @1 MOVEM.L (A7)+,D2-D7/A0-A6 MOVE.L (A7)+,A0 LEA 12(A7),A7 JMP (A0) ENDPROC END