aboutsummaryrefslogblamecommitdiff
path: root/certificate_test.go
blob: 14b1279468af5a3156ce983c222a69efe6fe6a72 (plain) (tree)
1
2
3
4
5
6
7
8


           




                          


     



                                                             


                                            
                                                 
                       
                                                                              
         
                                                            
                       
                                                                            
         
                                             
                       
                                                                          

         



















                                                                                                                       
         


                                                                  


                            















                                                                           
 
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
}