github.com/brimstone/sbuca@v0.0.0-20151202175429-8691d9eba5c5/x509util/x509util.go (about)

     1  package x509util
     2  
     3  import (
     4  	"crypto/rsa"
     5  	"crypto/x509"
     6  	"encoding/pem"
     7  	"errors"
     8  	"fmt"
     9  	"io/ioutil"
    10  )
    11  
    12  func PemStringToPemBlock(pemString string) (*pem.Block, error) {
    13  
    14  	pemBlock, _ := pem.Decode([]byte(pemString))
    15  	if pemBlock == nil {
    16  		return nil, errors.New("pem decode failed")
    17  	}
    18  
    19  	return pemBlock, nil
    20  }
    21  func PemFileToPemBlock(filename string) (*pem.Block, error) {
    22  	certData, err := ioutil.ReadFile(filename)
    23  	if err != nil {
    24  		return nil, err
    25  	}
    26  
    27  	pemBlock, _ := pem.Decode(certData)
    28  	if pemBlock == nil {
    29  		return nil, errors.New("pem decode failed")
    30  	}
    31  
    32  	return pemBlock, nil
    33  }
    34  
    35  func PemStringToCertificate(pemString string) (*x509.Certificate, error) {
    36  
    37  	pemBlock, err := PemStringToPemBlock(pemString)
    38  	if err != nil {
    39  		return nil, err
    40  	}
    41  
    42  	cert, err := x509.ParseCertificate(pemBlock.Bytes)
    43  	if err != nil {
    44  		return nil, err
    45  	}
    46  
    47  	return cert, nil
    48  }
    49  func PemFileToCertificate(filename string) (*x509.Certificate, error) {
    50  
    51  	pemBlock, err := PemFileToPemBlock(filename)
    52  	if err != nil {
    53  		return nil, err
    54  	}
    55  
    56  	cert, err := x509.ParseCertificate(pemBlock.Bytes)
    57  	if err != nil {
    58  		return nil, err
    59  	}
    60  
    61  	return cert, nil
    62  }
    63  func PemStringToCertificateRequest(pemString string) (*x509.CertificateRequest, error) {
    64  
    65  	pemBlock, err := PemStringToPemBlock(pemString)
    66  	if err != nil {
    67  		return nil, err
    68  	}
    69  
    70  	cert, err := x509.ParseCertificateRequest(pemBlock.Bytes)
    71  	if err != nil {
    72  		return nil, err
    73  	}
    74  
    75  	return cert, nil
    76  }
    77  func PemFileToCertificateRequest(filename string) (*x509.CertificateRequest, error) {
    78  
    79  	pemBlock, err := PemFileToPemBlock(filename)
    80  	if err != nil {
    81  		return nil, err
    82  	}
    83  
    84  	cert, err := x509.ParseCertificateRequest(pemBlock.Bytes)
    85  	if err != nil {
    86  		return nil, err
    87  	}
    88  
    89  	return cert, nil
    90  }
    91  func PemStringToRsaPrivateKey(pemString string) (*rsa.PrivateKey, error) {
    92  
    93  	pemBlock, err := PemStringToPemBlock(pemString)
    94  	if err != nil {
    95  		return nil, err
    96  	}
    97  
    98  	cert, err := x509.ParsePKCS1PrivateKey(pemBlock.Bytes)
    99  	if err != nil {
   100  		return nil, err
   101  	}
   102  
   103  	return cert, nil
   104  }
   105  func PemFileToRsaPrivateKey(filename string) (*rsa.PrivateKey, error) {
   106  
   107  	pemBlock, err := PemFileToPemBlock(filename)
   108  	if err != nil {
   109  		return nil, err
   110  	}
   111  
   112  	cert, err := x509.ParsePKCS1PrivateKey(pemBlock.Bytes)
   113  	if err != nil {
   114  		return nil, err
   115  	}
   116  
   117  	return cert, nil
   118  }
   119  
   120  func main() {
   121  	cert, err := PemFileToCertificate("ca.crt")
   122  	if err != nil {
   123  		panic(err)
   124  	}
   125  	fmt.Println(cert.Version)
   126  
   127  	certData, err := ioutil.ReadFile("ca.crt")
   128  	if err != nil {
   129  		panic(err)
   130  	}
   131  	cert2, err := PemStringToCertificate(string(certData))
   132  	if err != nil {
   133  		panic(err)
   134  	}
   135  	fmt.Println(cert2.Version)
   136  }