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