package main import ( "bytes" "crypto/rand" "crypto/rsa" "path/filepath" "testing" ) func TestGenerateRsaKeypair(t *testing.T) { privateKey, err := rsa.GenerateKey(rand.Reader, 4096) if err != nil { t.Error(err.Error()) } err = WriteKeypairToFile(privateKey, filepath.Join("certs", "key.pem")) if err != nil { t.Error(err.Error()) } loadedPrivateKey, err := ReadKeypairFromFile(filepath.Join("certs", "key.pem")) if err != nil { t.Error(err.Error()) } if !privateKey.Equal(loadedPrivateKey) { t.Error("saved and loaded private keys differ") } } func TestGenerateSelfSignedCertificate(t *testing.T) { privateKey, err := rsa.GenerateKey(rand.Reader, 4096) if err != nil { t.Error(err.Error()) } certificate, err := GenerateSelfSignedCertificate(X002, *privateKey) if err != nil { t.Error(err.Error()) } err = WriteCertificateToFile(certificate, filepath.Join("certs", "cert.pem")) if err != nil { t.Error(err.Error()) } t.Logf("Saved certificate has following fingerprints: %s", GetCertificateFingerprintAsString(certificate)) loadedCertificate, err := ReadCertificateFromFile(filepath.Join("certs", "cert.pem"), X002) if err != nil { t.Error(err.Error()) } t.Logf("Loaded certificate has following fingerprints: %s", GetCertificateFingerprintAsString(loadedCertificate)) if !bytes.Equal(certificate.x509Certificate, loadedCertificate.x509Certificate) { t.Error("saved and loaded certificates differ") } } // also generates keys func TestGenerateSelfSignedCertificateTriplet(t *testing.T) { var filenamePrefix string for _, ebicsCertificateType := range []EbicsCertificateType{A005, X002, E002} { switch ebicsCertificateType { case X002: filenamePrefix = "authentication" case E002: filenamePrefix = "encryption" case A005, A006: filenamePrefix = "signature" } privateKey, err := rsa.GenerateKey(rand.Reader, 4096) if err != nil { t.Error(err.Error()) } err = WriteKeypairToFile(privateKey, filepath.Join("certs", filenamePrefix+"_key.pem")) if err != nil { t.Error(err.Error()) } certificate, err := GenerateSelfSignedCertificate(ebicsCertificateType, *privateKey) if err != nil { t.Error(err.Error()) } err = WriteCertificateToFile(certificate, filepath.Join("certs", filenamePrefix+"_cert.pem")) if err != nil { t.Error(err.Error()) } } }