@@ -392,62 +392,108 @@ mod digest_tests {
392
392
//use cryptoutil::test::test_digest_1million_random;
393
393
use blake2b:: Blake2b ;
394
394
use digest:: Digest ;
395
+ use serialize:: hex:: FromHex ;
395
396
396
397
397
398
struct Test {
398
- input : & ' static str ,
399
- output_str : & ' static str ,
399
+ input : Vec < u8 > ,
400
+ output : Vec < u8 > ,
401
+ key : Option < Vec < u8 > > ,
400
402
}
401
403
402
- fn test_hash < D : Digest > ( sh : & mut D , tests : & [ Test ] ) {
403
- // Test that it works when accepting the message all at once
404
- for t in tests. iter ( ) {
405
- sh. input_str ( t. input ) ;
404
+ fn test_hash ( tests : & [ Test ] ) {
405
+ for t in tests {
406
+ let mut sh = match t. key {
407
+ Some ( ref key) => Blake2b :: new_keyed ( 64 , & key) ,
408
+ None => Blake2b :: new ( 64 )
409
+ } ;
406
410
407
- let out_str = sh. result_str ( ) ;
408
- assert ! ( & out_str[ ..] == t. output_str) ;
411
+ // Test that it works when accepting the message all at once
412
+ sh. input ( & t. input [ ..] ) ;
413
+
414
+ let mut out = [ 0u8 ; 64 ] ;
415
+ sh. result ( & mut out) ;
416
+ assert ! ( & out[ ..] == & t. output[ ..] ) ;
409
417
410
418
sh. reset ( ) ;
411
- }
412
419
413
- // Test that it works when accepting the message in pieces
414
- for t in tests. iter ( ) {
420
+ // Test that it works when accepting the message in pieces
415
421
let len = t. input . len ( ) ;
416
422
let mut left = len;
417
423
while left > 0 {
418
424
let take = ( left + 1 ) / 2 ;
419
- sh. input_str ( & t. input [ len - left..take + len - left] ) ;
420
- left = left - take;
425
+ sh. input ( & t. input [ len - left..take + len - left] ) ;
426
+ left -= take;
421
427
}
422
428
423
- let out_str = sh. result_str ( ) ;
424
- assert ! ( & out_str[ ..] == t. output_str) ;
429
+ let mut out = [ 0u8 ; 64 ] ;
430
+ sh. result ( & mut out) ;
431
+ assert ! ( & out[ ..] == & t. output[ ..] ) ;
425
432
426
433
sh. reset ( ) ;
427
434
}
428
435
}
429
436
430
437
#[ test]
431
438
fn test_blake2b_digest ( ) {
432
- // Examples from wikipedia
433
- let wikipedia_tests = vec ! [
439
+ let tests = vec ! [
440
+ // Examples from wikipedia
441
+ Test {
442
+ input: vec![ ] ,
443
+ output: "786a02f742015903c6c6fd852552d272\
444
+ 912f4740e15847618a86e217f71f5419\
445
+ d25e1031afee585313896444934eb04b\
446
+ 903a685b1448b755d56f701afe9be2ce". from_hex( ) . unwrap( ) ,
447
+ key: None
448
+ } ,
434
449
Test {
435
- input: "" ,
436
- output_str: "786a02f742015903c6c6fd852552d272912f4740e15847618a86e217f71f5419\
437
- d25e1031afee585313896444934eb04b903a685b1448b755d56f701afe9be2ce"
450
+ input: "The quick brown fox jumps over the lazy dog" . as_bytes( ) . to_vec( ) ,
451
+ output: "a8add4bdddfd93e4877d2746e62817b1\
452
+ 16364a1fa7bc148d95090bc7333b3673\
453
+ f82401cf7aa2e4cb1ecd90296e3f14cb\
454
+ 5413f8ed77be73045b13914cdcd6a918". from_hex( ) . unwrap( ) ,
455
+ key: None
438
456
} ,
457
+ // from: https://github.com/BLAKE2/BLAKE2/blob/master/testvectors/blake2b-test.txt
439
458
Test {
440
- input: "The quick brown fox jumps over the lazy dog" ,
441
- output_str: "a8add4bdddfd93e4877d2746e62817b116364a1fa7bc148d95090bc7333b3673\
442
- f82401cf7aa2e4cb1ecd90296e3f14cb5413f8ed77be73045b13914cdcd6a918"
459
+ input: vec![ 0x00 , 0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 , 0x08 , 0x09 , 0x0a , 0x0b ,
460
+ 0x0c , 0x0d , 0x0e , 0x0f , 0x10 , 0x11 , 0x12 , 0x13 , 0x14 , 0x15 , 0x16 , 0x17 ,
461
+ 0x18 , 0x19 , 0x1a , 0x1b , 0x1c , 0x1d , 0x1e , 0x1f , 0x20 , 0x21 , 0x22 , 0x23 ,
462
+ 0x24 , 0x25 , 0x26 , 0x27 , 0x28 , 0x29 , 0x2a , 0x2b , 0x2c , 0x2d , 0x2e , 0x2f ,
463
+ 0x30 , 0x31 , 0x32 , 0x33 , 0x34 , 0x35 , 0x36 , 0x37 , 0x38 , 0x39 , 0x3a , 0x3b ,
464
+ 0x3c , 0x3d , 0x3e , 0x3f , 0x40 , 0x41 , 0x42 , 0x43 , 0x44 , 0x45 , 0x46 , 0x47 ,
465
+ 0x48 , 0x49 , 0x4a , 0x4b , 0x4c , 0x4d , 0x4e , 0x4f , 0x50 , 0x51 , 0x52 , 0x53 ,
466
+ 0x54 , 0x55 , 0x56 , 0x57 , 0x58 , 0x59 , 0x5a , 0x5b , 0x5c , 0x5d , 0x5e , 0x5f ,
467
+ 0x60 , 0x61 , 0x62 , 0x63 , 0x64 , 0x65 , 0x66 , 0x67 , 0x68 , 0x69 , 0x6a , 0x6b ,
468
+ 0x6c , 0x6d , 0x6e , 0x6f , 0x70 , 0x71 , 0x72 , 0x73 , 0x74 , 0x75 , 0x76 , 0x77 ,
469
+ 0x78 , 0x79 , 0x7a , 0x7b , 0x7c , 0x7d , 0x7e , 0x7f , 0x80 , 0x81 , 0x82 , 0x83 ,
470
+ 0x84 , 0x85 , 0x86 , 0x87 , 0x88 , 0x89 , 0x8a , 0x8b , 0x8c , 0x8d , 0x8e , 0x8f ,
471
+ 0x90 , 0x91 , 0x92 , 0x93 , 0x94 , 0x95 , 0x96 , 0x97 , 0x98 , 0x99 , 0x9a , 0x9b ,
472
+ 0x9c , 0x9d , 0x9e , 0x9f , 0xa0 , 0xa1 , 0xa2 , 0xa3 , 0xa4 , 0xa5 , 0xa6 , 0xa7 ,
473
+ 0xa8 , 0xa9 , 0xaa , 0xab , 0xac , 0xad , 0xae , 0xaf , 0xb0 , 0xb1 , 0xb2 , 0xb3 ,
474
+ 0xb4 , 0xb5 , 0xb6 , 0xb7 , 0xb8 , 0xb9 , 0xba , 0xbb , 0xbc , 0xbd , 0xbe , 0xbf ,
475
+ 0xc0 , 0xc1 , 0xc2 , 0xc3 , 0xc4 , 0xc5 , 0xc6 , 0xc7 , 0xc8 , 0xc9 , 0xca , 0xcb ,
476
+ 0xcc , 0xcd , 0xce , 0xcf , 0xd0 , 0xd1 , 0xd2 , 0xd3 , 0xd4 , 0xd5 , 0xd6 , 0xd7 ,
477
+ 0xd8 , 0xd9 , 0xda , 0xdb , 0xdc , 0xdd , 0xde , 0xdf , 0xe0 , 0xe1 , 0xe2 , 0xe3 ,
478
+ 0xe4 , 0xe5 , 0xe6 , 0xe7 , 0xe8 , 0xe9 , 0xea , 0xeb , 0xec , 0xed , 0xee , 0xef ,
479
+ 0xf0 , 0xf1 , 0xf2 , 0xf3 , 0xf4 , 0xf5 , 0xf6 , 0xf7 , 0xf8 , 0xf9 , 0xfa , 0xfb ,
480
+ 0xfc , 0xfd , 0xfe ] ,
481
+ output: vec![ 0x14 , 0x27 , 0x09 , 0xd6 , 0x2e , 0x28 , 0xfc , 0xcc , 0xd0 , 0xaf , 0x97 ,
482
+ 0xfa , 0xd0 , 0xf8 , 0x46 , 0x5b , 0x97 , 0x1e , 0x82 , 0x20 , 0x1d , 0xc5 ,
483
+ 0x10 , 0x70 , 0xfa , 0xa0 , 0x37 , 0x2a , 0xa4 , 0x3e , 0x92 , 0x48 , 0x4b ,
484
+ 0xe1 , 0xc1 , 0xe7 , 0x3b , 0xa1 , 0x09 , 0x06 , 0xd5 , 0xd1 , 0x85 , 0x3d ,
485
+ 0xb6 , 0xa4 , 0x10 , 0x6e , 0x0a , 0x7b , 0xf9 , 0x80 , 0x0d , 0x37 , 0x3d ,
486
+ 0x6d , 0xee , 0x2d , 0x46 , 0xd6 , 0x2e , 0xf2 , 0xa4 , 0x61 ] ,
487
+ key: Some ( vec![ 0x00 , 0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 , 0x08 , 0x09 , 0x0a ,
488
+ 0x0b , 0x0c , 0x0d , 0x0e , 0x0f , 0x10 , 0x11 , 0x12 , 0x13 , 0x14 , 0x15 ,
489
+ 0x16 , 0x17 , 0x18 , 0x19 , 0x1a , 0x1b , 0x1c , 0x1d , 0x1e , 0x1f , 0x20 ,
490
+ 0x21 , 0x22 , 0x23 , 0x24 , 0x25 , 0x26 , 0x27 , 0x28 , 0x29 , 0x2a , 0x2b ,
491
+ 0x2c , 0x2d , 0x2e , 0x2f , 0x30 , 0x31 , 0x32 , 0x33 , 0x34 , 0x35 , 0x36 ,
492
+ 0x37 , 0x38 , 0x39 , 0x3a , 0x3b , 0x3c , 0x3d , 0x3e , 0x3f ] )
443
493
} ,
444
494
] ;
445
495
446
- let tests = wikipedia_tests;
447
-
448
- let mut sh = Blake2b :: new ( 64 ) ;
449
-
450
- test_hash ( & mut sh, & tests[ ..] ) ;
496
+ test_hash ( & tests[ ..] ) ;
451
497
}
452
498
}
453
499
0 commit comments