From abaaaec8b7a936d9a1f263d4ecc8be38f454cd73 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Sat, 5 Jan 2019 23:36:43 +0300 Subject: [PATCH] Move pretty-printing example to the main code --- doc/examples.rst | 99 +----------------------------------------------- pyderasn.py | 99 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 101 insertions(+), 97 deletions(-) diff --git a/doc/examples.rst b/doc/examples.rst index ce20504..667f0ab 100644 --- a/doc/examples.rst +++ b/doc/examples.rst @@ -184,104 +184,9 @@ it's DER encoded representation is already in ``raw`` variable):: serialNumber: CertificateSerialNumber INTEGER 61595; signature: AlgorithmIdentifier SEQUENCE[OBJECT IDENTIFIER 1.2.840.113549.1.1.5... -Pretty printing ---------------- - -There is huge output. Let's pretty print it:: - - >>> print(pprint(crt)) - 0 [1,3,1604] Certificate SEQUENCE - 4 [1,3,1453] . tbsCertificate: TBSCertificate SEQUENCE - 10-2 [1,1, 1] . . version: [0] EXPLICIT Version INTEGER v3 OPTIONAL - 13 [1,1, 3] . . serialNumber: CertificateSerialNumber INTEGER 61595 - 18 [1,1, 13] . . signature: AlgorithmIdentifier SEQUENCE - 20 [1,1, 9] . . . algorithm: OBJECT IDENTIFIER 1.2.840.113549.1.1.5 - 31 [0,0, 2] . . . parameters: [UNIV 5] ANY OPTIONAL - . . . . 05:00 - 33 [0,0, 278] . . issuer: Name CHOICE rdnSequence - 33 [1,3, 274] . . . rdnSequence: RDNSequence SEQUENCE OF - 37 [1,1, 11] . . . . 0: RelativeDistinguishedName SET OF - 39 [1,1, 9] . . . . . 0: AttributeTypeAndValue SEQUENCE - 41 [1,1, 3] . . . . . . type: AttributeType OBJECT IDENTIFIER 2.5.4.6 - 46 [0,0, 4] . . . . . . value: [UNIV 19] AttributeValue ANY - . . . . . . . 13:02:45:53 - [...] - 1461 [1,1, 13] . signatureAlgorithm: AlgorithmIdentifier SEQUENCE - 1463 [1,1, 9] . . algorithm: OBJECT IDENTIFIER 1.2.840.113549.1.1.5 - 1474 [0,0, 2] . . parameters: [UNIV 5] ANY OPTIONAL - . . . 05:00 - 1476 [1,2, 129] . signatureValue: BIT STRING 1024 bits - . . 68:EE:79:97:97:DD:3B:EF:16:6A:06:F2:14:9A:6E:CD - . . 9E:12:F7:AA:83:10:BD:D1:7C:98:FA:C7:AE:D4:0E:2C - [...] - - Trailing data: 0a - -Let's parse that output, human:: - - 10-2 [1,1, 1] . . version: [0] EXPLICIT Version INTEGER v3 OPTIONAL - ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ - 0 1 2 3 4 5 6 7 8 9 10 11 - -:: - - 20 [1,1, 9] . . . algorithm: OBJECT IDENTIFIER 1.2.840.113549.1.1.5 - ^ ^ ^ ^ ^ ^ ^ ^ - 0 2 3 4 5 6 9 10 - -:: - - 33 [0,0, 278] . . issuer: Name CHOICE rdnSequence - ^ ^ ^ ^ ^ ^ ^ ^ ^ - 0 2 3 4 5 6 8 9 10 - -:: +:ref:`Look here ` for better pretty printing. - 52-2∞ B [1,1,1054]∞ . . . . eContent: [0] EXPLICIT BER OCTET STRING 1046 bytes - ^ ^ ^ ^ ^ - 12 13 14 9 10 - -:0: - Offset of the object, where its DER/BER encoding begins. - Pay attention that it does **not** include explicit tag. -:1: - If explicit tag exists, then this is its length (tag + encoded length). -:2: - Length of object's tag. For example CHOICE does not have its own tag, - so it is zero. -:3: - Length of encoded length. -:4: - Length of encoded value. -:5: - Visual indentation to show the depth of object in the hierarchy. -:6: - Object's name inside SEQUENCE/CHOICE. -:7: - If either IMPLICIT or EXPLICIT tag is set, then it will be shown - here. "IMPLICIT" is omitted. -:8: - Object's class name, if set. Omitted if it is just an ordinary simple - value (like with ``algorithm`` in example above). -:9: - Object's ASN.1 type. -:10: - Object's value, if set. Can consist of multiple words (like OCTET/BIT - STRINGs above). We see ``v3`` value in Version, because it is named. - ``rdnSequence`` is the choice of CHOICE type. -:11: - Possible other flags like OPTIONAL and DEFAULT, if value equals to the - default one, specified in the schema. -:12: - Shows does object contains any kind of BER encoded data (possibly - Sequence holding BER-encoded underlying value). -:13: - Only applicable to BER encoded data. Indefinite length encoding mark. -:14: - Only applicable to BER encoded data. If object has BER-specific - encoding, then ``BER`` will be shown. It does not depend on indefinite - length encoding. ``EOC``, ``BOOLEAN``, ``BIT STRING``, ``OCTET STRING`` - (and its derivatives), ``SET``, ``SET OF`` could be BERed. +.. _cmdline: As command line utility ----------------------- diff --git a/pyderasn.py b/pyderasn.py index 172c1f6..1c5b53f 100755 --- a/pyderasn.py +++ b/pyderasn.py @@ -239,6 +239,105 @@ all object ``repr``. But it is easy to write custom formatters. >>> print(pprint(obj)) 0 [1,1, 2] INTEGER -12345 +.. _pprint_example: + +Example certificate:: + + >>> print(pprint(crt)) + 0 [1,3,1604] Certificate SEQUENCE + 4 [1,3,1453] . tbsCertificate: TBSCertificate SEQUENCE + 10-2 [1,1, 1] . . version: [0] EXPLICIT Version INTEGER v3 OPTIONAL + 13 [1,1, 3] . . serialNumber: CertificateSerialNumber INTEGER 61595 + 18 [1,1, 13] . . signature: AlgorithmIdentifier SEQUENCE + 20 [1,1, 9] . . . algorithm: OBJECT IDENTIFIER 1.2.840.113549.1.1.5 + 31 [0,0, 2] . . . parameters: [UNIV 5] ANY OPTIONAL + . . . . 05:00 + 33 [0,0, 278] . . issuer: Name CHOICE rdnSequence + 33 [1,3, 274] . . . rdnSequence: RDNSequence SEQUENCE OF + 37 [1,1, 11] . . . . 0: RelativeDistinguishedName SET OF + 39 [1,1, 9] . . . . . 0: AttributeTypeAndValue SEQUENCE + 41 [1,1, 3] . . . . . . type: AttributeType OBJECT IDENTIFIER 2.5.4.6 + 46 [0,0, 4] . . . . . . value: [UNIV 19] AttributeValue ANY + . . . . . . . 13:02:45:53 + [...] + 1461 [1,1, 13] . signatureAlgorithm: AlgorithmIdentifier SEQUENCE + 1463 [1,1, 9] . . algorithm: OBJECT IDENTIFIER 1.2.840.113549.1.1.5 + 1474 [0,0, 2] . . parameters: [UNIV 5] ANY OPTIONAL + . . . 05:00 + 1476 [1,2, 129] . signatureValue: BIT STRING 1024 bits + . . 68:EE:79:97:97:DD:3B:EF:16:6A:06:F2:14:9A:6E:CD + . . 9E:12:F7:AA:83:10:BD:D1:7C:98:FA:C7:AE:D4:0E:2C + [...] + + Trailing data: 0a + +Let's parse that output, human:: + + 10-2 [1,1, 1] . . version: [0] EXPLICIT Version INTEGER v3 OPTIONAL + ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ + 0 1 2 3 4 5 6 7 8 9 10 11 + +:: + + 20 [1,1, 9] . . . algorithm: OBJECT IDENTIFIER 1.2.840.113549.1.1.5 + ^ ^ ^ ^ ^ ^ ^ ^ + 0 2 3 4 5 6 9 10 + +:: + + 33 [0,0, 278] . . issuer: Name CHOICE rdnSequence + ^ ^ ^ ^ ^ ^ ^ ^ ^ + 0 2 3 4 5 6 8 9 10 + +:: + + 52-2∞ B [1,1,1054]∞ . . . . eContent: [0] EXPLICIT BER OCTET STRING 1046 bytes + ^ ^ ^ ^ ^ + 12 13 14 9 10 + +:0: + Offset of the object, where its DER/BER encoding begins. + Pay attention that it does **not** include explicit tag. +:1: + If explicit tag exists, then this is its length (tag + encoded length). +:2: + Length of object's tag. For example CHOICE does not have its own tag, + so it is zero. +:3: + Length of encoded length. +:4: + Length of encoded value. +:5: + Visual indentation to show the depth of object in the hierarchy. +:6: + Object's name inside SEQUENCE/CHOICE. +:7: + If either IMPLICIT or EXPLICIT tag is set, then it will be shown + here. "IMPLICIT" is omitted. +:8: + Object's class name, if set. Omitted if it is just an ordinary simple + value (like with ``algorithm`` in example above). +:9: + Object's ASN.1 type. +:10: + Object's value, if set. Can consist of multiple words (like OCTET/BIT + STRINGs above). We see ``v3`` value in Version, because it is named. + ``rdnSequence`` is the choice of CHOICE type. +:11: + Possible other flags like OPTIONAL and DEFAULT, if value equals to the + default one, specified in the schema. +:12: + Shows does object contains any kind of BER encoded data (possibly + Sequence holding BER-encoded underlying value). +:13: + Only applicable to BER encoded data. Indefinite length encoding mark. +:14: + Only applicable to BER encoded data. If object has BER-specific + encoding, then ``BER`` will be shown. It does not depend on indefinite + length encoding. ``EOC``, ``BOOLEAN``, ``BIT STRING``, ``OCTET STRING`` + (and its derivatives), ``SET``, ``SET OF`` could be BERed. + + .. _definedby: DEFINED BY -- 2.44.0