Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create json tests for crypto consensus testing #416

Merged
merged 8 commits into from
Dec 4, 2023
Merged

Conversation

konradkonrad
Copy link
Contributor

@konradkonrad konradkonrad commented Nov 2, 2023

Implements shutter-network/shutter#105

This adds the commands

rolling-shutter crypto testdata [output_file]
rolling-shutter crypto jsontests -f input_file

that will generate or execute tests for the methods

shcrypto.Encrypt
shcrypto.EncryptedMessage.Decrypt
shcrypto.VerifyEpochSecret

Example Input/Output:

Generated testdata (click to expand) ```json [ { "name": "encryption 1", "id": "0", "description": "A zero byte message.", "type": "encryption", "test_data": { "message": "0x", "eon_public_key": "0x21cfff996dbe9de668d88167c9e420db5c040324a1da4c26db5b6e128e6930e60986a6b1f5143b06101f6f67a8e21d116a23732ecb7a1036db28a672304f0d9013f06faeff051511f02a28cd5f7e9496e43cc5edd36b281e4682778cd97aa2d91712b4263002e861f5cc0635aac8e6c71f4e9c82e4d59fb4f84c1445e2097acd", "epoch_id": "0x782ea3d49836e2320e5021bbce19bbaf918b5cc5d2c1bb04f31ca4ecf16535c8", "sigma": "0x9f4470756792f15072d3f6b934e4e814e11f6d10594db74fedf2461a9bdf21c1", "expected": "0x0e457f3ac57fb2bfde1fa5e85ff91419669464ed5a7bbbdeba649da363748c39140c69722afffd983dd26f7712d4bace66bc9c4211a359c82a6922d2c363d5460aec0123756a12c52c8a16f70378925c5b0fa8115e7159a53caa1b8a973b78220ce4d58b799084b4b0aabb17fcbcaa20ca9dc2b2821edb30cc66a8f6d307730bc98fcbfb6181f80349da438c4b7dbd89630f003b57dc6000bcea654764d0496c4ba5660ee4db63c88ace60ec58ddeec1b2e35a2758b084f6f1878f8641950c59" } }, { "name": "decryption 1", "id": "1", "description": "A zero byte message.", "type": "decryption", "test_data": { "cipher": "0x0e457f3ac57fb2bfde1fa5e85ff91419669464ed5a7bbbdeba649da363748c39140c69722afffd983dd26f7712d4bace66bc9c4211a359c82a6922d2c363d5460aec0123756a12c52c8a16f70378925c5b0fa8115e7159a53caa1b8a973b78220ce4d58b799084b4b0aabb17fcbcaa20ca9dc2b2821edb30cc66a8f6d307730bc98fcbfb6181f80349da438c4b7dbd89630f003b57dc6000bcea654764d0496c4ba5660ee4db63c88ace60ec58ddeec1b2e35a2758b084f6f1878f8641950c59", "epoch_secret_key": "0x09cc2ad1eb1ddabfde0cde187dcd082538955b5120fafb29bd98aabcb58dd1c718ef4a8f2a541181cd9423909508fc28c4a54305d5f085daca20eaa4791dbcf4", "expected": "0x" } }, { "name": "encryption 2", "id": "2", "description": "A 1 byte message.", "type": "encryption", "test_data": { "message": "0x9d", "eon_public_key": "0x1ceac31a2bce8a1f4207c30919b004450a800eda2e00614b447b89622ebc4dbc01e2f437329c6d4bd671b7a4556ed742bbbb8608eb716347cb8c8c79c03431e606e9a51f1d359220d0500bac0f4950d86cd38d3254b8c168aef2f07439a1fd882e7e0f26c4b6d94a7cca724b1daa76d63e951b168376bdaff033f71e3a2aca5a", "epoch_id": "0xe3c241d7b379ebeaebc530b23a421e86fbbf0b6537f297ad290c9831a1fc0f61", "sigma": "0xd66aada74db18e9d889bdf1ddeeb09667722464e244cbc34b79fba97375b170e", "expected": "0x14246f911d5e6783000a80d1c3542bf15ef7fbe7c4a990b1e2605a99c6108b8b1600f115caba5b24d4344f422fd74fc99bf25d03bb0712b1f0b053f35957c0bb176d56811894256853cb63ac2583c472f705c274f8c17f05ce74221ee7e98bc61524b158a110e9955a1ec2925e97433de4578ef48b8624fcf60a97f329e67f50c0cd16b2970966a3605eb7141e63ae578246b97be6811bc4dd294487f1e504cedabd72abd82e79adeb856d25b7d399caaa9f79e9303fa57394833531fc68ba03" } }, { "name": "decryption 2", "id": "3", "description": "A 1 byte message.", "type": "decryption", "test_data": { "cipher": "0x14246f911d5e6783000a80d1c3542bf15ef7fbe7c4a990b1e2605a99c6108b8b1600f115caba5b24d4344f422fd74fc99bf25d03bb0712b1f0b053f35957c0bb176d56811894256853cb63ac2583c472f705c274f8c17f05ce74221ee7e98bc61524b158a110e9955a1ec2925e97433de4578ef48b8624fcf60a97f329e67f50c0cd16b2970966a3605eb7141e63ae578246b97be6811bc4dd294487f1e504cedabd72abd82e79adeb856d25b7d399caaa9f79e9303fa57394833531fc68ba03", "epoch_secret_key": "0x1eb69ecf05b8c7af4400ee63b9dfdba142900b1770e92ef6b1bcd69af4f9d8d22f177efeb71cbfa7ab07ad919c7aba3ef7ea8fc98f04568072e70b9961e087e6", "expected": "0x9d" } }, { "name": "encryption 3", "id": "4", "description": "A 31 byte message.", "type": "encryption", "test_data": { "message": "0x501ec488fa71bdef02ad9b4032348aaaa9c2ae0bc86d993520c76f41c3bc6d", "eon_public_key": "0x27b7eb3acbd7b1850e84cb8d78889e25912e6834e69b63b9d22f6ff32a5a9db72ef51693a5f20b7aa5b9c66b89e004cdcef0e030ac7c74de562e2dbb5446f30718eff0726bdbc478bcc1248e338a25964c70c154658630631a05ae1472a94a3c1f84490cf61ab730101049d57be81a576c8132adeee09780c5f926f327f4849e", "epoch_id": "0xb6e43730e358f902dd31486dc0427d2402ef5acc02309072a8a4f47d8bf5fdd8", "sigma": "0x1ab06973d0576cb3e434fdea3512d35c176c80c2e21f83c917c142545aad6098", "expected": "0x1c51795b51d3f2312ecfb899bd77bc78a454005611b2b65e3be6d9a0f32525fc2d136d5517ef9b20a417d5754d186462c73a3950af31732a6cee966f82c3d422116c20cbb8bb1e0696f409a5f98b18aa03f9dc95ddc8b7b40c87cfcce0ba39571c2787c423a67fd1c33cc13e17490b4efd1f2152fb7a5e7e3bb8069ced3247d2fc304d5a1b6670c79bed9166b0c31120517a6ff194c473bd2fee5905d7dd17bd37cc950fe6006ff645003021aa763fae765c8463e221216aa439879dc49ceb73" } }, { "name": "decryption 3", "id": "5", "description": "A 31 byte message.", "type": "decryption", "test_data": { "cipher": "0x1c51795b51d3f2312ecfb899bd77bc78a454005611b2b65e3be6d9a0f32525fc2d136d5517ef9b20a417d5754d186462c73a3950af31732a6cee966f82c3d422116c20cbb8bb1e0696f409a5f98b18aa03f9dc95ddc8b7b40c87cfcce0ba39571c2787c423a67fd1c33cc13e17490b4efd1f2152fb7a5e7e3bb8069ced3247d2fc304d5a1b6670c79bed9166b0c31120517a6ff194c473bd2fee5905d7dd17bd37cc950fe6006ff645003021aa763fae765c8463e221216aa439879dc49ceb73", "epoch_secret_key": "0x2352f2cb656448e1d09dce2383b4b0c1f44c8306d34b4f037f6ee0c4bf3550b40ab9fa24fcb00623827ea7e9322f1c2ee9c203e467007111277dbed3fe914aec", "expected": "0x501ec488fa71bdef02ad9b4032348aaaa9c2ae0bc86d993520c76f41c3bc6d" } }, { "name": "encryption 4", "id": "6", "description": "A 32 byte message.", "type": "encryption", "test_data": { "message": "0x9380073b6a4fd01e8d40c4293d8d7d58bdb028975965b4ae51f9a70ce1c0bf3c", "eon_public_key": "0x2c291b23abcacd52c5b9d51fc50bc0149924e79105c960954fd1343844aa46171ed88b7bf430ffa500e3a2d3ed1a139d459f6e3bd5acfb0b8ffe94933cdd9b9f21344ba43f3bd7c350ebed3965b483f3be8f3963bb5923c57e42ba16f574f90c1ab708ae01a1b55326390b7a08bd72767ec4471e81b7541f6bbdc6611d680060", "epoch_id": "0x3ed56d39520e14df8b9e93b2fda7bfe7b1fe8dda649e78f64438684e3dc91bee", "sigma": "0x68536b8022a28f3c3830f233bf8203106e9d311b92eded387716a513b726a8b9", "expected": "0x228b78aed386ee3f7af230e5a938cfd0ce25648d9fb15e13bc7e079c3350c2b704231efcaa54934d3f785f30895608fe5e0e369ec0bd9123f5bcfb8b9a7478c91ffbeb465549cf317ac7e5bc6798f0d7d82090e73e113ae20dc8d84a9ed60b7e1638418f4ce9e1b51201fac31e1386e26f23a1e4cc474c3e35d5d204ae5c3e215eb82b83a7e98a0ccf8ce5d7bdc8e330ec271608f60eeba490edd6154524f9ce8f59f71f46f91ac3e7fb0b5206b195307b537d44b900fda996def9ae9d4c873e2e76b19fe1476bb2d3b1b7f3c268799d982bd77a1e6b55419384774e5defbe77" } }, { "name": "decryption 4", "id": "7", "description": "A 32 byte message.", "type": "decryption", "test_data": { "cipher": "0x228b78aed386ee3f7af230e5a938cfd0ce25648d9fb15e13bc7e079c3350c2b704231efcaa54934d3f785f30895608fe5e0e369ec0bd9123f5bcfb8b9a7478c91ffbeb465549cf317ac7e5bc6798f0d7d82090e73e113ae20dc8d84a9ed60b7e1638418f4ce9e1b51201fac31e1386e26f23a1e4cc474c3e35d5d204ae5c3e215eb82b83a7e98a0ccf8ce5d7bdc8e330ec271608f60eeba490edd6154524f9ce8f59f71f46f91ac3e7fb0b5206b195307b537d44b900fda996def9ae9d4c873e2e76b19fe1476bb2d3b1b7f3c268799d982bd77a1e6b55419384774e5defbe77", "epoch_secret_key": "0x1f7ce1bf64dd9331adac9c7aec1d73ccdad5cd2dc3a75e86ba85ed9249a562c72f1d614ec73629829cf1c4214674b3a3695942d8de4dcdc4654034ce07f58c0b", "expected": "0x9380073b6a4fd01e8d40c4293d8d7d58bdb028975965b4ae51f9a70ce1c0bf3c" } }, { "name": "encryption 5", "id": "8", "description": "A 33 byte message.", "type": "encryption", "test_data": { "message": "0x4212f3cd92445a424663275d7816d574b16275a9a4a961842f9b3efcb6f08062f3", "eon_public_key": "0x076662da6f6b87e4dcd6a013c2955d35ea7073fceb92d6e97377e35aed1c864712fc2a47d1686c135afa46eca1c5eb3d5f83568beb5a726992e71115f1153356284e9733ad5761b28b791ec750918ca1dd78f69f3ce084c13a4e85b97142107023de3c6a9626992c06f8eff9219a3ffbc93b49b1f4cca260b112518027845a07", "epoch_id": "0x7fa89c8eb7035344757c059635033b3cbc862357a0b6e9e6c06a21c17ba467b4", "sigma": "0x698199c3a8154eec8fdda72ca199b763cf4ea6e1a8c288a8ef6a2f021d10aa6c", "expected": "0x076a770fac44f461d5999583e4f431ba852027e1acb05d542123c056bcfb2bd6264d839cc56ffe6cb76bc4d43e36f7aea24d005f3e391c711476ccbc85caede529c6c7420efe7640f90ac403ff260b5aaa96ea4471dff5f6ba47d0791c3db63003000f6e814927d483281a55a3ecbea888548d6a259cbf39917fdb9e888ddcf6a2db45e5f3129ad9af34b335d5b18a570f85f01b71a8da45d1fcd4f82004ccb0a15dc27a96ab0cd7d421222561b79137d7c3a3ea5fcdb34e4f50ab799dfd8e929784fea2aea3e135e502ceba27d0886e87335b568a98c763b1ffd23c076fd584" } }, { "name": "decryption 5", "id": "9", "description": "A 33 byte message.", "type": "decryption", "test_data": { "cipher": "0x076a770fac44f461d5999583e4f431ba852027e1acb05d542123c056bcfb2bd6264d839cc56ffe6cb76bc4d43e36f7aea24d005f3e391c711476ccbc85caede529c6c7420efe7640f90ac403ff260b5aaa96ea4471dff5f6ba47d0791c3db63003000f6e814927d483281a55a3ecbea888548d6a259cbf39917fdb9e888ddcf6a2db45e5f3129ad9af34b335d5b18a570f85f01b71a8da45d1fcd4f82004ccb0a15dc27a96ab0cd7d421222561b79137d7c3a3ea5fcdb34e4f50ab799dfd8e929784fea2aea3e135e502ceba27d0886e87335b568a98c763b1ffd23c076fd584", "epoch_secret_key": "0x0b11eb45351992abcda85f8ee8d4543e52d86aa5ca9cf77864ac877b6b74158412e6a81a219e0029e2a6667bb2d4f5935c59a68ada3dec50cec989679840562b", "expected": "0x4212f3cd92445a424663275d7816d574b16275a9a4a961842f9b3efcb6f08062f3" } }, { "name": "encryption 6", "id": "10", "description": "A 319 byte message.", "type": "encryption", "test_data": { "message": "0x1bb90e4467084eb6fa348d097392cba7853adc34417ea754733398997624f8a7cdcfc839c4992bada71c07f10f1a29fc55de7405f32fb135ebb61046410101a528c940265a001c457b199e0c5999af2533f9b9e113a360653e47ccc4b15ce5e291d1ac21132125896ded340a48e0db5937311a20a9fba7094188aae852c1f396317a65e04054199e8c3bcc21c9b486eef6fab35675aaf7a56220da68ff1bb6309e0b6c65019924a6b951ac4bd324b1ba234bd8c4beb7fa14abddbca8e476679c681103f8ca5a378134ff1927e473818a62c10f6452fae1b2163200d5eaae0d2549ffed9c5d7399aafda310f76f0babdbb0585ddaeb0269220ba81f60444146a4f47d02f3c872f76b22516dae8d80fd75cc991a054f4a010133d69fd2a84a69c0f58121cc6019aaeef64ed2890f2ecd554bb55913632ad87ad3cae4c8a3ffbc", "eon_public_key": "0x2b7e87014016f5a4d8903bbd370c566e96e687cdc1fea76820620da7ee0cbe2915cc2e11e9417d3fb3bf11847cb40c01470a130ae1ee53bf3b85b651120d75a605b7e969de4bf5f2c5514f6f5b77e8d0cd5fe007329d1676d2f5e9f129cfbf032b43786c38fc76e2577d9d8c15049f5967c14e262232a08f0163cd24b848a551", "epoch_id": "0x61868112f60454bf9d4a0ecb2f3cf993c64b1b79c8db9d39a8eb765cd7cc207e", "sigma": "0x6aad9245e37a6fb6eff793bda0b80cbe2d7823341f8f5f0a020bf1877a90ec3c", "expected": "0x27bc23b85ae58121b5ccca3c256d0e557fb5d7377dd4621bdc0a79e97ad88d2c1df78ae0db6a8c6c96b5f613ef55730ab1bf1ca03d206dad12bd468415a141e82c7bf16125739cf140cee681cd52f3be25d17038341316ee48f01d15dc80888e0a8c6a8dd916a8a6a7dad640897d0c80b560e3a61a1ac2c0fdc2e9eae054941aeb52a26e0a55b2bac39cf7309e5d4bd45bde3b9a3bf169cf5ced74ee0adc7de6310a364e8a88090e82e36db9ba0be99c846a20560c09e3b7818f86904c236c0e83e8b189b02212d4723f9f553bcd1e98dde0de1d01edb5a9607660e67a03ee70308da037b1d40130789e31204e34c1ed55d1901a6b8ca15fff2fff747cb3d57c905f6ea564b8ad0ef8e40e1d1bd804a14a46db2fe844ebcb9c43eb7ee75937f0ae5d6e589a01a628c7a4eeb468a0170506226fa324521b838c3f4bb94cc41da8e237edb3644a867301131374e7b36a67369758de25567db727f252db34785cee906a7864687900b7fce111c8842b4dbf90670c7c949a9cf298ce42badf44e0a664cc9262d0bd8ade5b2703e466c1fc298650bd0c67bfe0675ab39096509ff8fe81f727c64a71e31f5f6daa9a49f8c37a5ffdc4f9a688d933dfb535886ca2a580b4a270bab4cc11fe2bcddc562055783c2ad59340c84e3867dfe03c94cb4c3c26" } }, { "name": "decryption 6", "id": "11", "description": "A 319 byte message.", "type": "decryption", "test_data": { "cipher": "0x27bc23b85ae58121b5ccca3c256d0e557fb5d7377dd4621bdc0a79e97ad88d2c1df78ae0db6a8c6c96b5f613ef55730ab1bf1ca03d206dad12bd468415a141e82c7bf16125739cf140cee681cd52f3be25d17038341316ee48f01d15dc80888e0a8c6a8dd916a8a6a7dad640897d0c80b560e3a61a1ac2c0fdc2e9eae054941aeb52a26e0a55b2bac39cf7309e5d4bd45bde3b9a3bf169cf5ced74ee0adc7de6310a364e8a88090e82e36db9ba0be99c846a20560c09e3b7818f86904c236c0e83e8b189b02212d4723f9f553bcd1e98dde0de1d01edb5a9607660e67a03ee70308da037b1d40130789e31204e34c1ed55d1901a6b8ca15fff2fff747cb3d57c905f6ea564b8ad0ef8e40e1d1bd804a14a46db2fe844ebcb9c43eb7ee75937f0ae5d6e589a01a628c7a4eeb468a0170506226fa324521b838c3f4bb94cc41da8e237edb3644a867301131374e7b36a67369758de25567db727f252db34785cee906a7864687900b7fce111c8842b4dbf90670c7c949a9cf298ce42badf44e0a664cc9262d0bd8ade5b2703e466c1fc298650bd0c67bfe0675ab39096509ff8fe81f727c64a71e31f5f6daa9a49f8c37a5ffdc4f9a688d933dfb535886ca2a580b4a270bab4cc11fe2bcddc562055783c2ad59340c84e3867dfe03c94cb4c3c26", "epoch_secret_key": "0x19571483ff0b5f76177869d6958f404b2e4655dd0c31c76e8f20cd3fb9aad420014d0d60454462687d15b6d6c0dcbf41a0f3994907fb7e0f7c8eedd132233a00", "expected": "0x1bb90e4467084eb6fa348d097392cba7853adc34417ea754733398997624f8a7cdcfc839c4992bada71c07f10f1a29fc55de7405f32fb135ebb61046410101a528c940265a001c457b199e0c5999af2533f9b9e113a360653e47ccc4b15ce5e291d1ac21132125896ded340a48e0db5937311a20a9fba7094188aae852c1f396317a65e04054199e8c3bcc21c9b486eef6fab35675aaf7a56220da68ff1bb6309e0b6c65019924a6b951ac4bd324b1ba234bd8c4beb7fa14abddbca8e476679c681103f8ca5a378134ff1927e473818a62c10f6452fae1b2163200d5eaae0d2549ffed9c5d7399aafda310f76f0babdbb0585ddaeb0269220ba81f60444146a4f47d02f3c872f76b22516dae8d80fd75cc991a054f4a010133d69fd2a84a69c0f58121cc6019aaeef64ed2890f2ecd554bb55913632ad87ad3cae4c8a3ffbc" } }, { "name": "encryption 7", "id": "12", "description": "A 320 byte message.", "type": "encryption", "test_data": { "message": "0x383d45edab8c9befec82a572936d23ccd147ea4fd4baeec49a2955ac11696bdc10ee58788d7d8bdd37a0bff7b052c056f3b2ad041cd7cc00647eef04c147dda87fd3d0af20348bdf575b70e187f292fa14967e908c77a0f612454b6ec85712f9b45e7c7dcf71242205933265c2e792dda99617cc8d407766d67d0b6bc494f97bc9155dd6d1cb6ca80947781007cb0b9c7cb03efd84ab8ac85b414f9f0c980338636d1837d3d73a280350e7d6a192604e82b726504f441c448e31a44597883fbf86daef84ec084ee738eb0445c845551d5919317f7645743936cb782eabd0b75a281876d75832f8c0c01339e5768ddbb53a2273e96390c7e1afb519f8c7e3168efbac7c2ec2f4579bf3501d033ae5b735ecf637d9fac8c3ac3868fef8b9efa650bcc6e6fd17c28ed8275369257c6f1715ddecd4095be2019febd4ca18fb6f0050", "eon_public_key": "0x2896f91bb493c928d3a8a2092d0680d7319451f23fe63afa4fd0347a4e388049138316bae206a7b3b0957bf58a2be0b6591c8b0c0b826858200b03f7b5fb1efe22c4e3ffd5c9728c0ae8f8183bf16773d7418ce8e560161cc5571b2424f2332429445824cd9169fdbf61016e3fbe100348cb73dede57f4ef1e38a8db1c1a4126", "epoch_id": "0x6e873cc5f64d88d918c06fb3794218c4bb0525cbff7213c823069f969162a599", "sigma": "0x71f9f74855b385dcade03190c69659d68a18e5e562c40a2311311fd32a661315", "expected": "0x22db73fa73584079d184356c44befae56084054ae152bb87e5a80897f3238dd01f7fed81742f6af3d6dd9ff32de4364909a623c5c5000c4186e024f9cde6b18d25711e408f644a750e4aef2c63bd969f41043edf414236430411a31ef212b4f213ac5c62f8a8b76a28e2935256ff54239de0d1022303a8ee2ee73f53753e421cb411657ca32a62ab759cb9b22780707ae23444b40c24f23619f2ce3b491060a8ecd97d93f73f651df2f9e83f311f4cbc47ae2c67c55d26cb837c07c4af9eda076fdae3292148790d94211e6cb83ce3d33f475ee0d79e0bca87d0a1e77375892ed08fc19db6916b19b0d6331faebad5e387912f6459ffa19f3b0c7dc37fc07895cecead69f76ffa4e897ec32f6549f5e3375685c0895c4d5931e7cb23145f61638e83b09d497641faaf65a13ccf4c909adf0d4545f8b503394d0e1a1ad41119f54c2b3e62b7d22854f02c9e4b336859f7abeb2d94c74e7d8508e7cd0d92f2d808ba430fd5d85335cb0d030b25eab07a37fb2f9d7d72597849d5b3c2b6b7692998dc59dbdc7f54fed8385988fa18789956ec449f0017255fb10ff294ab62d83a68ab4748e54cf6ff91c3052382ea2edab895f363b93e8032e1754d20774d2a311a6f6d6c7e7a6ff52ad1ac1eb579fba28d8fd1d77a68b1d58080eb81ab2ef67412ad16a5bef354f0c5a2b519242844151996b9236352ad02729de2176eb5ef3eaa" } }, { "name": "decryption 7", "id": "13", "description": "A 320 byte message.", "type": "decryption", "test_data": { "cipher": "0x22db73fa73584079d184356c44befae56084054ae152bb87e5a80897f3238dd01f7fed81742f6af3d6dd9ff32de4364909a623c5c5000c4186e024f9cde6b18d25711e408f644a750e4aef2c63bd969f41043edf414236430411a31ef212b4f213ac5c62f8a8b76a28e2935256ff54239de0d1022303a8ee2ee73f53753e421cb411657ca32a62ab759cb9b22780707ae23444b40c24f23619f2ce3b491060a8ecd97d93f73f651df2f9e83f311f4cbc47ae2c67c55d26cb837c07c4af9eda076fdae3292148790d94211e6cb83ce3d33f475ee0d79e0bca87d0a1e77375892ed08fc19db6916b19b0d6331faebad5e387912f6459ffa19f3b0c7dc37fc07895cecead69f76ffa4e897ec32f6549f5e3375685c0895c4d5931e7cb23145f61638e83b09d497641faaf65a13ccf4c909adf0d4545f8b503394d0e1a1ad41119f54c2b3e62b7d22854f02c9e4b336859f7abeb2d94c74e7d8508e7cd0d92f2d808ba430fd5d85335cb0d030b25eab07a37fb2f9d7d72597849d5b3c2b6b7692998dc59dbdc7f54fed8385988fa18789956ec449f0017255fb10ff294ab62d83a68ab4748e54cf6ff91c3052382ea2edab895f363b93e8032e1754d20774d2a311a6f6d6c7e7a6ff52ad1ac1eb579fba28d8fd1d77a68b1d58080eb81ab2ef67412ad16a5bef354f0c5a2b519242844151996b9236352ad02729de2176eb5ef3eaa", "epoch_secret_key": "0x0ab2aadaa3eeff3c8d2d7aa91c27b23fdd85b53ef5a7023da235dfb17473ab702dfcc0716f6af75506c3964c4559643bb5deea1af39a152f740c9cc829f079a7", "expected": "0x383d45edab8c9befec82a572936d23ccd147ea4fd4baeec49a2955ac11696bdc10ee58788d7d8bdd37a0bff7b052c056f3b2ad041cd7cc00647eef04c147dda87fd3d0af20348bdf575b70e187f292fa14967e908c77a0f612454b6ec85712f9b45e7c7dcf71242205933265c2e792dda99617cc8d407766d67d0b6bc494f97bc9155dd6d1cb6ca80947781007cb0b9c7cb03efd84ab8ac85b414f9f0c980338636d1837d3d73a280350e7d6a192604e82b726504f441c448e31a44597883fbf86daef84ec084ee738eb0445c845551d5919317f7645743936cb782eabd0b75a281876d75832f8c0c01339e5768ddbb53a2273e96390c7e1afb519f8c7e3168efbac7c2ec2f4579bf3501d033ae5b735ecf637d9fac8c3ac3868fef8b9efa650bcc6e6fd17c28ed8275369257c6f1715ddecd4095be2019febd4ca18fb6f0050" } }, { "name": "encryption 8", "id": "14", "description": "A 321 byte message.", "type": "encryption", "test_data": { "message": "0x54ace039654f716bc09912b5660a63648f9400e2b165e26714c195fd740dff5af3b1831df99ed04921f6dff41b6aa71e1bdea45ca72fffbeed4424b8c41e5f525b90a5ed061b96c512df78a381970beafc2063830b13736125ba979dba41f147841f612d871d5f406caecd54fb7b2176745b9d44d71f0cd98869b02c394b2acd616dbd7c06c06819be15b69d40aeb93b879503b9e41e707b93733ae36c9a3d5ab2bcdbd1125ca7c87cbdce2028cfa42cdc2117a55a27944430ad05879ec7fdd7c79244532632d9f3e5e2204b9930a51d95251db3cc1fb4ae82a7d1c0a550fa1b541bca6762d07c587781db12c4b6fc904d3c764584b27294eb5b8de88ee8de6b6183f3432741f26c68d3e773f571b76aa42ee5c7867c07f1b248caa51b89406c31eb2473eced6a4a759198319f2dc59e6b2a1bffb95bc2d717e3ac94d738a05f6f", "eon_public_key": "0x21fa1c301e6f736775d5aabfc7240073bf71ae72c7d0b6766c734be9e9df35252ff307a3e2cc7aeef964876904c89353fa829b54eedf46530c3b40713bd7bb9812137c67c130d887ace762386bcb8a6073a4f82f5f0800acc51aea283bafd0f41535befd1547abc9d7d29725b3081b04edfa721488a4dcc4648bc7c30efba5ff", "epoch_id": "0xcfb39b5cf4af554d20e4dd49f5e78a9023f8f0a2d7cc6eed9fbaa47a5b02838f", "sigma": "0x09d073e3ef705fb69ac2d552559528e9da2aed1c9c57327e77c78c029bf56660", "expected": "0x0ba11977dd2c2bf8b099e914a10afc1106c444c26cff8b3041add40725b045b52fb103bb939970c69f111fcd9bc5cf131f227a53f003b5802fde1f8c95ba96eb06337e6ca9274fd1631aca270f1c623b7247f54870fa7f56115d4bb62245867b0476f9f7e4743ee4a6bae26598bda64d3e2db9e74aaeb585f887336a16718cf73ef2604eb5b4330d91e33afb385c79ccd4310dba37037b380890ba349fd4aeb384e0412d4780714ecaf08883bae4a8fece613b5946142ea29890fb03151e2d105ab52e829e7c8e4d732016b964222fb2e33b3121ecc623fcd902c017981c4beeadc81e4510f64952176d9bbcf97a76b55e28b5b093bc3f85db6ed2a804ce8ecfbe35b99b38d07557059f76addf8f201010ba65575408735caa93b1bbbc99454659064a97db7391a3e9c0a62ed441053fe9c974719c37d38abeabc7128fcf90f04ab14608fd009b33e0a808f9c82e4ef39afc2ac6a60617aa734045a0d02f782b5e2fb26ce2883d439533961c6ea9029baddbb0f8c17cd68dfe35e352653ea09a40a0d4fcfa65c3eede46e3bd14b9d159cb1c73089b979b41d2afbbe32a326c2d4f461e1747d585bca4ffc4c1cfaef4e5314e6f6ba309b4ce178980ec27aa9e5483fcce6a714b9a28c29e934cdef9f4f9c5e895b1963f15393f56cfd3b3f5aae60020c8363466cd94fa564008add8441bfd87285a54a7196abb02c2423ace4068" } }, { "name": "decryption 8", "id": "15", "description": "A 321 byte message.", "type": "decryption", "test_data": { "cipher": "0x0ba11977dd2c2bf8b099e914a10afc1106c444c26cff8b3041add40725b045b52fb103bb939970c69f111fcd9bc5cf131f227a53f003b5802fde1f8c95ba96eb06337e6ca9274fd1631aca270f1c623b7247f54870fa7f56115d4bb62245867b0476f9f7e4743ee4a6bae26598bda64d3e2db9e74aaeb585f887336a16718cf73ef2604eb5b4330d91e33afb385c79ccd4310dba37037b380890ba349fd4aeb384e0412d4780714ecaf08883bae4a8fece613b5946142ea29890fb03151e2d105ab52e829e7c8e4d732016b964222fb2e33b3121ecc623fcd902c017981c4beeadc81e4510f64952176d9bbcf97a76b55e28b5b093bc3f85db6ed2a804ce8ecfbe35b99b38d07557059f76addf8f201010ba65575408735caa93b1bbbc99454659064a97db7391a3e9c0a62ed441053fe9c974719c37d38abeabc7128fcf90f04ab14608fd009b33e0a808f9c82e4ef39afc2ac6a60617aa734045a0d02f782b5e2fb26ce2883d439533961c6ea9029baddbb0f8c17cd68dfe35e352653ea09a40a0d4fcfa65c3eede46e3bd14b9d159cb1c73089b979b41d2afbbe32a326c2d4f461e1747d585bca4ffc4c1cfaef4e5314e6f6ba309b4ce178980ec27aa9e5483fcce6a714b9a28c29e934cdef9f4f9c5e895b1963f15393f56cfd3b3f5aae60020c8363466cd94fa564008add8441bfd87285a54a7196abb02c2423ace4068", "epoch_secret_key": "0x086335bb0354449fb059dc7c051e3e9f6c4e71ae197fe27bafd7b15c3e9ce10923104dcd30a71595350551d61e7cd717f752b5c7a9259dbd3f35e9ab70d6db05", "expected": "0x54ace039654f716bc09912b5660a63648f9400e2b165e26714c195fd740dff5af3b1831df99ed04921f6dff41b6aa71e1bdea45ca72fffbeed4424b8c41e5f525b90a5ed061b96c512df78a381970beafc2063830b13736125ba979dba41f147841f612d871d5f406caecd54fb7b2176745b9d44d71f0cd98869b02c394b2acd616dbd7c06c06819be15b69d40aeb93b879503b9e41e707b93733ae36c9a3d5ab2bcdbd1125ca7c87cbdce2028cfa42cdc2117a55a27944430ad05879ec7fdd7c79244532632d9f3e5e2204b9930a51d95251db3cc1fb4ae82a7d1c0a550fa1b541bca6762d07c587781db12c4b6fc904d3c764584b27294eb5b8de88ee8de6b6183f3432741f26c68d3e773f571b76aa42ee5c7867c07f1b248caa51b89406c31eb2473eced6a4a759198319f2dc59e6b2a1bffb95bc2d717e3ac94d738a05f6f" } }, { "name": "encryption 9", "id": "16", "description": "The message 'A message'", "type": "encryption", "test_data": { "message": "0x41206d657373616765", "eon_public_key": "0x2fdd0533e962db963dfad19fb76960fe40445b349623bd0a49dd3c15eda77027138a625558a7c5138398a2d37b5805a622f8f7dd1e3ac85a5a773a3fd4c01a7429c515980405c3a5393b1488c422852d01e234c053a9eb43a6356a46a0185a742d2b503f6acb0981277a75b1a434ba60192b81c91f5e0b162a42676564ff89e6", "epoch_id": "0xd46182d474c54e0ff4398168a9cfc8a0405a36763ad73f64aee4374473045df0", "sigma": "0x881db97b104f8fd2d66359c6bafae7d6962e8c17275d2968d4b9352bf2f78566", "expected": "0x2935354b3e2ec30436afbb3291d6d7203a8d2471f87195431b6cea978359e4ec269df2a0e074de761105bf9290864935940ee47564b8e9989ed133a9eada8b790f8d7e6c622f1eb329c5135c78ffdad9544205e1bf2f0848ef35d6e8c5a5bad725133356bf9cf466023c565b67c2e8b905c0d0178ea40808115c2eeb93c9cbfc092d03ef39e69089924f57f70dabc65a6f5b29b73df6625824690c4aa8e837b11904ff326ed1612fe77727d83adc7d8f9a13b6d1152fbf64428b9f7fa278f7ef" } }, { "name": "decryption 9", "id": "17", "description": "The message 'A message'", "type": "decryption", "test_data": { "cipher": "0x2935354b3e2ec30436afbb3291d6d7203a8d2471f87195431b6cea978359e4ec269df2a0e074de761105bf9290864935940ee47564b8e9989ed133a9eada8b790f8d7e6c622f1eb329c5135c78ffdad9544205e1bf2f0848ef35d6e8c5a5bad725133356bf9cf466023c565b67c2e8b905c0d0178ea40808115c2eeb93c9cbfc092d03ef39e69089924f57f70dabc65a6f5b29b73df6625824690c4aa8e837b11904ff326ed1612fe77727d83adc7d8f9a13b6d1152fbf64428b9f7fa278f7ef", "epoch_secret_key": "0x0e87ad4cf733c442c9edb95bc7edb10a52003bdc54e94e35080d2a2dceb35c900d5bcddeb3abfcfc371dc402fdbd8e97339efb1308a4ae2363a0e6a8ac48bc11", "expected": "0x41206d657373616765" } }, { "name": "verification 1", "id": "18", "description": "Verification of a random 32 byte epochID", "type": "verification", "test_data": { "epoch_secret_key": "0x2f9bb0d8fbb880c25de2c4403bb6d2f93ce8230ce674e6c0493c8d7d4edf7bd51857f61b9c65b2a6d25dff8ab2b49502b97120a501e36c05a389329f431e3392", "eon_public_key": "0x05875055f09c3e7b013860a3d902d0df498321e3c68407029a4ff77e6ff6e0a0089aba691059433c2187397c437689c95f8717a5621ec3eefd3d02a3a02959da0da47d04629fa363ceb092887c4f402ad10783ec0a43bfd2f8f4eb99d6461ec01cf5abccae48fd19353644477e116983320caba46ccac30170729c78461dd374", "epoch_id": "0xb465f5693225df0d5425e33ecdca4bceadce7602e49ac46b919992b1930aae20", "expected": true } }, { "name": "verification 2", "id": "19", "description": "A failed verification", "type": "verification", "test_data": { "epoch_secret_key": "0x181ca31bb6347455406d0625616c6299c1b7867a8b5ecc57c8a602e36c418de116522bf1b47835c1225b8e416eefecf9a49c9367ad465bd8459de223aa16ddba", "eon_public_key": "0x2f67ca5b703d61a11e2338f899b30cf3680e5132ebc63fabe8a4a44fbe01d5300e178cfe132d13fb880b355565ea9c2be278e5415d2ffc3238f80d753cf4ab9f14bc747d5f6a5b14859a48bc6c33e2a6cc09688775070332f0d2afcc5ce46ba120ac95b8e3f5b6a61b0410c4a724932867f28e009551a8c367d344e8dde0cf22", "epoch_id": "0xf990f90dfd6823ec16f7e7922f76d7343c6a18dbc154d370c8c1593f75d9a750", "expected": false } } ] ```

