toolkit/certificates/certgenerator/cert_generator.go (65 lines of code) (raw):

package certgenerator import ( "context" "crypto/rand" "crypto/rsa" "crypto/x509" "fmt" "github.com/Azure/webhook-tls-manager/toolkit/certificates/certcreator" "github.com/Azure/webhook-tls-manager/toolkit/log" "k8s.io/legacy-cloud-providers/azure/retry" ) const ( KeySize = 4096 ) type certificateGeneratorImp struct { certCreator certcreator.CertCreator } func NewCertGenerator(certCreator certcreator.CertCreator) CertGenerator { return &certificateGeneratorImp{ certCreator: certCreator, } } func (c *certificateGeneratorImp) CreateSelfSignedCertificateKeyPair(ctx context.Context, csr *x509.Certificate) (*x509.Certificate, *rsa.PrivateKey, *retry.Error) { if csr == nil { return nil, nil, retry.NewError(false, fmt.Errorf("certificate signing request is nil")) } logger := log.MustGetLogger(ctx) privateKey, err := rsa.GenerateKey(rand.Reader, KeySize) if err != nil { logger.Errorf(ctx, "rsa.GenerateKeyfailed: %s", err) return nil, nil, retry.NewError(true, err) } certificate, rerr := c.certCreator.CreateCertificateWithPublicKey(ctx, csr, &privateKey.PublicKey, csr, privateKey) if rerr != nil { logger.Errorf(ctx, "createCertificate failed: %+v", rerr) return nil, nil, rerr } return certificate, privateKey, nil } func (c *certificateGeneratorImp) CreateCertificateKeyPair(ctx context.Context, csr *x509.Certificate, caCert *x509.Certificate, caKey *rsa.PrivateKey) (*x509.Certificate, *rsa.PrivateKey, *retry.Error) { if csr == nil { return nil, nil, retry.NewError(false, fmt.Errorf("certificate signing request is nil")) } logger := log.MustGetLogger(ctx) privateKey, err := rsa.GenerateKey(rand.Reader, KeySize) if err != nil { logger.Errorf(ctx, "rsa.GenerateKey failed: %s", err) return nil, nil, retry.NewError(true, err) } certificate, rerr := c.certCreator.CreateCertificateWithPublicKey(ctx, csr, &privateKey.PublicKey, caCert, caKey) if rerr != nil { logger.Errorf(ctx, "createCertificate failed: %+v", rerr) return nil, nil, rerr } return certificate, privateKey, nil } func (c *certificateGeneratorImp) CreateCertificate(ctx context.Context, csr *x509.Certificate, privateKey *rsa.PrivateKey, caCert *x509.Certificate, caKey *rsa.PrivateKey) (*x509.Certificate, *retry.Error) { if privateKey == nil { return nil, retry.NewError(false, fmt.Errorf("private key is nil")) } if csr == nil { return nil, retry.NewError(false, fmt.Errorf("certificate signing request is nil")) } return c.certCreator.CreateCertificateWithPublicKey(ctx, csr, &privateKey.PublicKey, caCert, caKey) }