def main():
    args = misc.parse_arguments()

    # Compile the ASN.1 specification
    asn = asn1tools.compile_files(args.asn_dir + VALID_ASN_FILE, 'der')

    # Import the root private key and cert
    root_privkey = io.import_rsa_private_key(args.root_key_file)
    root_pubkey = root_privkey.publickey()

    # Generate an RSA public key pair for intermediate CA
    (sub_privkey, sub_pubkey) = crypto.new_rsa_keypair(2048)

    # Encode intermediate tbsCertificate
    sub_tbs = x509.default_tbs(issuer_public_key=root_pubkey,
                               subject_public_key=sub_pubkey,
                               issuer_cn='root',
                               subject_cn='intermediate',
                               is_ca=True,
                               additional_extensions=[],
                               asn=asn)
    sub_tbs_der = asn.encode('TBSCertificate', sub_tbs)

    # Sign the intermediate tbsCertificate
    sub_sig = crypto.rsa_sha256_sign(root_privkey, sub_tbs_der)

    # Encode the intermediate CA Certificate
    sub_cert_der = x509.certificate(sub_tbs, sub_sig, asn)

    # Generate an RSA public key pair for end entity certificate
    (end_privkey, end_pubkey) = crypto.new_rsa_keypair(2048)

    # Encode end entity tbsCertificate
    end_tbs = x509.default_tbs(issuer_public_key=sub_pubkey,
                               subject_public_key=end_pubkey,
                               issuer_cn='intermediate',
                               subject_cn='localhost',
                               is_ca=False,
                               additional_extensions=[],
                               asn=asn)

    make_end_cert_expired(end_tbs)
    end_tbs_der = asn.encode('TBSCertificate', end_tbs)

    # Sign the end entity tbsCertificate
    end_sig = crypto.rsa_sha256_sign(sub_privkey, end_tbs_der)

    # Encode the end entity Certificate
    end_cert_der = x509.certificate(end_tbs, end_sig, asn)

    # Write the chain into file
    io.export_chain([end_cert_der, sub_cert_der],
                    args.build_dir + EXPORTED_CHAIN_NAME)

    # Export the private key
    io.export_private_key(end_privkey, args.build_dir + EXPORTED_KEY_NAME)
Exemple #2
0
    def test_foo(self):
        foo = asn1tools.compile_files(['tests/files/foo.asn'], 'gser')

        datas = [('Question', {
            'id': 1,
            'question': 'Is 1+1=3?'
        }, b'question Question ::= { id 1, question "Is 1+1=3?" }')]

        for name, decoded, encoded in datas:
            self.assertEqual(foo.encode(name, decoded), encoded)
Exemple #3
0
    def test_repr_all_types(self):
        all_types = asn1tools.compile_files('tests/files/all_types.asn', 'oer')

        self.assertEqual(repr(all_types.types['Boolean']), 'Boolean(Boolean)')
        self.assertEqual(repr(all_types.types['Integer']), 'Integer(Integer)')
        self.assertEqual(repr(all_types.types['Real']), 'Real(Real)')
        self.assertEqual(repr(all_types.types['Bitstring']),
                         'BitString(Bitstring)')
        self.assertEqual(repr(all_types.types['Octetstring']),
                         'OctetString(Octetstring)')
        self.assertEqual(repr(all_types.types['Null']), 'Null(Null)')
        self.assertEqual(repr(all_types.types['Objectidentifier']),
                         'ObjectIdentifier(Objectidentifier)')
        self.assertEqual(repr(all_types.types['Enumerated']),
                         'Enumerated(Enumerated)')
        self.assertEqual(repr(all_types.types['Utf8string']),
                         'UTF8String(Utf8string)')
        self.assertEqual(repr(all_types.types['Sequence']),
                         'Sequence(Sequence, [])')
        self.assertEqual(repr(all_types.types['Set']), 'Set(Set, [])')
        self.assertEqual(repr(all_types.types['Sequence2']),
                         'Sequence(Sequence2, [Integer(a)])')
        self.assertEqual(repr(all_types.types['Set2']),
                         'Set(Set2, [Integer(a)])')
        self.assertEqual(repr(all_types.types['Numericstring']),
                         'NumericString(Numericstring)')
        self.assertEqual(repr(all_types.types['Printablestring']),
                         'PrintableString(Printablestring)')
        self.assertEqual(repr(all_types.types['Ia5string']),
                         'IA5String(Ia5string)')
        self.assertEqual(repr(all_types.types['Universalstring']),
                         'UniversalString(Universalstring)')
        self.assertEqual(repr(all_types.types['Visiblestring']),
                         'VisibleString(Visiblestring)')
        self.assertEqual(repr(all_types.types['Generalstring']),
                         'GeneralString(Generalstring)')
        self.assertEqual(repr(all_types.types['Bmpstring']),
                         'BMPString(Bmpstring)')
        self.assertEqual(repr(all_types.types['Teletexstring']),
                         'TeletexString(Teletexstring)')
        self.assertEqual(repr(all_types.types['Graphicstring']),
                         'GraphicString(Graphicstring)')
        self.assertEqual(repr(all_types.types['Utctime']), 'UTCTime(Utctime)')
        self.assertEqual(repr(all_types.types['SequenceOf']),
                         'SequenceOf(SequenceOf, Integer())')
        self.assertEqual(repr(all_types.types['SetOf']),
                         'SetOf(SetOf, Integer())')
        self.assertEqual(repr(all_types.types['GeneralizedTime1']),
                         'GeneralizedTime(GeneralizedTime1)')
        self.assertEqual(repr(all_types.types['Choice']),
                         'Choice(Choice, [Integer(a)])')
        self.assertEqual(repr(all_types.types['Any']), 'Any(Any)')
        self.assertEqual(
            repr(all_types.types['Sequence12']),
            'Sequence(Sequence12, [SequenceOf(a, Recursive(Sequence12))])')
