Golang crypto/x509.ParseDERCRL function example

package crypto/x509

ParseDERCRL parses a DER encoded CRL from the given bytes.

Golang crypto/x509.ParseDERCRL function usage example

 package main

 import (
 "crypto/x509"
 "os"
 "fmt"
 "encoding/pem"
 "crypto/x509/pkix"
 "crypto/rand"
 "math/big"
 "time"
 )

 func main() {

 var pemPrivateKey = `-----BEGIN RSA PRIVATE KEY-----
 MIIBOgIBAAJBALKZD0nEffqM1ACuak0bijtqE2QrI/KLADv7l3kK3ppMyCuLKoF0
 fd7Ai2KW5ToIwzFofvJcS/STa6HA5gQenRUCAwEAAQJBAIq9amn00aS0h/CrjXqu
 /ThglAXJmZhOMPVn4eiu7/ROixi9sex436MaVeMqSNf7Ex9a8fRNfWss7Sqd9eWu
 RTUCIQDasvGASLqmjeffBNLTXV2A5g4t+kLVCpsEIZAycV5GswIhANEPLmax0ME/
 EO+ZJ79TJKN5yiGBRsv5yvx5UiHxajEXAiAhAol5N4EUyq6I9w1rYdhPMGpLfk7A
 IU2snfRJ6Nq2CQIgFrPsWRCkV+gOYcajD17rEqmuLrdIRexpg8N1DOSXoJ8CIGlS
 tAboUGBxTDq3ZroNism3DaMIbKPyYrAqhKov1h5V
 -----END RSA PRIVATE KEY-----
 `

 var pemCertificate = `-----BEGIN CERTIFICATE-----
 MIIB5DCCAZCgAwIBAgIBATALBgkqhkiG9w0BAQUwLTEQMA4GA1UEChMHQWNtZSBDbzEZMBcGA1UE
 AxMQdGVzdC5leGFtcGxlLmNvbTAeFw03MDAxMDEwMDE2NDBaFw03MDAxMDIwMzQ2NDBaMC0xEDAO
 BgNVBAoTB0FjbWUgQ28xGTAXBgNVBAMTEHRlc3QuZXhhbXBsZS5jb20wWjALBgkqhkiG9w0BAQED
 SwAwSAJBALKZD0nEffqM1ACuak0bijtqE2QrI/KLADv7l3kK3ppMyCuLKoF0fd7Ai2KW5ToIwzFo
 fvJcS/STa6HA5gQenRUCAwEAAaOBnjCBmzAOBgNVHQ8BAf8EBAMCAAQwDwYDVR0TAQH/BAUwAwEB
 /zANBgNVHQ4EBgQEAQIDBDAPBgNVHSMECDAGgAQBAgMEMBsGA1UdEQQUMBKCEHRlc3QuZXhhbXBs
 ZS5jb20wDwYDVR0gBAgwBjAEBgIqAzAqBgNVHR4EIzAhoB8wDoIMLmV4YW1wbGUuY29tMA2CC2V4
 YW1wbGUuY29tMAsGCSqGSIb3DQEBBQNBAHKZKoS1wEQOGhgklx4+/yFYQlnqwKXvar/ZecQvJwui
 0seMQnwBhwdBkHfVIU2Fu5VUMRyxlf0ZNaDXcpU581k=
 -----END CERTIFICATE-----`

 block, _ := pem.Decode([]byte(pemPrivateKey))
 priv, _ := x509.ParsePKCS1PrivateKey(block.Bytes)
 block, _ = pem.Decode([]byte(pemCertificate))
 cert, _ := x509.ParseCertificate(block.Bytes)

 now := time.Unix(1000, 0)
 expiry := time.Unix(10000, 0)

 revokedCerts := []pkix.RevokedCertificate{
 {
 SerialNumber: big.NewInt(1),
 RevocationTime: now,
 },
 {
 SerialNumber: big.NewInt(42),
 RevocationTime: now,
 },
  }

 crlBytes, err := cert.CreateCRL(rand.Reader, priv, revokedCerts, now, expiry)

 if err != nil {
 fmt.Println(err)
 os.Exit(1)
 }


 certList, err := x509.ParseDERCRL([]byte(crlBytes))

 if err != nil {
 fmt.Println(err)
 os.Exit(1)
 }

 fmt.Printf("TBSCertList : %v\n\n", certList.TBSCertList)
 fmt.Printf("SignatureAlgorithm : %v\n\n", certList.SignatureAlgorithm)
 fmt.Printf("SignatureValue : %v\n\n", certList.SignatureValue)
 }

Reference :

http://golang.org/pkg/crypto/x509/#ParseDERCRL

https://code.google.com/p/go/source/browse/src/pkg/crypto/x509/x509_test.go

Advertisement