Output from testrun:

./bin/rolling-shutter crypto jsontests -f /tmp/testfile.json 
[001/020] 'encryption 1  ': A zero byte message.                       ID:   0 PASS
[002/020] 'decryption 1  ': A zero byte message.                       ID:   1 PASS
[003/020] 'encryption 2  ': A 1 byte message.                          ID:   2 PASS
[004/020] 'decryption 2  ': A 1 byte message.                          ID:   3 PASS
[005/020] 'encryption 3  ': A 31 byte message.                         ID:   4 PASS
[006/020] 'decryption 3  ': A 31 byte message.                         ID:   5 PASS
[007/020] 'encryption 4  ': A 32 byte message.                         ID:   6 PASS
[008/020] 'decryption 4  ': A 32 byte message.                         ID:   7 PASS
[009/020] 'encryption 5  ': A 33 byte message.                         ID:   8 PASS
[010/020] 'decryption 5  ': A 33 byte message.                         ID:   9 PASS
[011/020] 'encryption 6  ': A 319 byte message.                        ID:  10 PASS
[012/020] 'decryption 6  ': A 319 byte message.                        ID:  11 PASS
[013/020] 'encryption 7  ': A 320 byte message.                        ID:  12 PASS
[014/020] 'decryption 7  ': A 320 byte message.                        ID:  13 PASS
[015/020] 'encryption 8  ': A 321 byte message.                        ID:  14 PASS
[016/020] 'decryption 8  ': A 321 byte message.                        ID:  15 PASS
[017/020] 'encryption 9  ': The message 'A message'                    ID:  16 PASS
[018/020] 'decryption 9  ': The message 'A message'                    ID:  17 PASS
[019/020] 'verification 1': Verification of a random 32 byte epochID   ID:  18 PASS
[020/020] 'verification 2': A failed verification                      ID:  19 PASS
000 tests failed.

