// pseudo-mnemonics not supported by MWC-9 asm: // clrlwi // slwi // extrwi // insrwi pascal asm void ExpandKey(char *bigKey, char *smallKey); pascal asm void ExpandKey(char *bigKey, char *smallKey) { // note: r26 is not used stmw r13,-76(SP) stw r4,28(SP) stw r5,32(SP) subi r3,r3,1 li r16,0 li r17,0 li r29,0 li r30,0 lbz r13,35(SP) lbz r12,34(SP) lbz r10,33(SP) lbz r9,32(SP) lbz r19,31(SP) lbz r21,30(SP) lbz r20,29(SP) lbz r18,28(SP) li r0,8 mtctr r0 @1 mr r14,r10 mr r15,r12 mr r24,r10 mr r25,r12 xor r14,r14,r16 xor r15,r15,r17 mr r27,r14 mr r28,r15 mr r22,r9 mr r23,r13 mr r16,r29 mr r17,r30 xor r14,r9,r29 xor r15,r13,r30 xor r11,r19,r21 xor r10,r18,r20 mr r29,r18 xor r14,r14,r11 mr r16,r20 mr r30,r19 add r10,r10,r14 mr r17,r21 addi r10,r10,1 mr r12,r11 rlwinm r10,r10,2,0,31-2 mr r0,r15 rlwimi r10,r10,22+2,32-2,31 mr r31,r14 rlwinm r10,r10,0,24,31 mr r15,r28 xor r14,r27,r10 mr r28,r0 add r12,r12,r14 xor r14,r15,r10 rlwinm r12,r12,2,0,31-2 mr r27,r31 rlwimi r12,r12,22+2,32-2,31 mr r20,r24 rlwinm r12,r12,0,24,31 add r9,r18,r14 mr r15,r27 rlwinm r9,r9,2,0,31-2 xor r14,r28,r12 rlwimi r9,r9,22+2,32-2,31 mr r18,r22 rlwinm r9,r9,0,24,31 add r13,r14,r19 mr r21,r25 addi r13,r13,1 mr r19,r23 rlwinm r13,r13,2,0,31-2 stbu r9,1(r3) rlwimi r13,r13,22+2,32-2,31 stbu r10,1(r3) rlwinm r13,r13,0,24,31 stbu r12,1(r3) stbu r13,1(r3) bdnz @1 lmw r13,-76(SP) blr } pascal asm void EncryptAsm(long size, char *key, char *p); pascal asm void EncryptAsm(long size, char *key, char *p) { stmw r18,-52(SP) @1 lwz r23,0(r5) lwz r20,16(r4) lwz r26,4(r5) lwz r21,20(r4) xor r23,r23,r20 xor r26,r26,r21 rlwinm r19,r23,0+8,32-8,31 rlwinm r30,r23,8+8,32-8,31 xor r26,r26,r23 rlwinm r22,r23,16+8,32-8,31 rlwinm r23,r23,24+8-32,32-8,31 rlwinm r24,r26,0+8,32-8,31 rlwinm r25,r26,8+8,32-8,31 rlwinm r27,r26,24+8-32,32-8,31 rlwinm r26,r26,16+8,32-8,31 subi r29,r4,1 li r0,8 mtctr r0 @2 lbzu r11,1(r29) lbzu r12,1(r29) mr r31,r25 xor r25,r25,r24 mr r28,r26 xor r26,r26,r27 xor r25,r25,r11 xor r26,r26,r12 mr r18,r24 mr r21,r27 add r25,r25,r26 addi r25,r25,1 rlwinm r25,r25,2,0,31-2 rlwimi r25,r25,22+2,32-2,31 rlwinm r25,r25,0,24,31 add r26,r26,r25 add r24,r24,r25 rlwinm r26,r26,2,0,31-2 rlwinm r24,r24,2,0,31-2 rlwimi r26,r26,22+2,32-2,31 rlwimi r24,r24,22+2,32-2,31 rlwinm r26,r26,0,24,31 rlwinm r24,r24,0,24,31 add r27,r27,r26 addi r27,r27,1 rlwinm r27,r27,2,0,31-2 xor r26,r26,r22 rlwimi r27,r27,22+2,32-2,31 xor r25,r25,r30 rlwinm r27,r27,0,24,31 xor r24,r24,r19 xor r27,r27,r23 mr r23,r21 mr r30,r31 mr r22,r28 mr r19,r18 bdnz @2 mr r18,r24 mr r31,r25 rlwimi r23,r18,32-(0+8),0,(0+8)-1 mr r28,r26 rlwimi r23,r31,32-(8+8),8,(8+8)-1 mr r21,r27 rlwimi r23,r28,32-(16+8),16,(16+8)-1 xor r26,r26,r19 rlwimi r23,r21,32-(24+8),24,(24+8)-1 xor r24,r24,r22 rlwimi r26,r26,32-(16+8),16,(16+8)-1 xor r25,r25,r23 rlwimi r26,r24,32-(0+8),0,(0+8)-1 xor r27,r27,r30 rlwimi r26,r25,32-(8+8),8,(8+8)-1 lwz r20,24(r4) rlwimi r26,r27,32-(24+8),24,(24+8)-1 lwz r21,28(r4) xor r23,r23,r20 xor r26,r26,r21 stwu r23,0(r5) stwu r26,4(r5) addi r5,r5,8 subi r3,r3,8 cmpwi r3,0 bgt @1 lmw r18,-52(SP) blr } pascal asm void DecryptAsm(long size, char *key, char *p); pascal asm void DecryptAsm(long size, char *key, char *p) { stmw r18,-52(SP) @1 lwz r23,0(r5) lwz r20,24(r4) lwz r26,4(r5) lwz r21,28(r4) xor r23,r23,r20 xor r26,r26,r21 rlwinm r19,r23,0+8,32-8,31 rlwinm r30,r23,8+8,32-8,31 xor r26,r26,r23 rlwinm r22,r23,16+8,32-8,31 rlwinm r23,r23,24+8-32,32-8,31 rlwinm r24,r26,0+8,32-8,31 rlwinm r25,r26,8+8,32-8,31 rlwinm r27,r26,24+8-32,32-8,31 rlwinm r26,r26,16+8,32-8,31 addi r29,r4,14 li r0,8 mtctr r0 @2 lbz r11,0(r29) lbz r12,1(r29) mr r31,r25 xor r25,r25,r24 mr r28,r26 xor r26,r26,r27 xor r25,r25,r11 xor r26,r26,r12 mr r18,r24 mr r21,r27 add r25,r25,r26 addi r25,r25,1 rlwinm r25,r25,2,0,31-2 rlwimi r25,r25,22+2,32-2,31 rlwinm r25,r25,0,24,31 add r26,r26,r25 add r24,r24,r25 rlwinm r26,r26,2,0,31-2 rlwinm r24,r24,2,0,31-2 rlwimi r26,r26,22+2,32-2,31 rlwimi r24,r24,22+2,32-2,31 rlwinm r26,r26,0,24,31 rlwinm r24,r24,0,24,31 add r27,r27,r26 addi r27,r27,1 rlwinm r27,r27,2,0,31-2 xor r26,r26,r22 rlwimi r27,r27,22+2,32-2,31 xor r25,r25,r30 rlwinm r27,r27,0,24,31 xor r24,r24,r19 xor r27,r27,r23 mr r23,r21 mr r30,r31 mr r22,r28 mr r19,r18 subi r29,r29,2 bdnz @2 mr r18,r24 mr r31,r25 rlwimi r23,r18,32-(0+8),0,(0+8)-1 mr r28,r26 rlwimi r23,r31,32-(8+8),8,(8+8)-1 mr r21,r27 rlwimi r23,r28,32-(16+8),16,(16+8)-1 xor r26,r26,r19 rlwimi r23,r21,32-(24+8),24,(24+8)-1 xor r24,r24,r22 rlwimi r26,r26,32-(16+8),16,(16+8)-1 xor r25,r25,r23 rlwimi r26,r24,32-(0+8),0,(0+8)-1 xor r27,r27,r30 rlwimi r26,r25,32-(8+8),8,(8+8)-1 lwz r20,16(r4) rlwimi r12,r27,32-(24+8),24,(24+8)-1 lwz r26,20(r4) xor r23,r23,r20 xor r26,r26,r21 stwu r23,0(r5) stwu r26,4(r5) addi r5,r5,8 subi r3,r3,8 cmpwi r3,0 bgt @1 lmw r18,-52(SP) blr }