| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- package e2e
- import (
- "crypto/rand"
- "io"
- "net/netip"
- "time"
- "github.com/slackhq/nebula/cert"
- "golang.org/x/crypto/curve25519"
- "golang.org/x/crypto/ed25519"
- )
- // NewTestCaCert will generate a CA cert
- func NewTestCaCert(before, after time.Time, networks, unsafeNetworks []netip.Prefix, groups []string) (cert.Certificate, []byte, []byte, []byte) {
- pub, priv, err := ed25519.GenerateKey(rand.Reader)
- if before.IsZero() {
- before = time.Now().Add(time.Second * -60).Round(time.Second)
- }
- if after.IsZero() {
- after = time.Now().Add(time.Second * 60).Round(time.Second)
- }
- t := &cert.TBSCertificate{
- Version: cert.Version1,
- Name: "test ca",
- NotBefore: time.Unix(before.Unix(), 0),
- NotAfter: time.Unix(after.Unix(), 0),
- PublicKey: pub,
- Networks: networks,
- UnsafeNetworks: unsafeNetworks,
- Groups: groups,
- IsCA: true,
- }
- c, err := t.Sign(nil, cert.Curve_CURVE25519, priv)
- if err != nil {
- panic(err)
- }
- pem, err := c.MarshalPEM()
- if err != nil {
- panic(err)
- }
- return c, pub, priv, pem
- }
- // NewTestCert will generate a signed certificate with the provided details.
- // Expiry times are defaulted if you do not pass them in
- func NewTestCert(ca cert.Certificate, key []byte, name string, before, after time.Time, networks, unsafeNetworks []netip.Prefix, groups []string) (cert.Certificate, []byte, []byte, []byte) {
- if before.IsZero() {
- before = time.Now().Add(time.Second * -60).Round(time.Second)
- }
- if after.IsZero() {
- after = time.Now().Add(time.Second * 60).Round(time.Second)
- }
- pub, rawPriv := x25519Keypair()
- nc := &cert.TBSCertificate{
- Version: cert.Version1,
- Name: name,
- Networks: networks,
- UnsafeNetworks: unsafeNetworks,
- Groups: groups,
- NotBefore: time.Unix(before.Unix(), 0),
- NotAfter: time.Unix(after.Unix(), 0),
- PublicKey: pub,
- IsCA: false,
- }
- c, err := nc.Sign(ca, ca.Curve(), key)
- if err != nil {
- panic(err)
- }
- pem, err := c.MarshalPEM()
- if err != nil {
- panic(err)
- }
- return c, pub, cert.MarshalPrivateKeyToPEM(cert.Curve_CURVE25519, rawPriv), pem
- }
- func x25519Keypair() ([]byte, []byte) {
- privkey := make([]byte, 32)
- if _, err := io.ReadFull(rand.Reader, privkey); err != nil {
- panic(err)
- }
- pubkey, err := curve25519.X25519(privkey, curve25519.Basepoint)
- if err != nil {
- panic(err)
- }
- return pubkey, privkey
- }
|