cert_test.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. // Copyright 2015 The Go Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. package main
  5. import (
  6. "crypto/rand"
  7. "crypto/x509"
  8. "encoding/pem"
  9. "io/ioutil"
  10. "os"
  11. "os/exec"
  12. "testing"
  13. )
  14. func TestSignPKCS7(t *testing.T) {
  15. // Setup RSA key.
  16. block, _ := pem.Decode([]byte(testKey))
  17. if block == nil {
  18. t.Fatal("no cert")
  19. }
  20. privKey, err := x509.ParsePKCS1PrivateKey(block.Bytes)
  21. if err != nil {
  22. t.Fatal(err)
  23. }
  24. content := "Hello world,\nThis is signed."
  25. cert, err := signPKCS7(rand.Reader, privKey, []byte(content))
  26. if err != nil {
  27. t.Fatal(err)
  28. }
  29. sig, err := ioutil.TempFile("", "content.rsa")
  30. if err != nil {
  31. t.Fatal(err)
  32. }
  33. sigPath := sig.Name()
  34. defer os.Remove(sigPath)
  35. if _, err := sig.Write(cert); err != nil {
  36. t.Fatal(err)
  37. }
  38. if err := sig.Close(); err != nil {
  39. t.Fatal(err)
  40. }
  41. if openssl, err := exec.LookPath("openssl"); err != nil {
  42. t.Log("command openssl not found, skipping")
  43. } else {
  44. cmd := exec.Command(
  45. openssl, "asn1parse",
  46. "-inform", "DER",
  47. "-i",
  48. "-in", sigPath,
  49. )
  50. if err := cmd.Run(); err != nil {
  51. t.Errorf("bad asn.1: %v", err)
  52. }
  53. }
  54. if keytool, err := exec.LookPath("keytool"); err != nil {
  55. t.Log("command keytool not found, skipping")
  56. } else if err := exec.Command(keytool, "-v").Run(); err != nil {
  57. t.Logf("command keytool not functioning: %s, skipping", err)
  58. } else {
  59. cmd := exec.Command(keytool, "-v", "-printcert", "-file", sigPath)
  60. out, err := cmd.CombinedOutput()
  61. t.Logf("%v:\n%s", cmd.Args, out)
  62. if err != nil {
  63. t.Errorf("keytool cannot parse signature: %v", err)
  64. }
  65. }
  66. }
  67. const testKey = `
  68. -----BEGIN RSA PRIVATE KEY-----
  69. MIIEowIBAAKCAQEAy6ItnWZJ8DpX9R5FdWbS9Kr1U8Z7mKgqNByGU7No99JUnmyu
  70. NQ6Uy6Nj0Gz3o3c0BXESECblOC13WdzjsH1Pi7/L9QV8jXOXX8cvkG5SJAyj6hcO
  71. LOapjDiN89NXjXtyv206JWYvRtpexyVrmHJgRAw3fiFI+m4g4Qop1CxcIF/EgYh7
  72. rYrqh4wbCM1OGaCleQWaOCXxZGm+J5YNKQcWpjZRrDrb35IZmlT0bK46CXUKvCqK
  73. x7YXHgfhC8ZsXCtsScKJVHs7gEsNxz7A0XoibFw6DoxtjKzUCktnT0w3wxdY7OTj
  74. 9AR8mobFlM9W3yirX8TtwekWhDNTYEu8dwwykwIDAQABAoIBAA2hjpIhvcNR9H9Z
  75. BmdEecydAQ0ZlT5zy1dvrWI++UDVmIp+Ve8BSd6T0mOqV61elmHi3sWsBN4M1Rdz
  76. 3N38lW2SajG9q0fAvBpSOBHgAKmfGv3Ziz5gNmtHgeEXfZ3f7J95zVGhlHqWtY95
  77. JsmuplkHxFMyITN6WcMWrhQg4A3enKLhJLlaGLJf9PeBrvVxHR1/txrfENd2iJBH
  78. FmxVGILL09fIIktJvoScbzVOneeWXj5vJGzWVhB17DHBbANGvVPdD5f+k/s5aooh
  79. hWAy/yLKocr294C4J+gkO5h2zjjjSGcmVHfrhlXQoEPX+iW1TGoF8BMtl4Llc+jw
  80. lKWKfpECgYEA9C428Z6CvAn+KJ2yhbAtuRo41kkOVoiQPtlPeRYs91Pq4+NBlfKO
  81. 2nWLkyavVrLx4YQeCeaEU2Xoieo9msfLZGTVxgRlztylOUR+zz2FzDBYGicuUD3s
  82. EqC0Wv7tiX6dumpWyOcVVLmR9aKlOUzA9xemzIsWUwL3PpyONhKSq7kCgYEA1X2F
  83. f2jKjoOVzglhtuX4/SP9GxS4gRf9rOQ1Q8DzZhyH2LZ6Dnb1uEQvGhiqJTU8CXxb
  84. 7odI0fgyNXq425Nlxc1Tu0G38TtJhwrx7HWHuFcbI/QpRtDYLWil8Zr7Q3BT9rdh
  85. moo4m937hLMvqOG9pyIbyjOEPK2WBCtKW5yabqsCgYEAu9DkUBr1Qf+Jr+IEU9I8
  86. iRkDSMeusJ6gHMd32pJVCfRRQvIlG1oTyTMKpafmzBAd/rFpjYHynFdRcutqcShm
  87. aJUq3QG68U9EAvWNeIhA5tr0mUEz3WKTt4xGzYsyWES8u4tZr3QXMzD9dOuinJ1N
  88. +4EEumXtSPKKDG3M8Qh+KnkCgYBUEVSTYmF5EynXc2xOCGsuy5AsrNEmzJqxDUBI
  89. SN/P0uZPmTOhJIkIIZlmrlW5xye4GIde+1jajeC/nG7U0EsgRAV31J4pWQ5QJigz
  90. 0+g419wxIUFryGuIHhBSfpP472+w1G+T2mAGSLh1fdYDq7jx6oWE7xpghn5vb9id
  91. EKLjdwKBgBtz9mzbzutIfAW0Y8F23T60nKvQ0gibE92rnUbjPnw8HjL3AZLU05N+
  92. cSL5bhq0N5XHK77sscxW9vXjG0LJMXmFZPp9F6aV6ejkMIXyJ/Yz/EqeaJFwilTq
  93. Mc6xR47qkdzu0dQ1aPm4XD7AWDtIvPo/GG2DKOucLBbQc2cOWtKS
  94. -----END RSA PRIVATE KEY-----
  95. `