/*****************************************************************************/
/* */
/* RIGHT-SHIFT 512 BITS */
/* 10/16/09 (dkc) */
/* */
/*****************************************************************************/
void shift512(unsigned int A[16], unsigned int B[16], unsigned int shift) {
unsigned int temp;
B[0]=A[0];
B[1]=A[1];
B[2]=A[2];
B[3]=A[3];
B[4]=A[4];
B[5]=A[5];
B[6]=A[6];
B[7]=A[7];
B[8]=A[8];
B[9]=A[9];
B[10]=A[10];
B[11]=A[11];
B[12]=A[12];
B[13]=A[13];
B[14]=A[14];
B[15]=A[15];
while (shift>31) {
B[15]=B[14];
B[14]=B[13];
B[13]=B[12];
B[12]=B[11];
B[11]=B[10];
B[10]=B[9];
B[9]=B[8];
B[8]=B[7];
B[7]=B[6];
B[6]=B[5];
B[5]=B[4];
B[4]=B[3];
B[3]=B[2];
B[2]=B[1];
B[1]=B[0];
B[0]=0;
shift=shift-32;
}
if (shift==0)
return;
B[15]=B[15]>>shift;
temp=B[14]<<(32-shift);
B[15]=B[15]|temp;
B[14]=B[14]>>shift;
temp=B[13]<<(32-shift);
B[14]=B[14]|temp;
B[13]=B[13]>>shift;
temp=B[12]<<(32-shift);
B[13]=B[13]|temp;
B[12]=B[12]>>shift;
temp=B[11]<<(32-shift);
B[12]=B[12]|temp;
B[11]=B[11]>>shift;
temp=B[10]<<(32-shift);
B[11]=B[11]|temp;
B[10]=B[10]>>shift;
temp=B[9]<<(32-shift);
B[10]=B[10]|temp;
B[9]=B[9]>>shift;
temp=B[8]<<(32-shift);
B[9]=B[9]|temp;
B[8]=B[8]>>shift;
temp=B[7]<<(32-shift);
B[8]=B[8]|temp;
B[7]=B[7]>>shift;
temp=B[6]<<(32-shift);
B[7]=B[7]|temp;
B[6]=B[6]>>shift;
temp=B[5]<<(32-shift);
B[6]=B[6]|temp;
B[5]=B[5]>>shift;
temp=B[4]<<(32-shift);
B[5]=B[5]|temp;
B[4]=B[4]>>shift;
temp=B[3]<<(32-shift);
B[4]=B[4]|temp;
B[3]=B[3]>>shift;
temp=B[2]<<(32-shift);
B[3]=B[3]|temp;
B[2]=B[2]>>shift;
temp=B[1]<<(32-shift);
B[2]=B[2]|temp;
B[1]=B[1]>>shift;
temp=B[0]<<(32-shift);
B[1]=B[1]|temp;
B[0]=B[0]>>shift;
return;
}