Exemple #4
0
def main():
    c_source = asn1tools.compile_files(
        ['asn1/c_source.asn', 'asn1/programming_types.asn'], 'oer')

    start_server = websockets.serve(functools.partial(echo, c_source=c_source),
                                    'localhost', 8765)

    print('Listening for websocket clients on localhost:8765...')

    asyncio.get_event_loop().run_until_complete(start_server)
    asyncio.get_event_loop().run_forever()
    def test_all_types(self):
        all_types = asn1tools.compile_files('tests/files/all_types.asn', 'jer')

        datas = [
            ('Boolean',             True, b'true'),
            ('Integer',              127, b'127'),
            ('Integer',                0, b'0'),
            ('Integer',             -128, b'-128'),
            ('Real',                 1.0, b'1.0'),
            ('Real',                -2.0, b'-2.0'),
            ('Real',        float('inf'), b'"INF"'),
            ('Real',       float('-inf'), b'"-INF"'),
            ('Octetstring',      b'\x00', b'"00"'),
            ('Null',                None, b'null'),
            ('Enumerated',         'one', b'"one"'),
            ('Utf8string',         'foo', b'"foo"'),
            ('Sequence',              {}, b'{}'),
            ('Sequence2',       {'a': 1}, b'{"a":1}'),
            ('Set',                   {}, b'{}'),
            ('Set2',            {'a': 2}, b'{"a":2}'),
            ('Numericstring',      '123', b'"123"'),
            ('Printablestring',    'foo', b'"foo"'),
            ('Ia5string',          'bar', b'"bar"'),
            ('Universalstring',    'bar', b'"bar"'),
            ('Visiblestring',      'bar', b'"bar"'),
            ('Bmpstring',         b'bar', b'"bar"'),
            ('Teletexstring',     b'fum', b'"fum"'),
            ('SequenceOf',            [], b'[]'),
            ('SetOf',                 [], b'[]'),
        ]

        for type_name, decoded, encoded in datas:
            self.assertEqual(all_types.encode(type_name, decoded), encoded)
            self.assertEqual(all_types.decode(type_name, encoded), decoded)

        self.assertEqual(all_types.encode('Real', float('nan')), b'"NaN"')
        self.assertTrue(math.isnan(all_types.decode('Real', b'"NaN"')))

        self.assertEqual(all_types.decode('Real', b'"0"'), 0.0)
        self.assertEqual(all_types.decode('Real', b'"-0"'), 0.0)

        decoded_message = (b'\x80', 1)
        encoded_message = b'{"value":"80","length":1}'

        self.assertEqual(loadb(all_types.encode('Bitstring', decoded_message)),
                         loadb(encoded_message))
        self.assertEqual(all_types.decode('Bitstring', encoded_message),
                         decoded_message)

        with self.assertRaises(NotImplementedError):
            all_types.encode('Sequence12', {'a': [{'a': []}]})

        with self.assertRaises(NotImplementedError):
            all_types.decode('Sequence12', b'{"a": [{"a": []}]}')
