| 
				
				
					
				
				
				 | 
			
			 | 
			@@ -37,6 +37,8 @@ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define Sigma5  0x10E527FADE682D1D | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define Sigma6  0xB05688C2B3E6C1FD | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			static uint64_t SP[8][256]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			typedef struct AVCAMELLIA { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    uint64_t Kw[4]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    uint64_t Ke[6]; | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -140,17 +142,11 @@ static void LR128(uint64_t d[2], const uint64_t K[2], int x) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			static uint64_t F(uint64_t F_IN, uint64_t KE) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    uint32_t Zl, Zr; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    uint8_t y[8]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    KE ^= F_IN; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    Zl = KE >> 32; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    Zr = KE & MASK32; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    Zl = (((uint32_t)SBOX1[(Zl >> 24)] << 24) | ((uint32_t)SBOX2[(Zl >> 16) & MASK8] << 16) | ((uint32_t)SBOX3[(Zl >> 8) & MASK8] << 8) |(SBOX4[Zl & MASK8])); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    Zr = (((uint32_t)SBOX2[(Zr >> 24)] << 24) | ((uint32_t)SBOX3[(Zr >> 16) & MASK8] << 16) | ((uint32_t)SBOX4[(Zr >> 8) & MASK8] << 8) |(SBOX1[Zr & MASK8])); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    Zl ^= LR32(Zr, 8); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    Zr ^= LR32(Zl, 16); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    Zl ^= RR32(Zr, 8); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    Zr ^= RR32(Zl, 8); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return ((uint64_t)Zr << 32) | (uint64_t)Zl; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    AV_WB64(y,KE); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    KE=SP[0][y[0]]^SP[1][y[1]]^SP[2][y[2]]^SP[3][y[3]]^SP[4][y[4]]^SP[5][y[5]]^SP[6][y[6]]^SP[7][y[7]]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return KE; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			static uint64_t FL(uint64_t FL_IN, uint64_t KE) | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -330,6 +326,26 @@ static void camellia_decrypt(AVCAMELLIA *cs, uint8_t *dst, const uint8_t *src, u | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    AV_WB64(dst + 8, D1); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			static void computeSP(void) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    uint64_t z; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int i; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    for (i = 0; i < 256; i++) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    z = (uint64_t)SBOX1[i]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    SP[0][i] = (z << 56) ^ (z << 48) ^ (z << 40) ^ (z << 24) ^ z; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    SP[7][i] = (z << 56) ^ (z << 48) ^ (z << 40) ^ (z << 24) ^ (z << 16) ^ (z << 8); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    z = (uint64_t)SBOX2[i]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    SP[1][i] = (z << 48) ^ (z << 40) ^ (z << 32) ^ (z << 24) ^ (z << 16); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    SP[4][i] = (z << 48) ^ (z << 40) ^ (z << 32) ^ (z << 16) ^ (z << 8) ^ z; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    z = (uint64_t)SBOX3[i]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    SP[2][i] = (z << 56) ^ (z << 40) ^ (z << 32) ^ (z << 16) ^ (z << 8); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    SP[5][i] = (z << 56) ^ (z << 40) ^ (z << 32) ^ (z << 24) ^ (z << 8) ^ z; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    z = (uint64_t)SBOX4[i]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    SP[3][i] = (z << 56) ^ (z << 48) ^ (z << 32) ^ (z << 8) ^ z; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    SP[6][i] = (z << 56) ^ (z << 48) ^ (z << 32) ^ (z << 24) ^ (z << 16) ^ z; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			struct AVCAMELLIA *av_camellia_alloc(void) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return av_mallocz(sizeof(struct AVCAMELLIA)); | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -353,6 +369,7 @@ av_cold int av_camellia_init(AVCAMELLIA *cs, const uint8_t *key, int key_bits) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        Kr[0] = AV_RB64(key + 16); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        Kr[1] = AV_RB64(key + 24); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    computeSP(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    D1 = Kl[0] ^ Kr[0]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    D2 = Kl[1] ^ Kr[1]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    D2 ^= F(D1, Sigma1); | 
		
		
	
	
		
			
				| 
				
					
				
				
				
				 | 
			
			 | 
			
  |