Skip to content

Commit 825ca24

Browse files
committed
Added files via upload
1 parent 0dd5f3d commit 825ca24

File tree

3 files changed

+201
-0
lines changed

3 files changed

+201
-0
lines changed

makeblocks/Makefile

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
MARCH=pentium4
2+
CFLAGS=-Wall -O3 -march=$(MARCH)
3+
4+
default: makeblocks
5+
6+
makeblocks:
7+
8+
clean:
9+
rm -f makeblocks

makeblocks/makebins.sh

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#!/bin/bash
2+
3+
echo 'This script builds a pair of two-block messages that collide under MD5.'
4+
echo
5+
6+
K=1
7+
8+
#while [ $K -le 20 ]
9+
#do
10+
echo 'Running block1 code.'
11+
time ./block1 > block1.out
12+
echo 'Done with first block.'
13+
14+
sed -e 's/[a-zA-Z0-9 \t]*[:,}]/M/g' block1.out | grep "^[^M]" > chain.out
15+
mv CV.txt CV.txt.bak
16+
mv chain.out CV.txt
17+
time ./block2 > block2.out
18+
echo 'Done with second block.'
19+
20+
cat block1.out block2.out > blocks.out
21+
22+
echo 'Converting to binary files...'
23+
./makeblocks blocks.out b1.bin b2.bin
24+
25+
echo 'And here are the MD5 digests:'
26+
md5sum b1.bin b2.bin
27+
28+
K=$((K+1))
29+
#done

