@@ -289,16 +289,16 @@ var hkdfTests = []hkdfTest{
289289 },
290290}
291291
292- func newHKDF (hash func () hash.Hash , secret , salt , info []byte ) io.Reader {
292+ func newHKDF (hash func () hash.Hash , secret , salt , info []byte ) ( io.Reader , error ) {
293293 prk , err := openssl .ExtractHKDF (hash , secret , salt )
294294 if err != nil {
295- panic ( err )
295+ return nil , err
296296 }
297297 r , err := openssl .ExpandHKDF (hash , prk , info )
298298 if err != nil {
299- panic ( err )
299+ return nil , err
300300 }
301- return r
301+ return r , nil
302302}
303303
304304func TestHKDF (t * testing.T ) {
@@ -314,7 +314,11 @@ func TestHKDF(t *testing.T) {
314314 t .Errorf ("test %d: incorrect PRK: have %v, need %v." , i , prk , tt .prk )
315315 }
316316
317- hkdf := newHKDF (tt .hash , tt .master , tt .salt , tt .info )
317+ hkdf , err := newHKDF (tt .hash , tt .master , tt .salt , tt .info )
318+ if err != nil {
319+ t .Errorf ("test %d: error creating HKDF: %v." , i , err )
320+ continue
321+ }
318322 out := make ([]byte , len (tt .out ))
319323
320324 n , err := io .ReadFull (hkdf , out )
@@ -347,7 +351,10 @@ func TestHKDFMultiRead(t *testing.T) {
347351 t .Skip ("HKDF is not supported" )
348352 }
349353 for i , tt := range hkdfTests {
350- hkdf := newHKDF (tt .hash , tt .master , tt .salt , tt .info )
354+ hkdf , err := newHKDF (tt .hash , tt .master , tt .salt , tt .info )
355+ if err != nil {
356+ t .Errorf ("test %d: error creating HKDF: %v." , i , err )
357+ }
351358 out := make ([]byte , len (tt .out ))
352359
353360 for b := range len (tt .out ) {
@@ -371,7 +378,10 @@ func TestHKDFLimit(t *testing.T) {
371378 master := []byte {0x00 , 0x01 , 0x02 , 0x03 }
372379 info := []byte {}
373380
374- hkdf := newHKDF (hash , master , nil , info )
381+ hkdf , err := newHKDF (hash , master , nil , info )
382+ if err != nil {
383+ t .Fatalf ("error creating HKDF: %v." , err )
384+ }
375385 limit := hash ().Size () * 255
376386 out := make ([]byte , limit )
377387
@@ -387,3 +397,11 @@ func TestHKDFLimit(t *testing.T) {
387397 t .Errorf ("key expansion overflowed: n = %d, err = %v" , n , err )
388398 }
389399}
400+
401+ func TestHKDFUnsupportedHash (t * testing.T ) {
402+ // Test that newHKDF returns an error instead of panicking.
403+ _ , err := newHKDF (newStubHash , []byte {0x00 , 0x01 , 0x02 , 0x03 }, nil , []byte {})
404+ if err == nil {
405+ t .Error ("expected error for unsupported hash" )
406+ }
407+ }
0 commit comments