From ec616e9f18eedf347ac04b72f3f8e892fc0b605e Mon Sep 17 00:00:00 2001 From: Shikhar Sakhuja Date: Tue, 1 Aug 2017 17:22:29 -0400 Subject: [PATCH 01/14] added gitignore to include launch files --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 888221f..a1ffd21 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ temp_*/* *.egg-info __pycache__ *.pyc +launch_* From b908557086e43a55cb0d2c468adbec6ffe5afee5 Mon Sep 17 00:00:00 2001 From: Shikhar Sakhuja Date: Wed, 2 Aug 2017 13:33:30 -0400 Subject: [PATCH 02/14] - Changed keys to RSA - Hardcoded Hash Algorithms to SHA256 and SHA512 - __init__ working with JSON - Set up new keys --- demo/__init__.py | 6 ++-- demo/demo_director.py | 2 +- demo/demo_image_repo.py | 2 +- demo/demo_primary.py | 4 +-- demo/demo_secondary.py | 4 +-- demo/demo_timeserver.py | 40 ++++++++++++------------ demo/keys/director | 43 +++++++++++++++++++++++++- demo/keys/director.pub | 12 ++++++- demo/keys/directorroot | 43 +++++++++++++++++++++++++- demo/keys/directorroot.pub | 12 ++++++- demo/keys/directorroot2 | 1 - demo/keys/directorroot2.pub | 1 - demo/keys/directorsnapshot | 43 +++++++++++++++++++++++++- demo/keys/directorsnapshot.pub | 12 ++++++- demo/keys/directortimestamp | 43 +++++++++++++++++++++++++- demo/keys/directortimestamp.pub | 12 ++++++- demo/keys/mainrole1 | 43 +++++++++++++++++++++++++- demo/keys/mainrole1.pub | 12 ++++++- demo/keys/mainroot | 43 +++++++++++++++++++++++++- demo/keys/mainroot.pub | 12 ++++++- demo/keys/mainsnapshot | 43 +++++++++++++++++++++++++- demo/keys/mainsnapshot.pub | 12 ++++++- demo/keys/maintargets | 43 +++++++++++++++++++++++++- demo/keys/maintargets.pub | 12 ++++++- demo/keys/maintimestamp | 43 +++++++++++++++++++++++++- demo/keys/maintimestamp.pub | 12 ++++++- demo/keys/primary | 43 +++++++++++++++++++++++++- demo/keys/primary.pub | 12 ++++++- demo/keys/secondary | 43 +++++++++++++++++++++++++- demo/keys/secondary.pub | 12 ++++++- demo/keys/secondary2 | 1 - demo/keys/secondary2.pub | 1 - demo/keys/secondary3 | 1 - demo/keys/secondary3.pub | 1 - demo/keys/timeserver | 43 +++++++++++++++++++++++++- demo/keys/timeserver.pub | 12 ++++++- uptane/__init__.py | 2 +- uptane/common.py | 55 ++++++++++++++++++++++++++++++++- 38 files changed, 720 insertions(+), 61 deletions(-) delete mode 100644 demo/keys/directorroot2 delete mode 100644 demo/keys/directorroot2.pub delete mode 100644 demo/keys/secondary2 delete mode 100644 demo/keys/secondary2.pub delete mode 100644 demo/keys/secondary3 delete mode 100644 demo/keys/secondary3.pub diff --git a/demo/__init__.py b/demo/__init__.py index f914564..9594e60 100644 --- a/demo/__init__.py +++ b/demo/__init__.py @@ -66,7 +66,7 @@ def generate_key(keyname): Key type: ed25519 Key location: DEMO_KEYS_DIR """ - rt.generate_and_write_ed25519_keypair( + rt.generate_and_write_rsa_keypair( os.path.join(DEMO_KEYS_DIR, keyname), password='pw') @@ -80,7 +80,7 @@ def import_public_key(keyname): Key type: ed25519 Key location: DEMO_KEYS_DIR """ - return rt.import_ed25519_publickey_from_file( + return rt.import_rsa_publickey_from_file( os.path.join(DEMO_KEYS_DIR, keyname + '.pub')) @@ -93,7 +93,7 @@ def import_private_key(keyname): Key type: ed25519 Key location: DEMO_KEYS_DIR """ - return rt.import_ed25519_privatekey_from_file( + return rt.import_rsa_privatekey_from_file( os.path.join(DEMO_KEYS_DIR, keyname), password='pw') diff --git a/demo/demo_director.py b/demo/demo_director.py index 3d58218..57787b1 100644 --- a/demo/demo_director.py +++ b/demo/demo_director.py @@ -62,7 +62,7 @@ director_service_thread = None -def clean_slate(use_new_keys=False): +def clean_slate(use_new_keys=True): global director_service_instance diff --git a/demo/demo_image_repo.py b/demo/demo_image_repo.py index a2e1fa0..f96c0a3 100644 --- a/demo/demo_image_repo.py +++ b/demo/demo_image_repo.py @@ -44,7 +44,7 @@ xmlrpc_service_thread = None -def clean_slate(use_new_keys=False): +def clean_slate(use_new_keys=True): global repo diff --git a/demo/demo_primary.py b/demo/demo_primary.py index fc34cf9..ea63132 100644 --- a/demo/demo_primary.py +++ b/demo/demo_primary.py @@ -86,7 +86,7 @@ def clean_slate( - use_new_keys=False, + use_new_keys=True, # client_directory_name=None, vin=_vin, ecu_serial=_ecu_serial, @@ -246,7 +246,7 @@ def close_can_primary(): -def load_or_generate_key(use_new_keys=False): +def load_or_generate_key(use_new_keys=True): """Load or generate an ECU's private key.""" global ecu_key diff --git a/demo/demo_secondary.py b/demo/demo_secondary.py index f5c7e2d..c82fe9b 100644 --- a/demo/demo_secondary.py +++ b/demo/demo_secondary.py @@ -63,7 +63,7 @@ def clean_slate( - use_new_keys=False, + use_new_keys=True, #client_directory_name=None, vin=_vin, ecu_serial=_ecu_serial, @@ -246,7 +246,7 @@ def submit_ecu_manifest_to_primary(signed_ecu_manifest=None): -def load_or_generate_key(use_new_keys=False): +def load_or_generate_key(use_new_keys=True): """Load or generate an ECU's private key.""" global ecu_key diff --git a/demo/demo_timeserver.py b/demo/demo_timeserver.py index d8af0ed..a4db1f8 100644 --- a/demo/demo_timeserver.py +++ b/demo/demo_timeserver.py @@ -43,7 +43,7 @@ class RequestHandler(xmlrpc_server.SimpleXMLRPCRequestHandler): -def load_timeserver_key(use_new_keys=False): +def load_timeserver_key(use_new_keys=True): if use_new_keys: demo.generate_key('timeserver') # Load in from the generated files (whether new or old). @@ -73,7 +73,7 @@ def get_signed_time_der_wrapper(nonces): -def listen(use_new_keys=False): +def listen(use_new_keys=True): """ Listens on TIMESERVER_PORT for xml-rpc calls to functions: - get_signed_time(nonces) @@ -136,28 +136,28 @@ def test_demo_timeserver(): - # Fetch a DER-encoded converted-to-ASN.1 signed time attestation, with a - # signature over the DER encoding. - der_signed_time = timeserver.get_signed_time_der([2, 9, 151]) + # # Fetch a DER-encoded converted-to-ASN.1 signed time attestation, with a + # # signature over the DER encoding. + # der_signed_time = timeserver.get_signed_time_der([2, 9, 151]) - # Encapsulate that in a Binary object for XML-RPC. - xb_der_signed_time = xmlrpc_client.Binary(der_signed_time) - assert der_signed_time == xb_der_signed_time.data, \ - 'Demo Timeserver self-test fail: xmlrpc Binary encapsulation issue' + # # Encapsulate that in a Binary object for XML-RPC. + # xb_der_signed_time = xmlrpc_client.Binary(der_signed_time) + # assert der_signed_time == xb_der_signed_time.data, \ + # 'Demo Timeserver self-test fail: xmlrpc Binary encapsulation issue' - # Validate that signature. - for pydict_again in [ - asn1_codec.convert_signed_der_to_dersigned_json(der_signed_time), - asn1_codec.convert_signed_der_to_dersigned_json(xb_der_signed_time.data)]: + # # Validate that signature. + # for pydict_again in [ + # asn1_codec.convert_signed_der_to_dersigned_json(der_signed_time), + # asn1_codec.convert_signed_der_to_dersigned_json(xb_der_signed_time.data)]: - assert uptane.common.verify_signature_over_metadata( - timeserver_key_pub, - pydict_again['signatures'][0], - pydict_again['signed'], - datatype='time_attestation', - metadata_format='der' - ), 'Demo Timeserver self-test fail: unable to verify signature over DER' + # assert uptane.common.verify_signature_over_metadata( + # timeserver_key_pub, + # pydict_again['signatures'][0], + # pydict_again['signed'], + # datatype='time_attestation', + # metadata_format='der' + # ), 'Demo Timeserver self-test fail: unable to verify signature over DER' diff --git a/demo/keys/director b/demo/keys/director index 622cfcc..ffea910 100644 --- a/demo/keys/director +++ b/demo/keys/director @@ -1 +1,42 @@ -7f8fcae94b95a04baa1f07aa374937f9@@@@100000@@@@48d5bd2502df5d921e714f0782f42e1df1ae08ffb4d0dbf5df1923557096b005@@@@a724429acda285bfb3e7f2b4db0b0928@@@@f6056beade9cd29b105c8f82186b24f5e9257a11420ddf2e4056a6ce7907ffb334dc130c6f12268f0229a5b34364d6375cd398de2b3aea93f6fd55355a725b8352caea89a625bf020e7a2a165aec5f95794f73265779056f9e3a227469cf89f484ff4067e4fa50241492810c89a5a9e83945af92a41a37096068f7fd01976ec209c3156bfc9308c5e95a1381859bff06a62df2ad2aabb9f417e2588941b9239d6a6d130572de94813cfd089eefbe73fe59e297f047dac67e8dfa437360bbc7ec953a507ca69fc48a21dadb6124643f6bf3e813d603a5609391cf5c1b5b30321a3024f3a8f97f325e96be102d0dceba28bf1f5a4c7614c0e0ffd2b6819758e0d02ad1df6adb16e23282dc502a \ No newline at end of file +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: DES-EDE3-CBC,56337B81936C42C2 + +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 +-----END RSA PRIVATE KEY----- \ No newline at end of file diff --git a/demo/keys/director.pub b/demo/keys/director.pub index b85f3b8..4a1cbf5 100644 --- a/demo/keys/director.pub +++ b/demo/keys/director.pub @@ -1 +1,11 @@ -{"keyid_hash_algorithms": ["sha256", "sha512"], "keyval": {"public": "99ef8790687ca252c4677a80a34e401efb7e17ccdf9b0fcb5f1bc3260c432cb9"}, "keytype": "ed25519"} \ No newline at end of file +-----BEGIN PUBLIC KEY----- +MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAvfRckE1nP+UpxoKREfhu +ycbEeVMHMF0WUntkTO1ns9bt5MczbLYlKfcFbX8mDng/AseEYn4dug5fyyiCy5OW +dT8cPqINxluuy2eNh4EPRZ/pUMJ74edArXXRe0ZhvEIhMPQiyaQcffx0dWjqGUL1 +qjxrBpdRYLLs08fPgvyEnf2OmUdhMe2fZxvqeaM1xCpwkyDvmfkeKwbue5DJovwx +CMZurGHfZfQDn1ecyP4f80UsOCkK/HDDaK9E8LgjeN9YzNIQAw1jgXAFN95x9V3G +/moRcouYMdhL8KEgSK8fGWsRlUBtqm2MVP9I+g9MbVkOXa/7ZXpvvWsOJliHARoi +2/j+qKrfifPKnbGWUWhS7/0IH1y5noz1mOSNvgyiOdh+9lSTGEkaYniaMZEKLAgK +5tKiTI/oy+RlI+SfSqNwua/+HmSSqvtxaP9j+zdNmJTayIbwbyel/VzWOGNBmWm9 +Wbu6bWeA28n4JLawBVdqc0BPs88yEZVy+wi4CDy4DIa7AgMBAAE= +-----END PUBLIC KEY----- \ No newline at end of file diff --git a/demo/keys/directorroot b/demo/keys/directorroot index fa19b2f..e07a569 100644 --- a/demo/keys/directorroot +++ b/demo/keys/directorroot @@ -1 +1,42 @@ -faa431f56ab70096016384d60e789ae6@@@@100000@@@@6b6dbf7be483b860309e617516d6b591651720f3ac95bf2ababb0792825876a0@@@@b6aaab78776ae1f55a3771e814ff50ce@@@@5106a3c58d9749aba7c9ef92514809fb92d139e3b5b6b9109354e7c72c15690e267dc7c0b09ee05ecd78750bec1050e290da42a6da516b0fa26bd01bd5f5d5cda5f2534b64e52af4ccff5f164a0cd98532873622fb603549cabaefc76008bdfd72e3886dd11e9ed3f212e82ca86b08901228b01495911d0a3969260e1eec7c5a3e0777190207ce58658e731960c341e98d5bc0cc0de1e7629afb8a7053e729ff7496c561b72e5be3be4183c146ea6a80287730ea7981c2d332082b10eb9ee555c3f39bd482049e64da59d0cf872ac204dfc080192a3cb645ce0d71fb82a70523681744ddba4b9e02dbd1951ab57e1b5c272271c7a28d67a1d0558813996d4de8829309beb00c1b2eec251c21 \ No newline at end of file +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: DES-EDE3-CBC,84815D3A8FCAD025 + +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 +-----END RSA PRIVATE KEY----- \ No newline at end of file diff --git a/demo/keys/directorroot.pub b/demo/keys/directorroot.pub index 5d63613..6d661db 100644 --- a/demo/keys/directorroot.pub +++ b/demo/keys/directorroot.pub @@ -1 +1,11 @@ -{"keyid_hash_algorithms": ["sha256", "sha512"], "keyval": {"public": "f3b4c231520580eca92e17ae1581a708f606f72d43cc200af493afeec22a5e79"}, "keytype": "ed25519"} \ No newline at end of file +-----BEGIN PUBLIC KEY----- +MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA1v8uTsmjBRcUOVJh/8OI +toL3OoOuwxPh1Ab4CZ+vMcUiiHd5XXB7WpyAmYJaRqQMKu3zDre3RKROJt/zM07Q +/l4Kr2f+RMp7As2cH6qGn4k0CyQBNoop77CzxucbVIrNoyExbtVvv1LOZXBihj4L +paDAheVfUge6VqMcxpzEdaxGmPACd58gr/vqgYJ15jfnoudJ7GP893WkcL+qiFUv +3RG9veH+c6BU14kD04OEAon83JxBvarnlOBi/gBH35GRH/LFP14i3MW03sfISPkB +4rXS4fKjrfpV0dcHteBYpLOaskagtQDs3XZHxjrLDxaRFeBrQqXoO08DmyCfm82i +yDWqyACgixRdp3n3OxLVwvVZY75FN1X08ksD7bRzXI/4GvJY+Qc2bBT60gi18e6C +bcAT3SbDjtHoETs6tFCma740hk2118l1tY87ZnJhaUZ9CQWjwgHbuEuZwZaOfqPC +W6rvKMDvQDzw7ota8I0lmYp/ajarqcQU7CUJOL08I8wtAgMBAAE= +-----END PUBLIC KEY----- \ No newline at end of file diff --git a/demo/keys/directorroot2 b/demo/keys/directorroot2 deleted file mode 100644 index 9c0f257..0000000 --- a/demo/keys/directorroot2 +++ /dev/null @@ -1 +0,0 @@ -b3ce3badd8299c96431ecd9bb4f07c54@@@@100000@@@@ea19cfb71752797b0a206c603bb7df00e1f6f7a55f8d5be4df52a50f2ca764cd@@@@2ff3594af704d50be519e9812b4f5be3@@@@e6db6a5ae475ee1dcb262ec11e6d2fcfdaf3f01d10ad5e6cd92a7922ceea3afb459c43220f09a31df2236e90f01c7cbcbeb5729df02812a6335dfe32e72cf67e77c3950da525b877e4356ca5dd0ac0f1b8b4ac2dc98e7894f276e6dfb94c7e34cef8884ca74f5f4b676b07523d7ceb263ba36990484a312616a004d15631424448fca90c69168a89e0df59b8c81a82528eb931c8f1f62704555b87c48430003a87d8965e92baa6c682fa0fc8282c045e1893f2febf044fbaa91033053b38006c9860781e396afbb7989671f0aa39d26d343a47b6fe8ed6c9443805ee10297dfd6109540a60d49a762af48b4e6ccfd9aa17bf27c3bfbd3429f002c9d1c9141fe6f095177a2af7d1429f229440 \ No newline at end of file diff --git a/demo/keys/directorroot2.pub b/demo/keys/directorroot2.pub deleted file mode 100644 index 8514348..0000000 --- a/demo/keys/directorroot2.pub +++ /dev/null @@ -1 +0,0 @@ -{"keyval": {"public": "9de3bf0a33ef302d37b324be7bdae200ad5bc076ca74c29182fb35b00ce10bb2"}, "keyid_hash_algorithms": ["sha256", "sha512"], "keytype": "ed25519"} \ No newline at end of file diff --git a/demo/keys/directorsnapshot b/demo/keys/directorsnapshot index 2e18a70..288b739 100644 --- a/demo/keys/directorsnapshot +++ b/demo/keys/directorsnapshot @@ -1 +1,42 @@ -42293bb65c6be5de125828dbdffadf87@@@@100000@@@@ed7f9920c8e8ffb47cc5e5b2869d627fd080294964c16daf9c6c380b56a703ed@@@@dad720e7355909dbd9be853ef797f04b@@@@084030ca8c7812911ef64b11fcf748630e66ff8e02cf361f8b9f34d9b1a5056e8f3ce712a1434cadbae84ee8ada0ed3638181cc8e4f139d3b5caa3708a1a25acfb37a31eb709ca1ef40592de524efcbb11db37b9d57283126c769c0f776f16e4d8ed79e9c0e95bc688993dc697ac2c4ff7e029d579c41909414e0c95a54aba466e6781c67ef672eebcc669faa807c832999b4f9e26f133d76e97701020279127abc3032c707b13ff418f28be403fddd158577017052ed50a62fa417519e61d17e783e18886b74b74dd2b9aae9571fa9b7bd55de3aeb13479672f663a9447cc09b386f911cf3f91ab5c49af132f0c99170e6ce4b91671f98061fd5b05e8fca4ecacc0a48bcd09a376eef3a018 \ No newline at end of file +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: DES-EDE3-CBC,8CDC6031D78A82B8 + +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 +-----END RSA PRIVATE KEY----- \ No newline at end of file diff --git a/demo/keys/directorsnapshot.pub b/demo/keys/directorsnapshot.pub index 9932f4d..f1c1d63 100644 --- a/demo/keys/directorsnapshot.pub +++ b/demo/keys/directorsnapshot.pub @@ -1 +1,11 @@ -{"keyid_hash_algorithms": ["sha256", "sha512"], "keyval": {"public": "228342cc8b78a65b8840ef5691a693d8c368e053a7e8e8f85faf7c83eff1e1d2"}, "keytype": "ed25519"} \ No newline at end of file +-----BEGIN PUBLIC KEY----- +MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA4S85joQT/UX3k7i8eE04 +rKr6HdDWraEJertaopNcUdBbom2u3rnIYp9WDKWaqPEISOJ1aMNHLW53wd0oCMhe +B1cpXN46UUo2gkfZNXhcnhKZCUcv7wZdW4xFZBmxBE/kzuuJrde9A8Zv+p8L51ye +txguk96yinFMZftUIa/xI7L9OtfWNhiX/jzOl0UI0QS/DdYIJikzGy4j6Y3iWmLS +RiggLf54RYMXx3oZwY3e68oTmgyx3p71hZ9//7vWhjG8crWzMZQtLNHxdMuOncYg +SbeBBoOIDuNdtY3m9ftgP7Mao86v22r+spIu0NCt75pM2iQLMXgRRTfObasM1xVb +0tYIkVClS2qkocXrMxYj8qcxaaWRv7e4WOFnUxgUUWnw+5m4R4wyXzRLas2zOyBe +pcRIPiSA4mHq6U3N2N7Rl6zq1QVuDQo3j0YGn81XxciUbzMMOkVJzVmFW1USIHlW +S988QzoJJjvbSD3SPKWCfQi0oDOspXnnZy5tn6WY/iUhAgMBAAE= +-----END PUBLIC KEY----- \ No newline at end of file diff --git a/demo/keys/directortimestamp b/demo/keys/directortimestamp index 861986f..7602c1e 100644 --- a/demo/keys/directortimestamp +++ b/demo/keys/directortimestamp @@ -1 +1,42 @@ -272213a00b4405fdc107f2c4f90d5fd3@@@@100000@@@@ffcd4d9098d1629d96aad954aee7f1055e9370e0b3ae64bd8d54ef88cb8026d4@@@@ec6298e00176355ba70c625f30f2a753@@@@6a714d2be433f702206023ef2ad98d20001b668f2d1161f9ed1b126919b3e31b7b43214a4722ae3930a0eb81d85bef9265cf94373686213dcae252e8061676564af3b0974014d14da1e6ee08fe28ab5080ac06a224d1d6469f06108b1aaaf280a3b29266c9c465d75e8b5be5a60c7e5a1db4730d05d9a05786aa98b98a22ff564a7aba7d7142d3507a14c83d7bedcd033bc7ac230102fdb3be4c48e0b628270fd6cce6c8f27bc69b5992c5f30f80253f19011c0450b4ab0414ef1493accaf277bf6774bae044fe7f037f8144e49bf20f3c70b059ffff6925eb3bd229d6f44bc97d312bb0864f5f82b97ada317470c058da288f105126ec5b4174c198d625545a124382c34b23b47fdff49bbb \ No newline at end of file +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: DES-EDE3-CBC,C94B3AAD9880FA5E + +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 +-----END RSA PRIVATE KEY----- \ No newline at end of file diff --git a/demo/keys/directortimestamp.pub b/demo/keys/directortimestamp.pub index ad0fcac..fabf679 100644 --- a/demo/keys/directortimestamp.pub +++ b/demo/keys/directortimestamp.pub @@ -1 +1,11 @@ -{"keyid_hash_algorithms": ["sha256", "sha512"], "keyval": {"public": "d1ab5126fd6f0e30944910e81c0448044dfe9d5a39f478212b2afa913bb7ca7c"}, "keytype": "ed25519"} \ No newline at end of file +-----BEGIN PUBLIC KEY----- +MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA/OEWfee4MUihif30vXnI +Zwr0JV+fWRLIWDb9JYLOGrdh+L6f8E59AA+EwYnVMJtF6Q4+xlNlkgN+/n4g3h5a +IMpf3dQRxB3mkKb23jRBIkPZsGfmTfNU8SKRwyENsqU3uC6uJSF4Rt5dQfZSgh9I +6kRopNsUfTmjBSkXaJKaDbGanBRIYCE5r5vo7q/d/h2frOQw5EEllkNOrX1QzWy4 +ujzLHjwjVhuKELE4VEcacVw56kCbeWunY1+oDC7Ta3AXXeAVOVxwxThDJUB03j1p +KmchKje4INLh5kg6aJ2r62ufFP7wWuAmkfpzsADDIXRZ3Nm9jx1ek4549Q++1u7V +IgBUWEQJhHDUjiwZV3PHWbDRcMv4j61GIGZThx1hx02pYz+6iMRgR7wf+FByO09n +XPSRJC7BFnlsLDtNuukQn68Ly8Z711dNmBMUewP0bjhxGijmiLMKDqlE2F7oiBFm +856YROO26IBbthwBIbLHEtGnrw1qAFSfnojd9lDAkG3JAgMBAAE= +-----END PUBLIC KEY----- \ No newline at end of file diff --git a/demo/keys/mainrole1 b/demo/keys/mainrole1 index f8fa3c0..5dd49ae 100644 --- a/demo/keys/mainrole1 +++ b/demo/keys/mainrole1 @@ -1 +1,42 @@ -49126c753cf606c8733008375f880d16@@@@100000@@@@78120f8a5e3b9c52a6e533c783fca1e1e750f2824ed48683800a846b10c70a71@@@@e5a92d0e0a9a768372c196d56bba467a@@@@8c476dd93e1af508f6a0450bc00e5fcbefe9a6c833b68447c4826920a0381dd3d4539c0719832e007c48594487c09c03095983366974e18bf61f4bef9846e704c5a7b375f4edfb203f5206a644cf2239cced013b9bbed13f1d4057e705b4bab4a316298eba312f985dd48d775ca2ac2eed55c9740ac903b06bafd51f773680d14b485f5c5d08d03f7656e1ef33990a40370158b55199a08a81c25522c6826472d2b5231e7244a76f921275a47a41d24831e3a916c835fbb69d5b475bbf2d4fd2283131a6a89ec3c3704025c3da3a82fcb088fc5654a4f9e3744c163ed8aa289882fa11f75fa6e991a667b381179794698aafb0e0e5b4e9ad571143ec82f560885ce4d13f9688be23df48648b \ No newline at end of file +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: DES-EDE3-CBC,7DB81D24C5D97CA0 + +uckEMxHa0w65CQABsMWs+JIJBOfg08iM+ecvqPseJ2ognSPIXDN8Ga6lLPLwe88V +eLKdxt4FblWAT6xOnMptBrAS9OnhV3NRLNI8i2AlKM6YsoJRYqNmv09OyKOOR8u9 +SAbcv/0hf97wWC2epCn0hbsb89R222P/Dy8u9h5wthzdQUf7ePWK+3+FUIoVCk2o +Zbqw5Glm5/ZoAV8lqft6r1t4iv1HgiNfYtFfyon+2eeFXoUM2PEz0/FpLTf9AWus +RGdxErkdFDc7X8GgeCHLQE/e2ccehb937XsyPMYqb5FRGjH55u30HXlb8UnKyAz9 +wBMh+d7olkEfdwNtPAwBWgXQ5ZGyTfajUYTz8UUnDV15riBTfvVhxonEzVI0XoVm +rJtczmtIbgVJXIee6ueL6ZpoJTPJGCRGJ3qjirbKdmI+X9IQT6/W+e0LrT1lfa4q +PxQDOqhPxCZviumSbKF8EXrqO6y0NISueqKJ8pjQTjvrWYuyp8S1bdCOiuJ/yjV1 +mxMvW59/LiRbZ7SYZv1rX0BxA0nw3lIhudN7JqPwIza1t2yUp1qyMI3NHffKCuAy +ItPGCq8bdjH+Q332LPYs1O+YmzwoP/BmXxXjgIojUqqWM7a8ELSAbEfuW1QgsVwa +cZrUFr+6WDrkIt++SrObBpzPPVirvyH64GeS9FAwLeAacwnyl+bFCQ31Fq4MXGPw +5GjoByqFGeF9mpqGIngSMc0VfaolOLEllzBN/C803cPv3sWB2pgBRw6gVYFiuocL +f0Pu1ldb0wP1PRjwVYw2Iokm6E/AIUhf/cq1E3FUWlXwRTcaQIcw704jLBJRYi/o +vxnC5SoE3Zz3no6emuTRwsDjssedzIROSS2uRn0d5zx5eFgMYVr/9f+XUO5WnlDo +BWG46AeUA1jwKSv49+0nxR5Y8YeRFeMzS1IS+HMIQI4TVktdX7w2JdaYgXVT9kjm +Id9/bFltSeaofgxT8vLiS13m5j1MEUtAA2sVSpg2w7FBtctx3oFsZZPUPaDqGjBm +defVO8+g4asNU1YxpwBFv2i/tOxQm1Tp6OH2REvi//xjZ54cd8zpGLD++leoLZnk +oLyDjO08RtcqM+hb8FI60wsCczH+7XkVTEelJvVZR+pvvboLVzsu8LQoRlCczbGi +XXJy0PA6zq3b/Uc5oQU/rok5Y5SgQQIfQjS2xNXBzp47fqURadMwFeqyhlU1MLH/ +HgDOibWoE232Q+bNLN+Pxc8ANNnarXbDj9O1vR4uTokE66Jyt8N3oL2jw/DFaJGg +X6ZcEqeR8gBO/Mb79pZoKJI1fu75vSH2QKXjacaCzBB0LVQg7l256dSTAFC+fjUP +XxFCAhsDKogfwPGBmvxWqelO5HKDxPiRE5USAWBHeN9mZ+Fe8N39PP1rcw/TDMci +HxJpNwULyviuzhNYpCJhBahVZugQSRU1kwq9MEKNTNDHvyp9rXCldpd334B0iIey +H7MGoHAyUsRsMgiejNZbDy4Nyeh0THMRWVrigQIpousn1goq/9OoamN0CjlZ2dAQ +lwM/Zmwse8tEmBdMdaJQ1culsaKD553xTk8zvDG61+KnQI8fiQo+hM4ncvwPx7OE +cO1E1LsPvfDH3Sh6qjsVycosO/yuwLce9v/VIkLATX//9KBsQE5egImPTjDkz5oJ +BO6guBNn4SeKxriuSoia2lvEpIBeN2LtqKRSuSS6T7xX4iNBFLD0gfGPoswzr6Gc +m0OlrOoc8Lec1BRxk892szEF5gK6xiFUmQ2HVRRSZtQkxxV/3rXKMtn4hvojDhIE +dE3gOVvjmwFwF/BlTk04vx0wdG6MDbTBkA8fi+5Pl3ZYNcsbUgOZzn2Awt9+wqSQ +skGGjd1ofI2CP2meCvwk8DJzHN8ZfSB8/svy9Xc2TOQlGdUI5OckX6bR/LAM1vPj +r2rthAGcP0zSodTaAlA+5UUOgr6K2g0MrfJe8Iu+OmiRNxmk7UiWSRwY9lNNu+Ny +hNSGAizPnVGM7jnTb2ClhypgLpNpA2ktdcYR047qE8mMAxPaHNxbeehSGHreGFAe +FMsdQl87GnnSwLpZ9Ks9P+sCcDqXdA9JOyVk07AIn9fl3zzG8vAuYuDenx4Yvtqb +XCfOK/EhwzDOIECHNYDM6DzkzSivQ0q2Tynt28rLltvLw1rAnSfvyAwh0ZlLGn7t +JdomtAkM7xohY8LeHjTDROgOYFxikh5mtWg9b4XQJNLKD7vDAqTvmTH9l1Zipy8d +BLzAlqVY0hmZl5HVIuBqM1tqowwn3fYFLPa/l+9i8dpe+d4EeaTAQdhy7rFPmP2q +E0vnmfvNFJkrkAUMGpyFMtyTE6zFoTbAcr+/Aa59BPPCmnfHU7by3+DGN23pAGyU +-----END RSA PRIVATE KEY----- \ No newline at end of file diff --git a/demo/keys/mainrole1.pub b/demo/keys/mainrole1.pub index aec90e9..dbf7593 100644 --- a/demo/keys/mainrole1.pub +++ b/demo/keys/mainrole1.pub @@ -1 +1,11 @@ -{"keyval": {"public": "c5a78db3f3ba96462525664e502f2e7893b81e7e270d75ffb9a6bb95b56857ca"}, "keyid_hash_algorithms": ["sha256", "sha512"], "keytype": "ed25519"} \ No newline at end of file +-----BEGIN PUBLIC KEY----- +MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAxEVvX4k9q3wwM/HsKFGW +jv3itm4woC1/KVvARStZgBPXrzSYaUTfj6lO/s2XjgvUmp6eR0hmzZxXKb0/r3ah +lQ4LMfdPF7EIArSV51utYQfT4c2WW+KBb1PXFrqqEZA4OhYKUbp70kP0W1aLIRAI +IK16ncdiq7dUzgRqu1mHjTpIFJ91q4AwLggSi6O+ZpLhfpcLEsilU9hSoPGMOnE0 +uobCHFN9B61M19pHJulHqNqiJrp2/+PBcTF2HZmUd8zIRlxsUmCApd1ghCjaD+J7 +NPUZ5zXLeNXvJh5AHqfbn4N0DfIlSJ5JDzNEs9dZeQ+tOTivrgglGq+/oYEpN4EQ +XH/a38IpUcbb5AHx7Pghw9ANaJm44Fb5YTizi+P1oWnZzITlD9Bt0sA8px2H3MdJ +EbCsEBeVCwcjLrdQVZGMDzzY5JVT0exp2xxAXnDmPhsey5d5cdNxgWYMldr6A3s6 +UEQ1cFv+hX0fJwnvFwZl3MJDSeHGj6HhRHRnSBbqT+3ZAgMBAAE= +-----END PUBLIC KEY----- \ No newline at end of file diff --git a/demo/keys/mainroot b/demo/keys/mainroot index dd7ac9b..5ee8fc8 100644 --- a/demo/keys/mainroot +++ b/demo/keys/mainroot @@ -1 +1,42 @@ -51075d30033b3b952cdba36bf2f0b6d8@@@@100000@@@@e32a19473754896ae175b6aea30cc9703bc8fc34acc40809ee890f8351815b58@@@@e2e82069cae0ec30789fad039385af60@@@@48e67f6481ab927dca5b9925ed31ea4eb9711cb4acfe7bd8ec4530366fc73a1e3d7146c0642fb8f76bd127cda78ff9df06c661b871553d0ed8d136aff2305b154b8b937e010c5edb311bb16e227b9dfbda5c21a2175e8c04c2750660f42a2b5f17059695ebaebdf0066a064cc90cc2b93d90a4c2e77b13fd2551e74046fa9e3dd90f2449ddbb21a5a66b86c5faea3c870abf8b690ba961f91a6d3344e7965de103e8a815a43e0214867d5ab2bfbbfbbcf241c00885cdcd1633b0af9e0d2084b6a9499c3d0a494f29da17b5a4db801da077f731ce7276974d4e7023d9fc596ff2bb0b573e2c88d5226ecfc0fea366069bf4e948512839be0938d6be9d52eb9fb639c5f1fd721ce1f4c79915fe \ No newline at end of file +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: DES-EDE3-CBC,E6880DF8EEF70972 + +Wf6wP6zhFHSxQwxwkH09SJOwp4RRI+1rQ4cfwzAvyS8y4yXou/r5z93BI/xGIsVF +DcPzZH2gbNO1fVvIXQooGkAZf0v6VC9AEp6i8OQJhx0kZmVZvyjE/oJKSiXU2Wr5 +N4H2c5s1BxT77rxYnF5vVLxBGy09yijAy7EcUqHmdfSR1n07CjCP6y9ug3NOVU6O +FuSYSCx12ygv/OT64Q9fk7U5+TkwNLPSSaDL9ZCnZX59xaQSc/sKJPHwCGWlR+y5 +6rR8v9caGZbuknGNOIZvruyGGkUNWz4GnV/21vybUxlju2uCl64NrT2JBDWZ1SeF +sFCBVo1wElgaYOnl1lV8FcsX3NjM6+d09zxQQ4IBlSMxBCVDtv6hjIWMBf2iOtgU +tG2JgHxTA61p12N758z2Xe5keuR1ma6/HD8JW0zxGQeKPSLZXWV5/Qr8Sox1+TLY +QM7Rw57d/K9367aKV5W/gkrq+r2HHIbGh0eNUvTkO5sMlbBmIojwfSijAjk35rNU +PH4bRgS9CiSl5qy1ja0rLZHVJFabpHRpzoFOFLXaVVK18+qTK7N0t6FW3OWgWoSz +nfZ10YyAQ8Q50aM9yJNiOmqNl/S3K6N3k/IBUpqDhliGHfhoB6mFxxRrmBWKDbuG +qWFaa5ZTWNBd5W7teuzQX1yXag3IDvP5Cb8fw0cJJ5XBemXNg9cTlh66FVZCpRJf +ecJ9phOIhzA5gPhcUL+jFX1QZIsfo8OIRn5Tmh51mPRqdaJtuDY8Iq7OqJ4aBuuT +jdkOqPuqBYAZimOPc6QQIbK6fotP0t48BJz5HXXIq+0fQOn8JFSekyQFMgzQ/KM4 +F54u6IT1UTVLKN/4n6+zPSVPm7kI5MNlyXx6otrG0Oq0V+XNkR6hoRVHzjgOw8Xh +3fiU3vod0m+Exf6u7113DLFBRZ8BuAdW6DAzICvJ5BINUfhy73K3ZXfClqpXVpBA +nIT7QBHQhL9e5XT+aqxH3DwMUYOdBlPDmJHx8c6/fsIZ8RP5fLwuRrBFNRQwjLuz +z5rYTlgplpIz00PV3+3zLOH/r5lypGHbnqUaFvrxp17BQNQTYsGGgz+cfaGpE2bk +G1AzGqrR5/vbr2xXe6NspAL5GniG3ePxMV6Wt+v/Z5IAMnvUo3oHHDZGq2SHeIhi +fBx2xaMSrk6Mp8z7g++01+L9XWeRjW5LXYeizZmeT92WxgxiGaRewbGAwJp/oBxd +9Iqzay3yR9kZxBO0eHGbZmfapQe2kgkSAZEtG6N0QVgOwiOQPgFWd5WTjDMkh/2h +9gC6gzsxAxXwViaek9+w8QDjGIqhRz4ojk3Agh3i3GElaZEBFoq7pknIsXHpgLDY ++1QK2fX2cCuDOXFxS83mEMD2IoqLk0ndKGggUnDLngwwrNu3/VF9akixULhNeBii +Z3a4XW/Rws/Z4CVbTAS9r9cgAcGNKfMShCevtCJ11InzBITrPoyH0HI5RaaAf9IW +wm/fa6EM794F/QYhJ/cvL/q4jYIZsw1LPrvThU4g6M+83rtefnr/CRmWxSvqJqvk +g+uUa5gb3zWEJT5tjkcNveJasMvUyL32LqgCklOWUj4ae2c1tw9qSkki1zdKPboS +NA4ghU1YLb+y0OEdZ7rIwpoeVY2HdMxr+Hdpci0szL1zwzlOApA/AIEB6acf0WWp +bLqOWE9ZQjdWa8hddWX2EGIqeAYNLkMYuOGSv7/lTgofMo21V9F2jNjMl6U95Rlo +UzObC7SrM3va3zFzu7TMm/iQa8PJOsqfia5vDVt54g6Yopo3edD/G4rNZNus+zAg +u0hR1GvHpJJ6Hy8ZZcHKC7/60Qvg2naiqtb4lohpFSw3VEWe/MTa/9WbnVe8JL9B +mlozYOX6wrxWHYRZm3f926BCAyIyCKcGafyySBqUYN/DdjxRAa/I9hUsFoNsICoa +HLiP9OIV+OyErHxIUh4NjWC8NYpKgSNmN1kARuwkG5dBTXknx6R7SHXI2FKV/+w2 +E+hJ8HuypAKNaxvYLsNAGmUEY44Wx/h/Eo7bT600hDyXV7pniGXHQR1MmjGZpiFI +KK4YBppV0ooeiakxlzh1qz5n5SH8TYd8EFoNVVLJG5AtJIlUOjw4qVfXXBjRFQdQ +oy5mLVW0/Cf79g3K+sAgGu5iATyiIodPBCjX+b2WX9IAWoM04cucFVsJlxWPJ4Hr +xq9D3Gb9DgWrginEI/vpZceuPAhRgJIu7tddMEDPXcomLCgyWIwiKzI639HY2jyT +tDWHOZmoUl2b224HhS4RtmIWhdTtTallHEyz+vtJxI1zAagsbVOCFoIOPlINKRwK +r+kNHfwijwEjYsZRvlVkwPaogqvGs7cpj2U8FUfwue6/Xd6kkCrbdg== +-----END RSA PRIVATE KEY----- \ No newline at end of file diff --git a/demo/keys/mainroot.pub b/demo/keys/mainroot.pub index 3f8c7f7..8c52144 100644 --- a/demo/keys/mainroot.pub +++ b/demo/keys/mainroot.pub @@ -1 +1,11 @@ -{"keyval": {"public": "f4ac8d95cfdf65a4ccaee072ba5a48e8ad6a0c30be6ffd525aec6bc078211033"}, "keyid_hash_algorithms": ["sha256", "sha512"], "keytype": "ed25519"} \ No newline at end of file +-----BEGIN PUBLIC KEY----- +MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAttAVIDVV+cnHzwkmYt3H +GgtIAJ8Aj9Ie/4QIP1xRku/sSavXD4wVEIPsR6AmggRiaN42PCgILVoW47/Cj2om +hLWcqJ0I3+NqNXtGpRjHZ+N5JQojoWd9NffLVopDQDc7uDgMrbAhSu+a1ymCl4kH +5iEaVA/COy7BPYS5II9VoWeSePP6G4QStq9MCq5brxlYh7OOtYJGLx7h5jm6eAyj +WRxMetlYKlkVlmgmlNhGcj4mhuHhyBwwATgCNx9fwrCgd41zuFCV6HqLCytuZmpF +hPkZlm519ieeRpS+LlWk3pV1aqP38OdU/5Um/acwBsz5CZPaKxyoqojxV2tZXDiO +sBqRr1o3ayu3BCgCPgxgBXd7kOYjNrsg5F/v4jrjCvQU3NQrCpP5qhRblOP0DPeJ +hUPZQf0hZKTadTj12jEw3JjDH5UkIO1/aGPK70zKQjPljjBmfK7WHgeC9Hbz+N7w +sAbXStrr37P65ejtk9QeVe+U2jX5vjfdcFpVd7P5DE/tAgMBAAE= +-----END PUBLIC KEY----- \ No newline at end of file diff --git a/demo/keys/mainsnapshot b/demo/keys/mainsnapshot index 25667a4..fc8c1d8 100644 --- a/demo/keys/mainsnapshot +++ b/demo/keys/mainsnapshot @@ -1 +1,42 @@ -33a15998fc362bdf522b3c4ee8481a80@@@@100000@@@@175d54f89e44ed70721f538fcaa3129d2d52f454cfd390af15e7a85a10d3a12b@@@@4827c6d8545f36aa1f2f9ff3864dedba@@@@43af2d1f11b4f97dc859acc0b23a4885d62256aa2096af12727b3936a8ab647a7036b7d5eb35f870e9db8db2c7cf7930d4df11bb62ed870a3fe604175027bfa4084808bf5b2188294181977114c1d049075074ce3ba19f80c434846a319f2cbd5b49484af81ae0d953e38d57abc4720e1fb33bc8d83d33ed30791054bbea463730cce688b11d8d4f6945a11d75d5a614d549a3418e43d9b5a65405959c8b235bcecf2f383c5326f4e688860d46a0b878652c2ab05c2446af161e20928bc0bb2a597d7c17451d43216206b33f73d7d2a9c6de33fcbc49ddfad295f2ce193ce141cfefa1f5d79804ace174090a33da982164e08b8c39dbc4f78e6ab1408ad09c9473b1144fe203ea04af6d42f8 \ No newline at end of file +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: DES-EDE3-CBC,D86DB6C04E36E03D + +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 +-----END RSA PRIVATE KEY----- \ No newline at end of file diff --git a/demo/keys/mainsnapshot.pub b/demo/keys/mainsnapshot.pub index a16fb5f..9a3864d 100644 --- a/demo/keys/mainsnapshot.pub +++ b/demo/keys/mainsnapshot.pub @@ -1 +1,11 @@ -{"keyval": {"public": "497f62d80e5b892718da8788bb549bcf8369a1460ec23d6d67d0ca099a8e8f83"}, "keyid_hash_algorithms": ["sha256", "sha512"], "keytype": "ed25519"} \ No newline at end of file +-----BEGIN PUBLIC KEY----- +MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAhIRDHivZnDdhEgfHHnfn +8JnnC8wwTNVctihdNE+NJ8iOMrzjA/rKzTFXHTVhPQlPe9p9SlFVDHudDctZHF7o +7kZHzY5QumB4vgZtgl+xfUjvx0f5ovFmnANpLKB3wqpFeD/b7jxaAw3gif9MLzCr +hc6xszqNz+cKx5QELWegLKU6wC9orcJFE+V7ovP9P8B6lkIh7zt7g0Hvv9vEBi8/ +odIfLe4b8RTzF5E/lA7LCU5n3ik4rD0p9P0tqYSHYHO7z0tkb20Qo3XHqm9NoR+0 +PjEUhFjW0b2cLGpWQR+j7mjvNBlF3JqxVgqy0EXXy1gwbG2ZC7+OJYvk9w7E2ARX +WKN1rnxXqUeG0deMlXiVUFxUuvIR6/D2D+8gLF/c9OvfQoJf4+GiPjQUZXiml7Y+ +EogcePAmnwAzuNUHlBh438JFJSyU0oA1lP91mAEnguvKOVowGNG1F+Cw08BO9jJY +MUjsDgvz5el60BPS75w/atDbeUu54nXEMVqHfnVmImVTAgMBAAE= +-----END PUBLIC KEY----- \ No newline at end of file diff --git a/demo/keys/maintargets b/demo/keys/maintargets index 7b297c5..7907760 100644 --- a/demo/keys/maintargets +++ b/demo/keys/maintargets @@ -1 +1,42 @@ -62d6f0c5a07a923158d2d580f0b91f0e@@@@100000@@@@8122d4686a071f15eae9b079971d7221b88c8d19e659d01dc6922c7afabc933f@@@@1e6e8faa2b58f9d340cc21784b86f632@@@@d2cd021295d84c65448807fc2101719d508c4c03c43e5c07d27b947897ba81b9357dab3d92d95d9c49bc576e1416e5db952b0e12876c5c98ba0ab5f5862fb0c13c73c329771871be70aa1a5ad152a36813678dee7a32b13f6dcf8e5e11e3b7eb01479887da5630cbc639574b8b2b410ae033730161327948a4f0dcbc7019b8d312b6fa300439096cf33b4fef48f4761e48cb5c7f044bf292f8321cf80cb9508ad644c3ec06f4ea77991f1dec62e911f3404b19881c32264ed66106eff5eb579fa6f982faf3cccfbb202105e240c7ff188dc88df36dce4f739fd90fada515b2a197f993b19390127d03e070fb938ab62be0b534c871b0367ac16ed1054b8c3108e9ab6686088fa702ad868029 \ No newline at end of file +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: DES-EDE3-CBC,6EC450209C316D78 + +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 +-----END RSA PRIVATE KEY----- \ No newline at end of file diff --git a/demo/keys/maintargets.pub b/demo/keys/maintargets.pub index 7555f2c..94ef2e4 100644 --- a/demo/keys/maintargets.pub +++ b/demo/keys/maintargets.pub @@ -1 +1,11 @@ -{"keyval": {"public": "729d9cb5f74688ef8e9a22fae1516f33ff98c7910b64bf3b66e6cfc51559840e"}, "keyid_hash_algorithms": ["sha256", "sha512"], "keytype": "ed25519"} \ No newline at end of file +-----BEGIN PUBLIC KEY----- +MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA7iDUlRndMIpMzvZZ1DQz +vwh5rulKgclQuqrFy5K207yiy4nAZcQobr0u+HfubcnNaF4d/UXPEDb25IYd6TE5 +sWJSwsZ1MSDVdcpsnWtH+RQ83TZ7foSfKM6sUNCqhhg+GzMg8s7+ESgYQM1hYIll ++52LPk2KykoKBAib65FSCl4NNv+jdghnFv8dVjsk08ytHLz6S+oejPV6PU1kq3dl +yzPrsjbeh7jRiDpzyBSWGXZDuirI+4McziN+lD6zrQ8Mz0wbSTVPX043Yjpc3YaY +Ov2x0VRSb7syrOnA1c8PcjV9k9SH4nQd6o5ifYfcWsfSUY8EnVnxOXZZ7AHqQqNL +LLmgx4nwsag/VdpYdkb8qqwTqtRpNRUgS4C0xYQqHxCfcauy1F6y4YJeeFHyYvBB +Jr/8wylWfR9E4iKtbtVX53rD5S+I5ujtSHzrXQQuVkXTmu4rXwHN3qIr4agPtxrJ +jIqLKzrac1Iu2W+n5MVT5Kc+4yZZwjdBT3S0w95cejVhAgMBAAE= +-----END PUBLIC KEY----- \ No newline at end of file diff --git a/demo/keys/maintimestamp b/demo/keys/maintimestamp index 62bae3a..46bddda 100644 --- a/demo/keys/maintimestamp +++ b/demo/keys/maintimestamp @@ -1 +1,42 @@ -f4b7d6888e9eae79b4a9bf69400b22b9@@@@100000@@@@913ebfb85ae3683249dd7e8b6719d75d6b34e1e9f9720c39ecc1e7c3d9f58eae@@@@ac7acf8d588bbe84a0e3597aa3a91e2e@@@@d8a122717ffb34ffd41bb6b7b64392e56857a36adfcbe32a6ee51dcf808a130e3db5166a96402a23bf7f1c1e3bd87d7271a9568e15f6d9a9b47619f1c4be293dd70239836b56f8f35916a02b89fdf6fe0ae586a43b468a87b7af6228380689acf6b2ad5c3633e2b2d2463ea8b7e4f4c7ffb7912d50768c3de91aa0f24d12e93e7f2bcfc0160c0de8ec48e7131c1916cfed06691e02e46a4a13c17bf1adf4373464da150b8a84f4da7b701121b019d4a8a5b86382e677cca35e961ee2a970621367387ca8dea1187e92ed97715c51f25f1365da3595cb4b20951d60304d47087eee3fad262fe38cf5e31b8b2b65026ee6fd6399b771c6996349e2fd1d208d5651bf62252c74bf46083ad57647 \ No newline at end of file +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: DES-EDE3-CBC,C4181E3D0797177D + +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 +-----END RSA PRIVATE KEY----- \ No newline at end of file diff --git a/demo/keys/maintimestamp.pub b/demo/keys/maintimestamp.pub index 029e348..5b76bd9 100644 --- a/demo/keys/maintimestamp.pub +++ b/demo/keys/maintimestamp.pub @@ -1 +1,11 @@ -{"keyval": {"public": "97c1112bbd9047b1fdb50dd638bfed6d0639e0dff2c1443f5593fea40e30f654"}, "keyid_hash_algorithms": ["sha256", "sha512"], "keytype": "ed25519"} \ No newline at end of file +-----BEGIN PUBLIC KEY----- +MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAx12tpGGEwSNXQs2N8kDJ +ZawlaDXuG0qWlTo17jkrck58cin7dQVmIiRnh+vY+gsnNn0WxHohlicrK6HV2nXm +jb+Z2uVxtgN/dZC4saQceFbxaz4ppaqbgPRWbJ0bYM3ohY2QKFIl84KAGXScE5+d +XXGStGj7YYY/3Jy7UtXUS+5B/IgZ9W5bhuWmFlnhDpzc0bWHecxWARve4A6qxfyQ +Bv3ZS2uISp0CytprlvMZtj8v5Ks20yjxbfRwD0z9Ndg4Y/oQ1zt4y1cuBBmjtzSk +bXdlCS2cESTi2FtXNOUhK5OtYFJ9aySo1051yeID++e4i0EjsAsqb1joB/lhCHvh +2TNN3zgGphEwdn9leo+tznCyR+kG4JqAPuT0SdxOfmy/PrkfvuEQskjLyNc33Ud1 +NfnWHdS/bZ/N39ogxGEykNOzwJgLGQClKfR/Izhnjmw5+fwtViwN5UDuaNQO/H1f +llI2H+pYcZuRd3UeL0TKgou3DUPL2nCqsp0UU81Nv7ZHAgMBAAE= +-----END PUBLIC KEY----- \ No newline at end of file diff --git a/demo/keys/primary b/demo/keys/primary index 84d4665..3b61eb8 100644 --- a/demo/keys/primary +++ b/demo/keys/primary @@ -1 +1,42 @@ -6e8feeef15d6d7ee8233271eead7c4ce@@@@100000@@@@6d4e7999f75a3143066584d720b6519dc70dc4767581fd31106075073a2d22dc@@@@dec0a4434f1820f7dbd9ff850d87a4a0@@@@52d173f5797cd473d53847533e93219225b62810263cd18b8f60dc4c7be4df732041d795f41485cbf19aed401ca1dbebbc1e9b8370be7f602a970176c656a1d6aaa5f2e759757926479a623783b88bc1755fa481d8ff7e625ae7e8bd84c8418bb2dfb5ff351d9969fd6e3b86f9e38921cf00ed69176d930a6982b758cc056147f150c264ea46017d80ce0d6c45523efad10d49bd9fe7436196284745391386c0bb284fa54836ecf81b9b23ef5fe83fcfe79ece1bf5d4b62377e04108112883805ab94a998d45a42766772c52461a72fdef7865885eb17366ffb7d5bb2c82bc1e8124c9a6ba42117b7859faa58adbf660653874138f2c76b1e41468f424dddef9340e78f0755a8e19df9d9be6 \ No newline at end of file +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: DES-EDE3-CBC,A4E4F8E7CF926B5C + +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 +-----END RSA PRIVATE KEY----- \ No newline at end of file diff --git a/demo/keys/primary.pub b/demo/keys/primary.pub index bc57f4c..c38259c 100644 --- a/demo/keys/primary.pub +++ b/demo/keys/primary.pub @@ -1 +1,11 @@ -{"keyid_hash_algorithms": ["sha256", "sha512"], "keyval": {"public": "a1293426fcf4ce6f38135eb72bf89fedfdcba1b732779683b951d71a0b9e89a2"}, "keytype": "ed25519"} \ No newline at end of file +-----BEGIN PUBLIC KEY----- +MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAxx4H7OQQB8LcAOv/CUrL +eBCXjB6GdsdpU1zAWfoXSuIxGyr1NrICl4ltzIUlijvzoYwhYfQOTYgicMrVkVcG +Lw8CaJSoijL1Thw1+/BOEGQVbgMKXFBXcb7/CVy+YqnAokFMMCAS1DXuLhZmhlff +cZGxORz50rBWBRrdsQutCcd/0/d2LD8qUcscP4uFPhIIQbhtPYLM3ludazRA3w6o +4JPVL2KYHA34maP0KK26aED/k5G0DaHJM/n14fxIYMPtczMH3cre4m/AlaSvzQlW +Vv4eEKq/Q0iaHdSjO458Yub9JbDxzE84WZQzw9mcanyprrApH/OShavgrdgF90pY +qtfAOCqjvinGyxZhMrt+rBUcMWKbZYtpV507GGM5WiJHhaWfidneFoqImT8n0sQk +d+j/Kz1wBNJggfIPH9bSFhxh1uN1jFi+/Q6sqGSgWH5S5RbXDxpAcpTuRiBOyBN+ +7OFkqPFkDyLzwWspyd+b7ivgD2dYgaAD4Ud7EaUNAsh5AgMBAAE= +-----END PUBLIC KEY----- \ No newline at end of file diff --git a/demo/keys/secondary b/demo/keys/secondary index 7adc6aa..dfbb883 100644 --- a/demo/keys/secondary +++ b/demo/keys/secondary @@ -1 +1,42 @@ -0f3a7539d153bdc221561d0060c5a1d0@@@@100000@@@@d956c47167fda8e315a7d6fbbdec2b2fd3f62ba338d205f01905a765e553e184@@@@f79e8c6ab9f7c343c704e114ff1fcfb3@@@@130ebcfecbe1e80502784681219cf4d70b26ee47f39da3526149bdf10a1e750d6e532e9ef129e26a4698545b97363a6f9e4132fcaef4abda179bb46ed036dd34c18efee4ff4fc7c90eeb26ecaccdeba0706879185c5724d5b7091020bed77b758eef08f83095ce848cd5962d296175a87a8235902b6dbcafa0f1544f1445cd146f92eb3b79da9c323108a050de9c953d1473a954bd8d419e60981790087c5bfaff09730c9c079e582e4f51f658c509149f7f97e6a343a410883546ed3d455f4a0920b1c5c22026196ed44823e67ddb350fa0dfa6dd13f5739b6fffc1c1da1f12e525ea78449319e5fad6ba9f1249301c1587357a64db1aa8b58495fd07db457151047ed2fc69f96d839d393d \ No newline at end of file +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: DES-EDE3-CBC,8AF0A4C34E5F0405 + +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 +-----END RSA PRIVATE KEY----- \ No newline at end of file diff --git a/demo/keys/secondary.pub b/demo/keys/secondary.pub index 3509775..55d2923 100644 --- a/demo/keys/secondary.pub +++ b/demo/keys/secondary.pub @@ -1 +1,11 @@ -{"keytype": "ed25519", "keyid_hash_algorithms": ["sha256", "sha512"], "keyval": {"public": "6b3ce84f9de678c1c4555607055398ebb2369c84800742773165c5854660c433"}} \ No newline at end of file +-----BEGIN PUBLIC KEY----- +MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA3eLCrjVUjsgG25HXXNZp +A55d2fUl9v7yXvugm5zhvTdUIplCvdCg987YTMuWyi9CNhLLFWxiUM1/UBdoMQ96 +wW6l8HigFmThqjepESXoDS7ETlNvY/dxifyosH6g9CQZbZh6Fkry+UIl8v8N/xYU +hWNQ0h618Bk3s6EBwkhDY/JJBg0yNqMWhhSqlykGeTlZ6Bl+06RUg5AaXTUw0q7f +G/Nji/QXre4cPQs1J4rpyFDleQc6DLlbX+ZcNWS5tgVkE5NnIgi16EDkzVM72TlZ +AkdZeCqWJJVnw1omJplMSCYRo+ifvpW8j7gblYQKV17wFIhCgKlW6p3vL3BZX8ec +wB0AbOFDA3P1Le4cn9mZDlkTFLItNZsvtIA2/+q88IGncQ2TdT8RlVn1GHEGDgPH +QFf2jxQyPZSMmsu6AjTKUyu9KfkdrrEdM1LwH8PZRlbCZ0od1dyZgqPFQ6P3lLor +KRNUzKNiHhUaUGG07SI9w+vp9dou93HDy+xuKEtdGPFJAgMBAAE= +-----END PUBLIC KEY----- \ No newline at end of file diff --git a/demo/keys/secondary2 b/demo/keys/secondary2 deleted file mode 100644 index a582b83..0000000 --- a/demo/keys/secondary2 +++ /dev/null @@ -1 +0,0 @@ -a549d5664c923d79470b98210352a483@@@@100000@@@@dc8142ed559737c28f258918d281510b64c01ce83b22ff7682864b1655c3782d@@@@ff5975f99e1b38eaf15119d871ee2237@@@@90b5d9f577db6181864777d36dec7e2f7c46a12abaf0699077939337850cd1f4e260e268eee37da6de39ab2a12b75d36fadb7c0a3f42f5712f33e73b2206a0102a607719ceffe08d2a55c3db78325a1ada6aca7bf33a541bf24e4c2a8d359e09cae7da87d967bb80238a03ae683bae873803e7db76870738825b9391eb08bf2a4c10ff22bbb790ed2b09523166f846635b21137fcddfca51bf92516f8358bb59bca9c683eb6a5a56bd6282b8e8044804e418e4cc3d74622a5308163746e2402b9c5c711353080ee11f4667f3394d7ff29625d0cde8699e6772353bc1fa91a458c30c0de84ac282acc514d4784161047a778803aedcf7618f9bbd85b4110a47e1076c7ae4a1dba81885a00ecf \ No newline at end of file diff --git a/demo/keys/secondary2.pub b/demo/keys/secondary2.pub deleted file mode 100644 index acf6c4e..0000000 --- a/demo/keys/secondary2.pub +++ /dev/null @@ -1 +0,0 @@ -{"keytype": "ed25519", "keyid_hash_algorithms": ["sha256", "sha512"], "keyval": {"public": "3c231faa6446e53bf1ea8b038cdd37b89c8e63e369ca229ef183b2fab9d991d5"}} \ No newline at end of file diff --git a/demo/keys/secondary3 b/demo/keys/secondary3 deleted file mode 100644 index cc3b7ce..0000000 --- a/demo/keys/secondary3 +++ /dev/null @@ -1 +0,0 @@ -4cbd083adaf3b1ad94955fd40f5dae85@@@@100000@@@@5213f84debcb7522a7868e35f7df7ee1c986bc7a96b5bbfaa92ac2559d68a8f0@@@@3e79bc3575449a6a0fbfcda43d9f3cef@@@@677db099e62be715417e569cc000d7d5566e6ed74af8279d69db3a7f175b3365355ddc4dd6cc24112a5359351af5844511411e1e8639185a18ca9f19e87231ef0720f18e51f6cc3a15f6aebf6e40a61b2526eafe63acb15a9313a4c2ec3a5386b3b8c301ef96d11754c3fc0963f3f562d56bb5362277d4115c17696081b969672cee4c344db34b52a552e0aeacd0aa65fd6c7b776b1865b22d1554bd488c2e8271eb6d15ed59d70aa539d7656ff42ca852d23ea5a0cea5f72adbbf4f2e4616970bf587749d820a8c5f63892bb1ea1c1d82065b125d0116e7ef9886b81b9622420bb85abd0e309c81d43587dc4c201d9ed19a9f350bcdf6bc71cd502197c3c649cf1cc3c6e049cacab8f4efdf \ No newline at end of file diff --git a/demo/keys/secondary3.pub b/demo/keys/secondary3.pub deleted file mode 100644 index 7143591..0000000 --- a/demo/keys/secondary3.pub +++ /dev/null @@ -1 +0,0 @@ -{"keytype": "ed25519", "keyid_hash_algorithms": ["sha256", "sha512"], "keyval": {"public": "b7efcc40fbadb566d5e154ebdc86801f8883c9ded040e86491e3125129463baa"}} \ No newline at end of file diff --git a/demo/keys/timeserver b/demo/keys/timeserver index 5280901..37be9a8 100644 --- a/demo/keys/timeserver +++ b/demo/keys/timeserver @@ -1 +1,42 @@ -4448db87c1fcda5be528380681ee3ce8@@@@100000@@@@a007777e85a5c55be38dff2f9e477a35bd2c302983250c4f0a9bac7ec382efcb@@@@67eb0293475d14ff806a1c654e4e0a5c@@@@702c06e273ffe0afee3e89020e8af6daadf709a5234b4af7ab2465ff28590633bbd71e3bf5860284748d1f447f60478c1ed04931e2341fdece463500f59b4dcb55cae59abe80c5d59f58dad1417baf0cf0e6b0079219bbbc5358f64fe0bff3f050ff4b323ff9f86108501e9f4d9259203613e712c054e4dce54c0c94f5b4b32ef567970d185ff0ac33e2afa5b4415a5b2f91ed38cc06b91993486374356e75374f4fbffc21fbf522229b1ad0e5844dc4b044c81bac027a66ff76c4c56c1819827e46bb07e59141154e3001ed02accde18fc4f96471aa3ac3896fb279bb9bd1c6c7f02defeab9c8693ed5c7291617f87183ad9a89165d8d31ece5d526bd32844d3da2588ea86009a7fe79d5f0 \ No newline at end of file +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: DES-EDE3-CBC,DE84D840D02B15DE + +ypus4RC7+wy6z/HG4oRKsF/I6IPTSxykNHDmn/C89Vu/0QQb9j52LSRo76JQfTcy +PmpMo0MulbHvN9Ko+xYGHUrE2b5wV6Bif3x2k0CqSYB9ozzc2idKmwgo57o1GXc0 +GaCJQ8fFWkrL4prfIhpAiCTkvnBRacsMHuRe84b/PmBfgrT0N4OWVH/tbrP/EDtx +ZIc+izRP8AhD/Orcg3fjbcyar435xf6HeBWn76+MfZ+gcHZLwgguXSkfRuHGJWod +/7ha3fpdE2OM8ai0Q1LbZTtaDRd5UC4ReDK1SH52ZDmQYF42r3Thb7OGa6ibvmoC +pms2MzA6NGyVZ6SZ2lBKpM4GuWcQMR1WfecAyHg7cIgcQc2+7wjXDir6pyX2fBah +oFSAcxLbXmvLu4kzD+Y5x/JEUkCHRQedwtXeMcdUaIhFAN+mLDj/IsZTN/Y0ODO3 +jbsKsCsjoWQmvmBZKHQyiYlsQvd3x7XidqeJbZxkWYd8WrQY4oWSmJ3HYuhhTGoh +3RTuZUCtXxjCgR/a4PHWnLaQg4DJc+EruGPoBUTVlvvUtcMIq1d3XpRmAAEccKx5 +7UhU+Umefpt4oH9xNz2gyS6FIw+Lh1k5HG0k9xLx0+Ch+xy0PdIH2KJJhrLg6NhW +z0Bf5esomJSXLAsDB4wl/tr4ULd/9U9gsfcej9QNJUaTQk/z6hbpcHtlceI+GCZM +hVQkmyN6e05iYGzfDvPFEIkl2FduNfVgMFwKDa/ugMmmrDb/9QdMLzbcgxBq1eHV +vE46UMhMlQ6aOxLIXXFadhP57IHlqgt5v2+gUujy1hX9Gsjxf8ssQu3oFLrE0Mo7 +RSKjXbzn/fMjuoCCd7xQRT3u5Myw9LTkv/gzv7rfsE/9MLSEg04Et0PGOz4V/2hW +Tu4aElYdijJMft8ZBbxTM4YOCDJXV6oyZ1HHs9ra7SvyWHJLrr1sLxzWaZOV6hQN +QzQAG5/7dpjmHtQ9u04ex0idM5J4ytLpUeNS6EJGXs1+hEVUFPPhQZuJqfdrU6fS +6YsW+wc8OtnD6F9RuLm4poJG1ZWM3Dw/H+ePi8Pu+T13z7xhBRjXRsU2YQ7qozw2 +xOf181eEX0Cn41Vyt0vUQCLWQw8COOR/+xi0z1qwxtBN5uFX79jSfIOB+Gq8VtfF +sz0U8p3Y4n++h6RTzPEYwT8FvAaHMMf5dY8Y25H8mBqyaXuYGSN1yhqTwaUpluTh +q3pC+HKnKw38570jFm+rWJlANWv2M5hhoN6UPADc8S6yKjrIcMn+cwPsSdHMx3ZJ +y1+r+dTVCIsexAP8DGoFWjQ4CByqw8v8ynLm/t3C1A3tgbSYqVYCHMVRLBM8k0s6 +otXe/cY+bnZVxUIax68GxixLDrUBkr1DWw+CeBqa7DfJ3mByoGGzKuXsD2vkJ0Uq +ddH5I570zMk77xjqXTo9xapn8zF+ewUM19LTD2f6aVmU2Nj693iS5mbY8d0br2VY +htsWySlXRc2yvIuRTrAOWq+adQgObnXOa0kpTt++jveC8GHMuuGDIUdu8ZSGaknd +dDQeND4Y61PbOXeUI0sMb6PVz3TpSdFY/QwsMiYchN3eSVkIXkZk2QJVPu4Yp8nb +4xTTACmFE8BSGr8cUcTFcWk498/r2l8ZCSQjfP37Po0zxYCCcPT6MwZEua2iHElL +6e5b/O3A6W40/Vn/do/oGK70PAd9iAgMR4+kdSaiJTLF6gTZfjrjmCG7tl9/UtWR +nDZX0UwJAuWku/V6JQustiCmngOfKwS3mkFKu7ObEPoTV8MP5ZCV0OYRkZF1IwaZ +ELaQwgMlSFS5hYoA+InzpyBx9WIwwFDUSrztbNY+yACn71Zu3eszwEmLT+lGyKPM +RWFppm3Q0zB7lN6tX2BW3l9QQKSQm2feOH3GLuRc/m0cXPZSE7rBpIZYvABr5lod +mAsjxF+zqibYM2fRKfr7Lf9MDYAcaUHnZcvfGTBtD3E2ag69lvxldFPRgvuG91VR +2D3ZsqVic+ZtGL7IPypT6jzXHp8Ub5GyxKRMUAiFITRJnx45lRT843qOUvT0+6fW +1J4+9hfoJpKubWnTVQvSWreuQP4Fb+hRDyE6+H/Y4ATnwbdX/PzhDcnqo/uGC4SW +iCFjIj8UT7iC4io2RoXbEhKnCfJDwupeZpK0EL2lZLJbKXtdCDhzLfGtdH5yp/Fr +ynJWUTNXDNces5na2nxJAQmBLXSsfZl6i50hYuaT/SOjHqnU2oMkwyuSzuhbZepg +EbchXDVMy/gf+QzoejsUs6JexKwVatITq0/68lUHxPEVC3qPHFTNcHbzIDnkF80d +c/C954yz14/fPtktmu3nqBLgmWK9Qnps89U+3J0UFOrkzmF6ztl1zxkYXgpf3Vmf +-----END RSA PRIVATE KEY----- \ No newline at end of file diff --git a/demo/keys/timeserver.pub b/demo/keys/timeserver.pub index f900207..c7ab7b1 100644 --- a/demo/keys/timeserver.pub +++ b/demo/keys/timeserver.pub @@ -1 +1,11 @@ -{"keyid_hash_algorithms": ["sha256", "sha512"], "keyval": {"public": "5d7750b208dfc7ade8f6106b9c3fa25162d5a184f302161e429f19a79e66a908"}, "keytype": "ed25519"} \ No newline at end of file +-----BEGIN PUBLIC KEY----- +MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA8y0+Rlbi+P9JzrM/w5VR +5LH9nvZC/4KMbqHkqdQkbE9+Z66KvTM/d1FaayyDagbJLMfU0PtCMKRPYB5Zkuuj +35WIWVIeCgo4EFyFnuVkObm2V1C0WNEAF/lblRnt9dwdb7tAHjh6dqnWNzv7mZAM +G0vvGos9Jk/B5PwziW123tsU1vXlh8UgeqjBqLR7Q5kSVbzwdk50mQgvv2NGBuIo +lEOBzH3koCiolnnNA2Fki7gYVvLGO4O578btKRtNrb+MTRbpIJlbrvTkNcAxWYTq ++Q53gursYZOlf/VwbV1EKP0AbWWdrUxfeGgTzXP1h9Vhpfdr/8T4irg3vMb+DnMB +244iPNBNoPwc5cTdQyVO2kOZnEHqMHM/l5n/VyaGDcSkUX9g/C35ULjdPqtNXiEq +1eWLbJCk/wpDh1dmj2GDs9UtYntUh9D2Otk/6bVP7/tboyDRUaDzCgIeVhB7GU8q +13ukT4dUluHXUsKPPBW1ioyEaHO/FX04fIwKdCx1MRCfAgMBAAE= +-----END PUBLIC KEY----- \ No newline at end of file diff --git a/uptane/__init__.py b/uptane/__init__.py index 4227595..1db0349 100644 --- a/uptane/__init__.py +++ b/uptane/__init__.py @@ -12,7 +12,7 @@ # Configure TUF to use DER format instead of Python dictionaries / JSON. import tuf.conf -tuf.conf.METADATA_FORMAT = 'der' +tuf.conf.METADATA_FORMAT = 'json' # FIXME: I actually think other modules rely on the `os` imported here and # not just for getcwd diff --git a/uptane/common.py b/uptane/common.py index 7e5b2be..553640d 100644 --- a/uptane/common.py +++ b/uptane/common.py @@ -20,6 +20,7 @@ # imports asn1_codec. import uptane.encoding.asn1_codec as asn1_codec import uptane.formats +from pprint import pprint # Both key types below are supported, but issues may be encountered with RSA # if tuf.conf.METADATA_FORMAT is 'der' (rather than 'json'). @@ -398,6 +399,58 @@ def canonical_key_from_pub_and_pri(key_pub, key_pri): key['keyval']['public'] key['keyval']['private'] (for key_pri) """ + assert key_pub['keytype'].encode('ascii','ignore') == \ + key_pub['keytype'].encode('ascii','ignore') + + if key_pub['keytype'].encode('ascii','ignore') == 'rsa': + key = rsa_canonical_key_from_pub_and_pri(key_pub, key_pri) + else: + key = ED25519_canonical_key_from_pub_and_pri(key_pub, key_pri) + + return key + + + +def rsa_canonical_key_from_pub_and_pri(key_pub, key_pri): + """ + Formats the RSA private and public key into the right key format. + Hard-codes the hashing algorithms to be SHA-256 and SHA-512 for + consistency across RSA and ED25519 keys. + """ + key = { + 'keytype': key_pub['keytype'], + 'keyid': key_pub['keyid'], + 'keyval': { + 'public': key_pub['keyval']['public'], + 'private': key_pri['keyval']['private'] + }, + 'keyid_hash_algorithms': [u'sha256', u'sha512']} + tuf.formats.ANYKEY_SCHEMA.check_match(key) + print("RSA KEY\n") + pprint(key) + return key + + + +def fix_string_formatting_for_rsa_keys(key): + """ + Default format of an RSA Key: + + '-----BEGIN PUBLIC KEY-----\n + .............................. + \n-----END PUBLIC KEY-----' + + The function strips the BEGIN PUBLIC KEY and END PUBLIC KEY line + to return just the key. + """ + return key[key.find("\n"):key.rfind("\n")] + + + +def ED25519_canonical_key_from_pub_and_pri(key_pub, key_pri): + """ + Formats the ED25519 private and public key into the right key format. + """ key = { 'keytype': key_pub['keytype'], 'keyid': key_pub['keyid'], @@ -405,6 +458,7 @@ def canonical_key_from_pub_and_pri(key_pub, key_pri): 'public': key_pub['keyval']['public'], 'private': key_pri['keyval']['private']}, 'keyid_hash_algorithms': copy.deepcopy(key_pub['keyid_hash_algorithms'])} + tuf.formats.ANYKEY_SCHEMA.check_match(key) return key @@ -412,7 +466,6 @@ def canonical_key_from_pub_and_pri(key_pub, key_pri): - def public_key_from_canonical(key_canonical): """ Given a key that includes all public and private key information, return a From 8fc9d8b90bb25b0353437be6d5922942674930cc Mon Sep 17 00:00:00 2001 From: Shikhar Sakhuja Date: Wed, 2 Aug 2017 13:35:56 -0400 Subject: [PATCH 03/14] Changed use_new_keys to False Using already produced RSA Keys --- demo/demo_director.py | 2 +- demo/demo_image_repo.py | 2 +- demo/demo_primary.py | 4 ++-- demo/demo_secondary.py | 4 ++-- demo/demo_timeserver.py | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/demo/demo_director.py b/demo/demo_director.py index 57787b1..3d58218 100644 --- a/demo/demo_director.py +++ b/demo/demo_director.py @@ -62,7 +62,7 @@ director_service_thread = None -def clean_slate(use_new_keys=True): +def clean_slate(use_new_keys=False): global director_service_instance diff --git a/demo/demo_image_repo.py b/demo/demo_image_repo.py index f96c0a3..a2e1fa0 100644 --- a/demo/demo_image_repo.py +++ b/demo/demo_image_repo.py @@ -44,7 +44,7 @@ xmlrpc_service_thread = None -def clean_slate(use_new_keys=True): +def clean_slate(use_new_keys=False): global repo diff --git a/demo/demo_primary.py b/demo/demo_primary.py index ea63132..fc34cf9 100644 --- a/demo/demo_primary.py +++ b/demo/demo_primary.py @@ -86,7 +86,7 @@ def clean_slate( - use_new_keys=True, + use_new_keys=False, # client_directory_name=None, vin=_vin, ecu_serial=_ecu_serial, @@ -246,7 +246,7 @@ def close_can_primary(): -def load_or_generate_key(use_new_keys=True): +def load_or_generate_key(use_new_keys=False): """Load or generate an ECU's private key.""" global ecu_key diff --git a/demo/demo_secondary.py b/demo/demo_secondary.py index c82fe9b..f5c7e2d 100644 --- a/demo/demo_secondary.py +++ b/demo/demo_secondary.py @@ -63,7 +63,7 @@ def clean_slate( - use_new_keys=True, + use_new_keys=False, #client_directory_name=None, vin=_vin, ecu_serial=_ecu_serial, @@ -246,7 +246,7 @@ def submit_ecu_manifest_to_primary(signed_ecu_manifest=None): -def load_or_generate_key(use_new_keys=True): +def load_or_generate_key(use_new_keys=False): """Load or generate an ECU's private key.""" global ecu_key diff --git a/demo/demo_timeserver.py b/demo/demo_timeserver.py index a4db1f8..7de7487 100644 --- a/demo/demo_timeserver.py +++ b/demo/demo_timeserver.py @@ -43,7 +43,7 @@ class RequestHandler(xmlrpc_server.SimpleXMLRPCRequestHandler): -def load_timeserver_key(use_new_keys=True): +def load_timeserver_key(use_new_keys=False): if use_new_keys: demo.generate_key('timeserver') # Load in from the generated files (whether new or old). @@ -73,7 +73,7 @@ def get_signed_time_der_wrapper(nonces): -def listen(use_new_keys=True): +def listen(use_new_keys=False): """ Listens on TIMESERVER_PORT for xml-rpc calls to functions: - get_signed_time(nonces) From ecae60a3cc26212765561289cacdd0506f2175cc Mon Sep 17 00:00:00 2001 From: Shikhar Sakhuja Date: Wed, 2 Aug 2017 14:31:31 -0400 Subject: [PATCH 04/14] WIP Moving to a different branch to check key format submission with ed25519 --- demo/demo_director.py | 7 +++++++ uptane/services/inventorydb.py | 8 ++++++++ 2 files changed, 15 insertions(+) diff --git a/demo/demo_director.py b/demo/demo_director.py index 3d58218..5348807 100644 --- a/demo/demo_director.py +++ b/demo/demo_director.py @@ -53,6 +53,9 @@ import atexit # to kill server process on exit() +import Crypto.Cipher as cipher +import Crypto.PublicKey as public_key + KNOWN_VINS = ['111', '112', '113', 'democar'] # Dynamic global objects @@ -592,6 +595,10 @@ def add_target_to_director(target_fname, filepath_in_repo, vin, ecu_serial): # TODO: This should probably place the file into a common targets directory # that is then softlinked to all repositories. shutil.copy(target_fname, destination_filepath) + if ecu_serial in inventory.get_registered_ecu_serials(): + public_key_for_ecu = get_ecu_public_key(ecu_serial) + + print("PUBLIC KEY FOR ECU\n", public_key_for_ecu) print('Adding target ' + repr(target_fname) + ' for ECU ' + repr(ecu_serial)) diff --git a/uptane/services/inventorydb.py b/uptane/services/inventorydb.py index 6861cc3..8ec2ead 100644 --- a/uptane/services/inventorydb.py +++ b/uptane/services/inventorydb.py @@ -397,3 +397,11 @@ def check_ecu_registered(ecu_serial): if ecu_serial not in ecu_public_keys: raise uptane.UnknownECU('The given ECU serial, ' + repr(ecu_serial) + ', is not known.') + + + +def get_registered_ecu_serials(): + """ + Returns a list of all the ecu_serials that have been registered + """ + return ecu_public_keys.keys() \ No newline at end of file From 151495a05b4b5f02e9983c7eceec8cf672904ac7 Mon Sep 17 00:00:00 2001 From: Shikhar Sakhuja Date: Tue, 8 Aug 2017 16:57:38 -0400 Subject: [PATCH 05/14] - Images are encrypted using AES - 128 - Keys of AES - 128 are randomly generated and are encrypted using the RSA public key of the designated ECU - Working on adding the encrypted symmetric key and hashes of the encrypted images in the metadata that the ECUs parse --- demo/demo_director.py | 25 +++++++++++------ uptane/services/director.py | 53 +++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 8 deletions(-) diff --git a/demo/demo_director.py b/demo/demo_director.py index 5348807..6a1b3d2 100644 --- a/demo/demo_director.py +++ b/demo/demo_director.py @@ -53,9 +53,6 @@ import atexit # to kill server process on exit() -import Crypto.Cipher as cipher -import Crypto.PublicKey as public_key - KNOWN_VINS = ['111', '112', '113', 'democar'] # Dynamic global objects @@ -584,23 +581,35 @@ def add_target_to_director(target_fname, filepath_in_repo, vin, ecu_serial): if vin not in director_service_instance.vehicle_repositories: raise uptane.UnknownVehicle('The VIN provided, ' + repr(vin) + ' is not ' - 'that of a vehicle known to this Director.') + 'that of a vehicle known to this Director.') repo = director_service_instance.vehicle_repositories[vin] repo_dir = repo._repository_directory print('Copying target file into place.') destination_filepath = os.path.join(repo_dir, 'targets', filepath_in_repo) + print(destination_filepath) # TODO: This should probably place the file into a common targets directory # that is then softlinked to all repositories. - shutil.copy(target_fname, destination_filepath) + #shutil.copy(target_fname, destination_filepath) + if ecu_serial in inventory.get_registered_ecu_serials(): - public_key_for_ecu = get_ecu_public_key(ecu_serial) + print(inventory.get_ecu_public_key(ecu_serial)) + public_key_for_ecu = \ + inventory.get_ecu_public_key(ecu_serial)['keyval']['public'] + + encrypted_target_data, encrypted_aes_key = \ + director_service_instance.encrypt_target( + target_fname, public_key_for_ecu) + + with open(destination_filepath, 'w') as f: + f.write(encrypted_target_data) + - print("PUBLIC KEY FOR ECU\n", public_key_for_ecu) + print("PUBLIC KEY FOR ECU\n", public_key_for_ecu) - print('Adding target ' + repr(target_fname) + ' for ECU ' + repr(ecu_serial)) + print('Adding target ' + repr(target_fname) + ' for ECU ' + repr(ecu_serial)) # This calls the appropriate vehicle repository. director_service_instance.add_target_for_ecu( diff --git a/uptane/services/director.py b/uptane/services/director.py index 3a61dba..1198f00 100644 --- a/uptane/services/director.py +++ b/uptane/services/director.py @@ -43,6 +43,9 @@ import os import hashlib +from Crypto.Cipher import AES, PKCS1_OAEP +from Crypto.PublicKey import RSA +from Crypto import Random log = uptane.logging.getLogger('director') log.addHandler(uptane.file_handler) @@ -562,3 +565,53 @@ def analyze_vehicle(self, vin): + def AES_Cipher(self, file_to_encrypt): + """ + Uses AES-128 to encrypt the contents of the target file. + Returns the AES_Key and Encrpyted Payload. + Creates a randomized 16 bit key everytime an ECU target is assigned. + """ + aeskey = Random.new().read(16) + #print('1',len(aeskey)) + iv = Random.new().read(AES.block_size) + #print('2',iv) + cipher = AES.new(aeskey, AES.MODE_CFB, iv) + #print('3',cipher) + msg = iv + cipher.encrypt(open(file_to_encrypt, 'r').read()) + print('4', msg) + return (msg, aeskey) + + + + + def encrypt_aes_key(self, public_key, aes_key): + """ + Uses RSA to encrypt the AES Key. + Encrypts the AES Key using the public key of the given primary/secondary. + Returns the key which will be decrypted by the designated ECU using + its private key. + """ + print(public_key) + public_rsa_key = RSA.importKey(public_key) + #print('5',rsakey) + public_rsa_key = PKCS1_OAEP.new(public_rsa_key) + #print('6',rsakey) + encrypted = public_rsa_key.encrypt(aes_key) + print('7',encrypted) + return encrypted + + + + + def encrypt_target(self, target_fname, ecu_public_key): + """ + Encrypts a target using the RSA Public Key for the ecu + Returns an encrypted file saved as the target + """ + encrypted_data, aes_key = self.AES_Cipher(target_fname) + encrypted_aes_key = self.encrypt_aes_key(ecu_public_key, aes_key) + return (encrypted_data, encrypted_aes_key) + + + + From eb31a559bb82716781fc5a6a98e176a73a3931ab Mon Sep 17 00:00:00 2001 From: Shikhar Sakhuja Date: Wed, 9 Aug 2017 16:37:35 -0400 Subject: [PATCH 06/14] - Metadata generated now reflects hashes of both encrypted and unencrypted target - Custom field includes encrypted file hashes sha256 and sha512; a boolean encrypted_image option; an encrypted symmetric key - the encrypted image and key are both converted from binary to hex and will be needed to be converted back for decryption to work. --- demo/demo_director.py | 15 ++++++++++++--- uptane/services/director.py | 34 +++++++++++++++++++++++++++------- 2 files changed, 39 insertions(+), 10 deletions(-) diff --git a/demo/demo_director.py b/demo/demo_director.py index 6a1b3d2..0203344 100644 --- a/demo/demo_director.py +++ b/demo/demo_director.py @@ -38,6 +38,7 @@ import uptane.services.director as director import uptane.services.inventorydb as inventory import tuf.formats +import tuf.hash import uptane.encoding.asn1_codec as asn1_codec @@ -599,21 +600,29 @@ def add_target_to_director(target_fname, filepath_in_repo, vin, ecu_serial): public_key_for_ecu = \ inventory.get_ecu_public_key(ecu_serial)['keyval']['public'] - encrypted_target_data, encrypted_aes_key = \ + #hashes['unencrypted_file_hashes'] = \ + #director_service_instance.generate_hashes(target_fname) + + encrypted_target_data, encrypted_aes_key= \ director_service_instance.encrypt_target( target_fname, public_key_for_ecu) with open(destination_filepath, 'w') as f: f.write(encrypted_target_data) + encrypted_hash = director_service_instance.generate_hashes( + destination_filepath) print("PUBLIC KEY FOR ECU\n", public_key_for_ecu) + print("Encrypted AES Key", encrypted_aes_key) + print('Adding target ' + repr(target_fname) + ' for ECU ' + repr(ecu_serial)) # This calls the appropriate vehicle repository. - director_service_instance.add_target_for_ecu( - vin, ecu_serial, destination_filepath) + director_service_instance.add_target_for_ecu( + vin, ecu_serial, destination_filepath, file_hashes = encrypted_hash, + encrypted_symmetric_key = encrypted_aes_key) diff --git a/uptane/services/director.py b/uptane/services/director.py index 1198f00..1d91f3d 100644 --- a/uptane/services/director.py +++ b/uptane/services/director.py @@ -46,6 +46,7 @@ from Crypto.Cipher import AES, PKCS1_OAEP from Crypto.PublicKey import RSA from Crypto import Random +import binascii log = uptane.logging.getLogger('director') log.addHandler(uptane.file_handler) @@ -524,7 +525,7 @@ def create_director_repo_for_vehicle(self, vin): - def add_target_for_ecu(self, vin, ecu_serial, target_filepath): + def add_target_for_ecu(self, vin, ecu_serial, target_filepath, file_hashes = None, encrypted_symmetric_key = None): """ Add a target to the repository for a vehicle, marked as being for a specific ECU. @@ -547,9 +548,18 @@ def add_target_for_ecu(self, vin, ecu_serial, target_filepath): # elif ecu_serial not in inventory.ecu_public_keys: # raise uptane.UnknownECU('The ECU Serial provided, ' + repr(ecu_serial) + # ' is not that of an ECU known to this Director.') - - self.vehicle_repositories[vin].targets.add_target( - target_filepath, custom={'ecu_serial': ecu_serial}) + custom_dic = {} + if file_hashes == None and encrypted_symmetric_key = None: + self.vehicle_repositories[vin].targets.add_target( + target_filepath, custom={'ecu_serial': ecu_serial}) + else: + custom_dic['encrypted_images'] = True + custom_dic['ecu_serial'] = ecu_serial + custom_dic['encrypted_file_hashes'] = file_hashes + custom_dic['encrypted_symmetric_key'] = encrypted_symmetric_key + print("Custom Dictionary", custom_dic) + self.vehicle_repositories[vin].targets.add_target( + target_filepath, custom = custom_dic) @@ -569,7 +579,7 @@ def AES_Cipher(self, file_to_encrypt): """ Uses AES-128 to encrypt the contents of the target file. Returns the AES_Key and Encrpyted Payload. - Creates a randomized 16 bit key everytime an ECU target is assigned. + Creates a randomized 16 bit key everytime an ECU target is assigned. """ aeskey = Random.new().read(16) #print('1',len(aeskey)) @@ -579,7 +589,7 @@ def AES_Cipher(self, file_to_encrypt): #print('3',cipher) msg = iv + cipher.encrypt(open(file_to_encrypt, 'r').read()) print('4', msg) - return (msg, aeskey) + return (binascii.hexlify(msg), aeskey) @@ -598,7 +608,15 @@ def encrypt_aes_key(self, public_key, aes_key): #print('6',rsakey) encrypted = public_rsa_key.encrypt(aes_key) print('7',encrypted) - return encrypted + return binascii.hexlify(encrypted) + + + + def generate_hashes(self, filename): + return {'sha256': tuf.hash.digest_filename( + filename, algorithm = 'sha256').hexdigest(), + 'sha512':tuf.hash.digest_filename( + filename, algorithm = 'sha512').hexdigest()} @@ -610,6 +628,8 @@ def encrypt_target(self, target_fname, ecu_public_key): """ encrypted_data, aes_key = self.AES_Cipher(target_fname) encrypted_aes_key = self.encrypt_aes_key(ecu_public_key, aes_key) + print('encrypted_data \n', encrypted_data, + 'encrypted_aes_key\n', encrypted_aes_key) return (encrypted_data, encrypted_aes_key) From 3376f1eb010bf839172a55d1d27bae9588fe17d1 Mon Sep 17 00:00:00 2001 From: Shikhar Sakhuja Date: Wed, 6 Sep 2017 15:23:46 -0400 Subject: [PATCH 07/14] Changed the director and its demo to make a new folder where the encrypted files will be stored --- demo/demo_director.py | 87 ++++++++++++++++++++++++++++++++----- uptane/common.py | 3 +- uptane/services/director.py | 8 ++-- 3 files changed, 82 insertions(+), 16 deletions(-) diff --git a/demo/demo_director.py b/demo/demo_director.py index 0203344..25704fe 100644 --- a/demo/demo_director.py +++ b/demo/demo_director.py @@ -182,6 +182,9 @@ def write_to_live(vin_to_update=None): os.path.join(repo_dir, 'metadata.livetemp'), os.path.join(repo_dir, 'metadata')) + refresh_metadata_for_encrypted_images_folder(vin) + + @@ -593,25 +596,22 @@ def add_target_to_director(target_fname, filepath_in_repo, vin, ecu_serial): # TODO: This should probably place the file into a common targets directory # that is then softlinked to all repositories. - #shutil.copy(target_fname, destination_filepath) if ecu_serial in inventory.get_registered_ecu_serials(): + shutil.copy(target_fname, destination_filepath) print(inventory.get_ecu_public_key(ecu_serial)) public_key_for_ecu = \ inventory.get_ecu_public_key(ecu_serial)['keyval']['public'] - #hashes['unencrypted_file_hashes'] = \ - #director_service_instance.generate_hashes(target_fname) - encrypted_target_data, encrypted_aes_key= \ director_service_instance.encrypt_target( target_fname, public_key_for_ecu) - with open(destination_filepath, 'w') as f: - f.write(encrypted_target_data) + demo.DIRECTOR_ENCRYPTION = True - encrypted_hash = director_service_instance.generate_hashes( - destination_filepath) + create_new_folder_to_hold_encrypted_files(vin) + encrypted_hash, size_encrypted_file = write_encrypted_file_in_folder( + vin, encrypted_target_data, filepath_in_repo) print("PUBLIC KEY FOR ECU\n", public_key_for_ecu) @@ -622,7 +622,69 @@ def add_target_to_director(target_fname, filepath_in_repo, vin, ecu_serial): # This calls the appropriate vehicle repository. director_service_instance.add_target_for_ecu( vin, ecu_serial, destination_filepath, file_hashes = encrypted_hash, - encrypted_symmetric_key = encrypted_aes_key) + encrypted_symmetric_key = encrypted_aes_key, + encrypted_file_size= size_encrypted_file) + + + + + +def create_new_folder_to_hold_encrypted_files(vin): + """ + Stores the encrypted images and the corresponding metadata in a special folder + that will be hosted by the director for the primary to access. + """ + Host_folder_directory = os.path.join( + demo.DIRECTOR_REPO_DIR, demo.DIRECTOR_ENCRYPTED_IMAGES_FOLDER_NAME, vin) + + if not os.path.exists(Host_folder_directory): + os.mkdir(Host_folder_directory) + + if not os.path.exists(os.path.join(Host_folder_directory, 'targets')): + os.mkdir(os.path.join(Host_folder_directory, 'targets')) + + refresh_metadata_for_encrypted_images_folder(vin) + + + + + +def refresh_metadata_for_encrypted_images_folder(vin): + """ + Changes the metadata files whenever new metadata has been added by copying the new + files to the folder + """ + Host_folder_directory = os.path.join( + demo.DIRECTOR_REPO_DIR, demo.DIRECTOR_ENCRYPTED_IMAGES_FOLDER_NAME, vin) + + if os.path.exists(os.path.join(Host_folder_directory, 'metadata')): + shutil.rmtree(os.path.join(Host_folder_directory, 'metadata')) + + shutil.copytree(os.path.join(demo.DIRECTOR_REPO_DIR, vin, 'metadata'), + os.path.join(Host_folder_directory, 'metadata')) + + + +def write_encrypted_file_in_folder(vin, encrypted_target_data, filepath_in_repo): + """ + Writes the encrypted file to be saved in the folder hosting encrypted images + """ + Host_folder_directory = os.path.join( + demo.DIRECTOR_REPO_DIR, demo.DIRECTOR_ENCRYPTED_IMAGES_FOLDER_NAME, vin) + + encrypted_image_copied = os.path.join(Host_folder_directory, 'targets', filepath_in_repo) + + with open(encrypted_image_copied, 'w') as f: + f.write(encrypted_target_data) + + size_encrypted_file = os.path.getsize(encrypted_image_copied) + + + encrypted_hash = director_service_instance.generate_hashes( + encrypted_image_copied) + + return encrypted_hash, size_encrypted_file + @@ -648,8 +710,11 @@ def host(): return # Prepare to host the director repo contents. - - os.chdir(demo.DIRECTOR_REPO_DIR) + # if demo.DIRECTOR_ENCRYPTION == False: + # os.chdir(demo.DIRECTOR_REPO_DIR) + # else: + print(demo.DIRECTOR_ENCRYPTED_REPO_DIR) + os.chdir(demo.DIRECTOR_ENCRYPTED_REPO_DIR) command = [] if sys.version_info.major < 3: # Python 2 compatibility diff --git a/uptane/common.py b/uptane/common.py index 553640d..ca02b9b 100644 --- a/uptane/common.py +++ b/uptane/common.py @@ -402,7 +402,8 @@ def canonical_key_from_pub_and_pri(key_pub, key_pri): assert key_pub['keytype'].encode('ascii','ignore') == \ key_pub['keytype'].encode('ascii','ignore') - if key_pub['keytype'].encode('ascii','ignore') == 'rsa': + if key_pub['keytype'].encode('ascii','ignore') == 'rsa' or \ + key_pub['keytype'] == 'rsa': key = rsa_canonical_key_from_pub_and_pri(key_pub, key_pri) else: key = ED25519_canonical_key_from_pub_and_pri(key_pub, key_pri) diff --git a/uptane/services/director.py b/uptane/services/director.py index 1d91f3d..5ad6118 100644 --- a/uptane/services/director.py +++ b/uptane/services/director.py @@ -525,7 +525,7 @@ def create_director_repo_for_vehicle(self, vin): - def add_target_for_ecu(self, vin, ecu_serial, target_filepath, file_hashes = None, encrypted_symmetric_key = None): + def add_target_for_ecu(self, vin, ecu_serial, target_filepath, file_hashes = None, encrypted_symmetric_key = None, encrypted_file_size = None): """ Add a target to the repository for a vehicle, marked as being for a specific ECU. @@ -549,14 +549,14 @@ def add_target_for_ecu(self, vin, ecu_serial, target_filepath, file_hashes = Non # raise uptane.UnknownECU('The ECU Serial provided, ' + repr(ecu_serial) + # ' is not that of an ECU known to this Director.') custom_dic = {} - if file_hashes == None and encrypted_symmetric_key = None: + if file_hashes == None and encrypted_symmetric_key == None: self.vehicle_repositories[vin].targets.add_target( target_filepath, custom={'ecu_serial': ecu_serial}) else: - custom_dic['encrypted_images'] = True custom_dic['ecu_serial'] = ecu_serial custom_dic['encrypted_file_hashes'] = file_hashes custom_dic['encrypted_symmetric_key'] = encrypted_symmetric_key + custom_dic['length_encrypted_file'] = encrypted_file_size print("Custom Dictionary", custom_dic) self.vehicle_repositories[vin].targets.add_target( target_filepath, custom = custom_dic) @@ -630,7 +630,7 @@ def encrypt_target(self, target_fname, ecu_public_key): encrypted_aes_key = self.encrypt_aes_key(ecu_public_key, aes_key) print('encrypted_data \n', encrypted_data, 'encrypted_aes_key\n', encrypted_aes_key) - return (encrypted_data, encrypted_aes_key) + return (encrypted_data.decode("utf-8"), encrypted_aes_key.decode("utf-8")) From 8364fb269a863ba053bdb385a708be746b277458 Mon Sep 17 00:00:00 2001 From: Shikhar Sakhuja Date: Wed, 6 Sep 2017 15:24:59 -0400 Subject: [PATCH 08/14] Changes in the demo __init__ file to have some new global constants accessed by the director for encrypted folder --- demo/__init__.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/demo/__init__.py b/demo/__init__.py index 9594e60..93b3ec2 100644 --- a/demo/__init__.py +++ b/demo/__init__.py @@ -38,6 +38,10 @@ DIRECTOR_REPO_PORT = 30401 DIRECTOR_REPO_NAME = 'director' DIRECTOR_REPO_DIR = os.path.join(uptane.WORKING_DIR, DIRECTOR_REPO_NAME) +DIRECTOR_ENCRYPTED_IMAGES_FOLDER_NAME = 'hosted_folder' +DIRECTOR_ENCRYPTION = False +DIRECTOR_ENCRYPTED_REPO_DIR = os.path.join( + uptane.WORKING_DIR, DIRECTOR_REPO_NAME, DIRECTOR_ENCRYPTED_IMAGES_FOLDER_NAME) DIRECTOR_SERVER_HOST = HOSTING DIRECTOR_SERVER_PORT = 30501 From 2f40e3fb6b91b9ff71b252d81f6a84a371fb771b Mon Sep 17 00:00:00 2001 From: Shikhar Sakhuja Date: Sun, 10 Sep 2017 16:42:36 -0400 Subject: [PATCH 09/14] - Working End-to-End encryption between director and ECUs - Director generates random AES-128 key - Encrypts the image with the key - Encrypts the key with the public key of the ECU image is meant for - Primary recieves the encrypted images and checks it's encrypted hashes and encrypted length mentioned in the metadata (custom field) - After primary approves of the file; secondary checks the encrypted hashes and lengths - Then decrypts the key and image and checks the file against the metadata of unencrypted file - If everything checks out, it installs the image --- demo/demo_secondary.py | 34 +++++++- uptane/clients/primary.py | 72 +++++++++++++++- uptane/clients/secondary.py | 158 ++++++++++++++++++++++++++++++++++++ uptane/services/director.py | 2 +- 4 files changed, 262 insertions(+), 4 deletions(-) diff --git a/demo/demo_secondary.py b/demo/demo_secondary.py index f5c7e2d..889b752 100644 --- a/demo/demo_secondary.py +++ b/demo/demo_secondary.py @@ -272,6 +272,7 @@ def update_cycle(): global secondary_ecu global current_firmware_fileinfo global attacks_detected + print("Secondary ECU Key", secondary_ecu.ecu_key) # Connect to the Primary pserver = xmlrpc_client.ServerProxy( @@ -317,7 +318,7 @@ def update_cycle(): # Now tell the Secondary reference implementation code where the archive file # is and let it expand and validate the metadata. secondary_ecu.process_metadata(archive_fname) - + print("Works till here") # As part of the process_metadata call, the secondary will have saved # validated target info for targets intended for it in @@ -415,7 +416,36 @@ def update_cycle(): # Validate the image against the metadata. try: - secondary_ecu.validate_image(image_fname) + secondary_ecu.validate_encrypted_image(image_fname) + except tuf.DownloadLengthMismatchError: + print_banner( + BANNER_DEFENDED, color=WHITE+DARK_BLUE_BG, + text='Image from Primary failed to validate: length mismatch. Image: ' + + repr(image_fname), sound=TADA) + # TODO: Add length comparison instead, from error. + attacks_detected += 'Image from Primary failed to validate: length ' + \ + 'mismatch.\n' + generate_signed_ecu_manifest() + submit_ecu_manifest_to_primary() + return + except tuf.BadHashError: + print_banner( + BANNER_DEFENDED, color=WHITE+DARK_BLUE_BG, + text='Image from Primary failed to validate: hash mismatch. Image: ' + + repr(image_fname), sound=TADA) + # TODO: Add hash comparison instead, from error. + attacks_detected += 'Image from Primary failed to validate: hash ' + \ + 'mismatch.\n' + generate_signed_ecu_manifest() + submit_ecu_manifest_to_primary() + return + + + secondary_ecu.decrypt_images(image_fname) + + + try: + secondary_ecu.validate_image(image_fname) except tuf.DownloadLengthMismatchError: print_banner( BANNER_DEFENDED, color=WHITE+DARK_BLUE_BG, diff --git a/uptane/clients/primary.py b/uptane/clients/primary.py index e6fc721..0e58c7a 100644 --- a/uptane/clients/primary.py +++ b/uptane/clients/primary.py @@ -452,6 +452,73 @@ def get_validated_target_info(self, target_filepath): + + def download_target(self, target, destination_directory): + """ + Download function that downloads the encrypted targets for distribution + """ + relevant_pinnings = self.updater._get_pinnings_for_target( + target['filepath']) + exceptions_from_all_delegations = [] + print("Relevant pinnings", relevant_pinnings) + + # for repo_list in relevant_pinnings: + # assert 0 != len(repo_list), 'Programming error. ' + \ + # '(Should be impossible due to _get_pinnings_for_target() checks' + + # for repo_name in repo_list: + # # This pinning may be a single-repo or multi-repo pinning. For each + # # repository in this pinning, try downloading the target file. + + list_of_noworkingmirror_exceptions = [] + target_filepath = target['filepath'] + trusted_length = target['fileinfo']['custom']['length_encrypted_file'] + unencrypted_trusted_hashes = target['fileinfo']['hashes'] + encrypted_trusted_hashes = \ + target['fileinfo']['custom']['encrypted_file_hashes'] + print("TargetFilepath", target_filepath) + print("Trusted length", trusted_length) + print("Encrypted hashes", encrypted_trusted_hashes) + try: + target_file_object = \ + self.updater.repositories['director']._get_target_file( + target_filepath, trusted_length, encrypted_trusted_hashes) + except tuf.NoWorkingMirrorError as e: + exceptions_from_all_delegations.append(e) + + else: + log.debug('Succeeded in downloading target ' + + repr(target['filepath']) + ' from repo director') + + destination = os.path.join(destination_directory, + target_filepath.lstrip(os.sep)) + destination = os.path.abspath(destination) + target_dirpath = os.path.dirname(destination) + + # When attempting to create the leaf directory of 'target_dirpath', ignore + # any exceptions raised if the root directory already exists. All other + # exceptions potentially thrown by os.makedirs() are re-raised. + # Note: os.makedirs can raise OSError if the leaf directory already exists + # or cannot be created. + try: + os.makedirs(target_dirpath) + except OSError as e: + if e.errno == errno.EEXIST: + pass + + else: + raise + print(target_file_object.read()) + target_file_object.move(destination) + + + + + + + + + def primary_update_cycle(self): """ Download fresh metadata and images for this vehicle, as instructed by the @@ -484,6 +551,7 @@ def primary_update_cycle(self): # Note that at this line, this target info is not yet validated with the # Image Repository: that is done a few lines down. directed_targets = self.get_target_list_from_director() + print("Directed targets\n", directed_targets) if not directed_targets: log.info('A correctly signed statement from the Director indicates that ' @@ -518,6 +586,7 @@ def primary_update_cycle(self): # for repo in targetinfos: # tuf.formats.TARGETFILE_SCHEMA.check_match(targetinfos[repo]) verified_targets.append(self.get_validated_target_info(target_filepath)) + print("Verified Targets", verified_targets) except tuf.UnknownTargetError: log.warning(RED + 'Director has instructed us to download a target (' + @@ -616,7 +685,8 @@ def primary_update_cycle(self): # still has it). (The second argument here is just where to put the # files.) try: - self.updater.download_target(target, full_targets_directory) + #self.updater.download_target(target, full_targets_directory) + self.download_target(target, full_targets_directory) except tuf.NoWorkingMirrorError as e: print('') diff --git a/uptane/clients/secondary.py b/uptane/clients/secondary.py index e654e39..97c8849 100644 --- a/uptane/clients/secondary.py +++ b/uptane/clients/secondary.py @@ -39,6 +39,11 @@ import uptane.common import uptane.encoding.asn1_codec as asn1_codec +from Crypto.Cipher import AES, PKCS1_OAEP +from Crypto.PublicKey import RSA +from Crypto import Random +import binascii + from uptane import GREEN, RED, YELLOW, ENDCOLORS @@ -681,3 +686,156 @@ def validate_image(self, image_fname): log.debug('Delivered target file has been fully validated: ' + repr(full_image_fname)) + + + + + def validate_encrypted_image(self, image_fname): + """ + Determines if the encrypted image with filename provided matches the + expected file properties, based on the metadata we have previously + validated (with fully_validate_metadata, stored in + self.validated_targets_for_this_ecu). If this method completes without + raising an exception, the image file is valid. + + + + image_fname + This is the filename of the image file to validate. It is expected + to match the filepath in the target file info (except without any + leading '/' character). It should, therefore, not include any + directory names except what is required to specify it within the + target namespace. + This file is expected to exist in the client directory + (self.full_client_dir), in a subdirectory called 'unverified_targets'. + + + + uptane.Error + if the given filename does not match a filepath in the list of + validated targets for this ECU (that is, the target(s) for which we + have received validated instructions from the Director addressed to + this ECU to install, and for which target info (file size and hashes) + has been retrieved and fully validated) + + tuf.DownloadLengthMismatchError + if the file does not have the expected length based on validated + target info. + + tuf.BadHashError + if the file does not have the expected hash based on validated target + info + + tuf.FormatError + if the given image_fname is not a path. + + + None. + + + None. + """ + + tuf.formats.PATH_SCHEMA.check_match(image_fname) + + full_image_fname = os.path.join( + self.full_client_dir, 'unverified_targets', image_fname) + + # Get target info by looking up fname (filepath). + + relevant_targetinfo = None + + for targetinfo in self.validated_targets_for_this_ecu: + filepath = targetinfo['filepath'] + if filepath[0] == '/': + filepath = filepath[1:] + if filepath == image_fname: + relevant_targetinfo = targetinfo + + if relevant_targetinfo is None: + # TODO: Consider a more specific error class. + raise uptane.Error('Unable to find validated target info for the given ' + 'filename: ' + repr(image_fname) + '. Either metadata was not ' + 'successfully updated, or the Primary is providing the wrong image ' + 'file, or there was a very unlikely update to data on the Primary ' + 'that had updated metadata but not yet updated images (The window ' + 'for this is extremely small between two individually-atomic ' + 'renames), or there has been a programming error....') + + + # Check file length against trusted target info. + with open(full_image_fname, 'rb') as fobj: + tuf.client.updater.hard_check_file_length( + fobj, + relevant_targetinfo['fileinfo']['custom']['length_encrypted_file']) + + # Check file hashes against trusted target info. + with open(full_image_fname, 'rb') as fobj: + tuf.client.updater.check_hashes( + fobj, # FIX + relevant_targetinfo['fileinfo']['custom']['encrypted_file_hashes'], + reset_fpointer=True) # Important for multiple hashes + + + # If no error has been raised at this point, the image file is fully + # validated and we can return. + log.debug('Delivered target file has been fully validated: ' + + repr(full_image_fname)) + + + + def decrypt_images(self, image_fname): + tuf.formats.PATH_SCHEMA.check_match(image_fname) + + full_image_fname = os.path.join( + self.full_client_dir, 'unverified_targets', image_fname) + + for targetinfo in self.validated_targets_for_this_ecu: + filepath = targetinfo['filepath'] + if filepath[0] == '/': + filepath = filepath[1:] + if filepath == image_fname: + relevant_targetinfo = targetinfo + + + with open(full_image_fname, 'rb') as fobj: + content_file_encrypted = fobj.read() + + content_file_encrypted = binascii.unhexlify( + content_file_encrypted) + # To convert the file back into the original binary encrypted + # format. + + private_key = self.ecu_key['keyval']['private'] + + encrypted_aes_key = \ + relevant_targetinfo \ + ['fileinfo']['custom']['encrypted_symmetric_key'] + + print("Encrypted AES Key", encrypted_aes_key) + + rsakey = RSA.importKey(private_key, passphrase = "pw") + rsakey = PKCS1_OAEP.new(rsakey) + decrypted_aes_key = rsakey.decrypt( + binascii.unhexlify(encrypted_aes_key)) + + print("Decrypted Key", decrypted_aes_key) + + cipher = AES.new( + decrypted_aes_key, AES.MODE_CFB, Random.new().read( + AES.block_size)) + + decrypted_text = cipher.decrypt( + content_file_encrypted)[AES.block_size:] + + print(decrypted_text) + + with open(full_image_fname, 'w') as f: + f.write(decrypted_text.decode('utf-8')) + + + + + + + diff --git a/uptane/services/director.py b/uptane/services/director.py index 5ad6118..40ddd74 100644 --- a/uptane/services/director.py +++ b/uptane/services/director.py @@ -582,7 +582,7 @@ def AES_Cipher(self, file_to_encrypt): Creates a randomized 16 bit key everytime an ECU target is assigned. """ aeskey = Random.new().read(16) - #print('1',len(aeskey)) + print('1',aeskey, binascii.hexlify(aeskey)) iv = Random.new().read(AES.block_size) #print('2',iv) cipher = AES.new(aeskey, AES.MODE_CFB, iv) From 3e74651e0306ea8be21cb664ebc2b31140491932 Mon Sep 17 00:00:00 2001 From: Shikhar Sakhuja Date: Sun, 10 Sep 2017 16:56:19 -0400 Subject: [PATCH 10/14] Removed all the print statements --- demo/demo_director.py | 7 ------- demo/demo_secondary.py | 2 -- uptane/clients/primary.py | 8 -------- uptane/clients/secondary.py | 6 ------ uptane/services/director.py | 11 ----------- 5 files changed, 34 deletions(-) diff --git a/demo/demo_director.py b/demo/demo_director.py index 25704fe..fe9d2be 100644 --- a/demo/demo_director.py +++ b/demo/demo_director.py @@ -592,14 +592,11 @@ def add_target_to_director(target_fname, filepath_in_repo, vin, ecu_serial): print('Copying target file into place.') destination_filepath = os.path.join(repo_dir, 'targets', filepath_in_repo) - print(destination_filepath) - # TODO: This should probably place the file into a common targets directory # that is then softlinked to all repositories. if ecu_serial in inventory.get_registered_ecu_serials(): shutil.copy(target_fname, destination_filepath) - print(inventory.get_ecu_public_key(ecu_serial)) public_key_for_ecu = \ inventory.get_ecu_public_key(ecu_serial)['keyval']['public'] @@ -613,10 +610,6 @@ def add_target_to_director(target_fname, filepath_in_repo, vin, ecu_serial): encrypted_hash, size_encrypted_file = write_encrypted_file_in_folder( vin, encrypted_target_data, filepath_in_repo) - print("PUBLIC KEY FOR ECU\n", public_key_for_ecu) - - print("Encrypted AES Key", encrypted_aes_key) - print('Adding target ' + repr(target_fname) + ' for ECU ' + repr(ecu_serial)) # This calls the appropriate vehicle repository. diff --git a/demo/demo_secondary.py b/demo/demo_secondary.py index 889b752..532d9ec 100644 --- a/demo/demo_secondary.py +++ b/demo/demo_secondary.py @@ -272,7 +272,6 @@ def update_cycle(): global secondary_ecu global current_firmware_fileinfo global attacks_detected - print("Secondary ECU Key", secondary_ecu.ecu_key) # Connect to the Primary pserver = xmlrpc_client.ServerProxy( @@ -318,7 +317,6 @@ def update_cycle(): # Now tell the Secondary reference implementation code where the archive file # is and let it expand and validate the metadata. secondary_ecu.process_metadata(archive_fname) - print("Works till here") # As part of the process_metadata call, the secondary will have saved # validated target info for targets intended for it in diff --git a/uptane/clients/primary.py b/uptane/clients/primary.py index 0e58c7a..97c1b30 100644 --- a/uptane/clients/primary.py +++ b/uptane/clients/primary.py @@ -460,8 +460,6 @@ def download_target(self, target, destination_directory): relevant_pinnings = self.updater._get_pinnings_for_target( target['filepath']) exceptions_from_all_delegations = [] - print("Relevant pinnings", relevant_pinnings) - # for repo_list in relevant_pinnings: # assert 0 != len(repo_list), 'Programming error. ' + \ # '(Should be impossible due to _get_pinnings_for_target() checks' @@ -476,9 +474,6 @@ def download_target(self, target, destination_directory): unencrypted_trusted_hashes = target['fileinfo']['hashes'] encrypted_trusted_hashes = \ target['fileinfo']['custom']['encrypted_file_hashes'] - print("TargetFilepath", target_filepath) - print("Trusted length", trusted_length) - print("Encrypted hashes", encrypted_trusted_hashes) try: target_file_object = \ self.updater.repositories['director']._get_target_file( @@ -508,7 +503,6 @@ def download_target(self, target, destination_directory): else: raise - print(target_file_object.read()) target_file_object.move(destination) @@ -551,7 +545,6 @@ def primary_update_cycle(self): # Note that at this line, this target info is not yet validated with the # Image Repository: that is done a few lines down. directed_targets = self.get_target_list_from_director() - print("Directed targets\n", directed_targets) if not directed_targets: log.info('A correctly signed statement from the Director indicates that ' @@ -586,7 +579,6 @@ def primary_update_cycle(self): # for repo in targetinfos: # tuf.formats.TARGETFILE_SCHEMA.check_match(targetinfos[repo]) verified_targets.append(self.get_validated_target_info(target_filepath)) - print("Verified Targets", verified_targets) except tuf.UnknownTargetError: log.warning(RED + 'Director has instructed us to download a target (' + diff --git a/uptane/clients/secondary.py b/uptane/clients/secondary.py index 97c8849..26f7ffe 100644 --- a/uptane/clients/secondary.py +++ b/uptane/clients/secondary.py @@ -812,15 +812,11 @@ def decrypt_images(self, image_fname): relevant_targetinfo \ ['fileinfo']['custom']['encrypted_symmetric_key'] - print("Encrypted AES Key", encrypted_aes_key) - rsakey = RSA.importKey(private_key, passphrase = "pw") rsakey = PKCS1_OAEP.new(rsakey) decrypted_aes_key = rsakey.decrypt( binascii.unhexlify(encrypted_aes_key)) - print("Decrypted Key", decrypted_aes_key) - cipher = AES.new( decrypted_aes_key, AES.MODE_CFB, Random.new().read( AES.block_size)) @@ -828,8 +824,6 @@ def decrypt_images(self, image_fname): decrypted_text = cipher.decrypt( content_file_encrypted)[AES.block_size:] - print(decrypted_text) - with open(full_image_fname, 'w') as f: f.write(decrypted_text.decode('utf-8')) diff --git a/uptane/services/director.py b/uptane/services/director.py index 40ddd74..4afcba4 100644 --- a/uptane/services/director.py +++ b/uptane/services/director.py @@ -557,7 +557,6 @@ def add_target_for_ecu(self, vin, ecu_serial, target_filepath, file_hashes = Non custom_dic['encrypted_file_hashes'] = file_hashes custom_dic['encrypted_symmetric_key'] = encrypted_symmetric_key custom_dic['length_encrypted_file'] = encrypted_file_size - print("Custom Dictionary", custom_dic) self.vehicle_repositories[vin].targets.add_target( target_filepath, custom = custom_dic) @@ -582,13 +581,9 @@ def AES_Cipher(self, file_to_encrypt): Creates a randomized 16 bit key everytime an ECU target is assigned. """ aeskey = Random.new().read(16) - print('1',aeskey, binascii.hexlify(aeskey)) iv = Random.new().read(AES.block_size) - #print('2',iv) cipher = AES.new(aeskey, AES.MODE_CFB, iv) - #print('3',cipher) msg = iv + cipher.encrypt(open(file_to_encrypt, 'r').read()) - print('4', msg) return (binascii.hexlify(msg), aeskey) @@ -601,13 +596,9 @@ def encrypt_aes_key(self, public_key, aes_key): Returns the key which will be decrypted by the designated ECU using its private key. """ - print(public_key) public_rsa_key = RSA.importKey(public_key) - #print('5',rsakey) public_rsa_key = PKCS1_OAEP.new(public_rsa_key) - #print('6',rsakey) encrypted = public_rsa_key.encrypt(aes_key) - print('7',encrypted) return binascii.hexlify(encrypted) @@ -628,8 +619,6 @@ def encrypt_target(self, target_fname, ecu_public_key): """ encrypted_data, aes_key = self.AES_Cipher(target_fname) encrypted_aes_key = self.encrypt_aes_key(ecu_public_key, aes_key) - print('encrypted_data \n', encrypted_data, - 'encrypted_aes_key\n', encrypted_aes_key) return (encrypted_data.decode("utf-8"), encrypted_aes_key.decode("utf-8")) From 48ae82ddd10f9bc05f9a5626f9ac846b6b712ab8 Mon Sep 17 00:00:00 2001 From: Shikhar Sakhuja Date: Sun, 10 Sep 2017 17:10:30 -0400 Subject: [PATCH 11/14] Changed the format back to DER --- uptane/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uptane/__init__.py b/uptane/__init__.py index 1db0349..4227595 100644 --- a/uptane/__init__.py +++ b/uptane/__init__.py @@ -12,7 +12,7 @@ # Configure TUF to use DER format instead of Python dictionaries / JSON. import tuf.conf -tuf.conf.METADATA_FORMAT = 'json' +tuf.conf.METADATA_FORMAT = 'der' # FIXME: I actually think other modules rely on the `os` imported here and # not just for getcwd From b83368fc22e9c8a27097142ff7721621eb71cf3d Mon Sep 17 00:00:00 2001 From: Shikhar Sakhuja Date: Thu, 28 Dec 2017 19:52:51 -0500 Subject: [PATCH 12/14] Cleaned up code to comply with lab standards --- demo/demo_director.py | 42 +++++++++++++++------------------- demo/demo_timeserver.py | 25 -------------------- uptane/clients/primary.py | 15 ------------ uptane/clients/secondary.py | 11 +++------ uptane/common.py | 11 +++++---- uptane/services/director.py | 11 +++++---- uptane/services/inventorydb.py | 2 ++ 7 files changed, 37 insertions(+), 80 deletions(-) diff --git a/demo/demo_director.py b/demo/demo_director.py index fe9d2be..d482ea9 100644 --- a/demo/demo_director.py +++ b/demo/demo_director.py @@ -585,7 +585,7 @@ def add_target_to_director(target_fname, filepath_in_repo, vin, ecu_serial): if vin not in director_service_instance.vehicle_repositories: raise uptane.UnknownVehicle('The VIN provided, ' + repr(vin) + ' is not ' - 'that of a vehicle known to this Director.') + 'that of a vehicle known to this Director.') repo = director_service_instance.vehicle_repositories[vin] repo_dir = repo._repository_directory @@ -615,9 +615,9 @@ def add_target_to_director(target_fname, filepath_in_repo, vin, ecu_serial): # This calls the appropriate vehicle repository. director_service_instance.add_target_for_ecu( vin, ecu_serial, destination_filepath, file_hashes = encrypted_hash, - encrypted_symmetric_key = encrypted_aes_key, + encrypted_symmetric_key = encrypted_aes_key, encrypted_file_size= size_encrypted_file) - + @@ -627,34 +627,34 @@ def create_new_folder_to_hold_encrypted_files(vin): Stores the encrypted images and the corresponding metadata in a special folder that will be hosted by the director for the primary to access. """ - Host_folder_directory = os.path.join( + host_folder_directory = os.path.join( demo.DIRECTOR_REPO_DIR, demo.DIRECTOR_ENCRYPTED_IMAGES_FOLDER_NAME, vin) - if not os.path.exists(Host_folder_directory): - os.mkdir(Host_folder_directory) + if not os.path.exists(host_folder_directory): + os.mkdir(host_folder_directory) - if not os.path.exists(os.path.join(Host_folder_directory, 'targets')): - os.mkdir(os.path.join(Host_folder_directory, 'targets')) + if not os.path.exists(os.path.join(host_folder_directory, 'targets')): + os.mkdir(os.path.join(host_folder_directory, 'targets')) refresh_metadata_for_encrypted_images_folder(vin) - + def refresh_metadata_for_encrypted_images_folder(vin): """ - Changes the metadata files whenever new metadata has been added by copying the new - files to the folder + Changes the metadata files whenever new metadata has been added by copying + the new files to the folder """ - Host_folder_directory = os.path.join( + host_folder_directory = os.path.join( demo.DIRECTOR_REPO_DIR, demo.DIRECTOR_ENCRYPTED_IMAGES_FOLDER_NAME, vin) - if os.path.exists(os.path.join(Host_folder_directory, 'metadata')): - shutil.rmtree(os.path.join(Host_folder_directory, 'metadata')) + if os.path.exists(os.path.join(host_folder_directory, 'metadata')): + shutil.rmtree(os.path.join(host_folder_directory, 'metadata')) shutil.copytree(os.path.join(demo.DIRECTOR_REPO_DIR, vin, 'metadata'), - os.path.join(Host_folder_directory, 'metadata')) + os.path.join(host_folder_directory, 'metadata')) @@ -662,17 +662,16 @@ def write_encrypted_file_in_folder(vin, encrypted_target_data, filepath_in_repo) """ Writes the encrypted file to be saved in the folder hosting encrypted images """ - Host_folder_directory = os.path.join( + host_folder_directory = os.path.join( demo.DIRECTOR_REPO_DIR, demo.DIRECTOR_ENCRYPTED_IMAGES_FOLDER_NAME, vin) - encrypted_image_copied = os.path.join(Host_folder_directory, 'targets', filepath_in_repo) - + encrypted_image_copied = os.path.join(host_folder_directory, 'targets', filepath_in_repo) + with open(encrypted_image_copied, 'w') as f: f.write(encrypted_target_data) size_encrypted_file = os.path.getsize(encrypted_image_copied) - encrypted_hash = director_service_instance.generate_hashes( encrypted_image_copied) @@ -703,10 +702,7 @@ def host(): return # Prepare to host the director repo contents. - # if demo.DIRECTOR_ENCRYPTION == False: - # os.chdir(demo.DIRECTOR_REPO_DIR) - # else: - print(demo.DIRECTOR_ENCRYPTED_REPO_DIR) + os.chdir(demo.DIRECTOR_ENCRYPTED_REPO_DIR) command = [] diff --git a/demo/demo_timeserver.py b/demo/demo_timeserver.py index 7de7487..15e8bca 100644 --- a/demo/demo_timeserver.py +++ b/demo/demo_timeserver.py @@ -136,31 +136,6 @@ def test_demo_timeserver(): - # # Fetch a DER-encoded converted-to-ASN.1 signed time attestation, with a - # # signature over the DER encoding. - # der_signed_time = timeserver.get_signed_time_der([2, 9, 151]) - - # # Encapsulate that in a Binary object for XML-RPC. - # xb_der_signed_time = xmlrpc_client.Binary(der_signed_time) - # assert der_signed_time == xb_der_signed_time.data, \ - # 'Demo Timeserver self-test fail: xmlrpc Binary encapsulation issue' - - - # # Validate that signature. - # for pydict_again in [ - # asn1_codec.convert_signed_der_to_dersigned_json(der_signed_time), - # asn1_codec.convert_signed_der_to_dersigned_json(xb_der_signed_time.data)]: - - # assert uptane.common.verify_signature_over_metadata( - # timeserver_key_pub, - # pydict_again['signatures'][0], - # pydict_again['signed'], - # datatype='time_attestation', - # metadata_format='der' - # ), 'Demo Timeserver self-test fail: unable to verify signature over DER' - - - if __name__ == '__main__': diff --git a/uptane/clients/primary.py b/uptane/clients/primary.py index 97c1b30..66604e1 100644 --- a/uptane/clients/primary.py +++ b/uptane/clients/primary.py @@ -460,13 +460,6 @@ def download_target(self, target, destination_directory): relevant_pinnings = self.updater._get_pinnings_for_target( target['filepath']) exceptions_from_all_delegations = [] - # for repo_list in relevant_pinnings: - # assert 0 != len(repo_list), 'Programming error. ' + \ - # '(Should be impossible due to _get_pinnings_for_target() checks' - - # for repo_name in repo_list: - # # This pinning may be a single-repo or multi-repo pinning. For each - # # repository in this pinning, try downloading the target file. list_of_noworkingmirror_exceptions = [] target_filepath = target['filepath'] @@ -504,10 +497,6 @@ def download_target(self, target, destination_directory): else: raise target_file_object.move(destination) - - - - @@ -575,9 +564,6 @@ def primary_update_cycle(self): for targetinfo in directed_targets: target_filepath = targetinfo['filepath'] try: - # targetinfos = self.get_validated_target_info(target_filepath) - # for repo in targetinfos: - # tuf.formats.TARGETFILE_SCHEMA.check_match(targetinfos[repo]) verified_targets.append(self.get_validated_target_info(target_filepath)) except tuf.UnknownTargetError: @@ -677,7 +663,6 @@ def primary_update_cycle(self): # still has it). (The second argument here is just where to put the # files.) try: - #self.updater.download_target(target, full_targets_directory) self.download_target(target, full_targets_directory) except tuf.NoWorkingMirrorError as e: diff --git a/uptane/clients/secondary.py b/uptane/clients/secondary.py index 26f7ffe..9ed46a0 100644 --- a/uptane/clients/secondary.py +++ b/uptane/clients/secondary.py @@ -784,6 +784,8 @@ def validate_encrypted_image(self, image_fname): + + def decrypt_images(self, image_fname): tuf.formats.PATH_SCHEMA.check_match(image_fname) @@ -825,11 +827,4 @@ def decrypt_images(self, image_fname): content_file_encrypted)[AES.block_size:] with open(full_image_fname, 'w') as f: - f.write(decrypted_text.decode('utf-8')) - - - - - - - + f.write(decrypted_text.decode('utf-8')) \ No newline at end of file diff --git a/uptane/common.py b/uptane/common.py index ca02b9b..c5852c9 100644 --- a/uptane/common.py +++ b/uptane/common.py @@ -20,7 +20,6 @@ # imports asn1_codec. import uptane.encoding.asn1_codec as asn1_codec import uptane.formats -from pprint import pprint # Both key types below are supported, but issues may be encountered with RSA # if tuf.conf.METADATA_FORMAT is 'der' (rather than 'json'). @@ -385,7 +384,6 @@ def verify_signature_over_metadata( - def canonical_key_from_pub_and_pri(key_pub, key_pri): """ Turn this into a canonical key matching tuf.formats.ANYKEY_SCHEMA, with @@ -412,6 +410,8 @@ def canonical_key_from_pub_and_pri(key_pub, key_pri): + + def rsa_canonical_key_from_pub_and_pri(key_pub, key_pri): """ Formats the RSA private and public key into the right key format. @@ -427,12 +427,12 @@ def rsa_canonical_key_from_pub_and_pri(key_pub, key_pri): }, 'keyid_hash_algorithms': [u'sha256', u'sha512']} tuf.formats.ANYKEY_SCHEMA.check_match(key) - print("RSA KEY\n") - pprint(key) return key + + def fix_string_formatting_for_rsa_keys(key): """ Default format of an RSA Key: @@ -448,6 +448,8 @@ def fix_string_formatting_for_rsa_keys(key): + + def ED25519_canonical_key_from_pub_and_pri(key_pub, key_pri): """ Formats the ED25519 private and public key into the right key format. @@ -467,6 +469,7 @@ def ED25519_canonical_key_from_pub_and_pri(key_pub, key_pri): + def public_key_from_canonical(key_canonical): """ Given a key that includes all public and private key information, return a diff --git a/uptane/services/director.py b/uptane/services/director.py index 4afcba4..89d68be 100644 --- a/uptane/services/director.py +++ b/uptane/services/director.py @@ -574,6 +574,7 @@ def analyze_vehicle(self, vin): + def AES_Cipher(self, file_to_encrypt): """ Uses AES-128 to encrypt the contents of the target file. @@ -589,6 +590,7 @@ def AES_Cipher(self, file_to_encrypt): + def encrypt_aes_key(self, public_key, aes_key): """ Uses RSA to encrypt the AES Key. @@ -603,6 +605,8 @@ def encrypt_aes_key(self, public_key, aes_key): + + def generate_hashes(self, filename): return {'sha256': tuf.hash.digest_filename( filename, algorithm = 'sha256').hexdigest(), @@ -612,6 +616,7 @@ def generate_hashes(self, filename): + def encrypt_target(self, target_fname, ecu_public_key): """ Encrypts a target using the RSA Public Key for the ecu @@ -619,8 +624,4 @@ def encrypt_target(self, target_fname, ecu_public_key): """ encrypted_data, aes_key = self.AES_Cipher(target_fname) encrypted_aes_key = self.encrypt_aes_key(ecu_public_key, aes_key) - return (encrypted_data.decode("utf-8"), encrypted_aes_key.decode("utf-8")) - - - - + return (encrypted_data.decode("utf-8"), encrypted_aes_key.decode("utf-8")) \ No newline at end of file diff --git a/uptane/services/inventorydb.py b/uptane/services/inventorydb.py index 8ec2ead..87e9665 100644 --- a/uptane/services/inventorydb.py +++ b/uptane/services/inventorydb.py @@ -400,6 +400,8 @@ def check_ecu_registered(ecu_serial): + + def get_registered_ecu_serials(): """ Returns a list of all the ecu_serials that have been registered From 725ba89654c0b4278d1c1fcb1d44d928a9b3c564 Mon Sep 17 00:00:00 2001 From: Shikhar Sakhuja Date: Thu, 28 Dec 2017 20:18:43 -0500 Subject: [PATCH 13/14] Attempt to solve merge conflicts --- demo/demo_director.py | 5 ++++- uptane/services/director.py | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/demo/demo_director.py b/demo/demo_director.py index d482ea9..75553ca 100644 --- a/demo/demo_director.py +++ b/demo/demo_director.py @@ -56,6 +56,8 @@ KNOWN_VINS = ['111', '112', '113', 'democar'] +LOG_PREFIX = uptane.TEAL_BG + 'Director:' + ENDCOLORS + ' ' + # Dynamic global objects #repo = None repo_server_process = None @@ -610,7 +612,8 @@ def add_target_to_director(target_fname, filepath_in_repo, vin, ecu_serial): encrypted_hash, size_encrypted_file = write_encrypted_file_in_folder( vin, encrypted_target_data, filepath_in_repo) - print('Adding target ' + repr(target_fname) + ' for ECU ' + repr(ecu_serial)) + print(LOG_PREFIX + 'Adding target ' + repr(target_fname) + ' for ECU ' + + repr(ecu_serial)) # This calls the appropriate vehicle repository. director_service_instance.add_target_for_ecu( diff --git a/uptane/services/director.py b/uptane/services/director.py index 89d68be..6fbc419 100644 --- a/uptane/services/director.py +++ b/uptane/services/director.py @@ -552,6 +552,7 @@ def add_target_for_ecu(self, vin, ecu_serial, target_filepath, file_hashes = Non if file_hashes == None and encrypted_symmetric_key == None: self.vehicle_repositories[vin].targets.add_target( target_filepath, custom={'ecu_serial': ecu_serial}) + else: custom_dic['ecu_serial'] = ecu_serial custom_dic['encrypted_file_hashes'] = file_hashes From c1a1e3a720a650c7c744bbaba66eaba2964f2f4c Mon Sep 17 00:00:00 2001 From: Shikhar Sakhuja Date: Thu, 28 Dec 2017 20:26:34 -0500 Subject: [PATCH 14/14] Broke a >80 character line into multiple ones --- uptane/services/director.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/uptane/services/director.py b/uptane/services/director.py index 6fbc419..9ecc454 100644 --- a/uptane/services/director.py +++ b/uptane/services/director.py @@ -525,7 +525,9 @@ def create_director_repo_for_vehicle(self, vin): - def add_target_for_ecu(self, vin, ecu_serial, target_filepath, file_hashes = None, encrypted_symmetric_key = None, encrypted_file_size = None): + def add_target_for_ecu(self, vin, ecu_serial, target_filepath, + file_hashes = None, encrypted_symmetric_key = None, + encrypted_file_size = None): """ Add a target to the repository for a vehicle, marked as being for a specific ECU.