func extractCertificatesFromX5CHeader()

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
}