code: func ParseKey(key []byte) (*rsa.PrivateKey, error) {
  	block, _ := pem.Decode(key)
  	if block != nil {
  		key = block.Bytes
  	}
  	parsedKey, err := x509.ParsePKCS8PrivateKey(key)
  	if err != nil {
  		parsedKey, err = x509.ParsePKCS1PrivateKey(key)
  		if err != nil {
  			return nil, fmt.Errorf("private key should be a PEM or plain PKSC1 or PKCS8; parse error: %v", err)
  		}
  	}
  	parsed, ok := parsedKey.(*rsa.PrivateKey)
  	if !ok {
  		return nil, errors.New("private key is invalid")
  	}
  	return parsed, nil
  }
docs: // ParseKey converts the binary contents of a private key file
  // to an *rsa.PrivateKey. It detects whether the private key is in a
  // PEM container or not. If so, it extracts the the private key
  // from PEM container before conversion. It only supports PEM
  // containers with no passphrase.