package pki import ( "crypto/elliptic" "crypto/x509/pkix" "math/big" "reflect" "testing" ) var ( TestCertificateData = CertificateData{ Subject: pkix.Name{CommonName: "foobar"}, DNSNames: []string{"foo.bar", "example.com"}, } ) func TestCertificateCreation(t *testing.T) { ed25519Key, err := NewPrivateKeyEd25519() if err != nil { t.Errorf("cert: creating private key ed25519 failed: %s", err) } ecdsaKey, err := NewPrivateKeyEcdsa(elliptic.P224()) if err != nil { t.Errorf("cert: creating private key ecdsa failed: %s", err) } rsaKey, err := NewPrivateKeyRsa(1024) if err != nil { t.Errorf("cert: creating private key rsa failed: %s", err) } for _, pk := range []PrivateKey{rsaKey, ecdsaKey, ed25519Key} { csr, err := TestCertificateData.ToCertificateRequest(pk) if err != nil { t.Errorf("cert: creating csr failed: %s", err) } cert_opts := CertificateOptions{ // KeyUsage: x509.KeyUsageEncipherOnly | x509.KeyUsageKeyEncipherment | x509.KeyUsageCertSign, SerialNumber: big.NewInt(1), CALength: -1, } cert, err := csr.ToCertificate(pk, cert_opts, nil) if err != nil { t.Errorf("cert: creating cert failed: %s", err) } if !fieldsAreSame(TestCertificateData, cert) { t.Errorf("cert: Fields are not the same") } } } func fieldsAreSame(data CertificateData, cert *Certificate) bool { if cert == nil { return false } if data.Subject.CommonName != cert.Subject.CommonName { return false } if !reflect.DeepEqual(data.Subject.Country, cert.Subject.Country) { return false } if !reflect.DeepEqual(data.DNSNames, cert.DNSNames) { return false } if !reflect.DeepEqual(data.IPAddresses, cert.IPAddresses) { return false } if !reflect.DeepEqual(data.EmailAddresses, cert.EmailAddresses) { return false } return true }