1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
// Inspired by https://github.com/zakjan/cert-chain-resolver/blob/1.0.3/certUtil/chain.go
// which is licensed on a MIT license.
//
// Shout out to Jan Žák (http://zakjan.cz) original author of `certUtil` package and other
// contributors who updated it!
package ca_chain
import (
"crypto/x509"
"fmt"
)
type chainResolver struct {
urlResolver resolver
verifyResolver resolver
}
func newChainResolver(urlResolver, verifyResolver resolver) resolver {
return &chainResolver{
urlResolver: urlResolver,
verifyResolver: verifyResolver,
}
}
func (r *chainResolver) Resolve(certs []*x509.Certificate) ([]*x509.Certificate, error) {
certs, err := r.urlResolver.Resolve(certs)
if err != nil {
return nil, fmt.Errorf("error while resolving certificates chain with URL: %w", err)
}
certs, err = r.verifyResolver.Resolve(certs)
if err != nil {
return nil, fmt.Errorf("error while resolving certificates chain with verification: %w", err)
}
return certs, err
}
|