github.com/MrKrisYu/mobile@v0.0.0-20230923092425-9be92a9aeacc/cmd/gomobile/cert_test.go (about)

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