86 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package pki
 | |
| 
 | |
| import (
 | |
| 	"crypto/ed25519"
 | |
| 	"crypto/x509"
 | |
| 	"crypto/x509/pkix"
 | |
| 	"math/big"
 | |
| 	"net"
 | |
| 	"time"
 | |
| )
 | |
| 
 | |
| // CertOptions are passed to cert options
 | |
| type CertOptions struct {
 | |
| 	IsCA         bool
 | |
| 	Subject      pkix.Name
 | |
| 	DNSNames     []string
 | |
| 	IPAddresses  []net.IP
 | |
| 	SerialNumber *big.Int
 | |
| 	NotBefore    time.Time
 | |
| 	NotAfter     time.Time
 | |
| 
 | |
| 	Parent *x509.Certificate
 | |
| 	Pub    ed25519.PublicKey
 | |
| 	Priv   ed25519.PrivateKey
 | |
| }
 | |
| 
 | |
| // CertOption sets CertOptions
 | |
| type CertOption func(c *CertOptions)
 | |
| 
 | |
| // Subject sets the Subject field
 | |
| func Subject(subject pkix.Name) CertOption {
 | |
| 	return func(c *CertOptions) {
 | |
| 		c.Subject = subject
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // IsCA states the cert is a CA
 | |
| func IsCA() CertOption {
 | |
| 	return func(c *CertOptions) {
 | |
| 		c.IsCA = true
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // DNSNames is a list of hosts to sign in to the certificate
 | |
| func DNSNames(names ...string) CertOption {
 | |
| 	return func(c *CertOptions) {
 | |
| 		c.DNSNames = names
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // IPAddresses is a list of IPs to sign in to the certificate
 | |
| func IPAddresses(ips ...net.IP) CertOption {
 | |
| 	return func(c *CertOptions) {
 | |
| 		c.IPAddresses = ips
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // KeyPair is the key pair to sign the certificate with
 | |
| func KeyPair(pub ed25519.PublicKey, priv ed25519.PrivateKey) CertOption {
 | |
| 	return func(c *CertOptions) {
 | |
| 		c.Pub = pub
 | |
| 		c.Priv = priv
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // SerialNumber is the Certificate Serial number
 | |
| func SerialNumber(serial *big.Int) CertOption {
 | |
| 	return func(c *CertOptions) {
 | |
| 		c.SerialNumber = serial
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // NotBefore is the time the certificate is not valid before
 | |
| func NotBefore(time time.Time) CertOption {
 | |
| 	return func(c *CertOptions) {
 | |
| 		c.NotBefore = time
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // NotAfter is the time the certificate is not valid after
 | |
| func NotAfter(time time.Time) CertOption {
 | |
| 	return func(c *CertOptions) {
 | |
| 		c.NotAfter = time
 | |
| 	}
 | |
| }
 |