1#!/usr/bin/python 2# 3# Read ASN.1/PEM X.509 certificates on stdin, parse each into plain text, 4# then build substrate from it 5# 6from pyasn1.codec.der import decoder, encoder 7from pyasn1_modules import rfc2459, pem 8import sys 9 10if len(sys.argv) != 1: 11 print("""Usage: 12$ cat CACertificate.pem | %s 13$ cat userCertificate.pem | %s""" % (sys.argv[0], sys.argv[0])) 14 sys.exit(-1) 15 16certType = rfc2459.Certificate() 17 18certCnt = 0 19 20while 1: 21 idx, substrate = pem.readPemBlocksFromFile( 22 sys.stdin, ('-----BEGIN CERTIFICATE-----', 23 '-----END CERTIFICATE-----') 24 ) 25 if not substrate: 26 break 27 28 cert, rest = decoder.decode(substrate, asn1Spec=certType) 29 30 if rest: substrate = substrate[:-len(rest)] 31 32 print(cert.prettyPrint()) 33 34 assert encoder.encode(cert, defMode=False) == substrate or \ 35 encoder.encode(cert, defMode=True) == substrate, \ 36 'cert recode fails' 37 38 certCnt = certCnt + 1 39 40print('*** %s PEM cert(s) de/serialized' % certCnt) 41