Exemple #6
0
    def __init__(self, AgentListener, dir_name=dir_name):
        """

        :param AgentListener: the DUST agent.
        :param dir_name: current directory were this python file is located.
        """
        self.cam_asn1 = asn1tools.compile_files('./cam121.asn', 'uper')
        template_cam_json = os.path.join(dir_name, "cam_template.json")  # "cam_template.json")
        f = open(template_cam_json, "r")
        self.template_cam = json.load(f)
        self.agent_listener_dust: AgentListenerDust = AgentListener
Exemple #7
0
    def test_all_types_automatic_tags(self):
        all_types = asn1tools.compile_files(
            'tests/files/all_types_automatic_tags.asn', 'xer')

        datas = [
            ('Sequence3',
             {'a': 1, 'c': 2,'d': True},
             b'<Sequence3><a>1</a><c>2</c><d><true /></d></Sequence3>')
        ]

        for type_name, decoded, encoded in datas:
            self.assert_encode_decode_string(all_types, type_name, decoded, encoded)
Exemple #8
0
 def __init__(self, file):
     #print("in FirmwareFileC constructor")
     self.file = file
     self.counter = 0
     self.f = open(self.file, 'r')
     self.dataList = list()
     asn1_dir = os.path.join("")  #("../../../../Downloads", "..")
     self.daq_messages = asn1tools.compile_files([
         os.path.join(asn1_dir, "DAQMessages.asn"),
         os.path.join(asn1_dir, "ProgrammingTypes.asn")
     ],
                                                 codec="oer")
Exemple #9
0
    def test_all_types_automatic_tags(self):
        all_types = asn1tools.compile_files(
            'tests/files/all_types_automatic_tags.asn', 'der')

        datas = [('Sequence3', {
            'a': 1,
            'c': 2,
            'd': True
        }, b'\x30\x09\x80\x01\x01\x82\x01\x02\x83\x01\xff')]

        for type_name, decoded, encoded in datas:
            self.assert_encode_decode(all_types, type_name, decoded, encoded)
Exemple #10
0
    def test_all_types_automatic_tags(self):
        foo = asn1tools.compile_files(
            'tests/files/all_types_automatic_tags.asn', 'jer')

        datas = [('Sequence3', {
            'a': 1,
            'c': 2,
            'd': True
        }, b'{"a":1,"c":2,"d":true}')]

        for type_name, decoded, encoded in datas:
            self.assert_encode_decode_string(foo, type_name, decoded, encoded)
Exemple #11
0
    def __init__(self,
                 client_ip=DEF_CLIENT,
                 port=DEF_SERVER_PORT,
                 client_port=DEF_CLIENT_PORT):
        # Listening socket
        self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.s.bind(('localhost', port))
        # Protocol syntax
        self.protocol = asn1tools.compile_files('TicTacToe.asn')

        try:
            print("Listening for incoming connexions ...")
            self.state = "Listening"
            self.s.listen(5)

            # Waiting for 2 clients
            sock, addr = self.s.accept()
            self.cl1 = Client(sock, addr, '', 'X')
            self.cl1.sock.send(
                self.protocol.encode('ServerAnswer', ('helloX', {})))
            self.cl1.name = self.protocol.decode(
                'Command', self.cl1.sock.recv(128))[1]['name']
            while not Server.checkName(self.cl1.name):
                self.cl1.sock.send(
                    self.protocol.encode('ServerAnswer', ('invalidName', {})))
                self.cl1.name = self.protocol.decode(
                    'Command', self.cl1.sock.recv(128))[1]['name']

            print("Player 1 connected:")
            print(self.cl1)

            sock, addr = self.s.accept()
            self.cl2 = Client(sock, addr, '', 'O')
            self.cl2.sock.send(
                self.protocol.encode('ServerAnswer', ('helloO', {})))
            self.cl2.name = self.protocol.decode(
                'Command', self.cl2.sock.recv(128))[1]['name']
            while not Server.checkName(self.cl2.name):
                self.cl2.sock.send(
                    self.protocol.encode('ServerAnswer', ('invalidName', {})))
                self.cl2.name = self.protocol.decode(
                    'Command', self.cl2.sock.recv(128))[1]['name']

            print("Player 2 connected:")
            print(self.cl2)

            self.state = "Connected"

        except Exception as e:
            print("Initialization error")
            self.quit()
            raise e
