Question: #include #include #include #include #define ROTL ( a , b ) ( ( ( a ) < < ( b ) ) | ( (

#include
#include
#include
#include
#define ROTL(a,b)(((a)<<(b))|((a)>>(32-(b))))
#define ROTR(a,b)(((a)>>(b))|((a)<<(32-(b))))
#define CH(x,y,z)(((x) & (y))^(~(x) & (z)))
#define MAJ(x,y,z)(((x) & (y))^((x) & (z))^((y) & (z)))
#define Sigma0(x)(ROTR(x,2)^ ROTR(x,13)^ ROTR(x,22))
#define Sigma1(x)(ROTR(x,6)^ ROTR(x,11)^ ROTR(x,25))
#define sigma0(x)(ROTR(x,7)^ ROTR(x,18)^((x)>>3))
#define sigma1(x)(ROTR(x,17)^ ROTR(x,19)^((x)>>10))
#define ROTL512(a,b)(((a)<<(b))|((a)>>(64-(b))))
#define ROTR512(a,b)(((a)>>(b))|((a)<<(64-(b))))
#define sigma5120(x)(ROTR512(x,1)^ ROTR512(x,8)^((x)>>7))
#define sigma5121(x)(ROTR512(x,19)^ ROTR512(x,61)^((x)>>6))
#define Sigma5120(x)(ROTR512(x,28)^ ROTR512(x,34)^ ROTR512(x,39))
#define Sigma5121(x)(ROTR512(x,14)^ ROTR512(x,18)^ ROTR512(x,41))
void sha1_process(unsigned int[], unsigned char[]);
void sha256_process(unsigned int[], unsigned char[]);
void sha512_process(unsigned long [], unsigned char []);
int testSHA(int shatype, int numT);
int main (int argc, char *argv[]){
int numofT=100;
testSHA(1,numofT);
testSHA(2,numofT);
testSHA(3,numofT);
exit(0);
}
void sha_msg_pad(unsigned char message[], int size, unsigned int bitlen,
unsigned char paddedmsg[]){
int i;
for (i=0; i>8;
paddedmsg[61]= bitlen >>16;
paddedmsg[60]= bitlen >>24;
return;
}
void sha_msg_pad0(unsigned int bitlen, unsigned char paddedmsg[]){
int i;
for (i=0; i<64; i++){
paddedmsg[i]=0x00;
}
paddedmsg[63]= bitlen;
paddedmsg[62]= bitlen >>8;
paddedmsg[61]= bitlen >>16;
paddedmsg[60]= bitlen >>24;
return;
}
void sha1_md(unsigned char message[], int size, unsigned int hash[5]){
unsigned int bitlen =8*size;
hash[0]=0x67452301;
hash[1]=0xEFCDAB89;
hash[2]=0x98BADCFE;
hash[3]=0x10325476;
hash[4]=0xC3D2E1F0;
int i;
unsigned char msgTBH[64]; /*64 BYTE msg to be hashed */
unsigned char paddedMessage[64]; /* last msg block to be hashed*/
int Q= size/64;
int R= size%64;
unsigned char msg[R];
memcpy(msg, &message[64*Q], R * sizeof(unsigned char));
for (i=0; i55){
memcpy(msgTBH, msg, R * sizeof(unsigned char));
msgTBH[R]=0x80;
for (i=R+1; i<64; i++){
msgTBH[i]=0x00;
}
sha1_process(hash, msgTBH);
sha_msg_pad0(bitlen,paddedMessage);
} else {
sha_msg_pad(msg, R, bitlen, paddedMessage);
}
sha1_process(hash, paddedMessage);
return;
}
void sha1_process(unsigned int hash[], unsigned char msg[]){
const unsigned int K[4]={0x5A827999,0x6ED9EBA1,0x8F1BBCDC,0xCA62C1D6};
unsigned int W[80];
unsigned int A, B, C, D, E, T;
int i;
for(i =0; i <16; i++){
W[i]=(((unsigned) msg[i *4])<<24)+
(((unsigned) msg[i *4+1])<<16)+
(((unsigned) msg[i *4+2])<<8)+
(((unsigned) msg[i *4+3]));
}
for(i =16; i <80; i++){
W[i]= W[i-3]^ W[i-8]^ W[i-14]^ W[i-16];
W[i]= ROTL(W[i],1);
}
A = hash[0];
B = hash[1];
C = hash[2];
D = hash[3];
E = hash[4];
for(i =0; i <20; i++){
T = ROTL(A,5)+((B & C)^((~B) & D))+ E + W[i]+ K[0];
E = D;
D = C;
C = ROTL(B,30);
B = A;
A = T;
}
for(i =20; i <40; i++){
T = ROTL(A,5)+(B^C^D)+ E + W[i

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Programming Questions!