From d5c080ae9cb1d27893f4928caae49995da0fa7e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miloslav=20Trma=C4=8D?= Date: Wed, 2 Dec 2015 17:05:07 +0100 Subject: [PATCH] Add cryptoservice.GenerateTestingCertificate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Various tests have been calling trustmanager.NewCertificate and open-coding most of cryptoservice.GenerateCertificate. So, add cryptoservice.GenerateTestingCertificate. It differs only by using crypto.Signer instead of data.PrivateKey because the tests have a crypto.Signer more frequently available, and converting from data.PrivateKey to crypto.Signer is easier than the other way. This will make it easier to add policy parameters which the tests don't care about to trustmanager.NewCertificate and cryptoservice.GenerateCertificate in the future. Signed-off-by: Miloslav Trmač --- certs/certmanager_test.go | 2 +- cryptoservice/certificate.go | 10 ++++++++++ tuf/signed/sign_test.go | 12 ++---------- utils/tls_config_test.go | 10 ++-------- 4 files changed, 15 insertions(+), 19 deletions(-) diff --git a/certs/certmanager_test.go b/certs/certmanager_test.go index f9a6fdabda..8dc6104894 100644 --- a/certs/certmanager_test.go +++ b/certs/certmanager_test.go @@ -242,7 +242,7 @@ func filestoreWithTwoCerts(t *testing.T, gun, keyAlg string) ( key, _, err := fileKeyStore.GetKey(pubKey.ID()) assert.NoError(t, err) - cert, err := cryptoservice.GenerateCertificate(key, gun) + cert, err := cryptoservice.GenerateTestingCertificate(key.CryptoSigner(), gun) assert.NoError(t, err) certificates[i] = cert diff --git a/cryptoservice/certificate.go b/cryptoservice/certificate.go index b9efc84db0..16aea6e96f 100644 --- a/cryptoservice/certificate.go +++ b/cryptoservice/certificate.go @@ -1,6 +1,7 @@ package cryptoservice import ( + "crypto" "crypto/rand" "crypto/x509" "fmt" @@ -16,6 +17,15 @@ func GenerateCertificate(rootKey data.PrivateKey, gun string) (*x509.Certificate return nil, fmt.Errorf("key type not supported for Certificate generation: %s\n", rootKey.Algorithm()) } + return generateCertificate(signer, gun) +} + +// GenerateTestingCertificate generates an X509 Certificate from a template, given a GUN. +func GenerateTestingCertificate(signer crypto.Signer, gun string) (*x509.Certificate, error) { + return generateCertificate(signer, gun) +} + +func generateCertificate(signer crypto.Signer, gun string) (*x509.Certificate, error) { template, err := trustmanager.NewCertificate(gun) if err != nil { return nil, fmt.Errorf("failed to create the certificate template for: %s (%v)", gun, err) diff --git a/tuf/signed/sign_test.go b/tuf/signed/sign_test.go index 6ceb3e5232..50c241b7b7 100644 --- a/tuf/signed/sign_test.go +++ b/tuf/signed/sign_test.go @@ -2,11 +2,11 @@ package signed import ( "crypto/rand" - "crypto/x509" "encoding/pem" "io" "testing" + "github.com/docker/notary/cryptoservice" "github.com/docker/notary/trustmanager" "github.com/docker/notary/tuf/data" "github.com/stretchr/testify/assert" @@ -254,15 +254,7 @@ func TestSignWithX509(t *testing.T) { assert.NoError(t, err) // make a RSA x509 key - template, err := trustmanager.NewCertificate("test") - assert.NoError(t, err) - - signer := privKey.CryptoSigner() - derBytes, err := x509.CreateCertificate( - rand.Reader, template, template, signer.Public(), signer) - assert.NoError(t, err) - - cert, err := x509.ParseCertificate(derBytes) + cert, err := cryptoservice.GenerateTestingCertificate(privKey.CryptoSigner(), "test") assert.NoError(t, err) tufRSAx509Key := trustmanager.CertToKey(cert) diff --git a/utils/tls_config_test.go b/utils/tls_config_test.go index 35a5d782fc..71a182a3fe 100644 --- a/utils/tls_config_test.go +++ b/utils/tls_config_test.go @@ -7,11 +7,11 @@ import ( "crypto/rand" "crypto/rsa" "crypto/tls" - "crypto/x509" "io/ioutil" "os" "testing" + "github.com/docker/notary/cryptoservice" "github.com/docker/notary/trustmanager" "github.com/stretchr/testify/assert" ) @@ -33,15 +33,9 @@ func generateMultiCert(t *testing.T) string { assert.NoError(t, err) ecKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) assert.NoError(t, err) - template, err := trustmanager.NewCertificate("gun") - assert.NoError(t, err) for _, key := range []crypto.Signer{rsaKey, ecKey} { - derBytes, err := x509.CreateCertificate( - rand.Reader, template, template, key.Public(), key) - assert.NoError(t, err) - - cert, err := x509.ParseCertificate(derBytes) + cert, err := cryptoservice.GenerateTestingCertificate(key, "gun") assert.NoError(t, err) pemBytes := trustmanager.CertToPEM(cert)