Exemple #12
0
def method_unpickle():
    pickled = pickle.dumps(asn1tools.compile_files(RRC_8_6_0_ASN_PATH))

    print("Unpickling compiled object... ", end='', flush=True)

    def unpickle():
        pickle.loads(pickled)

    time = timeit.timeit(unpickle, number=ITERATIONS)

    print('done.')

    return round(time, 5), len(pickled)
Exemple #13
0
def asn1tools_encode_decode():
    snmp_v1 = asn1tools.compile_files(SNMP_V1_ASN_PATHS)

    def encode():
        snmp_v1.encode('Message', DECODED_MESSAGE_ASN1TOOLS, check_types=False)

    def decode():
        snmp_v1.decode('Message', ENCODED_MESSAGE)

    encode_time = timeit.timeit(encode, number=ITERATIONS)
    decode_time = timeit.timeit(decode, number=ITERATIONS)

    return encode_time, decode_time
Exemple #14
0
    def test_all_types_automatic_tags(self):
        all_types = asn1tools.compile_files(
            'tests/files/all_types_automatic_tags.asn', 'xer')

        datas = [
            ('Sequence14',
             {'a': 1, 'c': 2,'d': True},
             b'<Sequence14><a>1</a><c>2</c><d><true /></d></Sequence14>')
        ]

        for type_name, decoded, encoded in datas:
            self.assertEqual(all_types.encode(type_name, decoded), encoded)
            self.assertEqual(all_types.decode(type_name, encoded), decoded)
Exemple #15
0
def encode_decode_jer():
    rrc_8_6_0 = asn1tools.compile_files(RRC_8_6_0_ASN_PATH, 'jer')

    def encode():
        rrc_8_6_0.encode('BCCH-DL-SCH-Message', DECODED_MESSAGE)

    def decode():
        rrc_8_6_0.decode('BCCH-DL-SCH-Message', ENCODED_MESSAGE_JER)

    encode_time = timeit.timeit(encode, number=ITERATIONS)
    decode_time = timeit.timeit(decode, number=ITERATIONS)

    return encode_time, decode_time
    def test_all_types_automatic_tags(self):
        all_types = asn1tools.compile_files(
            'tests/files/all_types_automatic_tags.asn', 'uper')

        datas = [('Sequence14', {
            'a': 1,
            'c': 2,
            'd': True
        }, b'\x00\x80\x80\x81\x40')]

        for type_name, decoded, encoded in datas:
            self.assertEqual(all_types.encode(type_name, decoded), encoded)
            self.assertEqual(all_types.decode(type_name, encoded), decoded)
Exemple #17
0
def asn1tools_encode_decode():
    rrc = asn1tools.compile_files(RRC_8_6_0_ASN_PATH, 'uper')

    def encode():
        rrc.encode('BCCH-DL-SCH-Message', DECODED_MESSAGE_ASN1TOOLS)

    def decode():
        rrc.decode('BCCH-DL-SCH-Message', ENCODED_MESSAGE)

    encode_time = timeit.timeit(encode, number=ITERATIONS)
    decode_time = timeit.timeit(decode, number=ITERATIONS)

    return encode_time, decode_time
Exemple #18
0
    def test_foo_indent(self):
        foo = asn1tools.compile_files(['tests/files/foo.asn'], 'gser')

        datas = [('Question', {
            'id': 1,
            'question': 'Is 1+1=3?'
        }, b'question Question ::= {\n'
                  b'  id 1,\n'
                  b'  question "Is 1+1=3?"\n'
                  b'}')]

        for name, decoded, encoded in datas:
            actual = foo.encode(name, decoded, indent=2)
            self.assertEqual(actual, encoded)
