Browse code
Test the token generator's usage of randomness
Ed Langley authored on 14/06/2017 17:48:53
Showing 3 changed files
Showing 3 changed files
... | ... |
@@ -287,6 +287,30 @@ int ensure_key_reads_key_file_if_exists () |
287 | 287 |
succeed(); |
288 | 288 |
} |
289 | 289 |
|
290 |
+int generate_key_uses_random_source () |
|
291 |
+{ |
|
292 |
+ // given |
|
293 |
+ user test_user (user::delegate (new fake_user ("/nowhere"))); |
|
294 |
+ fstreams test_streams{fstreams::delegate (new fake_fstreams ("<>", "<>"))}; |
|
295 |
+ totp_generator generator (totp_generator::delegate (new fake_totp_generator ())); |
|
296 |
+ |
|
297 |
+ std::vector<uint8_t> random_bytes1 {4,2,4, 2,4, 2,4,2, 4,2}; |
|
298 |
+ random_source fake_rand1(random_source::delegate (new fake_rand_with_specified_result(random_bytes1))); |
|
299 |
+ tokens tokens1 (tokens::create (test_streams, generator, fake_rand1)); |
|
300 |
+ |
|
301 |
+ std::vector<uint8_t> random_bytes2 {1,2,1, 2,1, 1,2,1, 2,1}; |
|
302 |
+ random_source fake_rand2(random_source::delegate (new fake_rand_with_specified_result(random_bytes2))); |
|
303 |
+ tokens tokens2 (tokens::create (test_streams, generator, fake_rand2)); |
|
304 |
+ |
|
305 |
+ //when |
|
306 |
+ std::string first_key = tokens1.generate_key(); |
|
307 |
+ std::string second_key = tokens2.generate_key(); |
|
308 |
+ |
|
309 |
+ // then |
|
310 |
+ check (first_key != second_key, "keys generated from differing random data should not match"); |
|
311 |
+ succeed(); |
|
312 |
+} |
|
313 |
+ |
|
290 | 314 |
int run_tests() |
291 | 315 |
{ |
292 | 316 |
test (reads_from_the_right_file); |
... | ... |
@@ -294,6 +318,7 @@ int run_tests() |
294 | 318 |
test (returns_empty_string_if_file_too_short); |
295 | 319 |
test (ensure_key_creates_key_file_if_not_exists); |
296 | 320 |
test (ensure_key_reads_key_file_if_exists); |
321 |
+ test (generate_key_uses_random_source); |
|
297 | 322 |
succeed(); |
298 | 323 |
} |
299 | 324 |
|