package certificates
import (
"bytes"
"crypto/x509"
"encoding/pem"
"strings"
apiutil "gitbucket.jerxie.com/yangyangxie/AnthosCertManager/pkg/api/util"
acmapi "gitbucket.jerxie.com/yangyangxie/AnthosCertManager/pkg/apis/anthoscertmanager/v1"
utilpki "gitbucket.jerxie.com/yangyangxie/AnthosCertManager/pkg/util/pki"
)
// AnnotationsForCertificateSecret returns a map which is set on all
// Certificate Secret's Annotations when issued. These annotations contain
// information about the Issuer and Certificate.
// If the X.509 certificate is not-nil, additional annotations will be added
// relating to its Common Name and Subject Alternative Names.
func AnnotationsForCertificateSecret(crt *acmapi.Certificate, certificate *x509.Certificate) map[string]string {
annotations := make(map[string]string)
annotations[acmapi.CertificateNameKey] = crt.Name
annotations[acmapi.IssuerNameAnnotationKey] = crt.Spec.IssuerRef.Name
annotations[acmapi.IssuerKindAnnotationKey] = apiutil.IssuerKind(crt.Spec.IssuerRef)
annotations[acmapi.IssuerGroupAnnotationKey] = crt.Spec.IssuerRef.Group
// Only add certificate data if certificate is non-nil.
if certificate != nil {
annotations[acmapi.CommonNameAnnotationKey] = certificate.Subject.CommonName
annotations[acmapi.AltNamesAnnotationKey] = strings.Join(certificate.DNSNames, ",")
annotations[acmapi.IPSANAnnotationKey] = strings.Join(utilpki.IPAddressesToString(certificate.IPAddresses), ",")
annotations[acmapi.URISANAnnotationKey] = strings.Join(utilpki.URLsToString(certificate.URIs), ",")
}
return annotations
}
// OutputFormatDER returns the byte slice of the private key in DER format. To
// be used for Certificate's Additional Output Format DER.
func OutputFormatDER(privateKey []byte) []byte {
block, _ := pem.Decode(privateKey)
return block.Bytes
}
// OutputFormatCombinedPEM returns the byte slice of the PEM encoded private
// key and signed certificate chain, concatenated. To be used for Certificate's
// Additional Output Format Combined PEM.
func OutputFormatCombinedPEM(privateKey, certificate []byte) []byte {
return bytes.Join([][]byte{privateKey, certificate}, []byte("\n"))
}