diff --git a/pem.go b/pem.go
deleted file mode 100644
index b021eff..0000000
--- a/pem.go
+++ /dev/null
@@ -1,56 +0,0 @@
-package goscaffold
-
-import (
-	"crypto/tls"
-	"crypto/x509"
-	"encoding/pem"
-	"errors"
-	"fmt"
-	"io/ioutil"
-)
-
-func decodePEM(fileName string, pwFunc func() []byte) ([]byte, string, error) {
-	pb, err := ioutil.ReadFile(fileName)
-	if err != nil {
-		return nil, "", err
-	}
-	block, _ := pem.Decode(pb)
-	if x509.IsEncryptedPEMBlock(block) {
-		if pwFunc == nil {
-			return nil, "", errors.New("Cannot read encrypted file without password")
-		}
-		dec, err := x509.DecryptPEMBlock(block, pwFunc())
-		if err != nil {
-			return nil, "", err
-		}
-		return dec, block.Type, nil
-	}
-	return block.Bytes, block.Type, nil
-}
-
-func getCertificate(certFile, keyFile string, pwFunc func() []byte) (tls.Certificate, error) {
-	ret := tls.Certificate{}
-
-	certBytes, _, err := decodePEM(certFile, nil)
-	if err != nil {
-		return ret, err
-	}
-	ret.Certificate = [][]byte{certBytes}
-
-	keyBytes, keyType, err := decodePEM(keyFile, pwFunc)
-	if err != nil {
-		return ret, err
-	}
-	switch keyType {
-	case "RSA PRIVATE KEY":
-		pk, err := x509.ParsePKCS1PrivateKey(keyBytes)
-		if err != nil {
-			return ret, err
-		}
-		ret.PrivateKey = pk
-	default:
-		return ret, fmt.Errorf("Invalid private key type %s", keyType)
-	}
-
-	return ret, nil
-}
diff --git a/scaffold.go b/scaffold.go
index de6e7f3..a878a7b 100644
--- a/scaffold.go
+++ b/scaffold.go
@@ -94,7 +94,6 @@
 	markdownMethod     string
 	markdownHandler    MarkdownHandler
 	keyFile            string
-	keyPassFunc        func() []byte
 	certFile           string
 }
 
@@ -190,9 +189,8 @@
 If "getPass" is non-null, then the function will be called at startup time
 to retrieve the password for the key file.
 */
-func (s *HTTPScaffold) SetKeyFile(fn string, getPass func() []byte) {
+func (s *HTTPScaffold) SetKeyFile(fn string) {
 	s.keyFile = fn
-	s.keyPassFunc = getPass
 }
 
 /*
@@ -278,7 +276,7 @@
 		if s.keyFile == "" || s.certFile == "" {
 			return errors.New("key and certificate files must be set")
 		}
-		cert, err := getCertificate(s.certFile, s.keyFile, s.keyPassFunc)
+		cert, err := tls.LoadX509KeyPair(s.certFile, s.keyFile)
 		if err != nil {
 			return err
 		}
diff --git a/scaffold_test.go b/scaffold_test.go
index 361a6f0..e46bcad 100644
--- a/scaffold_test.go
+++ b/scaffold_test.go
@@ -279,7 +279,7 @@
 	It("Secure And Insecure Ports", func() {
 		s := CreateHTTPScaffold()
 		s.SetSecurePort(0)
-		s.SetKeyFile("./testkeys/clearkey.pem", nil)
+		s.SetKeyFile("./testkeys/clearkey.pem")
 		s.SetCertFile("./testkeys/clearcert.pem")
 		stopChan := make(chan error)
 		err := s.Open()
@@ -309,7 +309,7 @@
 		s := CreateHTTPScaffold()
 		s.SetSecurePort(0)
 		s.SetInsecurePort(-1)
-		s.SetKeyFile("./testkeys/clearkey.pem", nil)
+		s.SetKeyFile("./testkeys/clearkey.pem")
 		s.SetCertFile("./testkeys/clearcert.pem")
 		stopChan := make(chan error)
 		err := s.Open()
@@ -332,63 +332,6 @@
 		s.Shutdown(shutdownErr)
 		Eventually(stopChan).Should(Receive(Equal(shutdownErr)))
 	})
-
-	It("Secure Port Encrypted Key", func() {
-		s := CreateHTTPScaffold()
-		s.SetSecurePort(0)
-		s.SetInsecurePort(-1)
-		s.SetKeyFile("./testkeys/serverkey.pem", func() []byte {
-			return []byte("secure")
-		})
-		s.SetCertFile("./testkeys/servercert.pem")
-		stopChan := make(chan error)
-		err := s.Open()
-		Expect(err).Should(Succeed())
-		Expect(s.InsecureAddress()).Should(BeEmpty())
-
-		go func() {
-			fmt.Fprintf(GinkgoWriter, "Gonna listen on %s\n",
-				s.SecureAddress())
-			stopErr := s.Listen(&testHandler{})
-			fmt.Fprintf(GinkgoWriter, "Done listening\n")
-			stopChan <- stopErr
-		}()
-
-		Eventually(func() bool {
-			return testGetSecure(s, "")
-		}, 5*time.Second).Should(BeTrue())
-
-		shutdownErr := errors.New("Validate")
-		s.Shutdown(shutdownErr)
-		Eventually(stopChan).Should(Receive(Equal(shutdownErr)))
-	})
-
-	It("Read PEM files", func() {
-		_, t, err := decodePEM("./testkeys/clearkey.pem", nil)
-		Expect(err).Should(Succeed())
-		Expect(t).Should(Equal("RSA PRIVATE KEY"))
-		_, t, err = decodePEM("./testkeys/clearcert.pem", nil)
-		Expect(err).Should(Succeed())
-		Expect(t).Should(Equal("CERTIFICATE"))
-		_, err = getCertificate("./testkeys/clearcert.pem", "./testkeys/clearkey.pem", nil)
-		Expect(err).Should(Succeed())
-
-		_, _, err = decodePEM("./testkeys/servercert.pem", nil)
-		Expect(err).Should(Succeed())
-		_, _, err = decodePEM("./testkeys/serverkey.pem", nil)
-		Expect(err).ShouldNot(Succeed())
-		_, _, err = decodePEM("./testkeys/serverkey.pem", func() []byte {
-			return []byte("notsecure")
-		})
-		Expect(err).ShouldNot(Succeed())
-		_, _, err = decodePEM("./testkeys/serverkey.pem", func() []byte {
-			return []byte("secure")
-		})
-		Expect(err).Should(Succeed())
-		_, err = getCertificate("./testkeys/servercert.pem", "./testkeys/serverkey.pem", func() []byte {
-			return []byte("notsecure")
-		})
-	})
 })
 
 func getText(url string) (int, string) {