Exemple #19
0
    def test_x691_a1(self):
        a1 = asn1tools.compile_files('tests/files/x691_a1.asn', 'per')

        decoded_message = {
            'name': {
                'givenName': 'John',
                'initial': 'P',
                'familyName': 'Smith'
            },
            'title':
            'Director',
            'number':
            51,
            'dateOfHire':
            '19710917',
            'nameOfSpouse': {
                'givenName': 'Mary',
                'initial': 'T',
                'familyName': 'Smith'
            },
            'children': [{
                'name': {
                    'givenName': 'Ralph',
                    'initial': 'T',
                    'familyName': 'Smith'
                },
                'dateOfBirth': '19571111'
            }, {
                'name': {
                    'givenName': 'Susan',
                    'initial': 'B',
                    'familyName': 'Jones'
                },
                'dateOfBirth': '19590717'
            }]
        }

        encoded_message = (
            b'\x80\x04\x4a\x6f\x68\x6e\x01\x50\x05\x53\x6d\x69\x74\x68\x01\x33'
            b'\x08\x44\x69\x72\x65\x63\x74\x6f\x72\x08\x31\x39\x37\x31\x30\x39'
            b'\x31\x37\x04\x4d\x61\x72\x79\x01\x54\x05\x53\x6d\x69\x74\x68\x02'
            b'\x05\x52\x61\x6c\x70\x68\x01\x54\x05\x53\x6d\x69\x74\x68\x08\x31'
            b'\x39\x35\x37\x31\x31\x31\x31\x05\x53\x75\x73\x61\x6e\x01\x42\x05'
            b'\x4a\x6f\x6e\x65\x73\x08\x31\x39\x35\x39\x30\x37\x31\x37')

        with self.assertRaises(NotImplementedError):
            encoded = a1.encode('PersonnelRecord', decoded_message)
            self.assertEqual(encoded, encoded_message)
            decoded = a1.decode('PersonnelRecord', encoded)
            self.assertEqual(decoded, decoded_message)
Exemple #20
0
    def test_decode_all_types(self):
        all_types = asn1tools.compile_files('tests/files/all_types.asn', 'per')

        self.assertEqual(all_types.decode('Bitstring', b'\x04\x40'),
                         (b'\x40', 4))
        self.assertEqual(all_types.decode('Octetstring', b'\x01\x00'), b'\x00')
        self.assertEqual(all_types.decode('Null', b'\x05\x00'), None)
        self.assertEqual(all_types.decode('Objectidentifier', b'\x01\x2a'),
                         '1.2')
        self.assertEqual(
            all_types.decode('Objectidentifier', b'\x03\x2a\x82\x4d'),
            '1.2.333')
        self.assertEqual(all_types.decode('Enumerated', b'\x00'), 'one')

        with self.assertRaises(NotImplementedError):
            all_types.decode('Utf8string', b'\x0c\x03foo')

        self.assertEqual(all_types.decode('Sequence', b''), {})

        with self.assertRaises(NotImplementedError):
            all_types.decode('Sequence12', b'\x80\x01\x00')

        with self.assertRaises(NotImplementedError):
            all_types.decode('Set', b'\x31\x00')

        with self.assertRaises(NotImplementedError):
            all_types.decode('Numericstring', b'\x12\x03123')

        with self.assertRaises(NotImplementedError):
            all_types.decode('Printablestring', b'\x13\x03foo')

        self.assertEqual(all_types.decode('Ia5string', b'\x03bar'), 'bar')

        with self.assertRaises(NotImplementedError):
            all_types.decode('Universalstring', b'\x1c\x03bar')

        with self.assertRaises(NotImplementedError):
            all_types.decode('Visiblestring', b'\x1a\x03bar')

        with self.assertRaises(NotImplementedError):
            all_types.decode('Generalstring', b'\x1b\x03bar')

        with self.assertRaises(NotImplementedError):
            all_types.decode('Bmpstring', b'\x1e\x03bar')

        with self.assertRaises(NotImplementedError):
            all_types.decode('Teletexstring', b'\x14\x03fum')

        with self.assertRaises(NotImplementedError):
            all_types.decode('Utctime', b'\x17\x0d010203040506Y')