makeblocks/makeblocks.c

Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
4+
// Reads input file of specified format and produces
5+
// two binary files.
6+
// The specified format is the concatenation of a valid
7+
// output from block1 and a valid output from block2.
8+
// The two binary files produced correspond to the two 1024-bit
9+
// files textually represented in the outputs of block1
10+
// and block2.
11+
int main(int argc, char* argv[])
12+
{
13+
FILE *f;
14+
char* line, *bc;
15+
unsigned int *M, *Mp;
16+
int i;
17+
18+
M = malloc(32*sizeof(unsigned int));
19+
Mp = malloc(32*sizeof(unsigned int));
20+
21+
if(argc < 4)
22+
{
23+
printf("usage: makeblocks INPUTFILE OUTPUTFILE1 OUTPUTFILE2\n");
24+
return 1;
25+
}
26+
27+
f=fopen(argv[1], "r");
28+
line = malloc(256);
29+
30+
bc = fgets(line, 255, f);
31+
i = 0;
32+
33+
bc = fgets(line, 255, f);
34+
bc = fgets(line, 255, f);
35+
36+
// Get M
37+
sscanf(line+ 6, "%x", &M[ 0]);
38+
sscanf(line+16, "%x", &M[ 1]);
39+
sscanf(line+26, "%x", &M[ 2]);
40+
sscanf(line+36, "%x", &M[ 3]);
41+
bc = fgets(line, 255, f);
42+
43+
sscanf(line+ 1, "%x", &M[ 4]);
44+
sscanf(line+11, "%x", &M[ 5]);
45+
sscanf(line+21, "%x", &M[ 6]);
46+
sscanf(line+31, "%x", &M[ 7]);
47+
bc = fgets(line, 255, f);
48+
49+
sscanf(line+ 1, "%x", &M[ 8]);
50+
sscanf(line+11, "%x", &M[ 9]);
51+
sscanf(line+21, "%x", &M[10]);
52+
sscanf(line+31, "%x", &M[11]);
53+
bc = fgets(line, 255, f);
54+
55+
sscanf(line+ 1, "%x", &M[12]);
56+
sscanf(line+11, "%x", &M[13]);
57+
sscanf(line+21, "%x", &M[14]);
58+
sscanf(line+31, "%x", &M[15]);
59+
bc = fgets(line, 255, f);
60+
bc = fgets(line, 255, f);
61+
62+
63+
64+
// Get M'
65+
sscanf(line+ 7, "%x", &Mp[ 0]);
66+
sscanf(line+17, "%x", &Mp[ 1]);
67+
sscanf(line+27, "%x", &Mp[ 2]);
68+
sscanf(line+37, "%x", &Mp[ 3]);
69+
bc = fgets(line, 255, f);
70+
71+
sscanf(line+ 1, "%x", &Mp[ 4]);
72+
sscanf(line+11, "%x", &Mp[ 5]);
73+
sscanf(line+21, "%x", &Mp[ 6]);
74+
sscanf(line+31, "%x", &Mp[ 7]);
75+
bc = fgets(line, 255, f);
76+
77+
sscanf(line+ 1, "%x", &Mp[ 8]);
78+
sscanf(line+11, "%x", &Mp[ 9]);
79+
sscanf(line+21, "%x", &Mp[10]);
80+
sscanf(line+31, "%x", &Mp[11]);
81+
bc = fgets(line, 255, f);
82+
83+
sscanf(line+ 1, "%x", &Mp[12]);
84+
sscanf(line+11, "%x", &Mp[13]);
85+
sscanf(line+21, "%x", &Mp[14]);
86+
sscanf(line+31, "%x", &Mp[15]);
87+
bc = fgets(line, 255, f);
88+
// end redo
89+
90+
bc = fgets(line, 255, f);
91+
bc = fgets(line, 255, f);
92+
// Get M
93+
sscanf(line+ 6, "%x", &M[16]);
94+
sscanf(line+16, "%x", &M[17]);
95+
sscanf(line+26, "%x", &M[18]);
96+
sscanf(line+36, "%x", &M[19]);
97+
bc = fgets(line, 255, f);
98+
99+
sscanf(line+ 1, "%x", &M[20]);
100+
sscanf(line+11, "%x", &M[21]);
101+
sscanf(line+21, "%x", &M[22]);
102+
sscanf(line+31, "%x", &M[23]);
103+
bc = fgets(line, 255, f);
104+
105+
sscanf(line+ 1, "%x", &M[24]);
106+
sscanf(line+11, "%x", &M[25]);
107+
sscanf(line+21, "%x", &M[26]);
108+
sscanf(line+31, "%x", &M[27]);
109+
bc = fgets(line, 255, f);
110+
111+
sscanf(line+ 1, "%x", &M[28]);
112+
sscanf(line+11, "%x", &M[29]);
113+
sscanf(line+21, "%x", &M[30]);
114+
sscanf(line+31, "%x", &M[31]);
115+
bc = fgets(line, 255, f);
116+
bc = fgets(line, 255, f);
117+
118+
// Get M'
119+
sscanf(line+ 7, "%x", &Mp[16]);
120+
sscanf(line+17, "%x", &Mp[17]);
121+
sscanf(line+27, "%x", &Mp[18]);
122+
sscanf(line+37, "%x", &Mp[19]);
123+
bc = fgets(line, 255, f);
124+
125+
sscanf(line+ 1, "%x", &Mp[20]);
126+
sscanf(line+11, "%x", &Mp[21]);
127+
sscanf(line+21, "%x", &Mp[22]);
128+
sscanf(line+31, "%x", &Mp[23]);
129+
bc = fgets(line, 255, f);
130+
131+
sscanf(line+ 1, "%x", &Mp[24]);
132+
sscanf(line+11, "%x", &Mp[25]);
133+
sscanf(line+21, "%x", &Mp[26]);
134+
sscanf(line+31, "%x", &Mp[27]);
135+
bc = fgets(line, 255, f);
136+
137+
sscanf(line+ 1, "%x", &Mp[28]);
138+
sscanf(line+11, "%x", &Mp[29]);
139+
sscanf(line+21, "%x", &Mp[30]);
140+
sscanf(line+31, "%x", &Mp[31]);
141+
bc = fgets(line, 255, f);
142+
143+
// Write M and M' to files
144+
fclose(f);
145+
f=fopen(argv[2], "w");
146+
147+
for(i=0; i<32; i++)
148+
fwrite(&M[i], 4, 1, f);
149+
150+
fclose(f);
151+
152+
f=fopen(argv[3], "w");
153+
154+
for(i=0; i<32; i++)
155+
fwrite(&Mp[i], 4, 1, f);
156+
157+
fclose(f);
158+
free(line);
159+
free(M);
160+
free(Mp);
161+
162+
return 0;
163+
}

0 commit comments

Comments
 (0)