func NewCompositeAlgSigVerifier(v AlgSignatureVerifier, vOther ...AlgSignatureVerifier) *CompositeAlgSigVerifier {
	verifierByAlg := make(map[string]SignatureVerifier, 1+len(vOther))
	verifierByAlg[v.Alg] = v.Verifier
	for _, v := range vOther {
		verifierByAlg[v.Alg] = v.Verifier
	}
	return &CompositeAlgSigVerifier{
		verifierByAlg: verifierByAlg,
	}
}
NewCompositeAlgSigVerifier creates a new CompositeAlgSigVerifier.
package jose
import (
	"encoding/base64"
	"errors"
	"fmt"
	"strings"
	"github.com/square/go-jose/v3/json"
)
const (
	jwsPartsCount    = 3
	jwsHeaderPart    = 0
	jwsPayloadPart   = 1
	jwsSignaturePart = 2
)
type JSONWebSignature struct {
	ProtectedHeaders   Headers
	UnprotectedHeaders Headers
	Payload            []byte
	signature   []byte
	joseHeaders Headers
}
type SignatureVerifier interface {
	Verify(joseHeaders Headers, payload, signingInput, signature []byte) error
}
type SignatureVerifierFunc func(joseHeaders Headers, payload, signingInput, signature []byte) error
func (s SignatureVerifierFunc) Verify(joseHeaders Headers, payload, signingInput, signature []byte) error {
	return s(joseHeaders, payload, signingInput, signature)
}
type CompositeAlgSigVerifier struct {
	verifierByAlg map[string]SignatureVerifier
}
type AlgSignatureVerifier struct {
	Alg      string
	Verifier SignatureVerifier
}