aboutsummaryrefslogtreecommitdiff
path: root/src/util/test_crypto_aes_weak.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/test_crypto_aes_weak.c')
-rw-r--r--src/util/test_crypto_aes_weak.c127
1 files changed, 62 insertions, 65 deletions
diff --git a/src/util/test_crypto_aes_weak.c b/src/util/test_crypto_aes_weak.c
index 25931b625..a0161b575 100644
--- a/src/util/test_crypto_aes_weak.c
+++ b/src/util/test_crypto_aes_weak.c
@@ -40,9 +40,9 @@ printWeakKey (struct GNUNET_CRYPTO_AesSessionKey *key)
40 int i; 40 int i;
41 41
42 for (i = 0; i < GNUNET_CRYPTO_AES_KEY_LENGTH; i++) 42 for (i = 0; i < GNUNET_CRYPTO_AES_KEY_LENGTH; i++)
43 { 43 {
44 printf ("%x ", (int) (key->key[i])); 44 printf ("%x ", (int) (key->key[i]));
45 } 45 }
46} 46}
47 47
48static int 48static int
@@ -55,7 +55,7 @@ testWeakKey ()
55 struct GNUNET_CRYPTO_AesInitializationVector INITVALUE; 55 struct GNUNET_CRYPTO_AesInitializationVector INITVALUE;
56 56
57 memset (&INITVALUE, 42, 57 memset (&INITVALUE, 42,
58 sizeof (struct GNUNET_CRYPTO_AesInitializationVector)); 58 sizeof (struct GNUNET_CRYPTO_AesInitializationVector));
59 /* sorry, this is not a weak key -- I don't have 59 /* sorry, this is not a weak key -- I don't have
60 * any at the moment! */ 60 * any at the moment! */
61 weak_key.key[0] = (char) (0x4c); 61 weak_key.key[0] = (char) (0x4c);
@@ -92,31 +92,31 @@ testWeakKey ()
92 weak_key.key[31] = (char) (0xaa); 92 weak_key.key[31] = (char) (0xaa);
93 /* memset(&weak_key, 0, 32); */ 93 /* memset(&weak_key, 0, 32); */
94 weak_key.crc32 = 94 weak_key.crc32 =
95 htonl (GNUNET_CRYPTO_crc32_n (&weak_key, GNUNET_CRYPTO_AES_KEY_LENGTH)); 95 htonl (GNUNET_CRYPTO_crc32_n (&weak_key, GNUNET_CRYPTO_AES_KEY_LENGTH));
96 96
97 size = 97 size =
98 GNUNET_CRYPTO_aes_encrypt (WEAK_KEY_TESTSTRING, 98 GNUNET_CRYPTO_aes_encrypt (WEAK_KEY_TESTSTRING,
99 strlen (WEAK_KEY_TESTSTRING) + 1, &weak_key, 99 strlen (WEAK_KEY_TESTSTRING) + 1, &weak_key,
100 &INITVALUE, result); 100 &INITVALUE, result);
101 101
102 if (size == -1) 102 if (size == -1)
103 { 103 {
104 GNUNET_break (0); 104 GNUNET_break (0);
105 return 1; 105 return 1;
106 } 106 }
107 107
108 size = GNUNET_CRYPTO_aes_decrypt (result, size, &weak_key, &INITVALUE, res); 108 size = GNUNET_CRYPTO_aes_decrypt (result, size, &weak_key, &INITVALUE, res);
109 109
110 if ((strlen (WEAK_KEY_TESTSTRING) + 1) != size) 110 if ((strlen (WEAK_KEY_TESTSTRING) + 1) != size)
111 { 111 {
112 GNUNET_break (0); 112 GNUNET_break (0);
113 return 1; 113 return 1;
114 } 114 }
115 if (0 != strcmp (res, WEAK_KEY_TESTSTRING)) 115 if (0 != strcmp (res, WEAK_KEY_TESTSTRING))
116 { 116 {
117 GNUNET_break (0); 117 GNUNET_break (0);
118 return 1; 118 return 1;
119 } 119 }
120 else 120 else
121 return 0; 121 return 0;
122} 122}
@@ -133,45 +133,42 @@ getWeakKeys ()
133 133
134 for (number_of_runs = 0; number_of_runs < MAX_WEAK_KEY_TRIALS; 134 for (number_of_runs = 0; number_of_runs < MAX_WEAK_KEY_TRIALS;
135 number_of_runs++) 135 number_of_runs++)
136 {
137
138 if (number_of_runs % 1000 == 0)
139 fprintf (stderr, ".");
140 /*printf("Got to run number %d.\n", number_of_runs); */
141 GNUNET_CRYPTO_aes_create_session_key (&sessionkey);
142
143 rc = gcry_cipher_open (&handle, GCRY_CIPHER_AES256, GCRY_CIPHER_MODE_CFB,
144 0);
145
146 if (rc)
136 { 147 {
148 printf ("testweakkey: gcry_cipher_open failed on trial %d. %s\n",
149 number_of_runs, gcry_strerror (rc));
150 continue;
151 }
137 152
138 if (number_of_runs % 1000 == 0) 153 rc = gcry_cipher_setkey (handle, &sessionkey, GNUNET_CRYPTO_AES_KEY_LENGTH);
139 fprintf (stderr, ".");
140 /*printf("Got to run number %d.\n", number_of_runs); */
141 GNUNET_CRYPTO_aes_create_session_key (&sessionkey);
142
143 rc =
144 gcry_cipher_open (&handle, GCRY_CIPHER_AES256, GCRY_CIPHER_MODE_CFB,
145 0);
146
147 if (rc)
148 {
149 printf ("testweakkey: gcry_cipher_open failed on trial %d. %s\n",
150 number_of_runs, gcry_strerror (rc));
151 continue;
152 }
153
154 rc =
155 gcry_cipher_setkey (handle, &sessionkey,
156 GNUNET_CRYPTO_AES_KEY_LENGTH);
157
158 if ((char) rc == GPG_ERR_WEAK_KEY)
159 {
160 printf ("\nWeak key (in hex): ");
161 printWeakKey (&sessionkey);
162 printf ("\n");
163 number_of_weak_keys++;
164 }
165 else if (rc)
166 {
167 printf ("\nUnexpected error generating keys. Error is %s\n",
168 gcry_strerror (rc));
169 }
170
171 gcry_cipher_close (handle);
172 154
155 if ((char) rc == GPG_ERR_WEAK_KEY)
156 {
157 printf ("\nWeak key (in hex): ");
158 printWeakKey (&sessionkey);
159 printf ("\n");
160 number_of_weak_keys++;
161 }
162 else if (rc)
163 {
164 printf ("\nUnexpected error generating keys. Error is %s\n",
165 gcry_strerror (rc));
173 } 166 }
174 167
168 gcry_cipher_close (handle);
169
170 }
171
175 return number_of_weak_keys; 172 return number_of_weak_keys;
176} 173}
177 174
@@ -183,19 +180,19 @@ main (int argc, char *argv[])
183 GNUNET_log_setup ("test-crypto-aes-weak", "WARNING", NULL); 180 GNUNET_log_setup ("test-crypto-aes-weak", "WARNING", NULL);
184 GNUNET_CRYPTO_random_disable_entropy_gathering (); 181 GNUNET_CRYPTO_random_disable_entropy_gathering ();
185 if (GENERATE_WEAK_KEYS) 182 if (GENERATE_WEAK_KEYS)
183 {
184 weak_keys = getWeakKeys ();
185
186 if (weak_keys == 0)
187 {
188 printf ("\nNo weak keys found in %d runs.\n", MAX_WEAK_KEY_TRIALS);
189 }
190 else
186 { 191 {
187 weak_keys = getWeakKeys (); 192 printf ("\n%d weak keys found in %d runs.\n", weak_keys,
188 193 MAX_WEAK_KEY_TRIALS);
189 if (weak_keys == 0)
190 {
191 printf ("\nNo weak keys found in %d runs.\n", MAX_WEAK_KEY_TRIALS);
192 }
193 else
194 {
195 printf ("\n%d weak keys found in %d runs.\n", weak_keys,
196 MAX_WEAK_KEY_TRIALS);
197 }
198 } 194 }
195 }
199 196
200 if (testWeakKey () != 0) 197 if (testWeakKey () != 0)
201 return -1; 198 return -1;