Exemple #21
0
    def test_all_types_automatic_tags(self):
        all_types = asn1tools.compile_files(
            'tests/files/all_types_automatic_tags.asn', 'jer')

        datas = [('Sequence3', {
            'a': 1,
            'c': 2,
            'd': True
        }, b'{"a":1,"c":2,"d":true}')]

        for type_name, decoded, encoded in datas:
            self.assertEqual(loadb(all_types.encode(type_name, decoded)),
                             loadb(encoded))
            self.assertEqual(all_types.decode(type_name, encoded), decoded)
    def test_x691_a1(self):
        a1 = asn1tools.compile_files('tests/files/x691_a1.asn', 'uper')

        decoded_message = {
            'name': {
                'givenName': 'John',
                'initial': 'P',
                'familyName': 'Smith'
            },
            'title':
            'Director',
            'number':
            51,
            'dateOfHire':
            '19710917',
            'nameOfSpouse': {
                'givenName': 'Mary',
                'initial': 'T',
                'familyName': 'Smith'
            },
            'children': [{
                'name': {
                    'givenName': 'Ralph',
                    'initial': 'T',
                    'familyName': 'Smith'
                },
                'dateOfBirth': '19571111'
            }, {
                'name': {
                    'givenName': 'Susan',
                    'initial': 'B',
                    'familyName': 'Jones'
                },
                'dateOfBirth': '19590717'
            }]
        }

        encoded_message = (
            b'\x82\x4a\xdf\xa3\x70\x0d\x00\x5a\x7b\x74\xf4\xd0\x02\x66\x11\x13'
            b'\x4f\x2c\xb8\xfa\x6f\xe4\x10\xc5\xcb\x76\x2c\x1c\xb1\x6e\x09\x37'
            b'\x0f\x2f\x20\x35\x01\x69\xed\xd3\xd3\x40\x10\x2d\x2c\x3b\x38\x68'
            b'\x01\xa8\x0b\x4f\x6e\x9e\x9a\x02\x18\xb9\x6a\xdd\x8b\x16\x2c\x41'
            b'\x69\xf5\xe7\x87\x70\x0c\x20\x59\x5b\xf7\x65\xe6\x10\xc5\xcb\x57'
            b'\x2c\x1b\xb1\x6e')

        encoded = a1.encode('PersonnelRecord', decoded_message)
        self.assertEqual(encoded, encoded_message)
        decoded = a1.decode('PersonnelRecord', encoded)
        self.assertEqual(decoded, decoded_message)
Exemple #23
0
    def test_encode_all_types(self):
        all_types = asn1tools.compile_files('tests/files/all_types.asn', 'per')

        self.assertEqual(all_types.encode('Bitstring', (b'\x40', 4)),
                         b'\x04\x40')
        self.assertEqual(all_types.encode('Octetstring', b'\x00'), b'\x01\x00')
        self.assertEqual(all_types.encode('Null', None), b'')
        self.assertEqual(all_types.encode('Objectidentifier', '1.2'),
                         b'\x01\x2a')
        self.assertEqual(all_types.encode('Objectidentifier', '1.2.333'),
                         b'\x03\x2a\x82\x4d')
        self.assertEqual(all_types.encode('Enumerated', 'one'), b'\x00')

        with self.assertRaises(NotImplementedError):
            all_types.encode('Utf8string', 'foo')

        self.assertEqual(all_types.encode('Sequence', {}), b'')

        with self.assertRaises(NotImplementedError):
            all_types.encode('Sequence12', {'a': [{'a': []}]})

        with self.assertRaises(NotImplementedError):
            all_types.encode('Set', {})

        with self.assertRaises(NotImplementedError):
            all_types.encode('Numericstring', '123')

        with self.assertRaises(NotImplementedError):
            all_types.encode('Printablestring', 'foo')

        self.assertEqual(all_types.encode('Ia5string', 'bar'), b'\x03bar')

        with self.assertRaises(NotImplementedError):
            all_types.encode('Universalstring', 'bar')

        with self.assertRaises(NotImplementedError):
            all_types.encode('Visiblestring', 'bar')

        with self.assertRaises(NotImplementedError):
            all_types.encode('Generalstring', 'bar')

        with self.assertRaises(NotImplementedError):
            all_types.encode('Bmpstring', b'bar')

        with self.assertRaises(NotImplementedError):
            all_types.encode('Teletexstring', b'fum')

        with self.assertRaises(NotImplementedError):
            all_types.encode('Utctime', '010203040506')
Exemple #24
0
    def test_x691_a3(self):
        a3 = asn1tools.compile_files('tests/files/x691_a3.asn', 'per')

        return

        decoded = {
            'name': {
                'givenName': 'John',
                'initial': 'P',
                'familyName': 'Smith'
            },
            'title':
            'Director',
            'number':
            51,
            'dateOfHire':
            '19710917',
            'nameOfSpouse': {
                'givenName': 'Mary',
                'initial': 'T',
                'familyName': 'Smith'
            },
            'children': [{
                'name': {
                    'givenName': 'Ralph',
                    'initial': 'T',
                    'familyName': 'Smith'
                },
                'dateOfBirth': '19571111'
            }, {
                'name': {
                    'givenName': 'Susan',
                    'initial': 'B',
                    'familyName': 'Jones'
                },
                'dateOfBirth': '19590717',
                'sex': 'female'
            }]
        }

        encoded = (
            b'\x40\xc0\x4a\x6f\x68\x6e\x50\x08\x53\x6d\x69\x74\x68\x00\x00\x33'
            b'\x08\x44\x69\x72\x65\x63\x74\x6f\x72\x00\x19\x71\x09\x17\x03\x4d'
            b'\x61\x72\x79\x54\x08\x53\x6d\x69\x74\x68\x01\x00\x52\x61\x6c\x70'
            b'\x68\x54\x08\x53\x6d\x69\x74\x68\x00\x19\x57\x11\x11\x82\x00\x53'
            b'\x75\x73\x61\x6e\x42\x08\x4a\x6f\x6e\x65\x73\x00\x19\x59\x07\x17'
            b'\x01\x01\x40')

        self.assert_encode_decode(a3, 'PersonnelRecord', decoded, encoded)
Exemple #25
0
def method_compile_cached_file():
    print("Using cached compilation... ", end='', flush=True)

    asn1tools.compile_files(RRC_8_6_0_ASN_PATH, cache_dir=CACHE_DIR)

    def compile_file():
        asn1tools.compile_files(RRC_8_6_0_ASN_PATH, cache_dir=CACHE_DIR)

    time = timeit.timeit(compile_file, number=ITERATIONS)

    print('done.')

    def dir_size(path):
        total = 0

        for entry in os.scandir(path):
            if entry.is_file():
                total += entry.stat().st_size
            elif entry.is_dir():
                total += dir_size(entry.path)

        return total

    return round(time, 5), dir_size(CACHE_DIR)
Exemple #26
0
    def test_x691_a4(self):
        a4 = asn1tools.compile_files('tests/files/x691_a4.asn', 'per')

        decoded = {
            'a': 253,
            'b': True,
            'c': ('e', True),
            'g': '123',
            'h': True
        }

        encoded = (b'\x9e\x00\x01\x80\x01\x02\x91\xa4')

        with self.assertRaises(NotImplementedError):
            self.assert_encode_decode(a4, 'Ax', decoded, encoded)
Exemple #27
0
def compile_files(schema_list, asn1_format):
    try:
        return asn1tools.compile_files(schema_list, asn1_format)
    except asn1tools.parser.ParseError:
        # Parse each file in turn in case there's a syntax error, so we can tell the
        # user which file has the problem.
        for path in schema_list:
            f_contents = open(path).read()
            try:
                asn1tools.compile_string(f_contents)
            except asn1tools.parser.ParseError as exception:
                print("While parsing %s:" % path)
                print(exception)
                sys.exit(1)
        assert 0
Exemple #28
0
    def test_encode_decode_bad_type_name(self):
        foo = asn1tools.compile_files('tests/files/foo.asn')

        # Encode.
        with self.assertRaises(asn1tools.EncodeError) as cm:
            foo.encode('BadTypeName', b'')

        self.assertEqual(str(cm.exception),
                         "Type 'BadTypeName' not found in types dictionary.")

        # Decode.
        with self.assertRaises(asn1tools.DecodeError) as cm:
            foo.decode('BadTypeName', b'')

        self.assertEqual(str(cm.exception),
                         "Type 'BadTypeName' not found in types dictionary.")
Exemple #29
0
    def test_x691_a1(self):
        a1 = asn1tools.compile_files('tests/files/x691_a1.asn', 'oer')

        decoded = {
            'name': {
                'givenName': 'John',
                'initial': 'P',
                'familyName': 'Smith'
            },
            'title': 'Director',
            'number': 51,
            'dateOfHire': '19710917',
            'nameOfSpouse': {
                'givenName': 'Mary',
                'initial': 'T',
                'familyName': 'Smith'
            },
            'children': [
                {
                    'name': {
                        'givenName': 'Ralph',
                        'initial': 'T',
                        'familyName': 'Smith'
                    },
                    'dateOfBirth': '19571111'
                },
                {
                    'name': {
                        'givenName': 'Susan',
                        'initial': 'B',
                        'familyName': 'Jones'
                    },
                    'dateOfBirth': '19590717'
                }
            ]
        }

        encoded = (
            b'\x80\x04\x4a\x6f\x68\x6e\x01\x50\x05\x53\x6d\x69\x74\x68\x01\x33'
            b'\x08\x44\x69\x72\x65\x63\x74\x6f\x72\x08\x31\x39\x37\x31\x30\x39'
            b'\x31\x37\x04\x4d\x61\x72\x79\x01\x54\x05\x53\x6d\x69\x74\x68\x01'
            b'\x02\x05\x52\x61\x6c\x70\x68\x01\x54\x05\x53\x6d\x69\x74\x68\x08'
            b'\x31\x39\x35\x37\x31\x31\x31\x31\x05\x53\x75\x73\x61\x6e\x01\x42'
            b'\x05\x4a\x6f\x6e\x65\x73\x08\x31\x39\x35\x39\x30\x37\x31\x37'
        )

        self.assert_encode_decode(a1, 'PersonnelRecord', decoded, encoded)
    def test_decode_all_types(self):
        all_types = asn1tools.compile_files('tests/files/all_types.asn',
                                            'uper')

        self.assertEqual(all_types.decode('Boolean', b'\x80'), True)
        self.assertEqual(all_types.decode('Boolean', b'\x00'), False)
        self.assertEqual(all_types.decode('Integer', b'\x03\x00\x80\x00'),
                         32768)
        self.assertEqual(all_types.decode('Integer', b'\x02\x7f\xff'), 32767)
        self.assertEqual(all_types.decode('Integer', b'\x02\x01\x00'), 256)
        self.assertEqual(all_types.decode('Integer', b'\x02\x00\xff'), 255)
        self.assertEqual(all_types.decode('Integer', b'\x02\x00\x80'), 128)
        self.assertEqual(all_types.decode('Integer', b'\x01\x7f'), 127)
        self.assertEqual(all_types.decode('Integer', b'\x01\x01'), 1)
        self.assertEqual(all_types.decode('Integer', b'\x01\x00'), 0)
        self.assertEqual(all_types.decode('Integer', b'\x01\xff'), -1)
        self.assertEqual(all_types.decode('Integer', b'\x01\x80'), -128)
        self.assertEqual(all_types.decode('Integer', b'\x02\xff\x7f'), -129)
        self.assertEqual(all_types.decode('Integer', b'\x02\xff\x00'), -256)
        self.assertEqual(all_types.decode('Integer', b'\x02\x80\x00'), -32768)
        self.assertEqual(all_types.decode('Integer', b'\x03\xff\x7f\xff'),
                         -32769)
        self.assertEqual(all_types.decode('Bitstring', b'\x04\x40'),
                         (b'\x40', 4))
        self.assertEqual(all_types.decode('Bitstring2', b'\x12\x80'),
                         (b'\x12\x80', 9))
        self.assertEqual(all_types.decode('Bitstring3', b'\x4d'), (b'\x34', 6))
        self.assertEqual(all_types.decode('Octetstring', b'\x01\x00'), b'\x00')
        self.assertEqual(all_types.decode('Octetstring2', b'\xab\xcd'),
                         b'\xab\xcd')
        self.assertEqual(all_types.decode('Octetstring3', b'\xab\xcd\xef'),
                         b'\xab\xcd\xef')
        self.assertEqual(
            all_types.decode('Octetstring4', b'\x31\x35\x79\xbd\xe0'),
            b'\x89\xab\xcd\xef')
        self.assertEqual(all_types.decode('Enumerated', b'\x00'), 'one')
        self.assertEqual(all_types.decode('Enumerated2', b'\x40'), 'two')
        self.assertEqual(all_types.decode('Sequence', b''), {})
        self.assertEqual(all_types.decode('Sequence2', b'\x00'), {'a': 0})
        self.assertEqual(all_types.decode('Sequence2', b'\x80\x80\x80'),
                         {'a': 1})

        with self.assertRaises(NotImplementedError):
            all_types.decode('Sequence12', b'\x80\x80')

        self.assertEqual(all_types.decode('Ia5string', b'\x03\xc5\x87\x90'),
                         'bar')