435
}
436
437
>
func buildCAPool(cas []string, getBytes loadOrDecodeDataFunc) (*x509.CertPool, []*x509.Certificate, error) {
local_store_cert_provider.go
438
>
439
>
var caPool *x509.CertPool
440
>
var certs []*x509.Certificate
441
>
442
>
for _, ca := range cas {
443
>
if ca == "" {
444
continue
445
}
446
448
>
if err != nil {
449
return nil, nil, fmt.Errorf("failed to decode ca cert: %w", err)
450
}
451
453
>
caPool = x509.NewCertPool()
454
>
}
455
>
if !caPool.AppendCertsFromPEM(caBytes) {
456
return nil, nil, errors.New("unknown failure constructing cert pool for ca")
457
}
458
460
>
if err != nil {
461
return nil, nil, fmt.Errorf("failed to parse x509 certificate: %w", err)
462
}
464
}
466
}
467
468
// logic borrowed from tls.X509KeyPair()
470
>
471
>
var certBytes [][]byte
472
>
for {
473
>
var certDERBlock *pem.Block
474
>
certDERBlock, bytes = pem.Decode(bytes)
475
>
if certDERBlock == nil {
476
>
break
477
}
479
>
certBytes = append(certBytes, certDERBlock.Bytes)
480
>
}
481
}
482
484
return nil, fmt.Errorf("failed to decode PEM certificate data")
485
}
487
}
488