10 #define FIXED_STR "The quick brown fox jumps over the lazy dog"
11 #define FIXED_LEN (strlen (FIXED_STR))
13 #define MD5_FIXED_SUM "9e107d9d372bb6826bd81d3542a419d6"
14 #define SHA1_FIXED_SUM "2fd4e1c67a2d28fced849ee1bb76e7391b93eb12"
15 #define SHA256_FIXED_SUM "d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592"
17 #define BLOCK_SIZE 256
20 digest_to_string (guint8
*digest
,
23 static const gchar hex_digits
[] = "0123456789abcdef";
24 gint len
= digest_len
* 2;
28 retval
= g_new (gchar
, len
+ 1);
30 for (i
= 0; i
< digest_len
; i
++)
32 retval
[2 * i
] = hex_digits
[digest
[i
] >> 4];
33 retval
[2 * i
+ 1] = hex_digits
[digest
[i
] & 0xf];
42 test_checksum (GChecksumType checksum_type
,
45 const gchar
*filename
)
47 GChecksum
*checksum0
, *checksum1
, *checksum2
;
51 guint8 digest1
[64], digest2
[64];
52 gsize len1
= sizeof (digest1
), len2
= sizeof (digest2
);
53 gchar
*digest_str1
, *digest_str2
;
55 checksum0
= g_checksum_new (checksum_type
);
56 g_checksum_update (checksum0
, (const guchar
*) FIXED_STR
, FIXED_LEN
);
57 if (strcmp (g_checksum_get_string (checksum0
), sum
) != 0)
59 g_print ("Invalid %s checksum for `%s': %s (expecting: %s)\n",
62 g_checksum_get_string (checksum0
),
67 g_checksum_free (checksum0
);
69 checksum1
= g_checksum_new (checksum_type
);
70 checksum2
= g_checksum_new (checksum_type
);
72 if (!g_file_get_contents (filename
, &data
, &data_len
, NULL
))
74 g_print ("Could not load `%s' contents\n", filename
);
78 g_checksum_update (checksum1
, (const guchar
*) data
, data_len
);
83 if (data_len
> BLOCK_SIZE
)
85 g_checksum_update (checksum2
, p
, BLOCK_SIZE
);
86 data_len
-= BLOCK_SIZE
;
91 g_checksum_update (checksum2
, p
, data_len
);
99 g_checksum_get_digest (checksum1
, digest1
, &len1
);
100 g_checksum_get_digest (checksum2
, digest2
, &len2
);
102 digest_str1
= digest_to_string (digest1
, len1
);
103 digest_str2
= digest_to_string (digest2
, len2
);
105 if (strcmp (digest_str1
, digest_str2
) != 0)
107 g_print ("Wrong %s digest `%s' (expecting: %s)\n",
114 g_free (digest_str1
);
115 g_free (digest_str2
);
117 digest_str1
= g_strdup (g_checksum_get_string (checksum1
));
118 digest_str2
= g_strdup (g_checksum_get_string (checksum2
));
120 if (!digest_str1
|| !digest_str2
)
122 g_print ("No %s digest string found\n", type
);
126 if (strcmp (digest_str1
, digest_str2
) != 0)
128 g_print ("Wrong %s digest string `%s' (expecting: %s)\n",
135 g_free (digest_str1
);
136 g_free (digest_str2
);
138 g_checksum_free (checksum1
);
139 g_checksum_free (checksum2
);
142 #define test(type) test_checksum (G_CHECKSUM_##type, \
148 main (int argc
, char *argv
[])