All pastes #344567 Raw Edit

WHIRLPOOL AltiVec

public c v1 · immutable
·published 2007-02-07 21:05 UTC
rendered paste body
inline static vector unsigned char S_Box(	register vector unsigned char X) {	register vUInt8 C4 = (vUInt8) ( 4,4,4,4,4,4,4,4,4,4,4,4 );		register vUInt8 E_Low  = (vUInt8) ( 		0x01, 0x0B, 0x09, 0x0C,		0x0D, 0x06, 0x0F, 0x03,		0x0E, 0x08, 0x07, 0x04,		0x0A, 0x02, 0x05, 0x00 );	register vUInt8 E_High = vec_sl   ( E_Low, C4 );		register vUInt8 E_Inv_Low  = (vUInt8) (		0x0F, 0x00, 0x0D, 0x07,		0x0B, 0x0E, 0x05, 0x0A,		0x09, 0x02, 0x0C, 0x01,		0x03, 0x04, 0x08, 0x06	);		register vUInt8 R_Low  = (vUInt8) (		0x07, 0x0C, 0x0B, 0x0D,		0x0E, 0x04, 0x09, 0x0F,		0x06, 0x03, 0x08, 0x0A,		0x02, 0x05, 0x01, 0x00	);		register vector unsigned char X_Low;	register vector unsigned char E_In	  , E_Out;	register vector unsigned char E_Inv_In, E_Inv_Out;	register vector unsigned char R_In	  , R_Out;	register vector unsigned char S_Box_X;		X_Low		= vec_sr  ( X		 , C4 					);		E_Inv_Out	= vec_perm( E_Inv_Low, E_Inv_Low, X			);	E_Out		= vec_perm( E_Low	 , E_Low	, X_Low		);		R_In		= vec_xor ( E_Out	 , E_Inv_Out			);	R_Out		= vec_perm( R_Low	 , R_Low	, R_In		);		E_In		= vec_xor ( E_Out	 , R_Out				);	E_Inv_In	= vec_xor ( E_Inv_Out, R_Out				);	E_Out		= vec_perm( E_High	 , E_High	, E_In		);	E_Inv_Out	= vec_perm( E_Inv_Low, E_Inv_Low, E_Inv_In	);		S_Box_X		= vec_or  ( E_Out	 , E_Inv_Out			);		return S_Box_X;}