@konradkonrad konradkonrad marked this pull request as ready for review November 6, 2023 14:00
Copy link
Contributor

@jannikluhn jannikluhn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

JSON and Go is not fun...

There's lots of panics, but all of them can just be converted to return errs as far as I can tell, didn't point out all of them.

But looks good in general.

} else {
f, err := os.OpenFile(args[0], os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0o600)
if err != nil {
panic(err)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you can just return the error here, no need to panic.

"github.com/shutter-network/rolling-shutter/rolling-shutter/medley/testkeygen"
)

func GenerateTestdata() *cobra.Command {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
func GenerateTestdata() *cobra.Command {
func generateTestdata() *cobra.Command {

for consistency with the other crypto commands

return cmd
}

func RunJSONTests() *cobra.Command {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
func RunJSONTests() *cobra.Command {
func runJSONTests() *cobra.Command {

}

const (
RANDOM = "random"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

constants should just be camel case, not all caps. Note that the first character being upper or lower case determines if the variable is exported or not.

RunE: func(cmd *cobra.Command, args []string) error {
errs := ReadTestcases(filename)

return errs[0]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this would panic if there's no error, no?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It doesn't - errs is initialized with the length of testcases.
Nevertheless, the intention here was to allow for some kind of error aggregator (i.e. https://github.com/hashicorp/go-multierror), which is not implemented.

},
}

func CreateJSONTests(enc testEncoder) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this should return an error to avoid panicking

v int
}

func (enc *testEncoder) addTest(tc *testCase) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this method should return an error to avoid panicking


var buf bytes.Buffer
if enc.i > 0 {
buf.WriteString(",\n")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

as far as I can tell, all the write methods return an error which should be passed through (if err != nil { return err })

rolling-shutter/cmd/cryptocmd/jsontests.go Outdated Show resolved Hide resolved
tc.ID = fmt.Sprint(enc.i)
switch tc.TestType {
case ENCRYPTION:
tc.Name = fmt.Sprintf("%s %d", ENCRYPTION, enc.e)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe Name(e) could be a method in the Test trait, which would be implemented separately for encryption, decryption, and verification tests. Then you wouldn't have to modify the test case here which feels a bit strange.

@konradkonrad
Copy link
Contributor Author

There's lots of panics, but all of them can just be converted to return errs as far as I can tell, didn't point out all of them.

I used panic generously in the generating code path, to shorten the error handling boilerplate. If there are errors during generation, there is not much reasonable recovery IMO. Do you still want it to be changed?

@jannikluhn
Copy link
Contributor

I still think it would be cleaner to return errors instead of panicking, but in practice the only difference will be less scary error messages, which is not very critical. So I'm ok with keeping the panics.

This adds the commands

```
rolling-shutter crypto testdata [output_file]
rolling-shutter crypto jsontests -f input_file
```

that will generate or execute tests for the methods

```
shcrypto.Encrypt
shcrypto.EncryptedMessage.Decrypt
shcrypto.VerifyEpochSecret
```

The output from `testdata` is a json file with test specifications
similar to
```
[
  {
    "name": "decryption 2",
    "id": "3",
    "description": "A 1 byte message.",
    "type": "decryption",
    "test_data": {
      "cipher": "0x20b1bd1817ead1ccf50b04ef9b77fac4c6d9b60b63436b54483f642128df31fb204d9460355ab724eb255fba7459b170306f42fd2dd7d5acc43b9c96287602760ed9138b682a195489749669573a8492b615e9c1b5185fc272a1268fad8c035e03162b507b968a34d211f168e5c1e9e3df975974e242d36d6be99ba88dcb0944fdcb3887b2fda72ce25f0dfcd8ef6d7de49a1c4d66de07ed591aa84caf406c42c1c88417d5cee83b3ef00da832d3ed35017ddc602c3a24c7deac3af725f27266",
      "epoch_secret_key": "0x144e428af1602d58bfb9a12bb31597f45c6c2c9d227b7a6d3f35f37d333548eb0888206e52d7cb2c6b1de7770fc2ce475a08e6cf4e95a608ec5bd93efafed6f3",
      "expected": "0x11"
    }
  },
...
]
```

There are three test types corresponding to the crypto methods from
above: `decryption, encryption, verification`.

For `decryption` and `encryption` tests, an `expected` value of `0x`
means that the result should be empty (i.e. a failure,
with the exception of the special case of an empty encrypted message).

For verification tests the `expected` value is a boolean `true/false`.
@konradkonrad konradkonrad merged commit 19a562d into main Dec 4, 2023
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants