{ "info": { "author": "Daniel Migault", "author_email": "daniel.migault@ericsson.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Programming Language :: Python :: 3.6", "Topic :: Software Development :: Build Tools" ], "description": "\n\n# pyLURK : python implementation of LURK\n\nThe LURK Protocol as well as the LURK Extensions that\nenables remote interaction with cryptographic material. \n\npylurk implements the LURK Extension 'tls12' which enables\ninteractions between a LURK Client and a LURK Server in a TLS1.2 \n\nThe LURK specifications is available in\n[draft-mglt-lurk-lurk](https://datatracker.ietf.org/doc/draft-mglt-lurk-lurk/)\nand the TLS 1.2 extension is available in\n[draft-mglt-lurk-tls12](https://datatracker.ietf.org/doc/draft-mglt-lurk-tls12/).\n\n\nThe current code is available on\n[github](https://github.com/mglt/pylurk/).\n\n# Installation\n\n## Quick Install\n\npylurk can be installed using pip3\n\n```shell\npip3 install pylurk\n```\n\n## Manual installation\n\n### Prerequisites\n\npylurk has the following dependencies :\n\n* [python3.6 or greater](https://www.python.org/downloads/)\n* [construct2.8](https://pypi.python.org/pypi/construct)([doc](https://construct.readthedocs.io/en/latest/)) \n* [cryptodome](https://www.pycryptodome.org/en/latest/)([doc](https://pycryptodome.readthedocs.io/en/latest/src/installation.html)\n* [tinyec](https://github.com/alexmgr/tinyec)\n* [pyca/cryptography](https://cryptography.io/en/latest/) (optional)\n only used to create certificate\n\n#### installing python3.6\n\ncheck you Python version\n\n```\npython3 --version\n```\n\nIf the version is lower than 3.6 install the latest Python version. On\nUbuntu this could be achieved as :\n\n```\nsudo apt-get install python3\n```\n\n#### installing construct\n\ninstalling contruct 2.8. There is a version 2.9 that seems to have\nsignificant changes from 2.8. Further testing is needed before moving to\nthe latest version. \n\n```\nwget\nhttps://files.pythonhosted.org/packages/e5/c6/3e3aeef38bb0c27364af3d21493d9690c7c3925f298559bca3c48b7c9419/construct-2.8.22.tar.gz\ntar -xvzf construct-2.8.12.tar.gz\ncd construct-2.8.22\nsudo python3 setup.py install\n```\n\nor \n\n```\npip3 install construct==2.8.22 \n```\n\n\n#### installing cryptodrome\n\n```\nsudo apt-get install build-essential libgmp3-dev python3-dev\npip3 install pycryptodomex\npython3 -m Cryptodome.SelfTest\n```\n\n#### installing tinyec\n\n```\npip3 install tinyec\n```\n\n### installing pyca/cryptography \n\n```\npip3 install cryptography\n```\n\n\n### installing pylurk\n\nInstalling pylurk:\n\n```\ngit clone ssh://gitolite@forge.ericsson.net/lurk/pylurk.git pylurk\ncd pylurk\npython3 test_lurk.py \npython3 test_tls12.py \n```\n\n\n# Installation Testing \n\nThe lurk and tls12 tests modules have been written to tests and\nillustrate the usage of the LURK protocol as well as its TLS 1.2\nextension. \n\n```\npython3 -m pylurk.tests.lurk\n\npython3 -m pylurk.tests.tls12\n```\n\n# Example \n\n## Demo scripts: LURK exchange for TLS 1.2 / RSA Master\n\nStart the LURK Server by running the following command \n```shell\npython3 -m pylurk.sample.tls12_rsa_master_server_demo\nServer started with configuration below:\n - role: server\n - connectivity: {'type': 'udp', 'ip_address': '127.0.0.1', 'port': 6789}\n - extensions:\n - lurk, v1, ping\n - lurk, v1, capabilities\n - tls12, v1, ping\n - tls12, v1, capabilities\n - tls12, v1, rsa_master\n > designation: tls12\n > version: v1\n > type: rsa_master\n > key_id_type: ['sha256_32']\n > freshness_funct: ['null', 'sha256']\n > random_time_window: 5\n > check_server_random: False\n > check_client_random: False\n > cert: ['/home/emigdan/gitlab/pylurk.git/pylurk/core/../data/cert-rsa-enc.der']\n > key: ['/home/emigdan/gitlab/pylurk.git/pylurk/core/../data/key-rsa-enc-pkcs8.der']\n - tls12, v1, rsa_extended_master\n - tls12, v1, ecdhe\n\n\nUDP Server listening...\n```\n\nRun the LURK Client detailing the operations on an TLS Edge Server \n\n```\npython3 -m pylurk.sample.tls12_rsa_master_client_demo\n\n This demo exposes the interactions between a TLS Server terminating a TLS session and a Key Server. The demo illustrates the case of RSA authentication\n\n\n== 1. Instantiating LurkUDPClient ==\n------------------------------------\n\n\n LurkUDPClient started with capabilities:\n -ping\n -capabilities\n -rsa_master\n -rsa_extended_master\n -ecdhe\n\n\n\n== 2. Listening for ClientHello from TLS Client... ==\n-----------------------------------------------------\n\n\n ...ClientHello\n ...Container: \n ... client_version = Container: \n ... major = TLS12M (total 6)\n ... minor = TLS12m (total 6)\n ... random = Container: \n ... gmt_unix_time = [\\x8e\\xe9\\x03 (total 4)\n ... random = ;\\xe7\\xfb,\\x07\\xba\\x86\\x068\\xb4\\xfc3'\\x1d\\x\n ... f7\\xd2T\\xfcB\\x87\\xf8\\xc8\\xbe\\x8b\\xddV\\xec\\xb8 (t\n ... otal 28)\n ... session_id = \\x99B\\x80\\xe1\\xeb\\xbf\\xed\\x886lm\\x8d\\xe8\\x8\n ... 2\\xcd(B0\\xe6\\xd18\\xc8c\\x9f\\x8a/\\xbf\\xc0\\x1b\\xd8t\\x08\n ... (total 32)\n ... cipher_suites = ListContainer: \n ... TLS_RSA_WITH_AES_128_GCM_SHA256\n ... TLS_RSA_WITH_AES_256_GCM_SHA384\n ... compression_methods = ListContainer: \n ... null\n ... extensions = ListContainer: \n\n ...---------->\n\n\n\n\n== 3. Responding with a ServerHello to the TLS Client ==\n--------------------------------------------------------\n\n\n a) Selecting cipher suite:\n > TLS_RSA_WITH_AES_128_GCM_SHA256\n\n b) Extracting client_random:\n > Random\n > Container: \n > gmt_unix_time = [\\x8e\\xe9\\x03 (total 4)\n > random = ;\\xe7\\xfb,\\x07\\xba\\x86\\x068\\xb4\\xfc3'\\x1d\\xf7\\x\n > d2T\\xfcB\\x87\\xf8\\xc8\\xbe\\x8b\\xddV\\xec\\xb8 (total 28)\n\n\n c) Generating a random (S):\n > Random\n > Container: \n > gmt_unix_time = [\\x8e\\xe9\\x03 (total 4)\n > random = 2\\x0f^\\xe3VFp\\x80\\n^\\xcb\\xa2\\xc0\\x8b\\x8e,\\x01\\x\n > 13\\xafB\\x17\\x8a\\xb8\\x8d\\xa4\\xe3\\x82\\xb8 (total 28)\n\n d) Obfuscating S (server_random):\n > Random\n > Container: \n > gmt_unix_time = [\\x8e\\xe9\\x03 (total 4)\n > random = \\x1b\\xa2\\x193\\xd8\\xb6\\x96{\\xbd\\x18V\\xb2~l1#}\\xa\n > 63C\\x98\\xb9b\\x02\\xf8o\\xf9\\x9b (total 28)\n\n\n e) Sending the ServerHello\n ...ServerHello\n ...Container: \n ... server_version = Container: \n ... major = TLS12M (total 6)\n ... minor = TLS12m (total 6)\n ... random = Container: \n ... gmt_unix_time = [\\x8e\\xe9\\x03 (total 4)\n ... random = \\x1b\\xa2\\x193\\xd8\\xb6\\x96{\\xbd\\x18V\\xb2~l1#\n ... }\\xa63C\\x98\\xb9b\\x02\\xf8o\\xf9\\x9b (total 28)\n ... session_id = +q\\x91\\xa0\\xcc\\xe3W\\xf7Q)\\xdd5\\x94\\xd6\\xf0\\\n ... xd7D\\xeb\\x8aD\\x91,?\\xdaA\\x05ej\\x9e\\xdd\\xb6s (total 3\n ... 2)\n ... cipher_suite = TLS_RSA_WITH_AES_128_GCM_SHA256 (total 31\n ... )\n ... compression_method = null (total 4)\n ... extensions = ListContainer: \n\n ...Certificate\n ...ListContainer: \n ... b'0\\x82\\x03f0\\x82\\x02N\\xa0\\x03\\x02\\x01\\x02\\x02\\x14nU\\xc1\n ... o\\xcb\\x8d \\x99\\x14\\xf2\\x08\\xcb\\xb6\\xc2y\\xe4\\x86_PH0\\\n ... r\\x06\\t*\\x86H\\x86\\xf7\\r\\x01\\x01\\x0b\\x05\\x000\\\\1\\x0b0\n ... \\t\\x06\\x03U\\x04\\x06\\x13\\x02CA1\\x0b0\\t\\x06\\x03U\\x04\\x\n ... 08\\x0c\\x02QC1\\x110\\x0f\\x06\\x03U\\x04\\x07\\x0c\\x08Montr\n ... eal1\\x130\\x11\\x06\\x03U\\x04\\n\\x0c\\nMy Company1\\x180\\x\n ... 16\\x06\\x03U\\x04\\x03\\x0c\\x0fwww.example.com0 \\x17\\r18\n ... 0508223907Z\\x18\\x0f21180414223907Z0\\\\1\\x0b0\\t\\x06\\x0\n ... 3U\\x04\\x06\\x13\\x02CA1\\x0b0\\t\\x06\\x03U\\x04\\x08\\x0c\\x0\n ... 2QC1\\x110\\x0f\\x06\\x03U\\x04\\x07\\x0c\\x08Montreal1\\x130\n ... \\x11\\x06\\x03U\\x04\\n\\x0c\\nMy Company1\\x180\\x16\\x06\\x0\n ... 3U\\x04\\x03\\x0c\\x0fwww.example.com0\\x82\\x01\"0\\r\\x06\\t\n ... *\\x86H\\x86\\xf7\\r\\x01\\x01\\x01\\x05\\x00\\x03\\x82\\x01\\x0f\n ... \\x000\\x82\\x01\\n\\x02\\x82\\x01\\x01\\x00\\xc0\\x02\\xe0\\xd5\\\n ... xe7\\x17\\xfe\\xcf\\x04>\\xba\\x16\\xeb\\xb289-\\xef$\\xbc\\xf4\n ... TL\\xcdQ(\\xc6\\x07\\x8cwU\\xec\\x82%\\xae\\x1d\\x01Y\\x86\\xa7\n ... \\x9b\\t\\x18\\x13\\xb3\\x15\\xcaTw\\n\\x12\\xc4\\xb3L3\\xbd\\xc1\n ... \\xe2\\xaa@\\x197\\xd6l\\x07\\x8f\\xc4\\x82\\xa7\\xb1\\xa5\\xc07\n ... \\xeb\\x1b#\\x8b4\\x16]\\xdf\\x87\\x94\\xdd\\xa8\\xa7\\xb9YO\\xd\n ... a\\xc9\\x02\\x19\\x06\\x7f\\xb4\\x81\\xce\"+b\\xec|\\xa9\\x95\\xf\n ... 20#\\x97A\\x19R<\\xfd>\\xf3\\xad\\xd6\\xe6\\xa4C\\x13\\r\\xb9\\x\n ... c8\\x19\\x17L\\x94\\xc7\\xd8\\xb8\\xdd \\xf6\\xe6\\xa3\\xdfv\\xd\n ... f\\x0bH\\xf5XF\\xa0\\x83\\xc7P\\x00\\xed\\xd2L\\x83\\xc4c\\x93\\\n ... x15\\x83\\x0c2\\xec3,\\x97U\\x8c\\x03\\xef\\xf1\\xc0\\xa8\\xb7\\\n ... x94\\xfeVg\\\\.\\xd1X\\xc6\\xb4\\xc1\\x97\\x94\\n\\xa8F\\xcd\\xeb\n ... @.\\xf3\\x81\\t\\x8d\\xb6@t\\x9e,l\\xbf\\x01c\\xd6\\xcf\\xef\\x0\n ... 1\\x91\\x9e\\xec\\xca\\xc7\\x96\\xde\\x03\\xb6\\xe8\\xe1Z816!$K\n ... \\x9f\\xfa\\xe2<\\x964\\xd3\\xce\\xf5\\x0f*Z\\x94\\x01\\xb39\\xb\n ... 5ea\\nA\\xab>%\\x93\\xa2 \\x17\\x02\\x03\\x01\\x00\\x01\\xa3\\x1\n ... e0\\x1c0\\x1a\\x06\\x03U\\x1d\\x11\\x04\\x130\\x11\\x82\\x0fwww\n ... .example.com0\\r\\x06\\t*\\x86H\\x86\\xf7\\r\\x01\\x01\\x0b\\x0\n ... 5\\x00\\x03\\x82\\x01\\x01\\x00AX\\xda\\x85\\xfb\\x06\\xb0\\x1a\\\n ... xf7\\x17\\x01\\x0b\\xe8k\\xf1i8G\\xfb\\xea\\xe8n}kc\\x91\\xb5W\n ... -\\xc9\\xbc\"\\x06@gx\\xd6\\xbe@Gg>\\x90+\\x03\\x83\\x9es&q\\x8\n ... f\\x98\\xf0m`[\\xb9\\x1e\\xe0\\r\\x8c9\\x12\\rB^\\xe3\\xf0\\x08z\n ... \\x8a\\xf3cl\\x96v\\x17\\xb4\\x1d\\x98\\xd12A7$|Y\\x89\\x96j?\\\n ... x16\\x85\\xf8\\xfc\\xbf\\xf4B\\x89\\x81\\x01\\xdb\\xa3S\\xe4\\xc\n ... c7\\xeb\\x1b!\\xdc`\\x7f\\x13U\\x8e\\xdeX\\xec&\\x1b\\x00\\xb7\\\n ... xad\\xccK\\x01\\x131\\xc8Y,\\xde\\xef\\xe6G\\x98)\\x1c\\xe8\\x1\n ... f\\xf1\\xfe\\xc5\\xf38tT#?\\x9bl\\x1bzwd\\xdf\\x87\\x12\\n=sBQ\n ... \\x1f]|\\x94\\x9c!\\xb1\\x8c\\xbd#\\x01\\xe4\\xda\\xb9\\x17\\xe6\n ... \\xa8%\\x8f9|\\x07\\xcb\\xbc5\\xc9KE\\x8c\\xf8\\x1c\\xc6VT\\x90\n ... 0\\xfdz\\xaa\\xef\\xe8|\\xd3z\\xbd%-\\xf7\\xe8\\xa3\\xd3\\xe6\\x\n ... 90\\xf0\\xc1\\xc2\\xf6`\\xaf\\x8f\\xbf\\x93y}-\\xc45B3\\x0el\\x\n ... 84 \\x98S.\\xf2xh\\x1d\\x8fU\\x95y\\xe9\\xa4\\xc8\\xde\\x82\\xe\n ... 0B '\n\n ...ServerHelloDone\n ...b''\n\n ...<----------\n\n\n\n\n== 4. Listening for Client Key Exchange from the TLS Client ==\n--------------------------------------------------------------\n\n\n ...ClientKeyExchange\n ...b'W\\xb3\\x0b\\xb7\"\\x8a\\xb2\\x13\\xcc\\x97&d*\\xba3\\x80K\\x9f\\xc0\\x0\n ... 0<_\\t\\xf4O\\xe9\\x1ft\\xb0\\x95\\x9f\\xd3`\\xe6\\xa8\\x8dY\\x15\\xe\n ... 7\\x8b\\x1e\\x188\\xffhO\\x88\\x82\\x94w/g\\x1d\\x0c\\x89\\xb7\\xc4g\n ... \\x87\\xf9qv\\xa9+u\\x1c?\\x15\\xb1n\\x1c\\xba\\x1f\\xca\\xe5:\\xee\\\n ... xb2\\x11S\\x87\\xf3\\xa8;\\xd3\\x06\\x08m\\xd6\\xa1\\xd0\\xba\\xb2\\x\n ... d8\\x13L\\xb0\\xa8\\x9e4\\xf9h}\\x01\\x10\\xe7\\x123%H\\xa4\\x11\\xd\n ... 7\\x92\\xe2M\\xb8\\x84C\\xcc`\\xb9\\x89\\xb5\\xbc\\xff\\xb0\\xf9\\x00\n ... )\\xca\\xe2?-B*\\xbf\\xa9\\xffh\\xc1(G\\x1d\\xa6\\x01\\x83\\x95\\x9b\n ... \\xb5\\xdd\\x84\\x7f\\xd9\\xc1-\\xc9\\xe0\\xa8\\x90p%\\xe3\\xba\\xb5W\n ... \\xc7x\\x10\\xd2\\'D\\xdbY@F\\x0e\\x19*\\xbb,ih\\xe1\\xe7\\x84\\xb2_\n ... \\x12\\xe3\".\\xa7$\\x0b\\xd1p\\xaa\\x00[A\\x12n>N\\x19u\\xdff3\\x1c\n ... ?O) z%\\x8d\\x8cf\\xe9\\xbb\\xe3\\x0b\\x81F\\xdf\\x04U\\x13\\x87y\\x\n ... e1\\xe6\\xaci\\xa7\\xcb\\xdf|\\'=\\x13\\xe5\\xec.\\x7f9\\xdf\\x90\\xb\n ... e*6lW\\xe1'\n\n\n\n== 5. Generation of the master secret by the Key Server ==\n----------------------------------------------------------\n\n\n The master secret is requested to the Key Server (LURK)\n\n The master secret is generated by the Key Server\n\n ...Lurk Header\n ...Container: \n ... designation = tls12 (total 5)\n ... version = v1 (total 2)\n ... type = rsa_master (total 10)\n ... status = request (total 7)\n ... id = a(\\x89\\xb0\\x97\\x05\\x0c\\xcd (total 8)\n ... length = 342\n ...TLS12RSAMasterRequestPayload\n ...Container: \n ... key_id = Container: \n ... key_id_type = sha256_32 (total 9)\n ... key_id = \\xee\\xee\\x19\\x0e (total 4)\n ... freshness_funct = sha256 (total 6)\n ... client_random = Container: \n ... gmt_unix_time = [\\x8e\\xe9\\x03 (total 4)\n ... random = ;\\xe7\\xfb,\\x07\\xba\\x86\\x068\\xb4\\xfc3'\\x1d\\x\n ... f7\\xd2T\\xfcB\\x87\\xf8\\xc8\\xbe\\x8b\\xddV\\xec\\xb8 (t\n ... otal 28)\n ... server_random = Container: \n ... gmt_unix_time = [\\x8e\\xe9\\x03 (total 4)\n ... random = 2\\x0f^\\xe3VFp\\x80\\n^\\xcb\\xa2\\xc0\\x8b\\x8e,\\x\n ... 01\\x13\\xafB\\x17\\x8a\\xb8\\x8d\\xa4\\xe3\\x82\\xb8 (tot\n ... al 28)\n ... encrypted_premaster = W\\xb3\\x0b\\xb7\"\\x8a\\xb2\\x13\\xcc\\x97\n ... &d*\\xba3\\x80K\\x9f\\xc0\\x00<_\\t\\xf4O\\xe9\\x1ft\\xb0\\x95\\\n ... x9f\\xd3`\\xe6\\xa8\\x8dY\\x15\\xe7\\x8b\\x1e\\x188\\xffhO\\x88\n ... \\x82\\x94w/g\\x1d\\x0c\\x89\\xb7\\xc4g\\x87\\xf9qv\\xa9+... (\n ... truncated, total 256)\n\n ...<----------\n\n\n\n\n ...Lurk Header\n ...Container: \n ... designation = tls12 (total 5)\n ... version = v1 (total 2)\n ... type = rsa_master (total 10)\n ... status = success (total 7)\n ... id = a(\\x89\\xb0\\x97\\x05\\x0c\\xcd (total 8)\n ... length = 64\n ...TLS12RSAMasterResponsePayload\n ...Container: \n ... master = \\xbbRPz>\\xf5$\\xdf\\x0e\\xe6?\\x8d\\x8bYj\\xf9\\x13(\\x\n ... fe\\xd4q\\xd7\\x04\\x97\\t6\\xcd\\xf1J\\x93-\\xf4\\xde\\xb7\\x97\n ... d\\x9bX\\xa7\\xdb\\xdb\\xe2J\\x1a\\xfa\\x93R\\xcb (total 48)\n\n ...---------->\n\n\n\n== 6. Terminating the TLS Key Exchange with the TLS Client ==\n-------------------------------------------------------------\n\n\n With the master secret, the TLS Key Exchange can be\n completed\n ...[ChangeCipherSpec]\n ...Finished\n ...-------->\n ... [ChangeCipherSpec]\n ... Finished\n ... <--------\n ...Application Data <-------> Application Data\n```\n\n\n## Manually generating the LURK exchange for TLS 1.2 RSA Master\n\n\nOpen a python3 shell and start the LURK server by typing\n```\n\n>>> from pylurk.core.lurk import LurkUDPServer\n>>> LurkUDPServer()\n```\n\nOpen a python3 shell and start sending LURK queries using a LURK\nClient\n```\nlurk_client = LurkUDPClient( )\nquery, response = lurk_client.resolve( designation='tls12',\\\n version='v1', type='rsa_master', payload={})\n##\n## query response are dictionaries\n##\n\n>>> print(query)\n{'designation': 'tls12', 'version': 'v1', 'type': 'rsa_master', 'status': 'request', 'id': 147517109808405528, 'length': 342, 'payload': Container(key_id=Container(key_id_type='sha256_32')(key_id=b'\\xee\\xee\\x19\\x0e'))(freshness_funct='null')(client_random=Container(gmt_unix_time=b'[\\x8e\\xddz')(random=b'\\xfd \\xf7\\x8e\\xfc\\xd0\\x133vS\\x81\\x14\\xe7]z\\xbd\\xb7\\xe9a\\xf2\\xb4\\xe4\\x92\\xb1,\\xfb\\x84B'))(server_random=Container(gmt_unix_time=b'[\\x8e\\xddz')(random=b'\\xc3\\xe3o\\x03>\\xcf\\xb7\\xaa\\xdd\\xb2\\x82\\xc9kbg\\xf2\\xecfsP\\x81:\\xb4\\xda\\xe3\\xd8\\xa0I'))(encrypted_premaster=b'%\\xe7{\\xf9\\x9a\\x1d?\\x1b\\xd7\\xfb\\xd2\\x9e\\xc4\\'\\x9b\\xb2\\xcd\\xe7N^\\xd9\\xfca?\\x0c\\x9b\\x96\\x88\\r\\xcd\\xfa\\xe5\\x01\\xe5\\xf5\\xa09.\\xf1\"\\x93\\xd2\\x92\\x90\"_?\\xae\\xaa_\\\\\\xe5A\\xfb\\x97\\x84\\xc1\\xfe\\xa8\\xda\\xfe\\xdcu\\xec@\\xe7\\x85\\xd0\\'\\x91\\xfa\\xa3\\xf3jD\\xba3\\xcbf\\x05\\x94H_!\\x7f\\xad\\xcd\\xfbhG\\xf3p\\xd1\\xa1\\xb3\\xfe<\\xd6\\x1e&&8\\x98\\x86\\xbb\\x84SB\\x98\\xa0\\xaa\\x85@\\xb8w\\x82\\xbf\\xfe\\x11\\x9c\\xea\\\\\\xa2[;\\'\\x998o\\xe3}\\xd21b\\x92@\\xbb1qz\\xb0\\xb5\\xebt\\x16\\x95E\\xb2\\t\\xff~\\xd6R\\x95\\xc7\\xeb\\xad.\\x80%36i\\xe8hE\\x11\\xe4\\xe6\\xf8\\xb4|D-\\x06\\xa2E\\x19\\x89>t\\x07\\xb0jz\\xda\\xcd\\r_G\\xe4\\x14vJ0\\xfb3\\x90\\xd6$;\\x0e\\x193\\x1d\\x13r\\xae\\xc8\\xda\\x00\\xf8\\x0e\\x96\\x8b&\\xf1\\xcf\\xcf\\'\\xc6\\xe0F\\xd7)\\x0b|\\xf5\\r\\xd9\\xe0\\x04\\xf5\\x93#\\xbb?k\\xb8.\\xdevk\\\\\\xa7\\xba\\x15\\xb4\\xc1\\xeaiBR~\\x84\\xc6')}\n>>> print(response)\n{'designation': 'tls12', 'version': 'v1', 'type': 'rsa_master', 'status': 'success', 'id': b'\\x02\\x0c\\x16\\x07\\xa0l\\x1c\\x18', 'length': 64, 'payload': Container(master=b\"\\xe7\\x7f\\xaa\\xcc\\xec8\\n\\xb1\\x9f\\xf5@\\x05 \\xdey\\x11\\x1b\\xd8\\xd7\\xd2\\xcev\\x96l\\xc3kf\\x0b\\x17\\x10S\\xbd\\x10\\xb2w\\xa4\\x1f\\x87\\xa0@'\\xc6\\xe5u\\x15N\\x94\\x10\")}\n\n##\n## query, response can nicely be printed using LurkMessage\n##\n\n>>> from pylurk.core.lurk import LurkMessage\n>>> msg = LurkMessage()\n>>> msg.show(query)\nLurk Header\nContainer: \n designation = tls12 (total 5)\n version = v1 (total 2)\n type = rsa_master (total 10)\n status = request (total 7)\n id = \\x02\\x0c\\x16\\x07\\xa0l\\x1c\\x18 (total 8)\n length = 342\nTLS12RSAMasterRequestPayload\nContainer: \n key_id = Container: \n key_id_type = sha256_32 (total 9)\n key_id = \\xee\\xee\\x19\\x0e (total 4)\n freshness_funct = null (total 4)\n client_random = Container: \n gmt_unix_time = [\\x8e\\xddz (total 4)\n random = \\xfd \\xf7\\x8e\\xfc\\xd0\\x133vS\\x81\\x14\\xe7]z\\\n xbd\\xb7\\xe9a\\xf2\\xb4\\xe4\\x92\\xb1,\\xfb\\x84B (tota\n l 28)\n server_random = Container: \n gmt_unix_time = [\\x8e\\xddz (total 4)\n random = \\xc3\\xe3o\\x03>\\xcf\\xb7\\xaa\\xdd\\xb2\\x82\\xc9k\n bg\\xf2\\xecfsP\\x81:\\xb4\\xda\\xe3\\xd8\\xa0I (total 2\n 8)\n encrypted_premaster = %\\xe7{\\xf9\\x9a\\x1d?\\x1b\\xd7\\xfb\\xd\n 2\\x9e\\xc4\\'\\x9b\\xb2\\xcd\\xe7N^\\xd9\\xfca?\\x0c\\x9b\\x96\\\n x88\\r\\xcd\\xfa\\xe5\\x01\\xe5\\xf5\\xa09.\\xf1\"\\x93\\xd2\\x92\n \\x90\"_?\\xae\\xaa_\\\\\\xe5A\\xfb\\x97\\x84\\xc1\\xfe\\xa8\\xda\\\n xfe\\xdcu\\xec... (truncated, total 256)\n\n>>> msg.show(response)\nLurk Header\nContainer: \n designation = tls12 (total 5)\n version = v1 (total 2)\n type = rsa_master (total 10)\n status = success (total 7)\n id = \\x02\\x0c\\x16\\x07\\xa0l\\x1c\\x18 (total 8)\n length = 64\nTLS12RSAMasterResponsePayload\nContainer: \n master = \\xe7\\x7f\\xaa\\xcc\\xec8\\n\\xb1\\x9f\\xf5@\\x05 \\xdey\\\n x11\\x1b\\xd8\\xd7\\xd2\\xcev\\x96l\\xc3kf\\x0b\\x17\\x10S\\xbd\n \\x10\\xb2w\\xa4\\x1f\\x87\\xa0@'\\xc6\\xe5u\\x15N\\x94\\x10 (t\n otal 48)\n\n```\n\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/mglt/pylurk", "keywords": "lurk tls12", "license": "", "maintainer": "", "maintainer_email": "", "name": "pylurk", "package_url": "https://pypi.org/project/pylurk/", "platform": "", "project_url": "https://pypi.org/project/pylurk/", "project_urls": { "Homepage": "https://github.com/mglt/pylurk", "Source": "https://github.com/mglt/pylurk/" }, "release_url": "https://pypi.org/project/pylurk/0.0.2/", "requires_dist": [ "construct (==2.8.22)", "cryptography", "fabric", "matplotlib", "openpyxl", "pycryptodomex", "python-daemon-3K", "tinyec", "xlrd" ], "requires_python": "", "summary": "Python LURK", "version": "0.0.2" }, "last_serial": 5391638, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "d101acf63b310edc724c615dbd1c437f", "sha256": "17ac35c151cdecd3403801b2d59b81fe7467f62edb4c1e14f6a32e718f2572e0" }, "downloads": -1, "filename": "pylurk-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "d101acf63b310edc724c615dbd1c437f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 38147, "upload_time": "2018-05-18T14:56:33", "url": "https://files.pythonhosted.org/packages/37/cf/ae07b3083b9e1228b78306bb490ec81e2bb030bb096256d8642481ac32ff/pylurk-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1b0f480d9055e300689b00acb3e0c58a", "sha256": "fa50056ab15158783f64e673f85e3aad3c0e74db661c67bcddc1f7174f78f93f" }, "downloads": -1, "filename": "pylurk-0.0.1.tar.gz", "has_sig": false, "md5_digest": "1b0f480d9055e300689b00acb3e0c58a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32984, "upload_time": "2018-05-18T14:56:34", "url": "https://files.pythonhosted.org/packages/17/38/6f8109bfaf2e21a2346bce1ca601bb87f924c9b6810e428411506aeaf0cb/pylurk-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "700e0b49ea301ea467d23555e0f35d60", "sha256": "247cf28e59b8e65b52f2744146f6870f279bb19c05fc857e84523db24297f2aa" }, "downloads": -1, "filename": "pylurk-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "700e0b49ea301ea467d23555e0f35d60", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 76011, "upload_time": "2019-06-12T15:10:11", "url": "https://files.pythonhosted.org/packages/e5/4a/3ab9596d10591a70dbb3c8afa2e6bd8dcd68aea087a087c8b8145a47e09a/pylurk-0.0.2-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "700e0b49ea301ea467d23555e0f35d60", "sha256": "247cf28e59b8e65b52f2744146f6870f279bb19c05fc857e84523db24297f2aa" }, "downloads": -1, "filename": "pylurk-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "700e0b49ea301ea467d23555e0f35d60", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 76011, "upload_time": "2019-06-12T15:10:11", "url": "https://files.pythonhosted.org/packages/e5/4a/3ab9596d10591a70dbb3c8afa2e6bd8dcd68aea087a087c8b8145a47e09a/pylurk-0.0.2-py3-none-any.whl" } ] }