@@ -405,3 +405,46 @@ func TestHKDFUnsupportedHash(t *testing.T) {
405
405
t .Error ("expected error for unsupported hash" )
406
406
}
407
407
}
408
+ func TestExpandHKDFOneShot (t * testing.T ) {
409
+ if ! openssl .SupportsHKDF () {
410
+ t .Skip ("HKDF is not supported" )
411
+ }
412
+ for i , tt := range hkdfTests {
413
+ out , err := openssl .ExpandHKDFOneShot (tt .hash , tt .prk , tt .info , len (tt .out ))
414
+ if err != nil {
415
+ t .Errorf ("test %d: error expanding HKDF one-shot: %v." , i , err )
416
+ continue
417
+ }
418
+ if ! bytes .Equal (out , tt .out ) {
419
+ t .Errorf ("test %d: incorrect output from ExpandHKDFOneShot: have %v, need %v." , i , out , tt .out )
420
+ }
421
+ }
422
+ }
423
+
424
+ func TestExpandHKDFOneShotLimit (t * testing.T ) {
425
+ if ! openssl .SupportsHKDF () {
426
+ t .Skip ("HKDF is not supported" )
427
+ }
428
+ hash := openssl .NewSHA1
429
+ master := []byte {0x00 , 0x01 , 0x02 , 0x03 }
430
+ info := []byte {}
431
+
432
+ prk , err := openssl .ExtractHKDF (hash , master , nil )
433
+ if err != nil {
434
+ t .Fatalf ("error extracting HKDF: %v." , err )
435
+ }
436
+ limit := hash ().Size () * 255
437
+ out , err := openssl .ExpandHKDFOneShot (hash , prk , info , limit )
438
+ if err != nil {
439
+ t .Errorf ("error expanding HKDF one-shot: %v." , err )
440
+ }
441
+ if len (out ) != limit {
442
+ t .Errorf ("incorrect output length: have %d, need %d." , len (out ), limit )
443
+ }
444
+
445
+ // Expanding one more byte should fail
446
+ _ , err = openssl .ExpandHKDFOneShot (hash , prk , info , limit + 1 )
447
+ if err == nil {
448
+ t .Errorf ("expected error for key expansion overflow" )
449
+ }
450
+ }
0 commit comments