Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* SPDX-License-Identifier: GPL-2.0-or-later */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  * AES modes (ECB/CBC/CTR/XTS) for PPC AES implementation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  * Copyright (c) 2015 Markus Stockhausen <stockhausen@collogia.de>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) #include <asm/ppc_asm.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) #include "aes-spe-regs.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) #ifdef __BIG_ENDIAN__			/* Macros for big endian builds	*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) #define LOAD_DATA(reg, off) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) 	lwz		reg,off(rSP);	/* load with offset		*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) #define SAVE_DATA(reg, off) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) 	stw		reg,off(rDP);	/* save with offset		*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) #define NEXT_BLOCK \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) 	addi		rSP,rSP,16;	/* increment pointers per bloc	*/ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) 	addi		rDP,rDP,16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) #define LOAD_IV(reg, off) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 	lwz		reg,off(rIP);	/* IV loading with offset	*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) #define SAVE_IV(reg, off) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) 	stw		reg,off(rIP);	/* IV saving with offset	*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) #define START_IV			/* nothing to reset		*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) #define CBC_DEC 16			/* CBC decrement per block	*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) #define CTR_DEC 1			/* CTR decrement one byte	*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) #else					/* Macros for little endian	*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) #define LOAD_DATA(reg, off) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 	lwbrx		reg,0,rSP;	/* load reversed		*/ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 	addi		rSP,rSP,4;	/* and increment pointer	*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) #define SAVE_DATA(reg, off) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 	stwbrx		reg,0,rDP;	/* save reversed		*/ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) 	addi		rDP,rDP,4;	/* and increment pointer	*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) #define NEXT_BLOCK			/* nothing todo			*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) #define LOAD_IV(reg, off) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 	lwbrx		reg,0,rIP;	/* load reversed		*/ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) 	addi		rIP,rIP,4;	/* and increment pointer	*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) #define SAVE_IV(reg, off) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) 	stwbrx		reg,0,rIP;	/* load reversed		*/ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 	addi		rIP,rIP,4;	/* and increment pointer	*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) #define START_IV \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 	subi		rIP,rIP,16;	/* must reset pointer		*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) #define CBC_DEC 32			/* 2 blocks because of incs	*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) #define CTR_DEC 17			/* 1 block because of incs	*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) #define SAVE_0_REGS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) #define LOAD_0_REGS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) #define SAVE_4_REGS \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 	stw		rI0,96(r1);	/* save 32 bit registers	*/ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 	stw		rI1,100(r1);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 	stw		rI2,104(r1);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 	stw		rI3,108(r1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) #define LOAD_4_REGS \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 	lwz		rI0,96(r1);	/* restore 32 bit registers	*/ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 	lwz		rI1,100(r1);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 	lwz		rI2,104(r1);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 	lwz		rI3,108(r1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) #define SAVE_8_REGS \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	SAVE_4_REGS							   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	stw		rG0,112(r1);	/* save 32 bit registers	*/ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 	stw		rG1,116(r1);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 	stw		rG2,120(r1);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 	stw		rG3,124(r1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) #define LOAD_8_REGS \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 	LOAD_4_REGS							   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 	lwz		rG0,112(r1);	/* restore 32 bit registers	*/ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 	lwz		rG1,116(r1);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 	lwz		rG2,120(r1);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 	lwz		rG3,124(r1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) #define INITIALIZE_CRYPT(tab,nr32bitregs) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 	mflr		r0;						   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 	stwu		r1,-160(r1);	/* create stack frame		*/ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 	lis		rT0,tab@h;	/* en-/decryption table pointer	*/ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	stw		r0,8(r1);	/* save link register		*/ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 	ori		rT0,rT0,tab@l;					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 	evstdw		r14,16(r1);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 	mr		rKS,rKP;					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 	evstdw		r15,24(r1);	/* We must save non volatile	*/ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	evstdw		r16,32(r1);	/* registers. Take the chance	*/ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 	evstdw		r17,40(r1);	/* and save the SPE part too	*/ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 	evstdw		r18,48(r1);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 	evstdw		r19,56(r1);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 	evstdw		r20,64(r1);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 	evstdw		r21,72(r1);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 	evstdw		r22,80(r1);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 	evstdw		r23,88(r1);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 	SAVE_##nr32bitregs##_REGS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) #define FINALIZE_CRYPT(nr32bitregs) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 	lwz		r0,8(r1);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 	evldw		r14,16(r1);	/* restore SPE registers	*/ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 	evldw		r15,24(r1);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 	evldw		r16,32(r1);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 	evldw		r17,40(r1);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 	evldw		r18,48(r1);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 	evldw		r19,56(r1);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 	evldw		r20,64(r1);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 	evldw		r21,72(r1);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 	evldw		r22,80(r1);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 	evldw		r23,88(r1);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 	LOAD_##nr32bitregs##_REGS					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 	mtlr		r0;		/* restore link register	*/ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 	xor		r0,r0,r0;					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 	stw		r0,16(r1);	/* delete sensitive data	*/ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 	stw		r0,24(r1);	/* that we might have pushed	*/ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 	stw		r0,32(r1);	/* from other context that runs	*/ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 	stw		r0,40(r1);	/* the same code		*/ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 	stw		r0,48(r1);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 	stw		r0,56(r1);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 	stw		r0,64(r1);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 	stw		r0,72(r1);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 	stw		r0,80(r1);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 	stw		r0,88(r1);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 	addi		r1,r1,160;	/* cleanup stack frame		*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) #define ENDIAN_SWAP(t0, t1, s0, s1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 	rotrwi		t0,s0,8;	/* swap endianness for 2 GPRs	*/ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 	rotrwi		t1,s1,8;					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 	rlwimi		t0,s0,8,8,15;					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 	rlwimi		t1,s1,8,8,15;					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 	rlwimi		t0,s0,8,24,31;					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 	rlwimi		t1,s1,8,24,31;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) #define GF128_MUL(d0, d1, d2, d3, t0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 	li		t0,0x87;	/* multiplication in GF128	*/ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 	cmpwi		d3,-1;						   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 	iselgt		t0,0,t0;					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 	rlwimi		d3,d2,0,0,0;	/* propagate "carry" bits	*/ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) 	rotlwi		d3,d3,1;					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 	rlwimi		d2,d1,0,0,0;					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 	rotlwi		d2,d2,1;					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 	rlwimi		d1,d0,0,0,0;					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 	slwi		d0,d0,1;	/* shift left 128 bit		*/ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 	rotlwi		d1,d1,1;					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 	xor		d0,d0,t0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) #define START_KEY(d0, d1, d2, d3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 	lwz		rW0,0(rKP);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 	mtctr		rRR;						   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 	lwz		rW1,4(rKP);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 	lwz		rW2,8(rKP);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 	lwz		rW3,12(rKP);					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) 	xor		rD0,d0,rW0;					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 	xor		rD1,d1,rW1;					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) 	xor		rD2,d2,rW2;					   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 	xor		rD3,d3,rW3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158)  * ppc_encrypt_aes(u8 *out, const u8 *in, u32 *key_enc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159)  *		   u32 rounds)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161)  * called from glue layer to encrypt a single 16 byte block
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162)  * round values are AES128 = 4, AES192 = 5, AES256 = 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) _GLOBAL(ppc_encrypt_aes)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 	INITIALIZE_CRYPT(PPC_AES_4K_ENCTAB, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 	LOAD_DATA(rD0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 	LOAD_DATA(rD1, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 	LOAD_DATA(rD2, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) 	LOAD_DATA(rD3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 	START_KEY(rD0, rD1, rD2, rD3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 	bl		ppc_encrypt_block
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 	xor		rD0,rD0,rW0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 	SAVE_DATA(rD0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 	xor		rD1,rD1,rW1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 	SAVE_DATA(rD1, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 	xor		rD2,rD2,rW2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) 	SAVE_DATA(rD2, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 	xor		rD3,rD3,rW3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) 	SAVE_DATA(rD3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) 	FINALIZE_CRYPT(0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 	blr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185)  * ppc_decrypt_aes(u8 *out, const u8 *in, u32 *key_dec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186)  *		   u32 rounds)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188)  * called from glue layer to decrypt a single 16 byte block
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189)  * round values are AES128 = 4, AES192 = 5, AES256 = 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) _GLOBAL(ppc_decrypt_aes)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 	INITIALIZE_CRYPT(PPC_AES_4K_DECTAB,0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) 	LOAD_DATA(rD0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) 	addi		rT1,rT0,4096
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) 	LOAD_DATA(rD1, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) 	LOAD_DATA(rD2, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) 	LOAD_DATA(rD3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 	START_KEY(rD0, rD1, rD2, rD3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) 	bl		ppc_decrypt_block
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) 	xor		rD0,rD0,rW0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) 	SAVE_DATA(rD0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 	xor		rD1,rD1,rW1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) 	SAVE_DATA(rD1, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) 	xor		rD2,rD2,rW2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) 	SAVE_DATA(rD2, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) 	xor		rD3,rD3,rW3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) 	SAVE_DATA(rD3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) 	FINALIZE_CRYPT(0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) 	blr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213)  * ppc_encrypt_ecb(u8 *out, const u8 *in, u32 *key_enc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214)  *		   u32 rounds, u32 bytes);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216)  * called from glue layer to encrypt multiple blocks via ECB
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217)  * Bytes must be larger or equal 16 and only whole blocks are
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218)  * processed. round values are AES128 = 4, AES192 = 5 and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219)  * AES256 = 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) _GLOBAL(ppc_encrypt_ecb)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) 	INITIALIZE_CRYPT(PPC_AES_4K_ENCTAB, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) ppc_encrypt_ecb_loop:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) 	LOAD_DATA(rD0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) 	mr		rKP,rKS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) 	LOAD_DATA(rD1, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) 	subi		rLN,rLN,16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 	LOAD_DATA(rD2, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) 	cmpwi		rLN,15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) 	LOAD_DATA(rD3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) 	START_KEY(rD0, rD1, rD2, rD3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) 	bl		ppc_encrypt_block
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) 	xor		rD0,rD0,rW0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) 	SAVE_DATA(rD0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) 	xor		rD1,rD1,rW1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) 	SAVE_DATA(rD1, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) 	xor		rD2,rD2,rW2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) 	SAVE_DATA(rD2, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) 	xor		rD3,rD3,rW3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) 	SAVE_DATA(rD3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) 	NEXT_BLOCK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) 	bt		gt,ppc_encrypt_ecb_loop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) 	FINALIZE_CRYPT(0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) 	blr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248)  * ppc_decrypt_ecb(u8 *out, const u8 *in, u32 *key_dec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249)  *		   u32 rounds, u32 bytes);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251)  * called from glue layer to decrypt multiple blocks via ECB
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252)  * Bytes must be larger or equal 16 and only whole blocks are
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253)  * processed. round values are AES128 = 4, AES192 = 5 and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254)  * AES256 = 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) _GLOBAL(ppc_decrypt_ecb)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) 	INITIALIZE_CRYPT(PPC_AES_4K_DECTAB, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) 	addi		rT1,rT0,4096
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) ppc_decrypt_ecb_loop:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) 	LOAD_DATA(rD0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) 	mr		rKP,rKS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) 	LOAD_DATA(rD1, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) 	subi		rLN,rLN,16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) 	LOAD_DATA(rD2, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) 	cmpwi		rLN,15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) 	LOAD_DATA(rD3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) 	START_KEY(rD0, rD1, rD2, rD3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) 	bl		ppc_decrypt_block
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) 	xor		rD0,rD0,rW0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) 	SAVE_DATA(rD0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) 	xor		rD1,rD1,rW1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) 	SAVE_DATA(rD1, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) 	xor		rD2,rD2,rW2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) 	SAVE_DATA(rD2, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) 	xor		rD3,rD3,rW3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) 	SAVE_DATA(rD3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) 	NEXT_BLOCK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) 	bt		gt,ppc_decrypt_ecb_loop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) 	FINALIZE_CRYPT(0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) 	blr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284)  * ppc_encrypt_cbc(u8 *out, const u8 *in, u32 *key_enc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285)  *		   32 rounds, u32 bytes, u8 *iv);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287)  * called from glue layer to encrypt multiple blocks via CBC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288)  * Bytes must be larger or equal 16 and only whole blocks are
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289)  * processed. round values are AES128 = 4, AES192 = 5 and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290)  * AES256 = 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) _GLOBAL(ppc_encrypt_cbc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) 	INITIALIZE_CRYPT(PPC_AES_4K_ENCTAB, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) 	LOAD_IV(rI0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) 	LOAD_IV(rI1, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) 	LOAD_IV(rI2, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) 	LOAD_IV(rI3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) ppc_encrypt_cbc_loop:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) 	LOAD_DATA(rD0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) 	mr		rKP,rKS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) 	LOAD_DATA(rD1, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) 	subi		rLN,rLN,16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) 	LOAD_DATA(rD2, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) 	cmpwi		rLN,15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) 	LOAD_DATA(rD3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) 	xor		rD0,rD0,rI0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) 	xor		rD1,rD1,rI1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) 	xor		rD2,rD2,rI2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) 	xor		rD3,rD3,rI3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) 	START_KEY(rD0, rD1, rD2, rD3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) 	bl		ppc_encrypt_block
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) 	xor		rI0,rD0,rW0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) 	SAVE_DATA(rI0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) 	xor		rI1,rD1,rW1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) 	SAVE_DATA(rI1, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) 	xor		rI2,rD2,rW2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) 	SAVE_DATA(rI2, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) 	xor		rI3,rD3,rW3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) 	SAVE_DATA(rI3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) 	NEXT_BLOCK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) 	bt		gt,ppc_encrypt_cbc_loop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) 	START_IV
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) 	SAVE_IV(rI0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) 	SAVE_IV(rI1, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) 	SAVE_IV(rI2, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) 	SAVE_IV(rI3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) 	FINALIZE_CRYPT(4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) 	blr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332)  * ppc_decrypt_cbc(u8 *out, const u8 *in, u32 *key_dec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333)  *		   u32 rounds, u32 bytes, u8 *iv);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335)  * called from glue layer to decrypt multiple blocks via CBC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336)  * round values are AES128 = 4, AES192 = 5, AES256 = 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) _GLOBAL(ppc_decrypt_cbc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) 	INITIALIZE_CRYPT(PPC_AES_4K_DECTAB, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) 	li		rT1,15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) 	LOAD_IV(rI0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) 	andc		rLN,rLN,rT1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) 	LOAD_IV(rI1, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) 	subi		rLN,rLN,16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) 	LOAD_IV(rI2, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) 	add		rSP,rSP,rLN	/* reverse processing		*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) 	LOAD_IV(rI3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) 	add		rDP,rDP,rLN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) 	LOAD_DATA(rD0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) 	addi		rT1,rT0,4096
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) 	LOAD_DATA(rD1, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) 	LOAD_DATA(rD2, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) 	LOAD_DATA(rD3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) 	START_IV
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) 	SAVE_IV(rD0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) 	SAVE_IV(rD1, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) 	SAVE_IV(rD2, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) 	cmpwi		rLN,16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) 	SAVE_IV(rD3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) 	bt		lt,ppc_decrypt_cbc_end
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) ppc_decrypt_cbc_loop:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) 	mr		rKP,rKS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) 	START_KEY(rD0, rD1, rD2, rD3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) 	bl		ppc_decrypt_block
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) 	subi		rLN,rLN,16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) 	subi		rSP,rSP,CBC_DEC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) 	xor		rW0,rD0,rW0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) 	LOAD_DATA(rD0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) 	xor		rW1,rD1,rW1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) 	LOAD_DATA(rD1, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) 	xor		rW2,rD2,rW2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) 	LOAD_DATA(rD2, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) 	xor		rW3,rD3,rW3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) 	LOAD_DATA(rD3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) 	xor		rW0,rW0,rD0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) 	SAVE_DATA(rW0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) 	xor		rW1,rW1,rD1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) 	SAVE_DATA(rW1, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) 	xor		rW2,rW2,rD2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) 	SAVE_DATA(rW2, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) 	xor		rW3,rW3,rD3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) 	SAVE_DATA(rW3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) 	cmpwi		rLN,15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) 	subi		rDP,rDP,CBC_DEC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) 	bt		gt,ppc_decrypt_cbc_loop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) ppc_decrypt_cbc_end:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) 	mr		rKP,rKS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) 	START_KEY(rD0, rD1, rD2, rD3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) 	bl		ppc_decrypt_block
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) 	xor		rW0,rW0,rD0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) 	xor		rW1,rW1,rD1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) 	xor		rW2,rW2,rD2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) 	xor		rW3,rW3,rD3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) 	xor		rW0,rW0,rI0	/* decrypt with initial IV	*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) 	SAVE_DATA(rW0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) 	xor		rW1,rW1,rI1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) 	SAVE_DATA(rW1, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) 	xor		rW2,rW2,rI2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) 	SAVE_DATA(rW2, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) 	xor		rW3,rW3,rI3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) 	SAVE_DATA(rW3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) 	FINALIZE_CRYPT(4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) 	blr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407)  * ppc_crypt_ctr(u8 *out, const u8 *in, u32 *key_enc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408)  *		 u32 rounds, u32 bytes, u8 *iv);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410)  * called from glue layer to encrypt/decrypt multiple blocks
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411)  * via CTR. Number of bytes does not need to be a multiple of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412)  * 16. Round values are AES128 = 4, AES192 = 5, AES256 = 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) _GLOBAL(ppc_crypt_ctr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) 	INITIALIZE_CRYPT(PPC_AES_4K_ENCTAB, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) 	LOAD_IV(rI0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) 	LOAD_IV(rI1, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) 	LOAD_IV(rI2, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) 	cmpwi		rLN,16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) 	LOAD_IV(rI3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) 	START_IV
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) 	bt		lt,ppc_crypt_ctr_partial
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) ppc_crypt_ctr_loop:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) 	mr		rKP,rKS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) 	START_KEY(rI0, rI1, rI2, rI3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) 	bl		ppc_encrypt_block
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) 	xor		rW0,rD0,rW0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) 	xor		rW1,rD1,rW1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) 	xor		rW2,rD2,rW2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) 	xor		rW3,rD3,rW3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) 	LOAD_DATA(rD0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) 	subi		rLN,rLN,16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) 	LOAD_DATA(rD1, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) 	LOAD_DATA(rD2, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) 	LOAD_DATA(rD3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) 	xor		rD0,rD0,rW0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) 	SAVE_DATA(rD0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) 	xor		rD1,rD1,rW1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) 	SAVE_DATA(rD1, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) 	xor		rD2,rD2,rW2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) 	SAVE_DATA(rD2, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) 	xor		rD3,rD3,rW3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) 	SAVE_DATA(rD3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) 	addic		rI3,rI3,1	/* increase counter			*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) 	addze		rI2,rI2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) 	addze		rI1,rI1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) 	addze		rI0,rI0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) 	NEXT_BLOCK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) 	cmpwi		rLN,15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) 	bt		gt,ppc_crypt_ctr_loop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) ppc_crypt_ctr_partial:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) 	cmpwi		rLN,0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) 	bt		eq,ppc_crypt_ctr_end
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) 	mr		rKP,rKS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) 	START_KEY(rI0, rI1, rI2, rI3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) 	bl		ppc_encrypt_block
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) 	xor		rW0,rD0,rW0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) 	SAVE_IV(rW0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) 	xor		rW1,rD1,rW1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) 	SAVE_IV(rW1, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) 	xor		rW2,rD2,rW2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) 	SAVE_IV(rW2, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) 	xor		rW3,rD3,rW3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) 	SAVE_IV(rW3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) 	mtctr		rLN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) 	subi		rIP,rIP,CTR_DEC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) 	subi		rSP,rSP,1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) 	subi		rDP,rDP,1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) ppc_crypt_ctr_xorbyte:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) 	lbzu		rW4,1(rIP)	/* bytewise xor for partial block	*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) 	lbzu		rW5,1(rSP)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) 	xor		rW4,rW4,rW5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) 	stbu		rW4,1(rDP)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) 	bdnz		ppc_crypt_ctr_xorbyte
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) 	subf		rIP,rLN,rIP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) 	addi		rIP,rIP,1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) 	addic		rI3,rI3,1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) 	addze		rI2,rI2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) 	addze		rI1,rI1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) 	addze		rI0,rI0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) ppc_crypt_ctr_end:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) 	SAVE_IV(rI0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) 	SAVE_IV(rI1, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) 	SAVE_IV(rI2, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) 	SAVE_IV(rI3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) 	FINALIZE_CRYPT(4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) 	blr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491)  * ppc_encrypt_xts(u8 *out, const u8 *in, u32 *key_enc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492)  *		   u32 rounds, u32 bytes, u8 *iv, u32 *key_twk);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494)  * called from glue layer to encrypt multiple blocks via XTS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495)  * If key_twk is given, the initial IV encryption will be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496)  * processed too. Round values are AES128 = 4, AES192 = 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497)  * AES256 = 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) _GLOBAL(ppc_encrypt_xts)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) 	INITIALIZE_CRYPT(PPC_AES_4K_ENCTAB, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) 	LOAD_IV(rI0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) 	LOAD_IV(rI1, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) 	LOAD_IV(rI2, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) 	cmpwi		rKT,0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) 	LOAD_IV(rI3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) 	bt		eq,ppc_encrypt_xts_notweak
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) 	mr		rKP,rKT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) 	START_KEY(rI0, rI1, rI2, rI3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) 	bl		ppc_encrypt_block
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) 	xor		rI0,rD0,rW0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) 	xor		rI1,rD1,rW1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) 	xor		rI2,rD2,rW2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) 	xor		rI3,rD3,rW3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) ppc_encrypt_xts_notweak:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) 	ENDIAN_SWAP(rG0, rG1, rI0, rI1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) 	ENDIAN_SWAP(rG2, rG3, rI2, rI3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) ppc_encrypt_xts_loop:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) 	LOAD_DATA(rD0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) 	mr		rKP,rKS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) 	LOAD_DATA(rD1, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) 	subi		rLN,rLN,16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) 	LOAD_DATA(rD2, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) 	LOAD_DATA(rD3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) 	xor		rD0,rD0,rI0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) 	xor		rD1,rD1,rI1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) 	xor		rD2,rD2,rI2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) 	xor		rD3,rD3,rI3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) 	START_KEY(rD0, rD1, rD2, rD3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) 	bl		ppc_encrypt_block
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) 	xor		rD0,rD0,rW0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) 	xor		rD1,rD1,rW1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) 	xor		rD2,rD2,rW2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) 	xor		rD3,rD3,rW3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) 	xor		rD0,rD0,rI0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) 	SAVE_DATA(rD0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) 	xor		rD1,rD1,rI1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) 	SAVE_DATA(rD1, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) 	xor		rD2,rD2,rI2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) 	SAVE_DATA(rD2, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) 	xor		rD3,rD3,rI3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) 	SAVE_DATA(rD3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) 	GF128_MUL(rG0, rG1, rG2, rG3, rW0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) 	ENDIAN_SWAP(rI0, rI1, rG0, rG1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) 	ENDIAN_SWAP(rI2, rI3, rG2, rG3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) 	cmpwi		rLN,0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) 	NEXT_BLOCK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) 	bt		gt,ppc_encrypt_xts_loop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) 	START_IV
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) 	SAVE_IV(rI0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) 	SAVE_IV(rI1, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) 	SAVE_IV(rI2, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) 	SAVE_IV(rI3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) 	FINALIZE_CRYPT(8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) 	blr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558)  * ppc_decrypt_xts(u8 *out, const u8 *in, u32 *key_dec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559)  *		   u32 rounds, u32 blocks, u8 *iv, u32 *key_twk);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561)  * called from glue layer to decrypt multiple blocks via XTS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562)  * If key_twk is given, the initial IV encryption will be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563)  * processed too. Round values are AES128 = 4, AES192 = 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564)  * AES256 = 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) _GLOBAL(ppc_decrypt_xts)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) 	INITIALIZE_CRYPT(PPC_AES_4K_DECTAB, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) 	LOAD_IV(rI0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) 	addi		rT1,rT0,4096
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) 	LOAD_IV(rI1, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) 	LOAD_IV(rI2, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) 	cmpwi		rKT,0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) 	LOAD_IV(rI3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) 	bt		eq,ppc_decrypt_xts_notweak
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) 	subi		rT0,rT0,4096
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) 	mr		rKP,rKT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) 	START_KEY(rI0, rI1, rI2, rI3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) 	bl		ppc_encrypt_block
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) 	xor		rI0,rD0,rW0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) 	xor		rI1,rD1,rW1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) 	xor		rI2,rD2,rW2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) 	xor		rI3,rD3,rW3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) 	addi		rT0,rT0,4096
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) ppc_decrypt_xts_notweak:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) 	ENDIAN_SWAP(rG0, rG1, rI0, rI1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) 	ENDIAN_SWAP(rG2, rG3, rI2, rI3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) ppc_decrypt_xts_loop:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) 	LOAD_DATA(rD0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) 	mr		rKP,rKS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) 	LOAD_DATA(rD1, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) 	subi		rLN,rLN,16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) 	LOAD_DATA(rD2, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) 	LOAD_DATA(rD3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) 	xor		rD0,rD0,rI0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) 	xor		rD1,rD1,rI1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) 	xor		rD2,rD2,rI2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) 	xor		rD3,rD3,rI3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) 	START_KEY(rD0, rD1, rD2, rD3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) 	bl		ppc_decrypt_block
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) 	xor		rD0,rD0,rW0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) 	xor		rD1,rD1,rW1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) 	xor		rD2,rD2,rW2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604) 	xor		rD3,rD3,rW3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) 	xor		rD0,rD0,rI0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) 	SAVE_DATA(rD0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) 	xor		rD1,rD1,rI1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) 	SAVE_DATA(rD1, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) 	xor		rD2,rD2,rI2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) 	SAVE_DATA(rD2, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) 	xor		rD3,rD3,rI3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) 	SAVE_DATA(rD3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613) 	GF128_MUL(rG0, rG1, rG2, rG3, rW0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) 	ENDIAN_SWAP(rI0, rI1, rG0, rG1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) 	ENDIAN_SWAP(rI2, rI3, rG2, rG3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616) 	cmpwi		rLN,0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) 	NEXT_BLOCK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) 	bt		gt,ppc_decrypt_xts_loop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) 	START_IV
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) 	SAVE_IV(rI0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) 	SAVE_IV(rI1, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) 	SAVE_IV(rI2, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) 	SAVE_IV(rI3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) 	FINALIZE_CRYPT(8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) 	blr