in codelabs/health_data_analysis_codelab/src/uwear/workload.go [170:206]
func extractCertificatesFromX5CHeader(x5cHeaders []any) (CertificateChain, error) {
if x5cHeaders == nil {
return CertificateChain{}, fmt.Errorf("x5c header not set")
}
x5c := []string{}
for _, header := range x5cHeaders {
x5c = append(x5c, header.(string))
}
// x5c header should have at least 3 certificates - leaf, intermediate and root
if len(x5c) < 3 {
return CertificateChain{}, fmt.Errorf("not enough certificates in x5c header, expected 3 certificates, but got %v", len(x5c))
}
leafCert, err := decodeAndParseDERCertificate(x5c[0])
if err != nil {
return CertificateChain{}, fmt.Errorf("cannot parse leaf certificate: %v", err)
}
intermediateCert, err := decodeAndParseDERCertificate(x5c[1])
if err != nil {
return CertificateChain{}, fmt.Errorf("cannot parse intermediate certificate: %v", err)
}
rootCert, err := decodeAndParseDERCertificate(x5c[2])
if err != nil {
return CertificateChain{}, fmt.Errorf("cannot parse root certificate: %v", err)
}
certificates := CertificateChain{
LeafCert: leafCert,
IntermediateCert: intermediateCert,
RootCert: rootCert,
}
return certificates, nil
}