From 50c18f35b97af9fbdb1f94c7f24245e6bf13b40d Mon Sep 17 00:00:00 2001 From: emln Date: Mon, 2 Jun 2025 19:35:30 +0200 Subject: [PATCH] ALL the CTFS of Crypto2025 finally --- crypto-asimmetric/RSA-1/factor.json | 1 + crypto-asimmetric/RSA-1/factor.log | 62 +++++ crypto-asimmetric/RSA-1/rsa_1.py | 41 +++ crypto-asimmetric/RSA-1/session.log | 13 + crypto-asimmetric/RSA-2/attack.py | 56 ++++ crypto-asimmetric/RSA-2/chall.py | 20 ++ crypto-asimmetric/RSA-3/attack.py | 32 +++ crypto-asimmetric/RSA-3/chall.py | 11 + crypto-asimmetric/RSA-4/attack.py | 29 ++ crypto-asimmetric/RSA-4/chall.py | 8 + crypto-asimmetric/RSA-6/attack.py | 22 ++ crypto-asimmetric/RSA-6/chall.py | 19 ++ crypto-asimmetric/RSA-7/attack.py | 35 +++ crypto-asimmetric/RSA-7/chall.py | 16 ++ crypto-asimmetric/RSA-8/attack.py | 35 +++ crypto-asimmetric/RSA-8/chall.py | 11 + crypto-asimmetric/RSA-9/attack.py | 14 + crypto-asimmetric/RSA-9/chall.py | 9 + .../inferious_prime/Arithmetic.py | 97 +++++++ .../inferious_prime/ContinuedFractions.py | 43 +++ .../__pycache__/Arithmetic.cpython-313.pyc | Bin 0 -> 2603 bytes .../ContinuedFractions.cpython-313.pyc | Bin 0 -> 1506 bytes crypto-asimmetric/inferious_prime/attack.py | 16 ++ crypto-asimmetric/inferious_prime/attack2.py | 32 +++ .../inferious_prime/challenge.py | 31 +++ crypto-asimmetric/inferious_prime/ct.txt | 3 + crypto-asimmetric/inferious_prime/factor.json | 4 + crypto-asimmetric/inferious_prime/factor.log | 251 ++++++++++++++++++ crypto-asimmetric/inferious_prime/session.log | 54 ++++ crypto-asimmetric/inferious_prime/test.py | 30 +++ crypto-asimmetric/inferious_prime/wiener.py | 24 ++ crypto-hash/equality/HashPump | 1 + crypto-hash/equality/HashPump-partialhash | 1 + crypto-hash/equality/MD4-Collision | 1 + crypto-hash/equality/attack.py | 17 ++ crypto-hash/equality/chall.py | 27 ++ .../back-to-the-future}/2 | 0 .../__pycache__/chall.cpython-313.pyc | Bin .../back-to-the-future}/attack.py | 0 .../back-to-the-future}/chall.py | 0 .../back-to-the-future}/des.py | 0 .../0024f4d0c2b3d981466de18eb8f0a755 | Bin .../013e1aa0bd32b92f105abddbcb2e4dfd | Bin .../016f2deaa7b087afc8784da8397a22a5 | Bin .../0339ca8760519fa43df56ddec27a24e7 | Bin .../037f590478d87f55cedf7b1ab1d53a82 | Bin .../03c414397bdde3743856111af41ff1bf | Bin .../04433ec6a092234083ccb75f70be7844 | Bin .../050e985a050d81dfa77f0827ff555076 | Bin .../0571127e1b066fcd0ab93df9db3c231e | Bin .../0753e7809f4e8bde6701b4d27193c28b | Bin .../07b9966fa556e07bb7dbf9d7a97c5d6a | Bin .../085e25cb55018865bad411eac1273ec2 | Bin .../094a242c07093b9b0a8bf37702d4d6ed | Bin .../09e32f0db5c88c55bc994ecd2d6cbcc6 | Bin .../09eb19248af327923541b8fcae0c34f9 | Bin .../0a52c4727ae4311cd3a51114e42472c6 | Bin .../0a6d00dc979a6696c7dc339e4400a0c9 | Bin .../0b8def7c22ef61cb5591a9c080f8c117 | Bin .../0bbec9d663098e92dc7d014a4b7f032d | Bin .../0c1f1c2450a35deebee44be732d558d8 | Bin .../0c23ca3d1f4169ce2147cf8a3180d454 | Bin .../0caac73c224f83af1261050ab6ca5bc6 | Bin .../0d2a8e6c32cee51c76eef735eea453d4 | Bin .../0eb3cd9a68a2d1328664c716c96074ce | Bin .../0eb7bd4f6d34532740aad04e035261f4 | Bin .../0f4b7f5961fc0914870a1d877d5af208 | Bin .../102b39f6be00c1781f576ab0acfef156 | Bin .../104cca7fdf9eb7752f4862d38e6eb718 | Bin .../10fe679fe6f5a8d3c40032c9ffae4f6f | Bin .../11955af46d6389a50ae2dd9582509472 | Bin .../11c5a55a41c63c736331c462cf5c3e21 | Bin .../11ea3092bffa93df79a32e656a8a0586 | Bin .../124926dffa9468ff2a63e8ebbd70d4fc | Bin .../12fcbc367eb9e88c32e55632361cc26b | Bin .../153b504567a8ccb59e454c265f46b8cd | Bin .../15626afe7c5a68139b2d0c823b10b225 | Bin .../156991eb1d1094c1966cbe78ecf850e8 | Bin .../16d0908062af6846734edfa5f045a7eb | Bin .../16fd8e2a8030276090ee1af051f12820 | Bin .../1758b09b9954119108661b47afd46133 | Bin .../175c311f06644d8abf68bbbe58f2419c | Bin .../1800c2925b752b572f86ed7ee84e6447 | Bin .../1877a6d8ef9c4bef7b8b20352efd6315 | Bin .../18c96d9bf2e5d9a806260b2073cc02ee | Bin .../18e75151796c652d44534b00d0212909 | Bin .../193c50b53639cb1c03e36dfc740123ac | Bin .../1b2ca741d7a39db18a40eb32c2d11b34 | Bin .../1e68c4649db3fe5e9f137d33b1750a88 | Bin .../1f658eed99e5d7de9176b624a3adc574 | Bin .../1f68d6d0f4c582b441f14dcde94228c5 | Bin .../2029240f6d1128be89ddc32729463129 | Bin .../203905a31c6f852e9d45c346da0c8e2e | Bin .../208455b2dfc729e62e1d212617c5c103 | Bin .../20874b46266e4b74b7ab1b03f63dcf73 | Bin .../20989fe5ff4ecc9d2220dd6a0d753437 | Bin .../210b1035151e9760b507a7c1edb1cb67 | Bin .../220fce4c0ec426d5753fbaf01bfb9a8d | Bin .../2216ab4b98005fa61b3b5a023e33106d | Bin .../224eb7214627856502497725cace3e24 | Bin .../22758786fc4b59ca7a0765ffdde20d3d | Bin .../22aab843b3edce5f80919d3827c4a214 | Bin .../23fac18da96856adfb0298e2ac196058 | Bin .../2599a275682361c46cbf46b22160097b | Bin .../26155c8b1c13dd23400c7885241f3b83 | Bin .../2690b7f4cdbc7e9c649c07e63cd8f38d | Bin .../26f220fa930f333872b125bc80cda0b5 | Bin .../272e7e2567476c69996585bf3a75e852 | Bin .../27e405db11e63c38bcb22f24fe2cab5b | Bin .../2940ea81618bc3b9313c8a0818f9f9e8 | Bin .../2a5f27fae53f8a864398fcc856e04e90 | Bin .../2aeb371d8adeb94ded786e5bf923a3ef | Bin .../2bac0005df40528459d260e16fe6fb80 | Bin .../2c2b79e3fa4a76558fec5886a8bcf220 | Bin .../2c386f464fb69ba5b9535527e53a1136 | Bin .../2d46a4d5e411f544f3d308f41cc75a05 | Bin .../2d8c6c66ee7c4a9f51f9b344f954d0b3 | Bin .../2f320eaf6c96a4bc8f5852b93ae1ff3b | Bin .../2f85fc72a4cb0c8616ef7fa12ce8d540 | Bin .../2fd1a29c36876ebdafc41f35f5656a9e | Bin .../300980f59c705be97d9ab183917839d5 | Bin .../30a4aea5a1b256f0c0910058991850a2 | Bin .../30f0532e5c0e8ee9d9919b13b022acbd | Bin .../30f34c45eb7fef683df37d944322633f | Bin .../3104ce046559c1c253a800af12c11e64 | Bin .../31868a74a62f39bf8e8c2f3d378710c7 | Bin .../322c54936eb99d2eee4406c2495ac1f5 | Bin .../324b77917a59fd8c923e074f24fe00e5 | Bin .../32f60d142583485078042e2210ad12cc | Bin .../3399486a02f05b92c673a40871d73091 | Bin .../341041db96bd1ad1e7781a5be2fa0091 | Bin .../34ff82dc7a0ef493fa1869c893dca9da | Bin .../3560f0c435443111efbf141078742f06 | Bin .../35c1bd6a211d52bdc6395e2bb660143f | Bin .../35d4108dbd8fac5efa936ceae3778e69 | Bin .../36319ada12c1c741080f25750d19d96f | Bin .../365ae5ec1d81f1a0e2d8e85fc19c7c73 | Bin .../3952e9811cc447a49f1f7b36cf046cb4 | Bin .../39d6ad670b8f10ada9ba0fe9481d661b | Bin .../3b726120e586c42ee5db4859cffd5e61 | Bin .../3b8ff83a8a50d3e0e3900805ecb3faba | Bin .../3b9218f16c20b24822c1e7c2b21b2dbc | Bin .../3bb632bde3434d70741228eda0bdf763 | Bin .../3c32e3388a87a84a095d0afbe80823e2 | Bin .../4045d29f0b79c1d08649341810340839 | Bin .../4194f36392bf1754170d5fe415784bb6 | Bin .../41e7ceab99b36b9c6ddfceda67b23d86 | Bin .../44e295cb48a46ba798a4deb74c1d51fe | Bin .../44fecfba0dc706bae1979dd26541f996 | Bin .../4637adc8fcbadc7335a5db1afba82d5b | Bin .../46d7e4294b97ab96e98ec04a25c1079d | Bin .../474f2efa7ab0b8ebdd5b31d0e04d8936 | Bin .../475265cc6b2f15d7876969341f9ecfe5 | Bin .../475406c8bb6137367c32491d9b11e8b4 | Bin .../4881cccd9d4e554d12b3b4cb562e121f | Bin .../4a2fdee53084fd9c9cefaba0b3f2aafa | Bin .../4b4d9e68e4fce71f0456346365a32eaa | Bin .../4cf826448fa3bd52099306ea9b466de5 | Bin .../4d8ef0814c65793be382a2cf0bc877e2 | Bin .../4fc63499e023c5028c6a9da7d5480d60 | Bin .../4ffef230349985069206288eb02d82b5 | Bin .../51cecbf8195bfc6a13e0da953bd48148 | Bin .../51eaea4bc081a86a1f3b45cb97d62cd2 | Bin .../52cdc5894b84ba73ce12a4e2eccc036b | Bin .../535ea9247d222f784cbe0fc03b48253c | Bin .../53a2c58e148b94e301ec515a879fa4c0 | Bin .../549ba9bf9c35c315878dea93d90b5258 | Bin .../557c207c4a8f4aa12d0be3fb37f26c1b | Bin .../5581e4f92bbbf541137bb9fd01e40138 | Bin .../55d07cf56513f7b6dcf6720762cced16 | Bin .../56c3c4879f2bddff9d00ef7e6275a697 | Bin .../58b7ac10ff62c14e1de4311b560754b8 | Bin .../590bd52c75abd2f0d3639406b0f1c30d | Bin .../593c688f858bd03766e90a3e9a2b282a | Bin .../599a13187cf3905bd83c51a88e15051b | Bin .../5a348ab337dd4e8e7c4e4cea1f353ff7 | Bin .../5aed18302d608521438e3a868452d8d8 | Bin .../5b424fd21abff51f1e624a85d51b98d8 | Bin .../5ba2f545b95750b6bfe1a51fab7fb873 | Bin .../5d51a79f68d6250ed5b2f541cad26233 | Bin .../5d651b3090eeb753c83660ab85f8f92e | Bin .../5da1f95513e0a30f161b44e6a72ccd9e | Bin .../5e0b5119963e598a12b2e8d11d826f87 | Bin .../5e12e69a160901f3ba1f2aa5d61e6c55 | Bin .../5e3ccf08d66b4f01faa3310cd9c2fa7e | Bin .../5e650f50f36a1ec55b0481b8cd59cc16 | Bin .../5ed3806c4c1423f7fe4b95ff8ba7b051 | Bin .../5f9f092c20daaadd6e258cc43af81769 | Bin .../5fb994cf3f73a61d50f371985221734c | Bin .../603c3b0f06af7b425b5efd8e9e3b745a | Bin .../60cfd184618711ba978b7e1b9f31a2b2 | Bin .../6161ef45609b99d43b48b6b7ca147cfc | Bin .../618643ea4d02452e823ec6df41f52bb0 | Bin .../6211c8e9cd4e37476e3ae51a811e6b33 | Bin .../62f15f1e29ed09ceeec0a334371c98ea | Bin .../64eb52dbd0218e7e9211367cb1a370f0 | Bin .../655a2ab36539350da3457188ca1b7936 | Bin .../658ef25095bee94c521ccb986c8605a0 | Bin .../66284e62f56cd4899ad8d91118241103 | Bin .../66943cb90e86f8a416fd87c01c338159 | Bin .../66946c8ad5068199b1d26cf3c6775eff | Bin .../680932858c7c7bad9b25a0b904b14cea | Bin .../681fac0a6daf110c6de16ea27eed86de | Bin .../68e7a49a02a4835ef6c55562b07dbee2 | Bin .../694f624b9ac56068b2b10be0b73cbe88 | Bin .../6a2976642738f63614c8f3bf4707f895 | Bin .../6cd96cb30ee9d148980fe470ad234108 | Bin .../6f672b111009ff2b0f581d15fe590c40 | Bin .../6f6a6c916e873716387a15a5b65b9bdd | Bin .../6ffad316904ff85580781e6de604193b | Bin .../7104cf420d98e3ad5d4a7ec2774bf6d8 | Bin .../72c1be3fb528c9dad754a11c38157cb2 | Bin .../7379c7079d5b3f39a728ca4db1efc909 | Bin .../73b4f5158c17b7856f27d4223342263b | Bin .../73d90008cfe88e6bcbd7d981ef97ce73 | Bin .../75460bf321af4f464430c25b892c6401 | Bin .../75b9032eb9a907c8bdf10a742869b93b | Bin .../75e30eaa64fbc5c30aaafd1f6b5a1ec9 | Bin .../7611e8459b1c57c139dd815af9c38a6d | Bin .../7620eeef9aa9bb45aa4105100c2aba28 | Bin .../774d132d942cc4e1df0a9b65f56d989d | Bin .../7b351c93040332dfa14d20943ab1fffa | Bin .../7b54bbd31475cdecc2ac6483b3d3d2d8 | Bin .../7c0aa187bd2b31ed70f027ba782fe016 | Bin .../7c5ea86c5f948df7d1b3a080ed06a534 | Bin .../7c7acbc49ba72490e28e859d01efef4a | Bin .../7cf9fbc07f681f6f75da84738dfe4855 | Bin .../7d04354d3f2607804cc2a300edb151bf | Bin .../7e06e982a4bb60d5c2dcca77c6cda329 | Bin .../7fec0913063560cd930414cab2393246 | Bin .../80261ed5475b925955fd4baddcb851e1 | Bin .../8191d002f3140fa7d644547d5d095055 | Bin .../81cc7626288f9a804b06b66307b37b3e | Bin .../8360be0b64a48671598a410327283aea | Bin .../845556a2734c30e0d96b7bdfa0a82d9f | Bin .../846667689ca0fd8add512ce55c04fa72 | Bin .../8487b52e9db2efa57f688178a32f1280 | Bin .../8502fc6e0df4d9fc03abcd552c1bf898 | Bin .../86524c3023c21547b5ece1e90b3acfc3 | Bin .../8735ce113f7ae5b512f09140a41870d5 | Bin .../893d4ff49053c750ae186c4ca8b0e913 | Bin .../8975db8d69782ad129a121656c516c32 | Bin .../89ae79a7f847f2aed1dec02434721beb | Bin .../89ccf44a4bfcbe8d6334014843788840 | Bin .../8b756f4b7369e6ebe3f9878cc3f84735 | Bin .../8b85aa662e6655fcefdc9d802d6379b4 | Bin .../8d01680ee416d58a97dba83e6fd6f876 | Bin .../8dc34737beb8c62cf2ee397263f4884e | Bin .../8e3397bf2f65f7d28b85af8059742f08 | Bin .../8e944ccdcedd5715279e25e60964639b | Bin .../8f24ad0909b3832bc1175d87e6d6dd67 | Bin .../9022c917e9bb52f7a3f9df245ece4959 | Bin .../920f185c31832f3643f275c94b6b6436 | Bin .../93cfdcd1af2e31356ba3e4c797c7180e | Bin .../9406fe9ae36b2cb3db15fcedf29d8992 | Bin .../954589c7959251139379e24a16c9e437 | Bin .../97178654b5c0c9ca132ba2720ad4bd0a | Bin .../9764607bd0d51e03d21bc4f73d7a3fb0 | Bin .../982cc845e05dfd464f333f7d16d55f3a | Bin .../984f06e0ef3f2b3c55d9fbbe3cbd4811 | Bin .../98e47b81eb2790747fd6a39be77f858e | Bin .../990b8182389a471712fd4449c602f1a5 | Bin .../9924990b4546e6196feae2e41bcded8c | Bin .../9a15c035a8938bbaf7ee32ac1aa45f15 | Bin .../9e013599d6b47a15db72409a1629f594 | Bin .../9e57e62465a479e679a6adbd4b958157 | Bin .../9ea35b83ec748d413674ea8e6ca87ccb | Bin .../9fc417b4957fde835b5e7b64b5104ac8 | Bin .../a00a363e74e8854d89553aedcabb4c6a | Bin .../a07fed5d740a8dd02ef4928198e01133 | Bin .../a0bf9254a3236ad8dac9f6675055541d | Bin .../a0e8349de3483ae232069dbfc1396c7c | Bin .../a101e31a62c14e8ea2cf4c779e1b7d37 | Bin .../a22a2e117a8fe7f9a97f845528859ed0 | Bin .../a348d839170ede14f17edd94e2f166a0 | Bin .../a3d5bcca8210816c93aa4c61352532aa | Bin .../a56aa0344508a51bd93a4f3ea8d6c30e | Bin .../a57b6e892f4830587aea495552784ed9 | Bin .../a5a7c21278a12837bd88b87302fe68a7 | Bin .../a5e8f792a5f0fdcdf5f666a1d14a23bc | Bin .../a803d35caa6bdd7e02955a7bd7319d28 | Bin .../a8417dbcc14d9a8cf376b5d6ac2be10a | Bin .../a86aa5afcb0a6f305aa8502781d96fcb | Bin .../a97a1ab003cda1e66e80df2a97f4e4c8 | Bin .../a99e725d1a5105e4330dbb2ab295b044 | Bin .../a9dc030de1ace0b44370bee19e7acc70 | Bin .../aa774380b6cfedcacd5229d8d55de6ea | Bin .../aacf73f04458fb0cac639324f8d23ef9 | Bin .../ad1354ac688b6e7cb3d324495b7f5eb2 | Bin .../ad16b66739c9bbfbf32c3130f98dd0a7 | Bin .../ad99f6117878482ab7106b4d974cfe90 | Bin .../add69d43e0c9c22cb6ae3f24658b21cd | Bin .../af23a5dd9dbbe86d6cae6ca8a95a94c9 | Bin .../afd84e1511d5e9e36607751cf7b7ac96 | Bin .../afe1ec12fb39790665014610669101bb | Bin .../b05afd0b1ba046e6e56dfb91cade5852 | Bin .../b1247ef5153c8cb20af6eaa532c4e53f | Bin .../b34f7207987081570979b3c3bbc6ae2f | Bin .../b593f82fb66d006980e8a43a0417a1ef | Bin .../b5e3b8a6b694614c74fa55892ec7831b | Bin .../b61f47d48cfde46dc72a64c6ff49259b | Bin .../b775978d6a3936c4100e344e8378371e | Bin .../b77f6ebf9bf330d992f7fcc42ad3eb80 | Bin .../b79918f57d6585431b357364a047b2fb | Bin .../b7fa05ef1c055c8721a0844fa2f9c517 | Bin .../b807e74d42b1d517c52e3a34da1fc725 | Bin .../b880a4c620be6a758aa72e4fac35b79b | Bin .../b90531b031af291fc09f3b47f35d1871 | Bin .../b9400bb738c7fb91a7635749b053a137 | Bin .../ba501d97a8ebd9381fa271b3ab0d7697 | Bin .../bb5f6cf3892f52c07e415dc25f8f101b | Bin .../bb8d2676fc45b286c0960ab707864605 | Bin .../bc7f8eea85fde0dab7441656a0720464 | Bin .../bd172c6f4b31759dec337e178368e06c | Bin .../bd3c4e53cec3fc00e19f9aa86d41cd67 | Bin .../bf5fe566688bf3064500b3385ebbecc2 | Bin .../c0cb3c32fbabf136c0e37c5c72fc0d72 | Bin .../c1081ae4a28b263b856b460f1e3aad0b | Bin .../c1414d247b0547ff543b9cc03c9b90d8 | Bin .../c310c4fd7a943a6b153fc77027b5f8b0 | Bin .../c31e413c0847de4691012ef81e31acae | Bin .../c321ceed93116c26ec88e3254fa3cd97 | Bin .../c4e25dd28c5cd961ccea2bd778bffd4e | Bin .../c629ee7f10f944228ad6f78ae03738ea | Bin .../c6506c668b96a1eb79cde01880bc8425 | Bin .../c6997ce4a7d458b00b06210ae7446850 | Bin .../c7f207647209e38730bbe64c9249abe5 | Bin .../c88c19634f04d1be57cf5b79d52202c7 | Bin .../c95a6b7b5656c9a6b3194a242f8231a7 | Bin .../c9a0e34374ced611ddc8dbb936fd2c2b | Bin .../ca8e5e6d4bad4979a94c477c5b411acd | Bin .../caa93220695c6291992e702873ef8c6b | Bin .../cafdd19d230fec60d9022e9e9eb67ff2 | Bin .../cb03c2a66a4bf7139c9205ce5b0feb5a | Bin .../cb5460332e84b66b455014c9b77bb6bc | Bin .../cd07e684036026dc7d067803bde21393 | Bin .../cd6b9d32946111528aaa6fefcba32cc4 | Bin .../cd83f976398476e1f6633a24c82cca00 | Bin .../ceaa00c54604860ca376a77131786d85 | Bin .../cf835731cebab59413319af12a738e94 | Bin .../cfa68eb972fa756c8697a8fcbcfcbbea | Bin .../d0cad7b45a22150d0a5a8512bb72164b | Bin .../d0d6526dc3928c1608dafa53c1fe9c9e | Bin .../d0f85bd43b91c8a4ed49ef3267c4fa4c | Bin .../d0fc857d940dbf06c737897ad95c2815 | Bin .../d11382c4f410be6ea22b86a0420f0379 | Bin .../d1b129979af646f1903f93fda426262a | Bin .../d1d0d1e353b091e55d437fbba7768c0b | Bin .../d1f6a6b3ff606b79ed83489af16c752c | Bin .../d2d35bf9c724a0feec1b446af094e02a | Bin .../d31b32fe78e9e7408d3b1f165ee3a823 | Bin .../d3bc3c2a65cba96928e1ffa8889a3bf9 | Bin .../d5998a88757db1c51a28bf64c368ad99 | Bin .../d700947294c64219224e5510b68fce24 | Bin .../d86641dc0fc1950fc5192156bcdd294d | Bin .../da1192e27218f04c4df981b45eba12f0 | Bin .../da5ffd2e4afdd8b1586525f65b5382f6 | Bin .../da6d3b5ed9ccd8a18515221c7c29f2e1 | Bin .../daeb7defe566351156bec27a5627566a | Bin .../db5c89e54de75a14db842a65aa1a87b2 | Bin .../db7303e646ac2d62cb8bbcaf68cca828 | Bin .../db8deb947463b3320b1399cb9f87bfba | Bin .../dc1dff4e65c17747a9f2043231a5b984 | Bin .../dc296930884123b35a5c53bbcb1ad8fc | Bin .../df0430679640015518d904b92776f724 | Bin .../df11adc24639177bb9c0839d84daa593 | Bin .../df924cf66e321a1348121a1cabcd29b5 | Bin .../dfc2c46d59be654a2e332461cf11447e | Bin .../e256a6fc2997892bd945dfa65d6e3d4a | Bin .../e2b5a66739332a746d43f465ae9889ef | Bin .../e30690e9f3419164d1ca1ed795944854 | Bin .../e3b35579ddaa8fdca3bfdd7589f77f88 | Bin .../e45611843e2ddaf7d897be760a2455c7 | Bin .../e4cdb37fc6127fd3b2aa01d53d00f688 | Bin .../e58c12d06f9064b0c53e828208001d5a | Bin .../e5a6944a3ff0ebf60b4670fe40a7f593 | Bin .../e74297c0a86ae1c128618618a8b50bc0 | Bin .../e778dec5a8adbd18365d124ff668e7f1 | Bin .../e88189732217df5915a5b1c3a8fb8379 | Bin .../e8e138b0058292a5a274d344df3d1195 | Bin .../e923b6aa9df3b01e5182b1a003bf35ec | Bin .../e974e3a27a6325862014cc322254eae9 | Bin .../e9fa9601ed3049fc587f4fe7a79b714d | Bin .../ea4feb9cbd4982377f8952f693c508d7 | Bin .../eb719038ef362e4fde8b7b3224d75098 | Bin .../ee19c744649264c1537173fba3a11df4 | Bin .../ee87118eb53b5c941f2134ee0cd61508 | Bin .../ef064997d68d665a6ef04443d43eaae3 | Bin .../efd4c0fb34e78ea7cd825af8f89b0fbc | Bin .../f0dd61f72859cdbe4e4f9a417e659817 | Bin .../f33166d7a9275a433902c984d9ae6b4a | Bin .../f435dcda99208cbdac00b580b6e40b93 | Bin .../f4745a9cf85051fd561cb8325c5e4314 | Bin .../f49747bd1cb88b14c946e5a167412850 | Bin .../f63cf29bae980013270fbf4f1f9ec772 | Bin .../f700cc8bd7d384a318b16419cc59820b | Bin .../f7dd1d01df355bed4bd0c3199557e610 | Bin .../f84876bdeaa1e73ba1863dae6aac850e | Bin .../f9385592b78b595cd41625cc39ab1c27 | Bin .../f9a8c0ad84ed84cfeecd4ace493df951 | Bin .../f9b86358cb779b1dd907dfa8f1849b55 | Bin .../fa1ff5df9646c63b4c384ad7647eca9b | Bin .../fc6babfe600fb622a3bb209a8fc10e30 | Bin .../decrypt-the-flag}/3 | 0 .../decrypt-the-flag}/attack.py | 0 .../decrypt-the-flag}/chall.py | 0 .../attack.py | 34 +++ .../chall.py | 31 +++ .../fool-the-oracle-v2}/attack.py | 0 .../fool-the-oracle-v2}/chall.py | 0 .../fool-the-oracle-v3}/attack.py | 4 +- .../fool-the-oracle-v3}/chall.py | 0 .../fool-the-oracle-v4/attack-old.py | 81 ++++++ crypto-simmetric/fool-the-oracle-v4/attack.py | 165 ++++++++++++ .../fool-the-oracle-v4/attack.py.bak | 123 +++++++++ crypto-simmetric/fool-the-oracle-v4/chall.py | 44 +++ crypto-simmetric/fool-the-oracle-v4/nc | 0 .../fool-the-oracle}/attack.py | 4 +- .../fool-the-oracle}/chall.py | 0 .../fool-the-oracle}/lecture.py | 0 .../force-decryption}/attack.py | 0 .../force-decryption}/chall.py | 0 .../force-decryption}/lecture.py | 0 .../forge-a-cookie}/attack.py | 0 .../forge-a-cookie}/chall.py | 0 .../forge-another-cookie}/attack.py | 0 .../forge-another-cookie}/chall.py | 0 .../forge-another-json-cookie/attack.py | 56 ++++ .../forge-another-json-cookie/chall.py | 63 +++++ .../guess-mode-double-shot}/attack.py | 0 .../guess-mode-double-shot}/chall.py | 0 .../guess-mode-one-shot}/ECBvsCBCClient.py | 0 .../guess-mode-one-shot}/chall.py | 0 .../guess-mode-one-shot}/main.py | 6 +- crypto-simmetric/long-file/attack.py | 49 ++++ crypto-simmetric/long-file/chall.py | 25 ++ crypto-simmetric/long-file/file.enc | Bin 0 -> 100000 bytes .../long-secret-message}/attack.py | 0 .../long-secret-message}/chall-original.py | 0 .../long-secret-message}/chall.py | 0 .../long-secret-message}/hacker-manifesto.enc | 0 .../long-secret-message}/original.enc | 0 442 files changed, 1743 insertions(+), 8 deletions(-) create mode 100644 crypto-asimmetric/RSA-1/factor.json create mode 100644 crypto-asimmetric/RSA-1/factor.log create mode 100644 crypto-asimmetric/RSA-1/rsa_1.py create mode 100644 crypto-asimmetric/RSA-1/session.log create mode 100644 crypto-asimmetric/RSA-2/attack.py create mode 100644 crypto-asimmetric/RSA-2/chall.py create mode 100644 crypto-asimmetric/RSA-3/attack.py create mode 100644 crypto-asimmetric/RSA-3/chall.py create mode 100644 crypto-asimmetric/RSA-4/attack.py create mode 100644 crypto-asimmetric/RSA-4/chall.py create mode 100644 crypto-asimmetric/RSA-6/attack.py create mode 100644 crypto-asimmetric/RSA-6/chall.py create mode 100644 crypto-asimmetric/RSA-7/attack.py create mode 100644 crypto-asimmetric/RSA-7/chall.py create mode 100644 crypto-asimmetric/RSA-8/attack.py create mode 100644 crypto-asimmetric/RSA-8/chall.py create mode 100644 crypto-asimmetric/RSA-9/attack.py create mode 100644 crypto-asimmetric/RSA-9/chall.py create mode 100644 crypto-asimmetric/inferious_prime/Arithmetic.py create mode 100644 crypto-asimmetric/inferious_prime/ContinuedFractions.py create mode 100644 crypto-asimmetric/inferious_prime/__pycache__/Arithmetic.cpython-313.pyc create mode 100644 crypto-asimmetric/inferious_prime/__pycache__/ContinuedFractions.cpython-313.pyc create mode 100644 crypto-asimmetric/inferious_prime/attack.py create mode 100644 crypto-asimmetric/inferious_prime/attack2.py create mode 100644 crypto-asimmetric/inferious_prime/challenge.py create mode 100644 crypto-asimmetric/inferious_prime/ct.txt create mode 100644 crypto-asimmetric/inferious_prime/factor.json create mode 100644 crypto-asimmetric/inferious_prime/factor.log create mode 100644 crypto-asimmetric/inferious_prime/session.log create mode 100644 crypto-asimmetric/inferious_prime/test.py create mode 100644 crypto-asimmetric/inferious_prime/wiener.py create mode 160000 crypto-hash/equality/HashPump create mode 160000 crypto-hash/equality/HashPump-partialhash create mode 160000 crypto-hash/equality/MD4-Collision create mode 100644 crypto-hash/equality/attack.py create mode 100644 crypto-hash/equality/chall.py rename {back-to-the-future => crypto-simmetric/back-to-the-future}/2 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/__pycache__/chall.cpython-313.pyc (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/attack.py (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/chall.py (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/des.py (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/0024f4d0c2b3d981466de18eb8f0a755 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/013e1aa0bd32b92f105abddbcb2e4dfd (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/016f2deaa7b087afc8784da8397a22a5 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/0339ca8760519fa43df56ddec27a24e7 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/037f590478d87f55cedf7b1ab1d53a82 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/03c414397bdde3743856111af41ff1bf (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/04433ec6a092234083ccb75f70be7844 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/050e985a050d81dfa77f0827ff555076 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/0571127e1b066fcd0ab93df9db3c231e (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/0753e7809f4e8bde6701b4d27193c28b (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/07b9966fa556e07bb7dbf9d7a97c5d6a (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/085e25cb55018865bad411eac1273ec2 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/094a242c07093b9b0a8bf37702d4d6ed (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/09e32f0db5c88c55bc994ecd2d6cbcc6 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/09eb19248af327923541b8fcae0c34f9 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/0a52c4727ae4311cd3a51114e42472c6 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/0a6d00dc979a6696c7dc339e4400a0c9 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/0b8def7c22ef61cb5591a9c080f8c117 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/0bbec9d663098e92dc7d014a4b7f032d (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/0c1f1c2450a35deebee44be732d558d8 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/0c23ca3d1f4169ce2147cf8a3180d454 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/0caac73c224f83af1261050ab6ca5bc6 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/0d2a8e6c32cee51c76eef735eea453d4 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/0eb3cd9a68a2d1328664c716c96074ce (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/0eb7bd4f6d34532740aad04e035261f4 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/0f4b7f5961fc0914870a1d877d5af208 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/102b39f6be00c1781f576ab0acfef156 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/104cca7fdf9eb7752f4862d38e6eb718 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/10fe679fe6f5a8d3c40032c9ffae4f6f (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/11955af46d6389a50ae2dd9582509472 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/11c5a55a41c63c736331c462cf5c3e21 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/11ea3092bffa93df79a32e656a8a0586 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/124926dffa9468ff2a63e8ebbd70d4fc (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/12fcbc367eb9e88c32e55632361cc26b (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/153b504567a8ccb59e454c265f46b8cd (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/15626afe7c5a68139b2d0c823b10b225 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/156991eb1d1094c1966cbe78ecf850e8 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/16d0908062af6846734edfa5f045a7eb (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/16fd8e2a8030276090ee1af051f12820 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/1758b09b9954119108661b47afd46133 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/175c311f06644d8abf68bbbe58f2419c (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/1800c2925b752b572f86ed7ee84e6447 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/1877a6d8ef9c4bef7b8b20352efd6315 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/18c96d9bf2e5d9a806260b2073cc02ee (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/18e75151796c652d44534b00d0212909 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/193c50b53639cb1c03e36dfc740123ac (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/1b2ca741d7a39db18a40eb32c2d11b34 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/1e68c4649db3fe5e9f137d33b1750a88 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/1f658eed99e5d7de9176b624a3adc574 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/1f68d6d0f4c582b441f14dcde94228c5 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/2029240f6d1128be89ddc32729463129 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/203905a31c6f852e9d45c346da0c8e2e (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/208455b2dfc729e62e1d212617c5c103 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/20874b46266e4b74b7ab1b03f63dcf73 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/20989fe5ff4ecc9d2220dd6a0d753437 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/210b1035151e9760b507a7c1edb1cb67 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/220fce4c0ec426d5753fbaf01bfb9a8d (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/2216ab4b98005fa61b3b5a023e33106d (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/224eb7214627856502497725cace3e24 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/22758786fc4b59ca7a0765ffdde20d3d (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/22aab843b3edce5f80919d3827c4a214 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/23fac18da96856adfb0298e2ac196058 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/2599a275682361c46cbf46b22160097b (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/26155c8b1c13dd23400c7885241f3b83 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/2690b7f4cdbc7e9c649c07e63cd8f38d (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/26f220fa930f333872b125bc80cda0b5 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/272e7e2567476c69996585bf3a75e852 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/27e405db11e63c38bcb22f24fe2cab5b (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/2940ea81618bc3b9313c8a0818f9f9e8 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/2a5f27fae53f8a864398fcc856e04e90 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/2aeb371d8adeb94ded786e5bf923a3ef (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/2bac0005df40528459d260e16fe6fb80 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/2c2b79e3fa4a76558fec5886a8bcf220 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/2c386f464fb69ba5b9535527e53a1136 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/2d46a4d5e411f544f3d308f41cc75a05 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/2d8c6c66ee7c4a9f51f9b344f954d0b3 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/2f320eaf6c96a4bc8f5852b93ae1ff3b (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/2f85fc72a4cb0c8616ef7fa12ce8d540 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/2fd1a29c36876ebdafc41f35f5656a9e (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/300980f59c705be97d9ab183917839d5 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/30a4aea5a1b256f0c0910058991850a2 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/30f0532e5c0e8ee9d9919b13b022acbd (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/30f34c45eb7fef683df37d944322633f (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/3104ce046559c1c253a800af12c11e64 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/31868a74a62f39bf8e8c2f3d378710c7 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/322c54936eb99d2eee4406c2495ac1f5 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/324b77917a59fd8c923e074f24fe00e5 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/32f60d142583485078042e2210ad12cc (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/3399486a02f05b92c673a40871d73091 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/341041db96bd1ad1e7781a5be2fa0091 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/34ff82dc7a0ef493fa1869c893dca9da (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/3560f0c435443111efbf141078742f06 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/35c1bd6a211d52bdc6395e2bb660143f (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/35d4108dbd8fac5efa936ceae3778e69 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/36319ada12c1c741080f25750d19d96f (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/365ae5ec1d81f1a0e2d8e85fc19c7c73 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/3952e9811cc447a49f1f7b36cf046cb4 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/39d6ad670b8f10ada9ba0fe9481d661b (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/3b726120e586c42ee5db4859cffd5e61 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/3b8ff83a8a50d3e0e3900805ecb3faba (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/3b9218f16c20b24822c1e7c2b21b2dbc (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/3bb632bde3434d70741228eda0bdf763 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/3c32e3388a87a84a095d0afbe80823e2 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/4045d29f0b79c1d08649341810340839 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/4194f36392bf1754170d5fe415784bb6 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/41e7ceab99b36b9c6ddfceda67b23d86 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/44e295cb48a46ba798a4deb74c1d51fe (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/44fecfba0dc706bae1979dd26541f996 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/4637adc8fcbadc7335a5db1afba82d5b (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/46d7e4294b97ab96e98ec04a25c1079d (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/474f2efa7ab0b8ebdd5b31d0e04d8936 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/475265cc6b2f15d7876969341f9ecfe5 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/475406c8bb6137367c32491d9b11e8b4 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/4881cccd9d4e554d12b3b4cb562e121f (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/4a2fdee53084fd9c9cefaba0b3f2aafa (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/4b4d9e68e4fce71f0456346365a32eaa (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/4cf826448fa3bd52099306ea9b466de5 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/4d8ef0814c65793be382a2cf0bc877e2 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/4fc63499e023c5028c6a9da7d5480d60 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/4ffef230349985069206288eb02d82b5 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/51cecbf8195bfc6a13e0da953bd48148 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/51eaea4bc081a86a1f3b45cb97d62cd2 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/52cdc5894b84ba73ce12a4e2eccc036b (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/535ea9247d222f784cbe0fc03b48253c (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/53a2c58e148b94e301ec515a879fa4c0 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/549ba9bf9c35c315878dea93d90b5258 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/557c207c4a8f4aa12d0be3fb37f26c1b (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/5581e4f92bbbf541137bb9fd01e40138 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/55d07cf56513f7b6dcf6720762cced16 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/56c3c4879f2bddff9d00ef7e6275a697 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/58b7ac10ff62c14e1de4311b560754b8 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/590bd52c75abd2f0d3639406b0f1c30d (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/593c688f858bd03766e90a3e9a2b282a (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/599a13187cf3905bd83c51a88e15051b (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/5a348ab337dd4e8e7c4e4cea1f353ff7 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/5aed18302d608521438e3a868452d8d8 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/5b424fd21abff51f1e624a85d51b98d8 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/5ba2f545b95750b6bfe1a51fab7fb873 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/5d51a79f68d6250ed5b2f541cad26233 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/5d651b3090eeb753c83660ab85f8f92e (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/5da1f95513e0a30f161b44e6a72ccd9e (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/5e0b5119963e598a12b2e8d11d826f87 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/5e12e69a160901f3ba1f2aa5d61e6c55 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/5e3ccf08d66b4f01faa3310cd9c2fa7e (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/5e650f50f36a1ec55b0481b8cd59cc16 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/5ed3806c4c1423f7fe4b95ff8ba7b051 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/5f9f092c20daaadd6e258cc43af81769 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/5fb994cf3f73a61d50f371985221734c (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/603c3b0f06af7b425b5efd8e9e3b745a (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/60cfd184618711ba978b7e1b9f31a2b2 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/6161ef45609b99d43b48b6b7ca147cfc (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/618643ea4d02452e823ec6df41f52bb0 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/6211c8e9cd4e37476e3ae51a811e6b33 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/62f15f1e29ed09ceeec0a334371c98ea (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/64eb52dbd0218e7e9211367cb1a370f0 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/655a2ab36539350da3457188ca1b7936 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/658ef25095bee94c521ccb986c8605a0 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/66284e62f56cd4899ad8d91118241103 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/66943cb90e86f8a416fd87c01c338159 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/66946c8ad5068199b1d26cf3c6775eff (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/680932858c7c7bad9b25a0b904b14cea (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/681fac0a6daf110c6de16ea27eed86de (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/68e7a49a02a4835ef6c55562b07dbee2 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/694f624b9ac56068b2b10be0b73cbe88 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/6a2976642738f63614c8f3bf4707f895 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/6cd96cb30ee9d148980fe470ad234108 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/6f672b111009ff2b0f581d15fe590c40 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/6f6a6c916e873716387a15a5b65b9bdd (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/6ffad316904ff85580781e6de604193b (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/7104cf420d98e3ad5d4a7ec2774bf6d8 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/72c1be3fb528c9dad754a11c38157cb2 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/7379c7079d5b3f39a728ca4db1efc909 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/73b4f5158c17b7856f27d4223342263b (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/73d90008cfe88e6bcbd7d981ef97ce73 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/75460bf321af4f464430c25b892c6401 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/75b9032eb9a907c8bdf10a742869b93b (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/75e30eaa64fbc5c30aaafd1f6b5a1ec9 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/7611e8459b1c57c139dd815af9c38a6d (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/7620eeef9aa9bb45aa4105100c2aba28 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/774d132d942cc4e1df0a9b65f56d989d (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/7b351c93040332dfa14d20943ab1fffa (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/7b54bbd31475cdecc2ac6483b3d3d2d8 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/7c0aa187bd2b31ed70f027ba782fe016 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/7c5ea86c5f948df7d1b3a080ed06a534 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/7c7acbc49ba72490e28e859d01efef4a (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/7cf9fbc07f681f6f75da84738dfe4855 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/7d04354d3f2607804cc2a300edb151bf (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/7e06e982a4bb60d5c2dcca77c6cda329 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/7fec0913063560cd930414cab2393246 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/80261ed5475b925955fd4baddcb851e1 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/8191d002f3140fa7d644547d5d095055 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/81cc7626288f9a804b06b66307b37b3e (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/8360be0b64a48671598a410327283aea (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/845556a2734c30e0d96b7bdfa0a82d9f (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/846667689ca0fd8add512ce55c04fa72 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/8487b52e9db2efa57f688178a32f1280 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/8502fc6e0df4d9fc03abcd552c1bf898 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/86524c3023c21547b5ece1e90b3acfc3 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/8735ce113f7ae5b512f09140a41870d5 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/893d4ff49053c750ae186c4ca8b0e913 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/8975db8d69782ad129a121656c516c32 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/89ae79a7f847f2aed1dec02434721beb (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/89ccf44a4bfcbe8d6334014843788840 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/8b756f4b7369e6ebe3f9878cc3f84735 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/8b85aa662e6655fcefdc9d802d6379b4 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/8d01680ee416d58a97dba83e6fd6f876 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/8dc34737beb8c62cf2ee397263f4884e (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/8e3397bf2f65f7d28b85af8059742f08 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/8e944ccdcedd5715279e25e60964639b (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/8f24ad0909b3832bc1175d87e6d6dd67 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/9022c917e9bb52f7a3f9df245ece4959 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/920f185c31832f3643f275c94b6b6436 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/93cfdcd1af2e31356ba3e4c797c7180e (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/9406fe9ae36b2cb3db15fcedf29d8992 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/954589c7959251139379e24a16c9e437 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/97178654b5c0c9ca132ba2720ad4bd0a (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/9764607bd0d51e03d21bc4f73d7a3fb0 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/982cc845e05dfd464f333f7d16d55f3a (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/984f06e0ef3f2b3c55d9fbbe3cbd4811 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/98e47b81eb2790747fd6a39be77f858e (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/990b8182389a471712fd4449c602f1a5 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/9924990b4546e6196feae2e41bcded8c (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/9a15c035a8938bbaf7ee32ac1aa45f15 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/9e013599d6b47a15db72409a1629f594 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/9e57e62465a479e679a6adbd4b958157 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/9ea35b83ec748d413674ea8e6ca87ccb (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/9fc417b4957fde835b5e7b64b5104ac8 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/a00a363e74e8854d89553aedcabb4c6a (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/a07fed5d740a8dd02ef4928198e01133 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/a0bf9254a3236ad8dac9f6675055541d (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/a0e8349de3483ae232069dbfc1396c7c (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/a101e31a62c14e8ea2cf4c779e1b7d37 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/a22a2e117a8fe7f9a97f845528859ed0 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/a348d839170ede14f17edd94e2f166a0 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/a3d5bcca8210816c93aa4c61352532aa (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/a56aa0344508a51bd93a4f3ea8d6c30e (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/a57b6e892f4830587aea495552784ed9 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/a5a7c21278a12837bd88b87302fe68a7 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/a5e8f792a5f0fdcdf5f666a1d14a23bc (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/a803d35caa6bdd7e02955a7bd7319d28 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/a8417dbcc14d9a8cf376b5d6ac2be10a (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/a86aa5afcb0a6f305aa8502781d96fcb (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/a97a1ab003cda1e66e80df2a97f4e4c8 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/a99e725d1a5105e4330dbb2ab295b044 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/a9dc030de1ace0b44370bee19e7acc70 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/aa774380b6cfedcacd5229d8d55de6ea (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/aacf73f04458fb0cac639324f8d23ef9 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/ad1354ac688b6e7cb3d324495b7f5eb2 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/ad16b66739c9bbfbf32c3130f98dd0a7 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/ad99f6117878482ab7106b4d974cfe90 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/add69d43e0c9c22cb6ae3f24658b21cd (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/af23a5dd9dbbe86d6cae6ca8a95a94c9 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/afd84e1511d5e9e36607751cf7b7ac96 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/afe1ec12fb39790665014610669101bb (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/b05afd0b1ba046e6e56dfb91cade5852 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/b1247ef5153c8cb20af6eaa532c4e53f (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/b34f7207987081570979b3c3bbc6ae2f (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/b593f82fb66d006980e8a43a0417a1ef (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/b5e3b8a6b694614c74fa55892ec7831b (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/b61f47d48cfde46dc72a64c6ff49259b (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/b775978d6a3936c4100e344e8378371e (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/b77f6ebf9bf330d992f7fcc42ad3eb80 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/b79918f57d6585431b357364a047b2fb (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/b7fa05ef1c055c8721a0844fa2f9c517 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/b807e74d42b1d517c52e3a34da1fc725 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/b880a4c620be6a758aa72e4fac35b79b (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/b90531b031af291fc09f3b47f35d1871 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/b9400bb738c7fb91a7635749b053a137 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/ba501d97a8ebd9381fa271b3ab0d7697 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/bb5f6cf3892f52c07e415dc25f8f101b (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/bb8d2676fc45b286c0960ab707864605 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/bc7f8eea85fde0dab7441656a0720464 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/bd172c6f4b31759dec337e178368e06c (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/bd3c4e53cec3fc00e19f9aa86d41cd67 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/bf5fe566688bf3064500b3385ebbecc2 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/c0cb3c32fbabf136c0e37c5c72fc0d72 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/c1081ae4a28b263b856b460f1e3aad0b (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/c1414d247b0547ff543b9cc03c9b90d8 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/c310c4fd7a943a6b153fc77027b5f8b0 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/c31e413c0847de4691012ef81e31acae (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/c321ceed93116c26ec88e3254fa3cd97 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/c4e25dd28c5cd961ccea2bd778bffd4e (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/c629ee7f10f944228ad6f78ae03738ea (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/c6506c668b96a1eb79cde01880bc8425 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/c6997ce4a7d458b00b06210ae7446850 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/c7f207647209e38730bbe64c9249abe5 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/c88c19634f04d1be57cf5b79d52202c7 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/c95a6b7b5656c9a6b3194a242f8231a7 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/c9a0e34374ced611ddc8dbb936fd2c2b (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/ca8e5e6d4bad4979a94c477c5b411acd (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/caa93220695c6291992e702873ef8c6b (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/cafdd19d230fec60d9022e9e9eb67ff2 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/cb03c2a66a4bf7139c9205ce5b0feb5a (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/cb5460332e84b66b455014c9b77bb6bc (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/cd07e684036026dc7d067803bde21393 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/cd6b9d32946111528aaa6fefcba32cc4 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/cd83f976398476e1f6633a24c82cca00 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/ceaa00c54604860ca376a77131786d85 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/cf835731cebab59413319af12a738e94 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/cfa68eb972fa756c8697a8fcbcfcbbea (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/d0cad7b45a22150d0a5a8512bb72164b (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/d0d6526dc3928c1608dafa53c1fe9c9e (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/d0f85bd43b91c8a4ed49ef3267c4fa4c (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/d0fc857d940dbf06c737897ad95c2815 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/d11382c4f410be6ea22b86a0420f0379 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/d1b129979af646f1903f93fda426262a (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/d1d0d1e353b091e55d437fbba7768c0b (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/d1f6a6b3ff606b79ed83489af16c752c (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/d2d35bf9c724a0feec1b446af094e02a (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/d31b32fe78e9e7408d3b1f165ee3a823 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/d3bc3c2a65cba96928e1ffa8889a3bf9 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/d5998a88757db1c51a28bf64c368ad99 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/d700947294c64219224e5510b68fce24 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/d86641dc0fc1950fc5192156bcdd294d (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/da1192e27218f04c4df981b45eba12f0 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/da5ffd2e4afdd8b1586525f65b5382f6 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/da6d3b5ed9ccd8a18515221c7c29f2e1 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/daeb7defe566351156bec27a5627566a (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/db5c89e54de75a14db842a65aa1a87b2 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/db7303e646ac2d62cb8bbcaf68cca828 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/db8deb947463b3320b1399cb9f87bfba (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/dc1dff4e65c17747a9f2043231a5b984 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/dc296930884123b35a5c53bbcb1ad8fc (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/df0430679640015518d904b92776f724 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/df11adc24639177bb9c0839d84daa593 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/df924cf66e321a1348121a1cabcd29b5 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/dfc2c46d59be654a2e332461cf11447e (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/e256a6fc2997892bd945dfa65d6e3d4a (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/e2b5a66739332a746d43f465ae9889ef (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/e30690e9f3419164d1ca1ed795944854 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/e3b35579ddaa8fdca3bfdd7589f77f88 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/e45611843e2ddaf7d897be760a2455c7 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/e4cdb37fc6127fd3b2aa01d53d00f688 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/e58c12d06f9064b0c53e828208001d5a (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/e5a6944a3ff0ebf60b4670fe40a7f593 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/e74297c0a86ae1c128618618a8b50bc0 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/e778dec5a8adbd18365d124ff668e7f1 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/e88189732217df5915a5b1c3a8fb8379 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/e8e138b0058292a5a274d344df3d1195 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/e923b6aa9df3b01e5182b1a003bf35ec (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/e974e3a27a6325862014cc322254eae9 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/e9fa9601ed3049fc587f4fe7a79b714d (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/ea4feb9cbd4982377f8952f693c508d7 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/eb719038ef362e4fde8b7b3224d75098 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/ee19c744649264c1537173fba3a11df4 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/ee87118eb53b5c941f2134ee0cd61508 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/ef064997d68d665a6ef04443d43eaae3 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/efd4c0fb34e78ea7cd825af8f89b0fbc (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/f0dd61f72859cdbe4e4f9a417e659817 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/f33166d7a9275a433902c984d9ae6b4a (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/f435dcda99208cbdac00b580b6e40b93 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/f4745a9cf85051fd561cb8325c5e4314 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/f49747bd1cb88b14c946e5a167412850 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/f63cf29bae980013270fbf4f1f9ec772 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/f700cc8bd7d384a318b16419cc59820b (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/f7dd1d01df355bed4bd0c3199557e610 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/f84876bdeaa1e73ba1863dae6aac850e (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/f9385592b78b595cd41625cc39ab1c27 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/f9a8c0ad84ed84cfeecd4ace493df951 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/f9b86358cb779b1dd907dfa8f1849b55 (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/fa1ff5df9646c63b4c384ad7647eca9b (100%) rename {back-to-the-future => crypto-simmetric/back-to-the-future}/flask_session/fc6babfe600fb622a3bb209a8fc10e30 (100%) rename {decrypt-the-flag => crypto-simmetric/decrypt-the-flag}/3 (100%) rename {decrypt-the-flag => crypto-simmetric/decrypt-the-flag}/attack.py (100%) rename {decrypt-the-flag => crypto-simmetric/decrypt-the-flag}/chall.py (100%) create mode 100644 crypto-simmetric/decrypt_it_if_you_are_fast_enough/attack.py create mode 100644 crypto-simmetric/decrypt_it_if_you_are_fast_enough/chall.py rename {fool-the-oracle-v2 => crypto-simmetric/fool-the-oracle-v2}/attack.py (100%) rename {fool-the-oracle-v2 => crypto-simmetric/fool-the-oracle-v2}/chall.py (100%) rename {fool-the-oracle-v3 => crypto-simmetric/fool-the-oracle-v3}/attack.py (98%) rename {fool-the-oracle-v3 => crypto-simmetric/fool-the-oracle-v3}/chall.py (100%) create mode 100644 crypto-simmetric/fool-the-oracle-v4/attack-old.py create mode 100644 crypto-simmetric/fool-the-oracle-v4/attack.py create mode 100644 crypto-simmetric/fool-the-oracle-v4/attack.py.bak create mode 100644 crypto-simmetric/fool-the-oracle-v4/chall.py create mode 100644 crypto-simmetric/fool-the-oracle-v4/nc rename {fool-the-oracle => crypto-simmetric/fool-the-oracle}/attack.py (98%) rename {fool-the-oracle => crypto-simmetric/fool-the-oracle}/chall.py (100%) rename {fool-the-oracle => crypto-simmetric/fool-the-oracle}/lecture.py (100%) rename {force-decryption => crypto-simmetric/force-decryption}/attack.py (100%) rename {force-decryption => crypto-simmetric/force-decryption}/chall.py (100%) rename {force-decryption => crypto-simmetric/force-decryption}/lecture.py (100%) rename {forge-a-cookie => crypto-simmetric/forge-a-cookie}/attack.py (100%) rename {forge-a-cookie => crypto-simmetric/forge-a-cookie}/chall.py (100%) rename {forge-another-cookie => crypto-simmetric/forge-another-cookie}/attack.py (100%) rename {forge-another-cookie => crypto-simmetric/forge-another-cookie}/chall.py (100%) create mode 100644 crypto-simmetric/forge-another-json-cookie/attack.py create mode 100644 crypto-simmetric/forge-another-json-cookie/chall.py rename {guess-mode-double-shot => crypto-simmetric/guess-mode-double-shot}/attack.py (100%) rename {guess-mode-double-shot => crypto-simmetric/guess-mode-double-shot}/chall.py (100%) rename {guess-mode-one-shot => crypto-simmetric/guess-mode-one-shot}/ECBvsCBCClient.py (100%) rename {guess-mode-one-shot => crypto-simmetric/guess-mode-one-shot}/chall.py (100%) rename {guess-mode-one-shot => crypto-simmetric/guess-mode-one-shot}/main.py (95%) create mode 100644 crypto-simmetric/long-file/attack.py create mode 100644 crypto-simmetric/long-file/chall.py create mode 100644 crypto-simmetric/long-file/file.enc rename {long-secret-message => crypto-simmetric/long-secret-message}/attack.py (100%) rename {long-secret-message => crypto-simmetric/long-secret-message}/chall-original.py (100%) rename {long-secret-message => crypto-simmetric/long-secret-message}/chall.py (100%) rename {long-secret-message => crypto-simmetric/long-secret-message}/hacker-manifesto.enc (100%) rename {long-secret-message => crypto-simmetric/long-secret-message}/original.enc (100%) diff --git a/crypto-asimmetric/RSA-1/factor.json b/crypto-asimmetric/RSA-1/factor.json new file mode 100644 index 0000000..0a7d21b --- /dev/null +++ b/crypto-asimmetric/RSA-1/factor.json @@ -0,0 +1 @@ +{ "input-expression":"factor(176278749487742942508568320862050211633)", "input-decimal":"176278749487742942508568320862050211633", "factors-prime":["12271643243945501447","14364722473065221639"], "runtime" : {"total":0.7035, "siqs":0.0455}, "time-start" : "2025-05-14 16:39:45", "time-end" : "2025-05-14 16:39:46", "info":{"compiler":"MSVC 1931","ECM-version":"7.0.6","MPIR-version":"3.0.0","yafu-version":"3.0"} } diff --git a/crypto-asimmetric/RSA-1/factor.log b/crypto-asimmetric/RSA-1/factor.log new file mode 100644 index 0000000..28acf94 --- /dev/null +++ b/crypto-asimmetric/RSA-1/factor.log @@ -0,0 +1,62 @@ +05/14/25 16:39:45, +05/14/25 16:39:45, **************************** +05/14/25 16:39:45, Starting factorization of 176278749487742942508568320862050211633 +05/14/25 16:39:45, using pretesting plan: normal +05/14/25 16:39:45, no tune info: using qs/gnfs crossover of 95 digits +05/14/25 16:39:45, no tune info: using qs/snfs crossover of 95 digits +05/14/25 16:39:45, **************************** +05/14/25 16:39:45, rho: x^2 + 3, starting 1000 iterations on C39 +05/14/25 16:39:45, rho: x^2 + 2, starting 1000 iterations on C39 +05/14/25 16:39:45, rho: x^2 + 1, starting 1000 iterations on C39 +05/14/25 16:39:45, final ECM pretested depth: 0.000000 +05/14/25 16:39:45, scheduler: switching to sieve method +05/14/25 16:39:46, starting SIQS on c39: 176278749487742942508568320862050211633 +05/14/25 16:39:46, random seed: 15381924001331922418 +05/14/25 16:39:46, ==== sieve params ==== +05/14/25 16:39:46, n = 39 digits, 128 bits +05/14/25 16:39:46, factor base: 576 primes (max prime = 9473) +05/14/25 16:39:46, single large prime cutoff: 473650 (50 * pmax) +05/14/25 16:39:46, using SSE41 enabled 32k sieve core +05/14/25 16:39:46, sieve interval: 1 blocks of size 32768 +05/14/25 16:39:46, polynomial A has ~ 4 factors +05/14/25 16:39:46, using multiplier of 1 +05/14/25 16:39:46, using multiplier of 1 +05/14/25 16:39:46, using Q2(x) polynomials for kN mod 8 = 1 +05/14/25 16:39:46, using SPV correction of 18 bits, starting at offset 29 +05/14/25 16:39:46, trial factoring cutoff at 35 bits +05/14/25 16:39:46, ==== sieving started (1 thread) ==== +05/14/25 16:39:46, trial division touched 85911 sieve locations out of 11665408 +05/14/25 16:39:46, total reports = 85911, total surviving reports = 15765 +05/14/25 16:39:46, total blocks sieved = 356, avg surviving reports per block = 44.28 +05/14/25 16:39:46, 686 relations found: 307 full + 379 from 3054 partial, using 178 polys (22 A polys) +05/14/25 16:39:46, on average, sieving found 18.88 rels/poly and 107137.16 rels/sec +05/14/25 16:39:46, trial division touched 85911 sieve locations out of 11665408 +05/14/25 16:39:46, ==== post processing stage (msieve-1.38) ==== +05/14/25 16:39:46, QS elapsed time = 0.0317 seconds. +05/14/25 16:39:46, begin singleton removal with 3361 relations +05/14/25 16:39:46, reduce to 1021 relations in 2 passes +05/14/25 16:39:46, recovered 1021 relations +05/14/25 16:39:46, recovered 154 polynomials +05/14/25 16:39:46, attempting to build 686 cycles +05/14/25 16:39:46, found 686 cycles from 1021 relations in 1 passes +05/14/25 16:39:46, distribution of cycle lengths: +05/14/25 16:39:46, length 1 : 307 +05/14/25 16:39:46, length 2 : 379 +05/14/25 16:39:46, largest cycle: 2 relations +05/14/25 16:39:46, matrix is 576 x 686 (0.1 MB) with weight 11457 (16.70/col) +05/14/25 16:39:46, sparse part has weight 11457 (16.70/col) +05/14/25 16:39:46, filtering completed in 3 passes +05/14/25 16:39:46, matrix is 545 x 609 (0.1 MB) with weight 9852 (16.18/col) +05/14/25 16:39:46, sparse part has weight 9852 (16.18/col) +05/14/25 16:39:46, commencing Lanczos iteration +05/14/25 16:39:46, memory use: 0.1 MB +05/14/25 16:39:46, lanczos halted after 10 iterations (dim = 545) +05/14/25 16:39:46, recovered 64 nontrivial dependencies +05/14/25 16:39:46, prp20 = 14364722473065221639 +05/14/25 16:39:46, prp20 = 12271643243945501447 +05/14/25 16:39:46, Lanczos elapsed time = 0.0130 seconds. +05/14/25 16:39:46, Sqrt elapsed time = 0.0000 seconds. +05/14/25 16:39:46, SIQS elapsed time = 0.0455 seconds. +05/14/25 16:39:46, +05/14/25 16:39:46, +05/14/25 16:39:46, Total factoring time = 0.7035 seconds diff --git a/crypto-asimmetric/RSA-1/rsa_1.py b/crypto-asimmetric/RSA-1/rsa_1.py new file mode 100644 index 0000000..3522b1a --- /dev/null +++ b/crypto-asimmetric/RSA-1/rsa_1.py @@ -0,0 +1,41 @@ +from Cryptodome.Util.number import bytes_to_long, getPrime +#from secret import flag +def egcd(a, b): + if (a == 0): + return (b, 0, 1) + else: + g, y, x = egcd(b%a, a) + return (g, x - (b//a) * y, y) + +e = 65537 + +"""p, q = getPrime(64), getPrime(64) +n = p*q +e = 65537 +print(n) +m = bytes_to_long(flag) +print(pow(m, e, n))""" + +#p = 14364722473065221639 +#q = 12271643243945501447 + +p = 88824237363878748201253577036 +q = 866961515596671343895614356197 + +n = p*q +phi = (p-1)*(q-1) +res = egcd(e, phi) + +#c = 46228309104141229075992607107041922411 + +c = 388435672474892257936058543724812684332943095105091384265939 +u = res[1] +v = res[2] + +decrypted = pow(c,u,n) + +print(decrypted.to_bytes(decrypted.bit_length()//8+1,byteorder='big').decode()) +#P20 = 14364722473065221639 +#P20 = 12271643243945501447 +# 176278749487742942508568320862050211633 +# 46228309104141229075992607107041922411 diff --git a/crypto-asimmetric/RSA-1/session.log b/crypto-asimmetric/RSA-1/session.log new file mode 100644 index 0000000..1350e40 --- /dev/null +++ b/crypto-asimmetric/RSA-1/session.log @@ -0,0 +1,13 @@ +05/14/25 16:39:25, ===================================== +05/14/25 16:39:25, System/Build Info: +05/14/25 16:39:25, YAFU Version 3.0 +05/14/25 16:39:25, Built with Microsoft Visual Studio 1931 and LLVM Compiler 13.0.0 +05/14/25 16:39:25, Using GMP-ECM 7.0.6, Powered by MPIR 3.0.0 +05/14/25 16:39:25, detected AMD Ryzen 5 5600H with Radeon Graphics +detected L1 = 32768 bytes, L2 = 16777216 bytes, CL = 64 bytes +05/14/25 16:39:25, CPU features enabled: 05/14/25 16:39:25, SSE41 05/14/25 16:39:25, +05/14/25 16:39:25, using 1 random witness for Rabin-Miller PRP checks +05/14/25 16:39:25, Cached 664579 primes: max prime is 9999991 +05/14/25 16:39:25, Could not parse yafu.ini from Z:\home\emln\Documents\crypto\ctf\RSA-1 + +05/14/25 16:39:25, Random seed: 15435820894272445120 diff --git a/crypto-asimmetric/RSA-2/attack.py b/crypto-asimmetric/RSA-2/attack.py new file mode 100644 index 0000000..cc55dc8 --- /dev/null +++ b/crypto-asimmetric/RSA-2/attack.py @@ -0,0 +1,56 @@ +from Cryptodome.Util.number import bytes_to_long +from Cryptodome.Util.number import isPrime +from Cryptodome.Util.number import getPrime +from Cryptodome.Util.number import getRandomInteger + +from gmpy2 import next_prime +from gmpy2 import isqrt +# p = getPrime(512) +# q = next_prime(p) +# n = p*q +# c = print(pow(m, e, n)) +def egcd(a, b): + if (a == 0): + return (b, 0, 1) + else: + g, y, x = egcd(b%a, a) + return (g, x - (b//a) * y, y) + +e = 65537 +n = 60509355275518728792864353034381323203712352065221533863094540755630035742080855136016830887120470658395455751858380183285852786807229077435165810022519265154399424311072791755790585544921699474779996198610853766677088209156457859301755313246598035577293799853256065979074343370064111263698164125580000165237 +c = 44695558076372490838321125335259117268430036823123326565653896322404966549742986308988778274388721345811255801305658387179978736924822440382730114598169989281210266972874387657989210875921956705640740514819089546339431934001119998309992280196600672180116219966257003764871670107271245284636072817194316693323 + + + +a = b = isqrt(n) +b2 = pow(a,2) - n + +i = 0 + +while True: + print("Iteration # ="+str(i)) + if b2 == pow(b,2): + print("solution found") + break + else: + a+=1 + b2 = pow(a,2) - n + b = isqrt(b2) + print("a = " + str(a)) + print("b = " + str(b)) + print("b2 = " + str(b2)) + print("delta-->"+str(pow(b,2)-b2 % n)) + i+=1 + p = a+b + q = a-b + + print(f"P={p}") + print(f"Q={q}") + +phi = (p-1)*(q-1) +res = egcd(e, phi) +u = res[1] + +decrypted = pow(c,u,n) + +print(decrypted.to_bytes(decrypted.bit_length()//8+1,byteorder='big').decode()) diff --git a/crypto-asimmetric/RSA-2/chall.py b/crypto-asimmetric/RSA-2/chall.py new file mode 100644 index 0000000..57f0cc9 --- /dev/null +++ b/crypto-asimmetric/RSA-2/chall.py @@ -0,0 +1,20 @@ +from Cryptodome.Util.number import bytes_to_long, getPrime, isPrime +from secret import flag + + +def next_prime(p): + while True: + p = p+1 + if isPrime(p): + return p + +#Close numbers so n = pq = (a^2 - b^2) +p = getPrime(512) +q = next_prime(p) +n = p*q +e = 65537 +print(n) +m = bytes_to_long(flag.encode()) +print(pow(m, e, n)) +# Output: 6050935527551872879286435303438132320371235206522153386309454075563003574208085513601683088712047065839545575185838018328585278680722907743516581002251926515439942431107279175579058554492169947477999619861085376667708820915645785930175531324659803557729379985325606597907434337006411126369816412558000016523744695558076372490838321125335259117268430036823123326565653896322404966549742986308988778274388721345811255801305658387179978736924822440382730114598169989281210266972874387657989210875921956705640740514819089546339431934001119998309992280196600672180116219966257003764871670107271245284636072817194316693323 +# diff --git a/crypto-asimmetric/RSA-3/attack.py b/crypto-asimmetric/RSA-3/attack.py new file mode 100644 index 0000000..61ac97e --- /dev/null +++ b/crypto-asimmetric/RSA-3/attack.py @@ -0,0 +1,32 @@ +from Cryptodome.Util.number import bytes_to_long, getPrime +import numpy as np +from gmpy2 import gcd +def egcd(a, b): + if (a == 0): + return (b, 0, 1) + else: + g, y, x = egcd(b%a, a) + return (g, x - (b//a) * y, y) + + +#The array mods are the N utilized +NArr = [121720186806296997800979538534610838374734751334685912810089377215004504057011542815350249589409126571557756347530275377081347144107627877648585982070305444757428430884386644436796681950522231862132460974829459908011848164947235675260429548827529963885145183776175424511145093559808770680388618014964869201199, 115798264708831001509831452282652377117247913406230481173932971530311207138289505609425951644808355060285770269148892080753105106723888042934884834817949996297119038125679794627407921510845406549274278284300830810036526628513928381076981701488991050846914184755737210682948322006955552194206666221556530254069, 129891916645136766954990840071239136459207498813379400672601426578831847656212739760321974414319624780647238243520795621558507340321036960603641016783930001933214554952892980985719766490723702259591820740126106443296808948516725137803993618809971215369272805623068723219777577178592979685247152887369080213469, 97440042627604058119462166311098928079074460477896227193167136164982689015461458211418231427974720780154163727230020238900390489255635496740913390712432413745693887138227178349326834808464939377520843058378484137633039051861149301719616738305187923502768381441541843160895988360219120088573263132711946135549, 118336797456007073778845583425765727519290931431629708341588136084005536094639394444055480793346537253211044225267352801744305543944594258715651884862219847349035909104973416940104288422933727439470796894321119143142352295983873128834400237669322455310392240839827948103230966843721381138542886809256064478583, 98830801478619438580886979231071793416086374828762996995335166178033453794813501043909349956992551774283648522075968950157876919261226385391203458862082192940317067631456258474770737562985117345952159996038314281257462262391260021194541096637417576244012229535327312563436777296722806384925044244352631380237] +c = [20895232551321355357796559134923739063229897004564726534442560232700008579832934464588215412298797749098926607008145809365713546063372794478172028895900292570052597729451835013404932658115272822381857334883139192842405577893328881755205525477692528232932048522246106064845149790024188650659712186587302788822, 27487798811245911704259308821426340722272943834169278939573060705897180221981687550608201257369881749684155124541223818713952131057624098178538068959839121916786988723255740240218509529169521298543759721788383816540422333430292030883380440242469234903193688320192413698212154775026244244196587629215529349439, 122927173440180953444662433474083795911421352764116743651940370614018966430157645895292514403617065522903149995860646654893791607848456961010416154477471279012016689725167398900740981766252818136656875685057173271127364782254020078195020269591458290777871967505852847729147604365960804210570303285847704383838, 44233148033940554518432069693759033772383557137256208049342336728964649128201129418248029048455077888784420944572193219780439638707817230248572975335198314036583478516348610748201061630538604305891410474498186918257941528933343064918770597617988984498416891802978664061022237210655046967332587866256202949892, 93945101865165834651030752141276949991568628433520700392114189816600544396582708855981883777442770327027947418039728898637860073054781023087929128993917266453956464368053124527395745452407733825804653717528957214721157125830092515381862283410183665194322787464290673344883392992558759324619716952152651997162, 22730706116732432827726070874241713593369489580689310920350655818718408738470892188020509332323278263964591696394047978191938035115889175060327324556077501151083828817726795434554236484206095214626725550236661310998674664814342644753736805886350007323393028684328815053810466996924583341348546738433492053843] +print(f"LEN:{len(NArr)}") +e = 65537 +# I can try to find a common prime then it's the same thing +for i in range(len(NArr)): + for j in range(len(NArr)): + if(i!=j): + p1 = gcd(NArr[i],NArr[j]) + if(p1 != 1): + p2 = NArr[i] // p1 + p3 = NArr[j] // p1 + #print(f"P2:{p2} and P3:{p3}") + phi = (p1-1)*(p2-1) + res = egcd(e, phi) + u = res[1] + decrypted = pow(c[i],u,NArr[i]) + print(decrypted.to_bytes(decrypted.bit_length()//8+1,byteorder='big').decode()) + break + diff --git a/crypto-asimmetric/RSA-3/chall.py b/crypto-asimmetric/RSA-3/chall.py new file mode 100644 index 0000000..245056a --- /dev/null +++ b/crypto-asimmetric/RSA-3/chall.py @@ -0,0 +1,11 @@ +from Crypto.Util.number import bytes_to_long, getPrime +from secret import flag +import numpy as np + +primes = [getPrime(512) for _ in range(10)] +mods = [np.random.choice(primes, 2, replace=False) for _ in range(6)] +mods = [m[0]*m[1] for m in mods] +e = 65537 +print(mods) +m = bytes_to_long(flag.encode()) +print([pow(m, e, n) for n in mods]) diff --git a/crypto-asimmetric/RSA-4/attack.py b/crypto-asimmetric/RSA-4/attack.py new file mode 100644 index 0000000..05bc127 --- /dev/null +++ b/crypto-asimmetric/RSA-4/attack.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python3 + +from gmpy2 import gcd +from Cryptodome.Util.number import bytes_to_long, getPrime + +def egcd(a, b): + if (a == 0): + return (b, 0, 1) + else: + g, y, x = egcd(b%a, a) + return (g, x - (b//a) * y, y) + +# N is the same +n = 136372941954692995052032614106416002216650352281441768759106047115825257661310123118558086046873251952204915740853517008372422353621244931366409094731856824295828106036399145756514345255241109944294641060644246049854296519101775880563276657142059245230769447888021843340822736997057074223723734593369646608283 +c = [88934261481985787316571946676203348514352494646042103159736155624287938096099586834729171652139440814472420307071476143907698982272593448957770236088603490101924827608944006107576740571416087954304061091614594794358854353419664581332745351113861171522629631586344259719016707622211007808872462656489173218734, 31191490339291402076171068036548032381977184741778243810947202097002026583133103229115040414216968980627919985794378128894603186334221963211692252394535977554990491215621733091487550326776298499502932523408287882489799200954692353162958794137970552454035789701538315132727860436887544051794011893682559545564] + +e = [31, 71] +#Bezut +#C1^u*C2^v = m mod n +res = egcd(e[0],e[1]) +u = res[1] +v = res[2] + +val = u*e[0] + v * e[1] +print(val) + +decrypted = pow(c[0],u,n) * pow(c[1],v,n) % n + +print(decrypted.to_bytes(decrypted.bit_length()//8 + 1, byteorder='big').decode()) diff --git a/crypto-asimmetric/RSA-4/chall.py b/crypto-asimmetric/RSA-4/chall.py new file mode 100644 index 0000000..74668b9 --- /dev/null +++ b/crypto-asimmetric/RSA-4/chall.py @@ -0,0 +1,8 @@ +from Crypto.Util.number import bytes_to_long, getPrime +from secret import flag +p, q = getPrime(512), getPrime(512) +n = p*q +e = [31, 71] +print(n) +m = bytes_to_long(flag.encode()) +print([pow(m, ee, n) for ee in e]) diff --git a/crypto-asimmetric/RSA-6/attack.py b/crypto-asimmetric/RSA-6/attack.py new file mode 100644 index 0000000..816f159 --- /dev/null +++ b/crypto-asimmetric/RSA-6/attack.py @@ -0,0 +1,22 @@ +from Cryptodome.Util.number import bytes_to_long, getPrime, inverse +from pwn import * +HOST = "130.192.5.212" +PORT = "6646" +e = 65537 +sleepT = 0.1 +server = remote(HOST,PORT) + +c = server.recv(1024).strip() +sleep(sleepT) +p = b'e4\n' +server.send(p) +sleep(sleepT) +pe = server.recv(1024).strip() + +server.send(b'd') +server.send(str(int(pe)*int(c))) +server.send(b'\n') +sleep(sleepT) +d = int(server.recv(1024)) +print(bytearray.fromhex(format(d // 4, "x")).decode()) +#m = (pow(4, e, n) * c) % n diff --git a/crypto-asimmetric/RSA-6/chall.py b/crypto-asimmetric/RSA-6/chall.py new file mode 100644 index 0000000..ac9c35f --- /dev/null +++ b/crypto-asimmetric/RSA-6/chall.py @@ -0,0 +1,19 @@ +from Cryptodome.Util.number import bytes_to_long, getPrime, inverse +from secret import flag + +p, q = getPrime(512), getPrime(512) +n = p*q +e = 65537 +m = bytes_to_long(flag.encode()) +print(pow(m, e, n)) + +for _ in range(3): + req = input() + if req[0] == 'e': + print(pow(int(req[1:]), e, n)) + elif req[0] == 'd': + phi = (p-1)*(q-1) + d = inverse(e, phi) + dec = pow(int(req[1:]), d, n) + assert dec != m + print(dec) diff --git a/crypto-asimmetric/RSA-7/attack.py b/crypto-asimmetric/RSA-7/attack.py new file mode 100644 index 0000000..62939f2 --- /dev/null +++ b/crypto-asimmetric/RSA-7/attack.py @@ -0,0 +1,35 @@ +from pwn import * +import decimal + +HOST = "130.192.5.212" +PORT = "6647" +server = remote(HOST,PORT) + +n = int(server.recv(1024).strip()) +c = int(server.recv(1024).strip()) +e = 65537 + +def to_bytes(m,l=512): + return int.to_bytes(m, l=n.bit_length(), byteorder='big') +def print_bounds(low, up): + print("[" + str(low) + "," + str(up) + "]") +decimal.getcontext().prec = n.bit_length() +upper_bound = decimal.Decimal(n) +lower_bound = decimal.Decimal(0) +m = c +for i in range(n.bit_length()): + m = (pow(2, e, n) * m) % n + print(f"M:{m}") + server.send(str(m)) + server.send(b'\n') + bit = server.recv(1024) + bit = int(bit) + print(f"Bit:{bit}") + if bit == 1: + lower_bound = (upper_bound + lower_bound) / 2 + else: + upper_bound = (upper_bound + lower_bound) / 2 +#lower_bound = 158107821233229568930984452875602183391823091373912004357129417626853988321867785934374974861174017194049484884 +upper_bound = int(upper_bound) +print(f"UB:{upper_bound}") +print(upper_bound.to_bytes(n.bit_length(),'big').decode()) diff --git a/crypto-asimmetric/RSA-7/chall.py b/crypto-asimmetric/RSA-7/chall.py new file mode 100644 index 0000000..bebeaec --- /dev/null +++ b/crypto-asimmetric/RSA-7/chall.py @@ -0,0 +1,16 @@ +from Crypto.Util.number import bytes_to_long, getPrime, inverse +from secret import flag + +p, q = getPrime(512), getPrime(512) +n = p*q +e = 65537 +print(n) +m = bytes_to_long(flag.encode()) +print(pow(m, e, n)) +phi = (p-1)*(q-1) +d = inverse(e, phi) + +while True: + req = input() + dec = pow(int(req), d, n) + print(dec % 2) diff --git a/crypto-asimmetric/RSA-8/attack.py b/crypto-asimmetric/RSA-8/attack.py new file mode 100644 index 0000000..eb4d674 --- /dev/null +++ b/crypto-asimmetric/RSA-8/attack.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python3 +def iroot(k, n): + u, s = n, n+1 + while u < s: + s = u + t = (k-1) * s + n // pow(s, k-1) + u = t // k + return s + +def egcd(a, b): + if a == 0: + return (b, 0, 1) + else: + g, y, x = egcd(b % a, a) + return (g, x - (b // a) * y, y) + +n = [103182582101088432221896723911959658810148642607491933315730960734118240195754769950819474607526761310491072435697251726703164265174774235724659738831757409760766157639161825762332534066038346404165315092057708788440973076257965331599855954578010994574159603470755148099351579202141225172980367799665476167847, 164529226839413559924976053055945999494164079991436306473401181675696469337231336487085545789574002739916229214459538703141568506814456513212890362327970644104020403940185072579976632642454837002305793830295185819162025725080875039582271289438064337645037739930310804010164136027800069917885200489266709851147, 101253463082304765569988541878936444188901784404118982304304492412707865403599337342671466935573442997065056100597392285699618123881764488797053967545477164493257618640769155601013044416777930811645230707542352289749878326865162201600174774219905814876248581859055603923729383992948817570153516220675788026019] +c = [49061847403090198347871622684419440435020583765472679724043086578999237521080306057376530837215217884164240970675343921488615718206622981851071355344619510984897988244448903079728468570182192877366774485494180463301223638383404084085162769928604900840343104637519232149881136672689624849105790343296894169638, 69379335482793180476700701606108054426491112911094839088423398496436178476703250112662999759680953829050820926826348692673810360008347808961160090296815470631238301541316949142095598699542200662648425136888777434584579800116810012163027021559640993590961230761590447340796858130209448565431799660026498031809, 12703169327460384687002396982277926563609859240682417397412251404704813340279611932445729764372467798958975417752028956581609966062236180984581318736509577950218952687259759058038887912101360016831759532164596689952106890923630907107502607383301971789208757053392565264776050015020366373713225575559221036110] + +n1 = n[0] +n2 = n[1] +n3 = n[2] + +c1 = c[0] +c2 = c[1] +c3 = c[2] + +g, u1,v1 = egcd(n2*n3, n1) +g, u2,v2 = egcd(n1*n3, n2) +g, u3,v3 = egcd(n1*n2, n3) + +c = (c1 * u1 * n2*n3 + c2 * u2* n1*n3 + c3 * u3 * n1*n2) % (n1*n2*n3) +e = 3 +dec_int = iroot(e, c) +print(dec_int.to_bytes(dec_int.bit_length()//8 + 1, byteorder='big').decode()) diff --git a/crypto-asimmetric/RSA-8/chall.py b/crypto-asimmetric/RSA-8/chall.py new file mode 100644 index 0000000..8a6d142 --- /dev/null +++ b/crypto-asimmetric/RSA-8/chall.py @@ -0,0 +1,11 @@ +from Crypto.Util.number import bytes_to_long, getPrime +from secret import flag + +n1 = getPrime(512)*getPrime(512) +n2 = getPrime(512)*getPrime(512) +n3 = getPrime(512)*getPrime(512) +n = [n1, n2, n3] +print(n) +e = 3 +m = bytes_to_long(flag.encode()) +print([pow(m, e, nn) for nn in n]) diff --git a/crypto-asimmetric/RSA-9/attack.py b/crypto-asimmetric/RSA-9/attack.py new file mode 100644 index 0000000..347baae --- /dev/null +++ b/crypto-asimmetric/RSA-9/attack.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python3 + +from Cryptodome.Util.number import bytes_to_long, long_to_bytes,getPrime +n = 138728501052719695830997827983870257879591108626209095010716818754108501959050430927220695106906763908822395818876460759364322997020222845247478635848425558793671347756842735011885094468024344931360037542098264527076663690119553302046205282212602106990248442514444587909723612295871002063257141634196430659767 +c = 40254592670056897412607628206293101688805220813070436291135637864728213056255791064749974976546612178688674369066366922740751516162695397004586912385306024596939610039396946106249406597089442755317018963104229975283670995939592563335766562761230485826833361814955946571348001305529987233069227384314146133493 +e = 60016485563460433620911462871489753027091796150597697863772440338904706321535832359517415034149374289955681381097544059467926029963755494161141305994584249448583991034102694954139120453335603006006970009433124857766494518747385902016093339683987307620366742481560543776055295663835860818720290861634213881385 + +#m=8 in the sage script +m = 8 +d = 130907063345211827271830776605143751868490159532968572514045305424799065327009793 +pt = pow(c, d, n) +decrypted = long_to_bytes(pt).decode() + +print(decrypted) diff --git a/crypto-asimmetric/RSA-9/chall.py b/crypto-asimmetric/RSA-9/chall.py new file mode 100644 index 0000000..c42e60f --- /dev/null +++ b/crypto-asimmetric/RSA-9/chall.py @@ -0,0 +1,9 @@ +from Crypto.Util.number import bytes_to_long, getPrime +from secret import flag + +p, q = getPrime(512), getPrime(512) +n = p*q +print(n) +e = 60016485563460433620911462871489753027091796150597697863772440338904706321535832359517415034149374289955681381097544059467926029963755494161141305994584249448583991034102694954139120453335603006006970009433124857766494518747385902016093339683987307620366742481560543776055295663835860818720290861634213881385 +m = bytes_to_long(flag.encode()) +print(pow(m, e, n)) diff --git a/crypto-asimmetric/inferious_prime/Arithmetic.py b/crypto-asimmetric/inferious_prime/Arithmetic.py new file mode 100644 index 0000000..68850f4 --- /dev/null +++ b/crypto-asimmetric/inferious_prime/Arithmetic.py @@ -0,0 +1,97 @@ +#!/usr/bin/env python3 + +''' +Created on Dec 22, 2011 + +@author: pablocelayes +''' + +def egcd(a,b): + ''' + Extended Euclidean Algorithm + returns x, y, gcd(a,b) such that ax + by = gcd(a,b) + ''' + u, u1 = 1, 0 + v, v1 = 0, 1 + while b: + q = a // b + u, u1 = u1, u - q * u1 + v, v1 = v1, v - q * v1 + a, b = b, a - q * b + return u, v, a + +def gcd(a,b): + ''' + 2.8 times faster than egcd(a,b)[2] + ''' + a,b=(b,a) if a= 0 + n = 0 + while x > 0: + n = n+1 + x = x>>1 + return n + + +def isqrt(n): + ''' + Calculates the integer square root + for arbitrary large nonnegative integers + ''' + if n < 0: + raise ValueError('square root not defined for negative numbers') + + if n == 0: + return 0 + a, b = divmod(bitlength(n), 2) + x = 2**(a+b) + while True: + y = (x + n//x)//2 + if y >= x: + return x + x = y + + +def is_perfect_square(n): + ''' + If n is a perfect square it returns sqrt(n), + + otherwise returns -1 + ''' + h = n & 0xF; #last hexadecimal "digit" + + if h > 9: + return -1 # return immediately in 6 cases out of 16. + + # Take advantage of Boolean short-circuit evaluation + if ( h != 2 and h != 3 and h != 5 and h != 6 and h != 7 and h != 8 ): + # take square root if you must + t = isqrt(n) + if t*t == n: + return t + else: + return -1 + + return -1 diff --git a/crypto-asimmetric/inferious_prime/ContinuedFractions.py b/crypto-asimmetric/inferious_prime/ContinuedFractions.py new file mode 100644 index 0000000..70ddba1 --- /dev/null +++ b/crypto-asimmetric/inferious_prime/ContinuedFractions.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python3 + +''' +Created on Dec 14, 2011 + +@author: pablocelayes + +''' +# Types +CFListT = list[int] # CF coefficients +CVListT = list[tuple[int, int]] # Convergents at each coefficient level + +def rational_to_contfrac(x: int, y: int) -> tuple[CFListT, CVListT]: + """ + Converts a rational x/y fraction into + a list of partial coefficients [a0, ..., an], and + a list of convergents at each coefficient level [(n0, d0), (n1, d1), ...] + + The algorithm of computing the convergents from left to right is available + in Section 9.1 of https://r-knott.surrey.ac.uk/Fibonacci/cfINTRO.html#CFtofract + + Args: + x (int): numerator of the given rational number + y (int): denominator of the given rational number + + Returns: + tuple[CFListT, CVListT]: a tuple of coefficients and convergents at each + coefficient level + """ + a = x // y + cflist = [a] + cvlist = [(a, 1)] + ppn, ppd = 1, 0 # pre-pre numerator and denominator of convergent + pn, pd = a, 1 # pre numerator and denominator of convergent + while a * y != x: + x, y = y, x - a * y + a = x // y + cflist.append(a) + cn, cd = a * pn + ppn, a * pd + ppd + cvlist.append((cn, cd)) + ppn, ppd = pn, pd + pn, pd = cn, cd + return cflist, cvlist diff --git a/crypto-asimmetric/inferious_prime/__pycache__/Arithmetic.cpython-313.pyc b/crypto-asimmetric/inferious_prime/__pycache__/Arithmetic.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..39b9922343e6d476c066d76acefe619d205cda95 GIT binary patch literal 2603 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 literal 0 HcmV?d00001 diff --git a/crypto-asimmetric/inferious_prime/attack.py b/crypto-asimmetric/inferious_prime/attack.py new file mode 100644 index 0000000..7ef222a --- /dev/null +++ b/crypto-asimmetric/inferious_prime/attack.py @@ -0,0 +1,16 @@ +import ContinuedFractions, Arithmetic +from Cryptodome.Util.number import getPrime, inverse, bytes_to_long, long_to_bytes, GCD + +#flag len == 23 +n = 770071954467068028952709005868206184906970777429465364126693 +e = 3 +# ct = pow(pt, e, n) +ct = 388435672474892257936058543724812684332943095105091384265939 +p = 888242373638787482012535770369 +q = 866961515596671343895614356197 +phi = (p - 1)*(q - 1) +d = inverse(e, phi) +#res = egcd(e, phi) +pt = pow(ct,d,n) +decrypted = long_to_bytes(pt) +print(decrypted.decode()) diff --git a/crypto-asimmetric/inferious_prime/attack2.py b/crypto-asimmetric/inferious_prime/attack2.py new file mode 100644 index 0000000..65ca422 --- /dev/null +++ b/crypto-asimmetric/inferious_prime/attack2.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python3 + +import ContinuedFractions, Arithmetic +from Cryptodome.Util.number import getPrime, inverse, bytes_to_long, long_to_bytes, GCD + +def hack_RSA(e,n): + ''' + Finds d knowing (e,n) + applying the Wiener continued fraction attack + ''' + _, convergents = ContinuedFractions.rational_to_contfrac(e, n) + + for (k,d) in convergents: + + #check if d is actually the key + if k!=0 and (e*d-1)%k == 0: + phi = (e*d-1)//k + s = n - phi + 1 + # check if the equation x^2 - s*x + n = 0 + # has integer roots + discr = s*s - 4*n + if(discr>=0): + t = Arithmetic.is_perfect_square(discr) + if t!=-1 and (s+t)%2==0: + print("Hacked!") + return d + + +n = 138728501052719695830997827983870257879591108626209095010716818754108501959050430927220695106906763908822395818876460759364322997020222845247478635848425558793671347756842735011885094468024344931360037542098264527076663690119553302046205282212602106990248442514444587909723612295871002063257141634196430659767 +c = 40254592670056897412607628206293101688805220813070436291135637864728213056255791064749974976546612178688674369066366922740751516162695397004586912385306024596939610039396946106249406597089442755317018963104229975283670995939592563335766562761230485826833361814955946571348001305529987233069227384314146133493 +e = 60016485563460433620911462871489753027091796150597697863772440338904706321535832359517415034149374289955681381097544059467926029963755494161141305994584249448583991034102694954139120453335603006006970009433124857766494518747385902016093339683987307620366742481560543776055295663835860818720290861634213881385 +print(hack_RSA(e,n)) diff --git a/crypto-asimmetric/inferious_prime/challenge.py b/crypto-asimmetric/inferious_prime/challenge.py new file mode 100644 index 0000000..3793e40 --- /dev/null +++ b/crypto-asimmetric/inferious_prime/challenge.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python3 + +from Cryptodome.Util.number import getPrime, inverse, bytes_to_long, long_to_bytes, GCD +from secret import flag + +assert len(flag) == 23 + +e = 3 + +# n will be 8 * (100 + 100) = 1600 bits strong which is pretty good +while True: + #getPrime is 100 bits not 100 Bytes + p = getPrime(100) + q = getPrime(100) + phi = (p - 1) * (q - 1) + d = inverse(e, phi) + if d != -1 and GCD(e, phi) == 1: + break + +n = p * q + +pt = bytes_to_long(flag) +ct = pow(pt, e, n) + +print(f"n = {n}") +print(f"e = {e}") +print(f"ct = {ct}") + +pt = pow(ct, d, n) +decrypted = long_to_bytes(pt) +assert decrypted == flag diff --git a/crypto-asimmetric/inferious_prime/ct.txt b/crypto-asimmetric/inferious_prime/ct.txt new file mode 100644 index 0000000..e5c6c49 --- /dev/null +++ b/crypto-asimmetric/inferious_prime/ct.txt @@ -0,0 +1,3 @@ +n = 770071954467068028952709005868206184906970777429465364126693 +e = 3 +ct = 388435672474892257936058543724812684332943095105091384265939 \ No newline at end of file diff --git a/crypto-asimmetric/inferious_prime/factor.json b/crypto-asimmetric/inferious_prime/factor.json new file mode 100644 index 0000000..42162d0 --- /dev/null +++ b/crypto-asimmetric/inferious_prime/factor.json @@ -0,0 +1,4 @@ +{ "input-expression":"factor(770071954467068028952709005868206184906970777429465364126693)", "input-decimal":"770071954467068028952709005868206184906970777429465364126693", "factors-prime":["866961515596671343895614356197","888242373638787482012535770369"], "pm1-curves" : {"150000":1}, "ecm-curves" : {"2000":30,"11000":49}, "ecm-levels" : {"t15":5.08,"t20":0.70,"t25":0.03}, "ecm-sum":18.49, "runtime" : {"total":3.3668, "ecm":0.7145, "pm1":0.1709, "siqs":1.5859}, "time-start" : "2025-05-31 16:36:45", "time-end" : "2025-05-31 16:36:49", "info":{"compiler":"MSVC 1931","ECM-version":"7.0.6","MPIR-version":"3.0.0","yafu-version":"3.0"} } +{ "input-expression":"factor(770071954467068028952709005868206184906970777429465364126693)", "input-decimal":"770071954467068028952709005868206184906970777429465364126693", "factors-prime":["866961515596671343895614356197","888242373638787482012535770369"], "pm1-curves" : {"150000":1}, "ecm-curves" : {"2000":30,"11000":49}, "ecm-levels" : {"t15":5.08,"t20":0.70,"t25":0.03}, "ecm-sum":18.49, "runtime" : {"total":3.4269, "ecm":0.7212, "pm1":0.1541, "siqs":1.6543}, "time-start" : "2025-05-31 16:41:17", "time-end" : "2025-05-31 16:41:20", "info":{"compiler":"MSVC 1931","ECM-version":"7.0.6","MPIR-version":"3.0.0","yafu-version":"3.0"} } +{ "input-expression":"factor(770071954467068028952709005868206184906970777429465364126693)", "input-decimal":"770071954467068028952709005868206184906970777429465364126693", "factors-prime":["866961515596671343895614356197","888242373638787482012535770369"], "pm1-curves" : {"150000":1}, "ecm-curves" : {"2000":30,"11000":49}, "ecm-levels" : {"t15":5.08,"t20":0.70,"t25":0.03}, "ecm-sum":18.49, "runtime" : {"total":3.4194, "ecm":0.7182, "pm1":0.1517, "siqs":1.6473}, "time-start" : "2025-05-31 16:59:56", "time-end" : "2025-05-31 16:59:59", "info":{"compiler":"MSVC 1931","ECM-version":"7.0.6","MPIR-version":"3.0.0","yafu-version":"3.0"} } +{ "input-expression":"factor(1387285010527196958309978279838702578795911086262090950107168187541085019590504309272206951069067639088223958188764607593643229970202228452474786358484255587936713477568427350118850944680243449313600375420982645270766636901195533020462052822126021069902484425144445879097236122958710020632571416341964306597)", "input-decimal":"1387285010527196958309978279838702578795911086262090950107168187541085019590504309272206951069067639088223958188764607593643229970202228452474786358484255587936713477568427350118850944680243449313600375420982645270766636901195533020462052822126021069902484425144445879097236122958710020632571416341964306597", "factors-prime":["3","24091","178873"], "factors-composite":["107311142968629109987106827924726849190727506922563506528296052606752554050570684149745249560701073047057673863013240005659733442526608459395106318894320211913016755833364378916165851253656368165804685947807602445392047856291998097447484713577830026745416939664870681389803184120274440801965548093"], "pm1-curves" : {"150000":1,"3750000":1}, "ecm-curves" : {"2000":30,"11000":74,"50000":214,"250000":331}, "ecm-levels" : {"t15":103.94,"t20":52.60,"t25":7.67,"t30":0.84,"t35":0.07}, "ecm-sum":29.18, "runtime" : {"total":674.1954, "ecm":582.0758, "pm1":3.8655}, "time-start" : "2025-05-31 17:16:44", "time-end" : "2025-05-31 17:27:58", "info":{"compiler":"MSVC 1931","ECM-version":"7.0.6","MPIR-version":"3.0.0","yafu-version":"3.0"} } diff --git a/crypto-asimmetric/inferious_prime/factor.log b/crypto-asimmetric/inferious_prime/factor.log new file mode 100644 index 0000000..13fc1e7 --- /dev/null +++ b/crypto-asimmetric/inferious_prime/factor.log @@ -0,0 +1,251 @@ +05/31/25 16:36:45, +05/31/25 16:36:45, **************************** +05/31/25 16:36:45, Starting factorization of 770071954467068028952709005868206184906970777429465364126693 +05/31/25 16:36:45, using pretesting plan: normal +05/31/25 16:36:45, no tune info: using qs/gnfs crossover of 95 digits +05/31/25 16:36:45, no tune info: using qs/snfs crossover of 95 digits +05/31/25 16:36:45, **************************** +05/31/25 16:36:45, rho: x^2 + 3, starting 1000 iterations on C60 +05/31/25 16:36:45, rho: x^2 + 2, starting 1000 iterations on C60 +05/31/25 16:36:45, rho: x^2 + 1, starting 1000 iterations on C60 +05/31/25 16:36:45, pm1: starting B1 = 150K, B2 = gmp-ecm default on C60 +05/31/25 16:36:46, current ECM pretesting depth: 0.000000 +05/31/25 16:36:46, scheduled 30 curves at B1=2000 toward target pretesting depth of 18.461538 +05/31/25 16:36:46, Finished 30 curves using GMP-ECM method on C60 input, B1=2k, B2=gmp-ecm default +05/31/25 16:36:46, current ECM pretesting depth: 15.177725 +05/31/25 16:36:46, scheduled 49 curves at B1=11000 toward target pretesting depth of 18.461538 +05/31/25 16:36:46, Finished 49 curves using GMP-ECM method on C60 input, B1=11k, B2=gmp-ecm default +05/31/25 16:36:46, final ECM pretested depth: 18.488536 +05/31/25 16:36:46, scheduler: switching to sieve method +05/31/25 16:36:47, starting SIQS on c60: 770071954467068028952709005868206184906970777429465364126693 +05/31/25 16:36:47, random seed: 9798781643487242962 +05/31/25 16:36:47, ==== sieve params ==== +05/31/25 16:36:47, n = 60 digits, 199 bits +05/31/25 16:36:47, factor base: 3680 primes (max prime = 74821) +05/31/25 16:36:47, single large prime cutoff: 5611575 (75 * pmax) +05/31/25 16:36:47, allocating 2 large prime slices of factor base +05/31/25 16:36:47, buckets hold 2048 elements +05/31/25 16:36:47, large prime hashtables have 131072 bytes +05/31/25 16:36:47, using SSE41 enabled 32k sieve core +05/31/25 16:36:47, sieve interval: 4 blocks of size 32768 +05/31/25 16:36:47, polynomial A has ~ 7 factors +05/31/25 16:36:47, using multiplier of 1 +05/31/25 16:36:47, using multiplier of 1 (kn mod 8 == 5) +05/31/25 16:36:47, using SPV correction of 20 bits, starting at offset 31 +05/31/25 16:36:47, trial factoring cutoff at 66 bits +05/31/25 16:36:47, ==== sieving started (1 thread) ==== +05/31/25 16:36:49, trial division touched 318827 sieve locations out of 2373976064 +05/31/25 16:36:49, total reports = 318827, total surviving reports = 52531 +05/31/25 16:36:49, total blocks sieved = 72448, avg surviving reports per block = 0.73 +05/31/25 16:36:49, 3751 relations found: 1751 full + 2000 from 19532 partial, using 9056 polys (160 A polys) +05/31/25 16:36:49, on average, sieving found 2.35 rels/poly and 13965.63 rels/sec +05/31/25 16:36:49, trial division touched 318827 sieve locations out of 2373976064 +05/31/25 16:36:49, ==== post processing stage (msieve-1.38) ==== +05/31/25 16:36:49, QS elapsed time = 1.5248 seconds. +05/31/25 16:36:49, begin singleton removal with 21283 relations +05/31/25 16:36:49, reduce to 5491 relations in 2 passes +05/31/25 16:36:49, recovered 5491 relations +05/31/25 16:36:49, recovered 4143 polynomials +05/31/25 16:36:49, attempting to build 3751 cycles +05/31/25 16:36:49, found 3751 cycles from 5491 relations in 1 passes +05/31/25 16:36:49, distribution of cycle lengths: +05/31/25 16:36:49, length 1 : 1751 +05/31/25 16:36:49, length 2 : 2000 +05/31/25 16:36:49, largest cycle: 2 relations +05/31/25 16:36:49, matrix is 3680 x 3751 (0.5 MB) with weight 91090 (24.28/col) +05/31/25 16:36:49, sparse part has weight 91090 (24.28/col) +05/31/25 16:36:49, filtering completed in 3 passes +05/31/25 16:36:49, matrix is 3423 x 3487 (0.4 MB) with weight 83804 (24.03/col) +05/31/25 16:36:49, sparse part has weight 83804 (24.03/col) +05/31/25 16:36:49, commencing Lanczos iteration +05/31/25 16:36:49, memory use: 0.6 MB +05/31/25 16:36:49, lanczos halted after 55 iterations (dim = 3419) +05/31/25 16:36:49, recovered 62 nontrivial dependencies +05/31/25 16:36:49, prp30 = 888242373638787482012535770369 +05/31/25 16:36:49, prp30 = 866961515596671343895614356197 +05/31/25 16:36:49, Lanczos elapsed time = 0.0590 seconds. +05/31/25 16:36:49, Sqrt elapsed time = 0.0020 seconds. +05/31/25 16:36:49, SIQS elapsed time = 1.5859 seconds. +05/31/25 16:36:49, +05/31/25 16:36:49, +05/31/25 16:36:49, Total factoring time = 3.3668 seconds +05/31/25 16:41:17, +05/31/25 16:41:17, **************************** +05/31/25 16:41:17, Starting factorization of 770071954467068028952709005868206184906970777429465364126693 +05/31/25 16:41:17, using pretesting plan: normal +05/31/25 16:41:17, no tune info: using qs/gnfs crossover of 95 digits +05/31/25 16:41:17, no tune info: using qs/snfs crossover of 95 digits +05/31/25 16:41:17, **************************** +05/31/25 16:41:17, rho: x^2 + 3, starting 1000 iterations on C60 +05/31/25 16:41:17, rho: x^2 + 2, starting 1000 iterations on C60 +05/31/25 16:41:17, rho: x^2 + 1, starting 1000 iterations on C60 +05/31/25 16:41:17, pm1: starting B1 = 150K, B2 = gmp-ecm default on C60 +05/31/25 16:41:17, current ECM pretesting depth: 0.000000 +05/31/25 16:41:17, scheduled 30 curves at B1=2000 toward target pretesting depth of 18.461538 +05/31/25 16:41:17, Finished 30 curves using GMP-ECM method on C60 input, B1=2k, B2=gmp-ecm default +05/31/25 16:41:17, current ECM pretesting depth: 15.177725 +05/31/25 16:41:17, scheduled 49 curves at B1=11000 toward target pretesting depth of 18.461538 +05/31/25 16:41:18, Finished 49 curves using GMP-ECM method on C60 input, B1=11k, B2=gmp-ecm default +05/31/25 16:41:18, final ECM pretested depth: 18.488536 +05/31/25 16:41:18, scheduler: switching to sieve method +05/31/25 16:41:19, starting SIQS on c60: 770071954467068028952709005868206184906970777429465364126693 +05/31/25 16:41:19, random seed: 2197617152253159330 +05/31/25 16:41:19, ==== sieve params ==== +05/31/25 16:41:19, n = 60 digits, 199 bits +05/31/25 16:41:19, factor base: 3680 primes (max prime = 74821) +05/31/25 16:41:19, single large prime cutoff: 5611575 (75 * pmax) +05/31/25 16:41:19, allocating 2 large prime slices of factor base +05/31/25 16:41:19, buckets hold 2048 elements +05/31/25 16:41:19, large prime hashtables have 131072 bytes +05/31/25 16:41:19, using SSE41 enabled 32k sieve core +05/31/25 16:41:19, sieve interval: 4 blocks of size 32768 +05/31/25 16:41:19, polynomial A has ~ 7 factors +05/31/25 16:41:19, using multiplier of 1 +05/31/25 16:41:19, using multiplier of 1 (kn mod 8 == 5) +05/31/25 16:41:19, using SPV correction of 20 bits, starting at offset 31 +05/31/25 16:41:19, trial factoring cutoff at 66 bits +05/31/25 16:41:19, ==== sieving started (1 thread) ==== +05/31/25 16:41:20, trial division touched 319551 sieve locations out of 2382364672 +05/31/25 16:41:20, total reports = 319551, total surviving reports = 86124 +05/31/25 16:41:20, total blocks sieved = 72704, avg surviving reports per block = 1.18 +05/31/25 16:41:20, 3751 relations found: 1775 full + 1976 from 19593 partial, using 9088 polys (160 A polys) +05/31/25 16:41:20, on average, sieving found 2.35 rels/poly and 13449.19 rels/sec +05/31/25 16:41:20, trial division touched 319551 sieve locations out of 2382364672 +05/31/25 16:41:20, ==== post processing stage (msieve-1.38) ==== +05/31/25 16:41:20, QS elapsed time = 1.5897 seconds. +05/31/25 16:41:20, begin singleton removal with 21368 relations +05/31/25 16:41:20, reduce to 5490 relations in 2 passes +05/31/25 16:41:20, recovered 5490 relations +05/31/25 16:41:20, recovered 4137 polynomials +05/31/25 16:41:20, attempting to build 3751 cycles +05/31/25 16:41:20, found 3751 cycles from 5490 relations in 1 passes +05/31/25 16:41:20, distribution of cycle lengths: +05/31/25 16:41:20, length 1 : 1775 +05/31/25 16:41:20, length 2 : 1976 +05/31/25 16:41:20, largest cycle: 2 relations +05/31/25 16:41:20, matrix is 3680 x 3751 (0.5 MB) with weight 90726 (24.19/col) +05/31/25 16:41:20, sparse part has weight 90726 (24.19/col) +05/31/25 16:41:20, filtering completed in 3 passes +05/31/25 16:41:20, matrix is 3382 x 3446 (0.4 MB) with weight 82607 (23.97/col) +05/31/25 16:41:20, sparse part has weight 82607 (23.97/col) +05/31/25 16:41:20, commencing Lanczos iteration +05/31/25 16:41:20, memory use: 0.6 MB +05/31/25 16:41:20, lanczos halted after 55 iterations (dim = 3380) +05/31/25 16:41:20, recovered 63 nontrivial dependencies +05/31/25 16:41:20, prp30 = 888242373638787482012535770369 +05/31/25 16:41:20, prp30 = 866961515596671343895614356197 +05/31/25 16:41:20, Lanczos elapsed time = 0.0580 seconds. +05/31/25 16:41:20, Sqrt elapsed time = 0.0070 seconds. +05/31/25 16:41:20, SIQS elapsed time = 1.6543 seconds. +05/31/25 16:41:20, +05/31/25 16:41:20, +05/31/25 16:41:20, Total factoring time = 3.4269 seconds +05/31/25 16:59:56, +05/31/25 16:59:56, **************************** +05/31/25 16:59:56, Starting factorization of 770071954467068028952709005868206184906970777429465364126693 +05/31/25 16:59:56, using pretesting plan: normal +05/31/25 16:59:56, no tune info: using qs/gnfs crossover of 95 digits +05/31/25 16:59:56, no tune info: using qs/snfs crossover of 95 digits +05/31/25 16:59:56, **************************** +05/31/25 16:59:56, rho: x^2 + 3, starting 1000 iterations on C60 +05/31/25 16:59:56, rho: x^2 + 2, starting 1000 iterations on C60 +05/31/25 16:59:56, rho: x^2 + 1, starting 1000 iterations on C60 +05/31/25 16:59:56, pm1: starting B1 = 150K, B2 = gmp-ecm default on C60 +05/31/25 16:59:56, current ECM pretesting depth: 0.000000 +05/31/25 16:59:56, scheduled 30 curves at B1=2000 toward target pretesting depth of 18.461538 +05/31/25 16:59:57, Finished 30 curves using GMP-ECM method on C60 input, B1=2k, B2=gmp-ecm default +05/31/25 16:59:57, current ECM pretesting depth: 15.177725 +05/31/25 16:59:57, scheduled 49 curves at B1=11000 toward target pretesting depth of 18.461538 +05/31/25 16:59:57, Finished 49 curves using GMP-ECM method on C60 input, B1=11k, B2=gmp-ecm default +05/31/25 16:59:57, final ECM pretested depth: 18.488536 +05/31/25 16:59:57, scheduler: switching to sieve method +05/31/25 16:59:58, starting SIQS on c60: 770071954467068028952709005868206184906970777429465364126693 +05/31/25 16:59:58, random seed: 5474488345592639154 +05/31/25 16:59:58, ==== sieve params ==== +05/31/25 16:59:58, n = 60 digits, 199 bits +05/31/25 16:59:58, factor base: 3680 primes (max prime = 74821) +05/31/25 16:59:58, single large prime cutoff: 5611575 (75 * pmax) +05/31/25 16:59:58, allocating 2 large prime slices of factor base +05/31/25 16:59:58, buckets hold 2048 elements +05/31/25 16:59:58, large prime hashtables have 131072 bytes +05/31/25 16:59:58, using SSE41 enabled 32k sieve core +05/31/25 16:59:58, sieve interval: 4 blocks of size 32768 +05/31/25 16:59:58, polynomial A has ~ 7 factors +05/31/25 16:59:58, using multiplier of 1 +05/31/25 16:59:58, using multiplier of 1 (kn mod 8 == 5) +05/31/25 16:59:58, using SPV correction of 20 bits, starting at offset 31 +05/31/25 16:59:58, trial factoring cutoff at 66 bits +05/31/25 16:59:58, ==== sieving started (1 thread) ==== +05/31/25 16:59:59, trial division touched 321806 sieve locations out of 2399666176 +05/31/25 16:59:59, total reports = 321806, total surviving reports = 87328 +05/31/25 16:59:59, total blocks sieved = 73232, avg surviving reports per block = 1.19 +05/31/25 16:59:59, 3747 relations found: 1688 full + 2059 from 19667 partial, using 9154 polys (158 A polys) +05/31/25 16:59:59, on average, sieving found 2.33 rels/poly and 13473.45 rels/sec +05/31/25 16:59:59, trial division touched 321806 sieve locations out of 2399666176 +05/31/25 16:59:59, ==== post processing stage (msieve-1.38) ==== +05/31/25 16:59:59, QS elapsed time = 1.5857 seconds. +05/31/25 16:59:59, begin singleton removal with 21355 relations +05/31/25 16:59:59, reduce to 5526 relations in 2 passes +05/31/25 16:59:59, recovered 5526 relations +05/31/25 16:59:59, recovered 4180 polynomials +05/31/25 16:59:59, attempting to build 3747 cycles +05/31/25 16:59:59, found 3747 cycles from 5526 relations in 1 passes +05/31/25 16:59:59, distribution of cycle lengths: +05/31/25 16:59:59, length 1 : 1688 +05/31/25 16:59:59, length 2 : 2059 +05/31/25 16:59:59, largest cycle: 2 relations +05/31/25 16:59:59, matrix is 3680 x 3747 (0.5 MB) with weight 92151 (24.59/col) +05/31/25 16:59:59, sparse part has weight 92151 (24.59/col) +05/31/25 16:59:59, filtering completed in 3 passes +05/31/25 16:59:59, matrix is 3383 x 3447 (0.4 MB) with weight 84068 (24.39/col) +05/31/25 16:59:59, sparse part has weight 84068 (24.39/col) +05/31/25 16:59:59, commencing Lanczos iteration +05/31/25 16:59:59, memory use: 0.6 MB +05/31/25 16:59:59, lanczos halted after 55 iterations (dim = 3381) +05/31/25 16:59:59, recovered 63 nontrivial dependencies +05/31/25 16:59:59, prp30 = 866961515596671343895614356197 +05/31/25 16:59:59, prp30 = 888242373638787482012535770369 +05/31/25 16:59:59, Lanczos elapsed time = 0.0580 seconds. +05/31/25 16:59:59, Sqrt elapsed time = 0.0040 seconds. +05/31/25 16:59:59, SIQS elapsed time = 1.6473 seconds. +05/31/25 16:59:59, +05/31/25 16:59:59, +05/31/25 16:59:59, Total factoring time = 3.4194 seconds +05/31/25 17:16:44, +05/31/25 17:16:44, **************************** +05/31/25 17:16:44, Starting factorization of 1387285010527196958309978279838702578795911086262090950107168187541085019590504309272206951069067639088223958188764607593643229970202228452474786358484255587936713477568427350118850944680243449313600375420982645270766636901195533020462052822126021069902484425144445879097236122958710020632571416341964306597 +05/31/25 17:16:44, using pretesting plan: normal +05/31/25 17:16:44, no tune info: using qs/gnfs crossover of 95 digits +05/31/25 17:16:44, no tune info: using qs/snfs crossover of 95 digits +05/31/25 17:16:44, **************************** +05/31/25 17:16:44, div: found prime factor = 3 +05/31/25 17:16:44, rho: x^2 + 3, starting 1000 iterations on C306 +05/31/25 17:16:44, prp5 = 24091 +05/31/25 17:16:44, rho: x^2 + 3, starting 1000 iterations on C302 +05/31/25 17:16:44, prp6 = 178873 +05/31/25 17:16:44, rho: x^2 + 3, starting 1000 iterations on C297 +05/31/25 17:16:44, rho: x^2 + 2, starting 1000 iterations on C297 +05/31/25 17:16:44, rho: x^2 + 1, starting 1000 iterations on C297 +05/31/25 17:16:45, pm1: starting B1 = 150K, B2 = gmp-ecm default on C297 +05/31/25 17:16:45, current ECM pretesting depth: 0.000000 +05/31/25 17:16:45, scheduled 30 curves at B1=2000 toward target pretesting depth of 91.384615 +05/31/25 17:16:46, Finished 30 curves using GMP-ECM method on C297 input, B1=2k, B2=gmp-ecm default +05/31/25 17:16:46, current ECM pretesting depth: 15.177725 +05/31/25 17:16:46, scheduled 74 curves at B1=11000 toward target pretesting depth of 91.384615 +05/31/25 17:16:52, Finished 74 curves using GMP-ECM method on C297 input, B1=11k, B2=gmp-ecm default +05/31/25 17:16:52, current ECM pretesting depth: 20.242996 +05/31/25 17:16:52, scheduled 214 curves at B1=50000 toward target pretesting depth of 91.384615 +05/31/25 17:18:12, Finished 214 curves using GMP-ECM method on C297 input, B1=50k, B2=gmp-ecm default +05/31/25 17:18:12, pm1: starting B1 = 3750K, B2 = gmp-ecm default on C297 +05/31/25 17:18:16, current ECM pretesting depth: 25.332854 +05/31/25 17:18:16, scheduled 430 curves at B1=250000 toward target pretesting depth of 91.384615 +05/31/25 17:27:58, Finished 331 curves using GMP-ECM method on C297 input, B1=250k, B2=gmp-ecm default +05/31/25 17:27:58, ecm work completed: +05/31/25 17:27:58, t15: 103.94 +05/31/25 17:27:58, t20: 52.60 +05/31/25 17:27:58, t25: 7.67 +05/31/25 17:27:58, t30: 0.84 +05/31/25 17:27:58, t35: 0.07 +05/31/25 17:27:58, estimated sum of completed work is t29.18 +05/31/25 17:27:58, c297 cofactor = 107311142968629109987106827924726849190727506922563506528296052606752554050570684149745249560701073047057673863013240005659733442526608459395106318894320211913016755833364378916165851253656368165804685947807602445392047856291998097447484713577830026745416939664870681389803184120274440801965548093 +05/31/25 17:27:58, Total factoring time = 674.1954 seconds diff --git a/crypto-asimmetric/inferious_prime/session.log b/crypto-asimmetric/inferious_prime/session.log new file mode 100644 index 0000000..df89ea6 --- /dev/null +++ b/crypto-asimmetric/inferious_prime/session.log @@ -0,0 +1,54 @@ +05/31/25 16:35:29, ===================================== +05/31/25 16:35:29, System/Build Info: +05/31/25 16:35:29, YAFU Version 3.0 +05/31/25 16:35:29, Built with Microsoft Visual Studio 1931 and LLVM Compiler 13.0.0 +05/31/25 16:35:29, Using GMP-ECM 7.0.6, Powered by MPIR 3.0.0 +05/31/25 16:35:29, detected AMD Ryzen 5 5600H with Radeon Graphics +detected L1 = 32768 bytes, L2 = 16777216 bytes, CL = 64 bytes +05/31/25 16:35:29, CPU features enabled: 05/31/25 16:35:29, SSE41 05/31/25 16:35:29, +05/31/25 16:35:29, using 1 random witness for Rabin-Miller PRP checks +05/31/25 16:35:29, Cached 664579 primes: max prime is 9999991 +05/31/25 16:35:29, Could not parse yafu.ini from Z:\home\emln\Documents\crypto\ctf\crypto-asimmetric\inferious_prime + +05/31/25 16:35:29, Random seed: 11355864739165760672 +05/31/25 16:41:06, ===================================== +05/31/25 16:41:06, System/Build Info: +05/31/25 16:41:06, YAFU Version 3.0 +05/31/25 16:41:06, Built with Microsoft Visual Studio 1931 and LLVM Compiler 13.0.0 +05/31/25 16:41:06, Using GMP-ECM 7.0.6, Powered by MPIR 3.0.0 +05/31/25 16:41:06, detected AMD Ryzen 5 5600H with Radeon Graphics +detected L1 = 32768 bytes, L2 = 16777216 bytes, CL = 64 bytes +05/31/25 16:41:06, CPU features enabled: 05/31/25 16:41:06, SSE41 05/31/25 16:41:06, +05/31/25 16:41:06, using 1 random witness for Rabin-Miller PRP checks +05/31/25 16:41:06, Cached 664579 primes: max prime is 9999991 +05/31/25 16:41:06, Could not parse yafu.ini from Z:\home\emln\Documents\crypto\ctf\crypto-asimmetric\inferious_prime + +05/31/25 16:41:06, Random seed: 2349589573457932528 +05/31/25 16:59:51, ===================================== +05/31/25 16:59:51, System/Build Info: +05/31/25 16:59:51, YAFU Version 3.0 +05/31/25 16:59:51, Built with Microsoft Visual Studio 1931 and LLVM Compiler 13.0.0 +05/31/25 16:59:51, Using GMP-ECM 7.0.6, Powered by MPIR 3.0.0 +05/31/25 16:59:51, detected AMD Ryzen 5 5600H with Radeon Graphics +detected L1 = 32768 bytes, L2 = 16777216 bytes, CL = 64 bytes +05/31/25 16:59:51, CPU features enabled: 05/31/25 16:59:51, SSE41 05/31/25 16:59:51, +05/31/25 16:59:51, using 1 random witness for Rabin-Miller PRP checks +05/31/25 16:59:51, Cached 664579 primes: max prime is 9999991 +05/31/25 16:59:51, Could not parse yafu.ini from Z:\home\emln\Documents\crypto\ctf\crypto-asimmetric\inferious_prime + +05/31/25 16:59:51, Random seed: 13485483859696141696 +05/31/25 17:16:09, ===================================== +05/31/25 17:16:09, System/Build Info: +05/31/25 17:16:09, YAFU Version 3.0 +05/31/25 17:16:09, Built with Microsoft Visual Studio 1931 and LLVM Compiler 13.0.0 +05/31/25 17:16:09, Using GMP-ECM 7.0.6, Powered by MPIR 3.0.0 +05/31/25 17:16:09, detected AMD Ryzen 5 5600H with Radeon Graphics +detected L1 = 32768 bytes, L2 = 16777216 bytes, CL = 64 bytes +05/31/25 17:16:09, CPU features enabled: 05/31/25 17:16:09, SSE41 05/31/25 17:16:09, +05/31/25 17:16:09, using 1 random witness for Rabin-Miller PRP checks +05/31/25 17:16:09, Cached 664579 primes: max prime is 9999991 +05/31/25 17:16:09, Could not parse yafu.ini from Z:\home\emln\Documents\crypto\ctf\crypto-asimmetric\inferious_prime + +05/31/25 17:16:09, Random seed: 10478636967936581680 +05/31/25 17:16:44, Processing: factor(1387285010527196958309978279838702578795911086262090950107168187541085019590504309272206951069067639088223958188764607593643229970202228452474786358484255587936713477568427350118850944680243449313600375420982645270766636901195533020462052822126021069902484425144445879097236122958710020632571416341964306597) +05/31/25 17:27:58, Result : 107311142968629109987106827924726849190727506922563506528296052606752554050570684149745249560701073047057673863013240005659733442526608459395106318894320211913016755833364378916165851253656368165804685947807602445392047856291998097447484713577830026745416939664870681389803184120274440801965548093 diff --git a/crypto-asimmetric/inferious_prime/test.py b/crypto-asimmetric/inferious_prime/test.py new file mode 100644 index 0000000..fb6eb9f --- /dev/null +++ b/crypto-asimmetric/inferious_prime/test.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python3 + +from Cryptodome.PublicKey import RSA + + +#kth root of the number n +def iroot(k, n): + u, s = n, n+1 + while u < s: + s = u + t = (k-1) * s + n // pow(s, k-1) + u = t // k + return s + +if __name__ == '__main__': + + e = 3 + # d = rsa_keypair.d + n = 388435672474892257936058543724812684332943095105091384265939 + m = b'A'*8 + m_int = int.from_bytes(m,byteorder='big') + + c = pow(m_int,e,n) + + decrypted_int = iroot(e, c) + print(decrypted_int) + print(decrypted_int.to_bytes(decrypted_int.bit_length() // 8 +1, byteorder='big').decode()) + + dec = pow(c, 1/3) + print(dec) diff --git a/crypto-asimmetric/inferious_prime/wiener.py b/crypto-asimmetric/inferious_prime/wiener.py new file mode 100644 index 0000000..3b4c190 --- /dev/null +++ b/crypto-asimmetric/inferious_prime/wiener.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +import ContinuedFractions, Arithmetic + +def hack_RSA(e,n): + ''' + Finds d knowing (e,n) + applying the Wiener continued fraction attack + ''' + _, convergents = ContinuedFractions.rational_to_contfrac(e, n) + + for (k,d) in convergents: + + #check if d is actually the key + if k!=0 and (e*d-1)%k == 0: + phi = (e*d-1)//k + s = n - phi + 1 + # check if the equation x^2 - s*x + n = 0 + # has integer roots + discr = s*s - 4*n + if(discr>=0): + t = Arithmetic.is_perfect_square(discr) + if t!=-1 and (s+t)%2==0: + print("Hacked!") + return d diff --git a/crypto-hash/equality/HashPump b/crypto-hash/equality/HashPump new file mode 160000 index 0000000..52d6172 --- /dev/null +++ b/crypto-hash/equality/HashPump @@ -0,0 +1 @@ +Subproject commit 52d6172005e4d90911d04116a8ec21d95b90ccb5 diff --git a/crypto-hash/equality/HashPump-partialhash b/crypto-hash/equality/HashPump-partialhash new file mode 160000 index 0000000..b822764 --- /dev/null +++ b/crypto-hash/equality/HashPump-partialhash @@ -0,0 +1 @@ +Subproject commit b822764fa71209858c91378736d43d082c674e96 diff --git a/crypto-hash/equality/MD4-Collision b/crypto-hash/equality/MD4-Collision new file mode 160000 index 0000000..ccbe5d3 --- /dev/null +++ b/crypto-hash/equality/MD4-Collision @@ -0,0 +1 @@ +Subproject commit ccbe5d3e05f89b126c9c91131dfac80e991ed4c1 diff --git a/crypto-hash/equality/attack.py b/crypto-hash/equality/attack.py new file mode 100644 index 0000000..da795bc --- /dev/null +++ b/crypto-hash/equality/attack.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 +from pwn import * +HOST = "130.192.5.212" +PORT = 6631 +#Generate with MD4-Collision +m1 = "c2a66ef939681a46895edbd696dec463691253412c051f4c147b955348bcb90d9721b08e22ee254c42f24fa7d6a946ca16a09caa7e71cc430c30f1448763b200" +m2 = "c2a66ef939681ac6895edb4696dec463691253412c051f4c147b955348bcb90d9721b08e22ee254c42f24fa7d6a946ca16a09baa7e71cc430c30f1448763b200" +server = remote(HOST,PORT) +server.send(m1) +server.send(b'\n') +server.send(m2) +server.send(b'\n') + +print(server.recv(1024)) + +print(server.recv(1024)) + diff --git a/crypto-hash/equality/chall.py b/crypto-hash/equality/chall.py new file mode 100644 index 0000000..6c51832 --- /dev/null +++ b/crypto-hash/equality/chall.py @@ -0,0 +1,27 @@ +from Crypto.Hash import MD4 +import hashlib +from binascii import unhexlify +from secret import flag + + +def md4(data: bytes) -> str: + h = MD4.new() + h.update(data) + return h.hexdigest() + + +print("Find two strings that are both equal and different! I'll use _optimized algorithms_ to check.") + +s1 = unhexlify(input("Enter the first string: ")) +s2 = unhexlify(input("Enter your second string: ")) + +md4_s1 = md4(s1) +md4_s2 = md4(s2) + +md5_s1 = hashlib.md5(s1).hexdigest() +md5_s2 = hashlib.md5(s2).hexdigest() + +if md4_s1 == md4_s2 and md5_s1 != md5_s2: + print(f"Good job! {flag}") +else: + print("Try again!") diff --git a/back-to-the-future/2 b/crypto-simmetric/back-to-the-future/2 similarity index 100% rename from back-to-the-future/2 rename to crypto-simmetric/back-to-the-future/2 diff --git a/back-to-the-future/__pycache__/chall.cpython-313.pyc b/crypto-simmetric/back-to-the-future/__pycache__/chall.cpython-313.pyc similarity index 100% rename from back-to-the-future/__pycache__/chall.cpython-313.pyc rename to crypto-simmetric/back-to-the-future/__pycache__/chall.cpython-313.pyc diff --git a/back-to-the-future/attack.py b/crypto-simmetric/back-to-the-future/attack.py similarity index 100% rename from back-to-the-future/attack.py rename to crypto-simmetric/back-to-the-future/attack.py diff --git a/back-to-the-future/chall.py b/crypto-simmetric/back-to-the-future/chall.py similarity index 100% rename from back-to-the-future/chall.py rename to crypto-simmetric/back-to-the-future/chall.py diff --git a/back-to-the-future/des.py b/crypto-simmetric/back-to-the-future/des.py similarity index 100% rename from back-to-the-future/des.py rename to crypto-simmetric/back-to-the-future/des.py diff --git a/back-to-the-future/flask_session/0024f4d0c2b3d981466de18eb8f0a755 b/crypto-simmetric/back-to-the-future/flask_session/0024f4d0c2b3d981466de18eb8f0a755 similarity index 100% rename from back-to-the-future/flask_session/0024f4d0c2b3d981466de18eb8f0a755 rename to crypto-simmetric/back-to-the-future/flask_session/0024f4d0c2b3d981466de18eb8f0a755 diff --git a/back-to-the-future/flask_session/013e1aa0bd32b92f105abddbcb2e4dfd b/crypto-simmetric/back-to-the-future/flask_session/013e1aa0bd32b92f105abddbcb2e4dfd similarity index 100% rename from back-to-the-future/flask_session/013e1aa0bd32b92f105abddbcb2e4dfd rename to crypto-simmetric/back-to-the-future/flask_session/013e1aa0bd32b92f105abddbcb2e4dfd diff --git a/back-to-the-future/flask_session/016f2deaa7b087afc8784da8397a22a5 b/crypto-simmetric/back-to-the-future/flask_session/016f2deaa7b087afc8784da8397a22a5 similarity index 100% rename from back-to-the-future/flask_session/016f2deaa7b087afc8784da8397a22a5 rename to crypto-simmetric/back-to-the-future/flask_session/016f2deaa7b087afc8784da8397a22a5 diff --git a/back-to-the-future/flask_session/0339ca8760519fa43df56ddec27a24e7 b/crypto-simmetric/back-to-the-future/flask_session/0339ca8760519fa43df56ddec27a24e7 similarity index 100% rename from back-to-the-future/flask_session/0339ca8760519fa43df56ddec27a24e7 rename to crypto-simmetric/back-to-the-future/flask_session/0339ca8760519fa43df56ddec27a24e7 diff --git a/back-to-the-future/flask_session/037f590478d87f55cedf7b1ab1d53a82 b/crypto-simmetric/back-to-the-future/flask_session/037f590478d87f55cedf7b1ab1d53a82 similarity index 100% rename from back-to-the-future/flask_session/037f590478d87f55cedf7b1ab1d53a82 rename to crypto-simmetric/back-to-the-future/flask_session/037f590478d87f55cedf7b1ab1d53a82 diff --git a/back-to-the-future/flask_session/03c414397bdde3743856111af41ff1bf b/crypto-simmetric/back-to-the-future/flask_session/03c414397bdde3743856111af41ff1bf similarity index 100% rename from back-to-the-future/flask_session/03c414397bdde3743856111af41ff1bf rename to crypto-simmetric/back-to-the-future/flask_session/03c414397bdde3743856111af41ff1bf diff --git a/back-to-the-future/flask_session/04433ec6a092234083ccb75f70be7844 b/crypto-simmetric/back-to-the-future/flask_session/04433ec6a092234083ccb75f70be7844 similarity index 100% rename from back-to-the-future/flask_session/04433ec6a092234083ccb75f70be7844 rename to crypto-simmetric/back-to-the-future/flask_session/04433ec6a092234083ccb75f70be7844 diff --git a/back-to-the-future/flask_session/050e985a050d81dfa77f0827ff555076 b/crypto-simmetric/back-to-the-future/flask_session/050e985a050d81dfa77f0827ff555076 similarity index 100% rename from back-to-the-future/flask_session/050e985a050d81dfa77f0827ff555076 rename to crypto-simmetric/back-to-the-future/flask_session/050e985a050d81dfa77f0827ff555076 diff --git a/back-to-the-future/flask_session/0571127e1b066fcd0ab93df9db3c231e b/crypto-simmetric/back-to-the-future/flask_session/0571127e1b066fcd0ab93df9db3c231e similarity index 100% rename from back-to-the-future/flask_session/0571127e1b066fcd0ab93df9db3c231e rename to crypto-simmetric/back-to-the-future/flask_session/0571127e1b066fcd0ab93df9db3c231e diff --git a/back-to-the-future/flask_session/0753e7809f4e8bde6701b4d27193c28b b/crypto-simmetric/back-to-the-future/flask_session/0753e7809f4e8bde6701b4d27193c28b similarity index 100% rename from back-to-the-future/flask_session/0753e7809f4e8bde6701b4d27193c28b rename to crypto-simmetric/back-to-the-future/flask_session/0753e7809f4e8bde6701b4d27193c28b diff --git a/back-to-the-future/flask_session/07b9966fa556e07bb7dbf9d7a97c5d6a b/crypto-simmetric/back-to-the-future/flask_session/07b9966fa556e07bb7dbf9d7a97c5d6a similarity index 100% rename from back-to-the-future/flask_session/07b9966fa556e07bb7dbf9d7a97c5d6a rename to crypto-simmetric/back-to-the-future/flask_session/07b9966fa556e07bb7dbf9d7a97c5d6a diff --git a/back-to-the-future/flask_session/085e25cb55018865bad411eac1273ec2 b/crypto-simmetric/back-to-the-future/flask_session/085e25cb55018865bad411eac1273ec2 similarity index 100% rename from back-to-the-future/flask_session/085e25cb55018865bad411eac1273ec2 rename to crypto-simmetric/back-to-the-future/flask_session/085e25cb55018865bad411eac1273ec2 diff --git a/back-to-the-future/flask_session/094a242c07093b9b0a8bf37702d4d6ed b/crypto-simmetric/back-to-the-future/flask_session/094a242c07093b9b0a8bf37702d4d6ed similarity index 100% rename from back-to-the-future/flask_session/094a242c07093b9b0a8bf37702d4d6ed rename to crypto-simmetric/back-to-the-future/flask_session/094a242c07093b9b0a8bf37702d4d6ed diff --git a/back-to-the-future/flask_session/09e32f0db5c88c55bc994ecd2d6cbcc6 b/crypto-simmetric/back-to-the-future/flask_session/09e32f0db5c88c55bc994ecd2d6cbcc6 similarity index 100% rename from back-to-the-future/flask_session/09e32f0db5c88c55bc994ecd2d6cbcc6 rename to crypto-simmetric/back-to-the-future/flask_session/09e32f0db5c88c55bc994ecd2d6cbcc6 diff --git a/back-to-the-future/flask_session/09eb19248af327923541b8fcae0c34f9 b/crypto-simmetric/back-to-the-future/flask_session/09eb19248af327923541b8fcae0c34f9 similarity index 100% rename from back-to-the-future/flask_session/09eb19248af327923541b8fcae0c34f9 rename to crypto-simmetric/back-to-the-future/flask_session/09eb19248af327923541b8fcae0c34f9 diff --git a/back-to-the-future/flask_session/0a52c4727ae4311cd3a51114e42472c6 b/crypto-simmetric/back-to-the-future/flask_session/0a52c4727ae4311cd3a51114e42472c6 similarity index 100% rename from back-to-the-future/flask_session/0a52c4727ae4311cd3a51114e42472c6 rename to crypto-simmetric/back-to-the-future/flask_session/0a52c4727ae4311cd3a51114e42472c6 diff --git a/back-to-the-future/flask_session/0a6d00dc979a6696c7dc339e4400a0c9 b/crypto-simmetric/back-to-the-future/flask_session/0a6d00dc979a6696c7dc339e4400a0c9 similarity index 100% rename from back-to-the-future/flask_session/0a6d00dc979a6696c7dc339e4400a0c9 rename to crypto-simmetric/back-to-the-future/flask_session/0a6d00dc979a6696c7dc339e4400a0c9 diff --git a/back-to-the-future/flask_session/0b8def7c22ef61cb5591a9c080f8c117 b/crypto-simmetric/back-to-the-future/flask_session/0b8def7c22ef61cb5591a9c080f8c117 similarity index 100% rename from back-to-the-future/flask_session/0b8def7c22ef61cb5591a9c080f8c117 rename to crypto-simmetric/back-to-the-future/flask_session/0b8def7c22ef61cb5591a9c080f8c117 diff --git a/back-to-the-future/flask_session/0bbec9d663098e92dc7d014a4b7f032d b/crypto-simmetric/back-to-the-future/flask_session/0bbec9d663098e92dc7d014a4b7f032d similarity index 100% rename from back-to-the-future/flask_session/0bbec9d663098e92dc7d014a4b7f032d rename to crypto-simmetric/back-to-the-future/flask_session/0bbec9d663098e92dc7d014a4b7f032d diff --git a/back-to-the-future/flask_session/0c1f1c2450a35deebee44be732d558d8 b/crypto-simmetric/back-to-the-future/flask_session/0c1f1c2450a35deebee44be732d558d8 similarity index 100% rename from back-to-the-future/flask_session/0c1f1c2450a35deebee44be732d558d8 rename to crypto-simmetric/back-to-the-future/flask_session/0c1f1c2450a35deebee44be732d558d8 diff --git a/back-to-the-future/flask_session/0c23ca3d1f4169ce2147cf8a3180d454 b/crypto-simmetric/back-to-the-future/flask_session/0c23ca3d1f4169ce2147cf8a3180d454 similarity index 100% rename from back-to-the-future/flask_session/0c23ca3d1f4169ce2147cf8a3180d454 rename to crypto-simmetric/back-to-the-future/flask_session/0c23ca3d1f4169ce2147cf8a3180d454 diff --git a/back-to-the-future/flask_session/0caac73c224f83af1261050ab6ca5bc6 b/crypto-simmetric/back-to-the-future/flask_session/0caac73c224f83af1261050ab6ca5bc6 similarity index 100% rename from back-to-the-future/flask_session/0caac73c224f83af1261050ab6ca5bc6 rename to crypto-simmetric/back-to-the-future/flask_session/0caac73c224f83af1261050ab6ca5bc6 diff --git a/back-to-the-future/flask_session/0d2a8e6c32cee51c76eef735eea453d4 b/crypto-simmetric/back-to-the-future/flask_session/0d2a8e6c32cee51c76eef735eea453d4 similarity index 100% rename from back-to-the-future/flask_session/0d2a8e6c32cee51c76eef735eea453d4 rename to crypto-simmetric/back-to-the-future/flask_session/0d2a8e6c32cee51c76eef735eea453d4 diff --git a/back-to-the-future/flask_session/0eb3cd9a68a2d1328664c716c96074ce b/crypto-simmetric/back-to-the-future/flask_session/0eb3cd9a68a2d1328664c716c96074ce similarity index 100% rename from back-to-the-future/flask_session/0eb3cd9a68a2d1328664c716c96074ce rename to crypto-simmetric/back-to-the-future/flask_session/0eb3cd9a68a2d1328664c716c96074ce diff --git a/back-to-the-future/flask_session/0eb7bd4f6d34532740aad04e035261f4 b/crypto-simmetric/back-to-the-future/flask_session/0eb7bd4f6d34532740aad04e035261f4 similarity index 100% rename from back-to-the-future/flask_session/0eb7bd4f6d34532740aad04e035261f4 rename to crypto-simmetric/back-to-the-future/flask_session/0eb7bd4f6d34532740aad04e035261f4 diff --git a/back-to-the-future/flask_session/0f4b7f5961fc0914870a1d877d5af208 b/crypto-simmetric/back-to-the-future/flask_session/0f4b7f5961fc0914870a1d877d5af208 similarity index 100% rename from back-to-the-future/flask_session/0f4b7f5961fc0914870a1d877d5af208 rename to crypto-simmetric/back-to-the-future/flask_session/0f4b7f5961fc0914870a1d877d5af208 diff --git a/back-to-the-future/flask_session/102b39f6be00c1781f576ab0acfef156 b/crypto-simmetric/back-to-the-future/flask_session/102b39f6be00c1781f576ab0acfef156 similarity index 100% rename from back-to-the-future/flask_session/102b39f6be00c1781f576ab0acfef156 rename to crypto-simmetric/back-to-the-future/flask_session/102b39f6be00c1781f576ab0acfef156 diff --git a/back-to-the-future/flask_session/104cca7fdf9eb7752f4862d38e6eb718 b/crypto-simmetric/back-to-the-future/flask_session/104cca7fdf9eb7752f4862d38e6eb718 similarity index 100% rename from back-to-the-future/flask_session/104cca7fdf9eb7752f4862d38e6eb718 rename to crypto-simmetric/back-to-the-future/flask_session/104cca7fdf9eb7752f4862d38e6eb718 diff --git a/back-to-the-future/flask_session/10fe679fe6f5a8d3c40032c9ffae4f6f b/crypto-simmetric/back-to-the-future/flask_session/10fe679fe6f5a8d3c40032c9ffae4f6f similarity index 100% rename from back-to-the-future/flask_session/10fe679fe6f5a8d3c40032c9ffae4f6f rename to crypto-simmetric/back-to-the-future/flask_session/10fe679fe6f5a8d3c40032c9ffae4f6f diff --git a/back-to-the-future/flask_session/11955af46d6389a50ae2dd9582509472 b/crypto-simmetric/back-to-the-future/flask_session/11955af46d6389a50ae2dd9582509472 similarity index 100% rename from back-to-the-future/flask_session/11955af46d6389a50ae2dd9582509472 rename to crypto-simmetric/back-to-the-future/flask_session/11955af46d6389a50ae2dd9582509472 diff --git a/back-to-the-future/flask_session/11c5a55a41c63c736331c462cf5c3e21 b/crypto-simmetric/back-to-the-future/flask_session/11c5a55a41c63c736331c462cf5c3e21 similarity index 100% rename from back-to-the-future/flask_session/11c5a55a41c63c736331c462cf5c3e21 rename to crypto-simmetric/back-to-the-future/flask_session/11c5a55a41c63c736331c462cf5c3e21 diff --git a/back-to-the-future/flask_session/11ea3092bffa93df79a32e656a8a0586 b/crypto-simmetric/back-to-the-future/flask_session/11ea3092bffa93df79a32e656a8a0586 similarity index 100% rename from back-to-the-future/flask_session/11ea3092bffa93df79a32e656a8a0586 rename to crypto-simmetric/back-to-the-future/flask_session/11ea3092bffa93df79a32e656a8a0586 diff --git a/back-to-the-future/flask_session/124926dffa9468ff2a63e8ebbd70d4fc b/crypto-simmetric/back-to-the-future/flask_session/124926dffa9468ff2a63e8ebbd70d4fc similarity index 100% rename from back-to-the-future/flask_session/124926dffa9468ff2a63e8ebbd70d4fc rename to crypto-simmetric/back-to-the-future/flask_session/124926dffa9468ff2a63e8ebbd70d4fc diff --git a/back-to-the-future/flask_session/12fcbc367eb9e88c32e55632361cc26b b/crypto-simmetric/back-to-the-future/flask_session/12fcbc367eb9e88c32e55632361cc26b similarity index 100% rename from back-to-the-future/flask_session/12fcbc367eb9e88c32e55632361cc26b rename to crypto-simmetric/back-to-the-future/flask_session/12fcbc367eb9e88c32e55632361cc26b diff --git a/back-to-the-future/flask_session/153b504567a8ccb59e454c265f46b8cd b/crypto-simmetric/back-to-the-future/flask_session/153b504567a8ccb59e454c265f46b8cd similarity index 100% rename from back-to-the-future/flask_session/153b504567a8ccb59e454c265f46b8cd rename to crypto-simmetric/back-to-the-future/flask_session/153b504567a8ccb59e454c265f46b8cd diff --git a/back-to-the-future/flask_session/15626afe7c5a68139b2d0c823b10b225 b/crypto-simmetric/back-to-the-future/flask_session/15626afe7c5a68139b2d0c823b10b225 similarity index 100% rename from back-to-the-future/flask_session/15626afe7c5a68139b2d0c823b10b225 rename to crypto-simmetric/back-to-the-future/flask_session/15626afe7c5a68139b2d0c823b10b225 diff --git a/back-to-the-future/flask_session/156991eb1d1094c1966cbe78ecf850e8 b/crypto-simmetric/back-to-the-future/flask_session/156991eb1d1094c1966cbe78ecf850e8 similarity index 100% rename from back-to-the-future/flask_session/156991eb1d1094c1966cbe78ecf850e8 rename to crypto-simmetric/back-to-the-future/flask_session/156991eb1d1094c1966cbe78ecf850e8 diff --git a/back-to-the-future/flask_session/16d0908062af6846734edfa5f045a7eb b/crypto-simmetric/back-to-the-future/flask_session/16d0908062af6846734edfa5f045a7eb similarity index 100% rename from back-to-the-future/flask_session/16d0908062af6846734edfa5f045a7eb rename to crypto-simmetric/back-to-the-future/flask_session/16d0908062af6846734edfa5f045a7eb diff --git a/back-to-the-future/flask_session/16fd8e2a8030276090ee1af051f12820 b/crypto-simmetric/back-to-the-future/flask_session/16fd8e2a8030276090ee1af051f12820 similarity index 100% rename from back-to-the-future/flask_session/16fd8e2a8030276090ee1af051f12820 rename to crypto-simmetric/back-to-the-future/flask_session/16fd8e2a8030276090ee1af051f12820 diff --git a/back-to-the-future/flask_session/1758b09b9954119108661b47afd46133 b/crypto-simmetric/back-to-the-future/flask_session/1758b09b9954119108661b47afd46133 similarity index 100% rename from back-to-the-future/flask_session/1758b09b9954119108661b47afd46133 rename to crypto-simmetric/back-to-the-future/flask_session/1758b09b9954119108661b47afd46133 diff --git a/back-to-the-future/flask_session/175c311f06644d8abf68bbbe58f2419c b/crypto-simmetric/back-to-the-future/flask_session/175c311f06644d8abf68bbbe58f2419c similarity index 100% rename from back-to-the-future/flask_session/175c311f06644d8abf68bbbe58f2419c rename to crypto-simmetric/back-to-the-future/flask_session/175c311f06644d8abf68bbbe58f2419c diff --git a/back-to-the-future/flask_session/1800c2925b752b572f86ed7ee84e6447 b/crypto-simmetric/back-to-the-future/flask_session/1800c2925b752b572f86ed7ee84e6447 similarity index 100% rename from back-to-the-future/flask_session/1800c2925b752b572f86ed7ee84e6447 rename to crypto-simmetric/back-to-the-future/flask_session/1800c2925b752b572f86ed7ee84e6447 diff --git a/back-to-the-future/flask_session/1877a6d8ef9c4bef7b8b20352efd6315 b/crypto-simmetric/back-to-the-future/flask_session/1877a6d8ef9c4bef7b8b20352efd6315 similarity index 100% rename from back-to-the-future/flask_session/1877a6d8ef9c4bef7b8b20352efd6315 rename to crypto-simmetric/back-to-the-future/flask_session/1877a6d8ef9c4bef7b8b20352efd6315 diff --git a/back-to-the-future/flask_session/18c96d9bf2e5d9a806260b2073cc02ee b/crypto-simmetric/back-to-the-future/flask_session/18c96d9bf2e5d9a806260b2073cc02ee similarity index 100% rename from back-to-the-future/flask_session/18c96d9bf2e5d9a806260b2073cc02ee rename to crypto-simmetric/back-to-the-future/flask_session/18c96d9bf2e5d9a806260b2073cc02ee diff --git a/back-to-the-future/flask_session/18e75151796c652d44534b00d0212909 b/crypto-simmetric/back-to-the-future/flask_session/18e75151796c652d44534b00d0212909 similarity index 100% rename from back-to-the-future/flask_session/18e75151796c652d44534b00d0212909 rename to crypto-simmetric/back-to-the-future/flask_session/18e75151796c652d44534b00d0212909 diff --git a/back-to-the-future/flask_session/193c50b53639cb1c03e36dfc740123ac b/crypto-simmetric/back-to-the-future/flask_session/193c50b53639cb1c03e36dfc740123ac similarity index 100% rename from back-to-the-future/flask_session/193c50b53639cb1c03e36dfc740123ac rename to crypto-simmetric/back-to-the-future/flask_session/193c50b53639cb1c03e36dfc740123ac diff --git a/back-to-the-future/flask_session/1b2ca741d7a39db18a40eb32c2d11b34 b/crypto-simmetric/back-to-the-future/flask_session/1b2ca741d7a39db18a40eb32c2d11b34 similarity index 100% rename from back-to-the-future/flask_session/1b2ca741d7a39db18a40eb32c2d11b34 rename to crypto-simmetric/back-to-the-future/flask_session/1b2ca741d7a39db18a40eb32c2d11b34 diff --git a/back-to-the-future/flask_session/1e68c4649db3fe5e9f137d33b1750a88 b/crypto-simmetric/back-to-the-future/flask_session/1e68c4649db3fe5e9f137d33b1750a88 similarity index 100% rename from back-to-the-future/flask_session/1e68c4649db3fe5e9f137d33b1750a88 rename to crypto-simmetric/back-to-the-future/flask_session/1e68c4649db3fe5e9f137d33b1750a88 diff --git a/back-to-the-future/flask_session/1f658eed99e5d7de9176b624a3adc574 b/crypto-simmetric/back-to-the-future/flask_session/1f658eed99e5d7de9176b624a3adc574 similarity index 100% rename from back-to-the-future/flask_session/1f658eed99e5d7de9176b624a3adc574 rename to crypto-simmetric/back-to-the-future/flask_session/1f658eed99e5d7de9176b624a3adc574 diff --git a/back-to-the-future/flask_session/1f68d6d0f4c582b441f14dcde94228c5 b/crypto-simmetric/back-to-the-future/flask_session/1f68d6d0f4c582b441f14dcde94228c5 similarity index 100% rename from back-to-the-future/flask_session/1f68d6d0f4c582b441f14dcde94228c5 rename to crypto-simmetric/back-to-the-future/flask_session/1f68d6d0f4c582b441f14dcde94228c5 diff --git a/back-to-the-future/flask_session/2029240f6d1128be89ddc32729463129 b/crypto-simmetric/back-to-the-future/flask_session/2029240f6d1128be89ddc32729463129 similarity index 100% rename from back-to-the-future/flask_session/2029240f6d1128be89ddc32729463129 rename to crypto-simmetric/back-to-the-future/flask_session/2029240f6d1128be89ddc32729463129 diff --git a/back-to-the-future/flask_session/203905a31c6f852e9d45c346da0c8e2e b/crypto-simmetric/back-to-the-future/flask_session/203905a31c6f852e9d45c346da0c8e2e similarity index 100% rename from back-to-the-future/flask_session/203905a31c6f852e9d45c346da0c8e2e rename to crypto-simmetric/back-to-the-future/flask_session/203905a31c6f852e9d45c346da0c8e2e diff --git a/back-to-the-future/flask_session/208455b2dfc729e62e1d212617c5c103 b/crypto-simmetric/back-to-the-future/flask_session/208455b2dfc729e62e1d212617c5c103 similarity index 100% rename from back-to-the-future/flask_session/208455b2dfc729e62e1d212617c5c103 rename to crypto-simmetric/back-to-the-future/flask_session/208455b2dfc729e62e1d212617c5c103 diff --git a/back-to-the-future/flask_session/20874b46266e4b74b7ab1b03f63dcf73 b/crypto-simmetric/back-to-the-future/flask_session/20874b46266e4b74b7ab1b03f63dcf73 similarity index 100% rename from back-to-the-future/flask_session/20874b46266e4b74b7ab1b03f63dcf73 rename to crypto-simmetric/back-to-the-future/flask_session/20874b46266e4b74b7ab1b03f63dcf73 diff --git a/back-to-the-future/flask_session/20989fe5ff4ecc9d2220dd6a0d753437 b/crypto-simmetric/back-to-the-future/flask_session/20989fe5ff4ecc9d2220dd6a0d753437 similarity index 100% rename from back-to-the-future/flask_session/20989fe5ff4ecc9d2220dd6a0d753437 rename to crypto-simmetric/back-to-the-future/flask_session/20989fe5ff4ecc9d2220dd6a0d753437 diff --git a/back-to-the-future/flask_session/210b1035151e9760b507a7c1edb1cb67 b/crypto-simmetric/back-to-the-future/flask_session/210b1035151e9760b507a7c1edb1cb67 similarity index 100% rename from back-to-the-future/flask_session/210b1035151e9760b507a7c1edb1cb67 rename to crypto-simmetric/back-to-the-future/flask_session/210b1035151e9760b507a7c1edb1cb67 diff --git a/back-to-the-future/flask_session/220fce4c0ec426d5753fbaf01bfb9a8d b/crypto-simmetric/back-to-the-future/flask_session/220fce4c0ec426d5753fbaf01bfb9a8d similarity index 100% rename from back-to-the-future/flask_session/220fce4c0ec426d5753fbaf01bfb9a8d rename to crypto-simmetric/back-to-the-future/flask_session/220fce4c0ec426d5753fbaf01bfb9a8d diff --git a/back-to-the-future/flask_session/2216ab4b98005fa61b3b5a023e33106d b/crypto-simmetric/back-to-the-future/flask_session/2216ab4b98005fa61b3b5a023e33106d similarity index 100% rename from back-to-the-future/flask_session/2216ab4b98005fa61b3b5a023e33106d rename to crypto-simmetric/back-to-the-future/flask_session/2216ab4b98005fa61b3b5a023e33106d diff --git a/back-to-the-future/flask_session/224eb7214627856502497725cace3e24 b/crypto-simmetric/back-to-the-future/flask_session/224eb7214627856502497725cace3e24 similarity index 100% rename from back-to-the-future/flask_session/224eb7214627856502497725cace3e24 rename to crypto-simmetric/back-to-the-future/flask_session/224eb7214627856502497725cace3e24 diff --git a/back-to-the-future/flask_session/22758786fc4b59ca7a0765ffdde20d3d b/crypto-simmetric/back-to-the-future/flask_session/22758786fc4b59ca7a0765ffdde20d3d similarity index 100% rename from back-to-the-future/flask_session/22758786fc4b59ca7a0765ffdde20d3d rename to crypto-simmetric/back-to-the-future/flask_session/22758786fc4b59ca7a0765ffdde20d3d diff --git a/back-to-the-future/flask_session/22aab843b3edce5f80919d3827c4a214 b/crypto-simmetric/back-to-the-future/flask_session/22aab843b3edce5f80919d3827c4a214 similarity index 100% rename from back-to-the-future/flask_session/22aab843b3edce5f80919d3827c4a214 rename to crypto-simmetric/back-to-the-future/flask_session/22aab843b3edce5f80919d3827c4a214 diff --git a/back-to-the-future/flask_session/23fac18da96856adfb0298e2ac196058 b/crypto-simmetric/back-to-the-future/flask_session/23fac18da96856adfb0298e2ac196058 similarity index 100% rename from back-to-the-future/flask_session/23fac18da96856adfb0298e2ac196058 rename to crypto-simmetric/back-to-the-future/flask_session/23fac18da96856adfb0298e2ac196058 diff --git a/back-to-the-future/flask_session/2599a275682361c46cbf46b22160097b b/crypto-simmetric/back-to-the-future/flask_session/2599a275682361c46cbf46b22160097b similarity index 100% rename from back-to-the-future/flask_session/2599a275682361c46cbf46b22160097b rename to crypto-simmetric/back-to-the-future/flask_session/2599a275682361c46cbf46b22160097b diff --git a/back-to-the-future/flask_session/26155c8b1c13dd23400c7885241f3b83 b/crypto-simmetric/back-to-the-future/flask_session/26155c8b1c13dd23400c7885241f3b83 similarity index 100% rename from back-to-the-future/flask_session/26155c8b1c13dd23400c7885241f3b83 rename to crypto-simmetric/back-to-the-future/flask_session/26155c8b1c13dd23400c7885241f3b83 diff --git a/back-to-the-future/flask_session/2690b7f4cdbc7e9c649c07e63cd8f38d b/crypto-simmetric/back-to-the-future/flask_session/2690b7f4cdbc7e9c649c07e63cd8f38d similarity index 100% rename from back-to-the-future/flask_session/2690b7f4cdbc7e9c649c07e63cd8f38d rename to crypto-simmetric/back-to-the-future/flask_session/2690b7f4cdbc7e9c649c07e63cd8f38d diff --git a/back-to-the-future/flask_session/26f220fa930f333872b125bc80cda0b5 b/crypto-simmetric/back-to-the-future/flask_session/26f220fa930f333872b125bc80cda0b5 similarity index 100% rename from back-to-the-future/flask_session/26f220fa930f333872b125bc80cda0b5 rename to crypto-simmetric/back-to-the-future/flask_session/26f220fa930f333872b125bc80cda0b5 diff --git a/back-to-the-future/flask_session/272e7e2567476c69996585bf3a75e852 b/crypto-simmetric/back-to-the-future/flask_session/272e7e2567476c69996585bf3a75e852 similarity index 100% rename from back-to-the-future/flask_session/272e7e2567476c69996585bf3a75e852 rename to crypto-simmetric/back-to-the-future/flask_session/272e7e2567476c69996585bf3a75e852 diff --git a/back-to-the-future/flask_session/27e405db11e63c38bcb22f24fe2cab5b b/crypto-simmetric/back-to-the-future/flask_session/27e405db11e63c38bcb22f24fe2cab5b similarity index 100% rename from back-to-the-future/flask_session/27e405db11e63c38bcb22f24fe2cab5b rename to crypto-simmetric/back-to-the-future/flask_session/27e405db11e63c38bcb22f24fe2cab5b diff --git a/back-to-the-future/flask_session/2940ea81618bc3b9313c8a0818f9f9e8 b/crypto-simmetric/back-to-the-future/flask_session/2940ea81618bc3b9313c8a0818f9f9e8 similarity index 100% rename from back-to-the-future/flask_session/2940ea81618bc3b9313c8a0818f9f9e8 rename to crypto-simmetric/back-to-the-future/flask_session/2940ea81618bc3b9313c8a0818f9f9e8 diff --git a/back-to-the-future/flask_session/2a5f27fae53f8a864398fcc856e04e90 b/crypto-simmetric/back-to-the-future/flask_session/2a5f27fae53f8a864398fcc856e04e90 similarity index 100% rename from back-to-the-future/flask_session/2a5f27fae53f8a864398fcc856e04e90 rename to crypto-simmetric/back-to-the-future/flask_session/2a5f27fae53f8a864398fcc856e04e90 diff --git a/back-to-the-future/flask_session/2aeb371d8adeb94ded786e5bf923a3ef b/crypto-simmetric/back-to-the-future/flask_session/2aeb371d8adeb94ded786e5bf923a3ef similarity index 100% rename from back-to-the-future/flask_session/2aeb371d8adeb94ded786e5bf923a3ef rename to crypto-simmetric/back-to-the-future/flask_session/2aeb371d8adeb94ded786e5bf923a3ef diff --git a/back-to-the-future/flask_session/2bac0005df40528459d260e16fe6fb80 b/crypto-simmetric/back-to-the-future/flask_session/2bac0005df40528459d260e16fe6fb80 similarity index 100% rename from back-to-the-future/flask_session/2bac0005df40528459d260e16fe6fb80 rename to crypto-simmetric/back-to-the-future/flask_session/2bac0005df40528459d260e16fe6fb80 diff --git a/back-to-the-future/flask_session/2c2b79e3fa4a76558fec5886a8bcf220 b/crypto-simmetric/back-to-the-future/flask_session/2c2b79e3fa4a76558fec5886a8bcf220 similarity index 100% rename from back-to-the-future/flask_session/2c2b79e3fa4a76558fec5886a8bcf220 rename to crypto-simmetric/back-to-the-future/flask_session/2c2b79e3fa4a76558fec5886a8bcf220 diff --git a/back-to-the-future/flask_session/2c386f464fb69ba5b9535527e53a1136 b/crypto-simmetric/back-to-the-future/flask_session/2c386f464fb69ba5b9535527e53a1136 similarity index 100% rename from back-to-the-future/flask_session/2c386f464fb69ba5b9535527e53a1136 rename to crypto-simmetric/back-to-the-future/flask_session/2c386f464fb69ba5b9535527e53a1136 diff --git a/back-to-the-future/flask_session/2d46a4d5e411f544f3d308f41cc75a05 b/crypto-simmetric/back-to-the-future/flask_session/2d46a4d5e411f544f3d308f41cc75a05 similarity index 100% rename from back-to-the-future/flask_session/2d46a4d5e411f544f3d308f41cc75a05 rename to crypto-simmetric/back-to-the-future/flask_session/2d46a4d5e411f544f3d308f41cc75a05 diff --git a/back-to-the-future/flask_session/2d8c6c66ee7c4a9f51f9b344f954d0b3 b/crypto-simmetric/back-to-the-future/flask_session/2d8c6c66ee7c4a9f51f9b344f954d0b3 similarity index 100% rename from back-to-the-future/flask_session/2d8c6c66ee7c4a9f51f9b344f954d0b3 rename to crypto-simmetric/back-to-the-future/flask_session/2d8c6c66ee7c4a9f51f9b344f954d0b3 diff --git a/back-to-the-future/flask_session/2f320eaf6c96a4bc8f5852b93ae1ff3b b/crypto-simmetric/back-to-the-future/flask_session/2f320eaf6c96a4bc8f5852b93ae1ff3b similarity index 100% rename from back-to-the-future/flask_session/2f320eaf6c96a4bc8f5852b93ae1ff3b rename to crypto-simmetric/back-to-the-future/flask_session/2f320eaf6c96a4bc8f5852b93ae1ff3b diff --git a/back-to-the-future/flask_session/2f85fc72a4cb0c8616ef7fa12ce8d540 b/crypto-simmetric/back-to-the-future/flask_session/2f85fc72a4cb0c8616ef7fa12ce8d540 similarity index 100% rename from back-to-the-future/flask_session/2f85fc72a4cb0c8616ef7fa12ce8d540 rename to crypto-simmetric/back-to-the-future/flask_session/2f85fc72a4cb0c8616ef7fa12ce8d540 diff --git a/back-to-the-future/flask_session/2fd1a29c36876ebdafc41f35f5656a9e b/crypto-simmetric/back-to-the-future/flask_session/2fd1a29c36876ebdafc41f35f5656a9e similarity index 100% rename from back-to-the-future/flask_session/2fd1a29c36876ebdafc41f35f5656a9e rename to crypto-simmetric/back-to-the-future/flask_session/2fd1a29c36876ebdafc41f35f5656a9e diff --git a/back-to-the-future/flask_session/300980f59c705be97d9ab183917839d5 b/crypto-simmetric/back-to-the-future/flask_session/300980f59c705be97d9ab183917839d5 similarity index 100% rename from back-to-the-future/flask_session/300980f59c705be97d9ab183917839d5 rename to crypto-simmetric/back-to-the-future/flask_session/300980f59c705be97d9ab183917839d5 diff --git a/back-to-the-future/flask_session/30a4aea5a1b256f0c0910058991850a2 b/crypto-simmetric/back-to-the-future/flask_session/30a4aea5a1b256f0c0910058991850a2 similarity index 100% rename from back-to-the-future/flask_session/30a4aea5a1b256f0c0910058991850a2 rename to crypto-simmetric/back-to-the-future/flask_session/30a4aea5a1b256f0c0910058991850a2 diff --git a/back-to-the-future/flask_session/30f0532e5c0e8ee9d9919b13b022acbd b/crypto-simmetric/back-to-the-future/flask_session/30f0532e5c0e8ee9d9919b13b022acbd similarity index 100% rename from back-to-the-future/flask_session/30f0532e5c0e8ee9d9919b13b022acbd rename to crypto-simmetric/back-to-the-future/flask_session/30f0532e5c0e8ee9d9919b13b022acbd diff --git a/back-to-the-future/flask_session/30f34c45eb7fef683df37d944322633f b/crypto-simmetric/back-to-the-future/flask_session/30f34c45eb7fef683df37d944322633f similarity index 100% rename from back-to-the-future/flask_session/30f34c45eb7fef683df37d944322633f rename to crypto-simmetric/back-to-the-future/flask_session/30f34c45eb7fef683df37d944322633f diff --git a/back-to-the-future/flask_session/3104ce046559c1c253a800af12c11e64 b/crypto-simmetric/back-to-the-future/flask_session/3104ce046559c1c253a800af12c11e64 similarity index 100% rename from back-to-the-future/flask_session/3104ce046559c1c253a800af12c11e64 rename to crypto-simmetric/back-to-the-future/flask_session/3104ce046559c1c253a800af12c11e64 diff --git a/back-to-the-future/flask_session/31868a74a62f39bf8e8c2f3d378710c7 b/crypto-simmetric/back-to-the-future/flask_session/31868a74a62f39bf8e8c2f3d378710c7 similarity index 100% rename from back-to-the-future/flask_session/31868a74a62f39bf8e8c2f3d378710c7 rename to crypto-simmetric/back-to-the-future/flask_session/31868a74a62f39bf8e8c2f3d378710c7 diff --git a/back-to-the-future/flask_session/322c54936eb99d2eee4406c2495ac1f5 b/crypto-simmetric/back-to-the-future/flask_session/322c54936eb99d2eee4406c2495ac1f5 similarity index 100% rename from back-to-the-future/flask_session/322c54936eb99d2eee4406c2495ac1f5 rename to crypto-simmetric/back-to-the-future/flask_session/322c54936eb99d2eee4406c2495ac1f5 diff --git a/back-to-the-future/flask_session/324b77917a59fd8c923e074f24fe00e5 b/crypto-simmetric/back-to-the-future/flask_session/324b77917a59fd8c923e074f24fe00e5 similarity index 100% rename from back-to-the-future/flask_session/324b77917a59fd8c923e074f24fe00e5 rename to crypto-simmetric/back-to-the-future/flask_session/324b77917a59fd8c923e074f24fe00e5 diff --git a/back-to-the-future/flask_session/32f60d142583485078042e2210ad12cc b/crypto-simmetric/back-to-the-future/flask_session/32f60d142583485078042e2210ad12cc similarity index 100% rename from back-to-the-future/flask_session/32f60d142583485078042e2210ad12cc rename to crypto-simmetric/back-to-the-future/flask_session/32f60d142583485078042e2210ad12cc diff --git a/back-to-the-future/flask_session/3399486a02f05b92c673a40871d73091 b/crypto-simmetric/back-to-the-future/flask_session/3399486a02f05b92c673a40871d73091 similarity index 100% rename from back-to-the-future/flask_session/3399486a02f05b92c673a40871d73091 rename to crypto-simmetric/back-to-the-future/flask_session/3399486a02f05b92c673a40871d73091 diff --git a/back-to-the-future/flask_session/341041db96bd1ad1e7781a5be2fa0091 b/crypto-simmetric/back-to-the-future/flask_session/341041db96bd1ad1e7781a5be2fa0091 similarity index 100% rename from back-to-the-future/flask_session/341041db96bd1ad1e7781a5be2fa0091 rename to crypto-simmetric/back-to-the-future/flask_session/341041db96bd1ad1e7781a5be2fa0091 diff --git a/back-to-the-future/flask_session/34ff82dc7a0ef493fa1869c893dca9da b/crypto-simmetric/back-to-the-future/flask_session/34ff82dc7a0ef493fa1869c893dca9da similarity index 100% rename from back-to-the-future/flask_session/34ff82dc7a0ef493fa1869c893dca9da rename to crypto-simmetric/back-to-the-future/flask_session/34ff82dc7a0ef493fa1869c893dca9da diff --git a/back-to-the-future/flask_session/3560f0c435443111efbf141078742f06 b/crypto-simmetric/back-to-the-future/flask_session/3560f0c435443111efbf141078742f06 similarity index 100% rename from back-to-the-future/flask_session/3560f0c435443111efbf141078742f06 rename to crypto-simmetric/back-to-the-future/flask_session/3560f0c435443111efbf141078742f06 diff --git a/back-to-the-future/flask_session/35c1bd6a211d52bdc6395e2bb660143f b/crypto-simmetric/back-to-the-future/flask_session/35c1bd6a211d52bdc6395e2bb660143f similarity index 100% rename from back-to-the-future/flask_session/35c1bd6a211d52bdc6395e2bb660143f rename to crypto-simmetric/back-to-the-future/flask_session/35c1bd6a211d52bdc6395e2bb660143f diff --git a/back-to-the-future/flask_session/35d4108dbd8fac5efa936ceae3778e69 b/crypto-simmetric/back-to-the-future/flask_session/35d4108dbd8fac5efa936ceae3778e69 similarity index 100% rename from back-to-the-future/flask_session/35d4108dbd8fac5efa936ceae3778e69 rename to crypto-simmetric/back-to-the-future/flask_session/35d4108dbd8fac5efa936ceae3778e69 diff --git a/back-to-the-future/flask_session/36319ada12c1c741080f25750d19d96f b/crypto-simmetric/back-to-the-future/flask_session/36319ada12c1c741080f25750d19d96f similarity index 100% rename from back-to-the-future/flask_session/36319ada12c1c741080f25750d19d96f rename to crypto-simmetric/back-to-the-future/flask_session/36319ada12c1c741080f25750d19d96f diff --git a/back-to-the-future/flask_session/365ae5ec1d81f1a0e2d8e85fc19c7c73 b/crypto-simmetric/back-to-the-future/flask_session/365ae5ec1d81f1a0e2d8e85fc19c7c73 similarity index 100% rename from back-to-the-future/flask_session/365ae5ec1d81f1a0e2d8e85fc19c7c73 rename to crypto-simmetric/back-to-the-future/flask_session/365ae5ec1d81f1a0e2d8e85fc19c7c73 diff --git a/back-to-the-future/flask_session/3952e9811cc447a49f1f7b36cf046cb4 b/crypto-simmetric/back-to-the-future/flask_session/3952e9811cc447a49f1f7b36cf046cb4 similarity index 100% rename from back-to-the-future/flask_session/3952e9811cc447a49f1f7b36cf046cb4 rename to crypto-simmetric/back-to-the-future/flask_session/3952e9811cc447a49f1f7b36cf046cb4 diff --git a/back-to-the-future/flask_session/39d6ad670b8f10ada9ba0fe9481d661b b/crypto-simmetric/back-to-the-future/flask_session/39d6ad670b8f10ada9ba0fe9481d661b similarity index 100% rename from back-to-the-future/flask_session/39d6ad670b8f10ada9ba0fe9481d661b rename to crypto-simmetric/back-to-the-future/flask_session/39d6ad670b8f10ada9ba0fe9481d661b diff --git a/back-to-the-future/flask_session/3b726120e586c42ee5db4859cffd5e61 b/crypto-simmetric/back-to-the-future/flask_session/3b726120e586c42ee5db4859cffd5e61 similarity index 100% rename from back-to-the-future/flask_session/3b726120e586c42ee5db4859cffd5e61 rename to crypto-simmetric/back-to-the-future/flask_session/3b726120e586c42ee5db4859cffd5e61 diff --git a/back-to-the-future/flask_session/3b8ff83a8a50d3e0e3900805ecb3faba b/crypto-simmetric/back-to-the-future/flask_session/3b8ff83a8a50d3e0e3900805ecb3faba similarity index 100% rename from back-to-the-future/flask_session/3b8ff83a8a50d3e0e3900805ecb3faba rename to crypto-simmetric/back-to-the-future/flask_session/3b8ff83a8a50d3e0e3900805ecb3faba diff --git a/back-to-the-future/flask_session/3b9218f16c20b24822c1e7c2b21b2dbc b/crypto-simmetric/back-to-the-future/flask_session/3b9218f16c20b24822c1e7c2b21b2dbc similarity index 100% rename from back-to-the-future/flask_session/3b9218f16c20b24822c1e7c2b21b2dbc rename to crypto-simmetric/back-to-the-future/flask_session/3b9218f16c20b24822c1e7c2b21b2dbc diff --git a/back-to-the-future/flask_session/3bb632bde3434d70741228eda0bdf763 b/crypto-simmetric/back-to-the-future/flask_session/3bb632bde3434d70741228eda0bdf763 similarity index 100% rename from back-to-the-future/flask_session/3bb632bde3434d70741228eda0bdf763 rename to crypto-simmetric/back-to-the-future/flask_session/3bb632bde3434d70741228eda0bdf763 diff --git a/back-to-the-future/flask_session/3c32e3388a87a84a095d0afbe80823e2 b/crypto-simmetric/back-to-the-future/flask_session/3c32e3388a87a84a095d0afbe80823e2 similarity index 100% rename from back-to-the-future/flask_session/3c32e3388a87a84a095d0afbe80823e2 rename to crypto-simmetric/back-to-the-future/flask_session/3c32e3388a87a84a095d0afbe80823e2 diff --git a/back-to-the-future/flask_session/4045d29f0b79c1d08649341810340839 b/crypto-simmetric/back-to-the-future/flask_session/4045d29f0b79c1d08649341810340839 similarity index 100% rename from back-to-the-future/flask_session/4045d29f0b79c1d08649341810340839 rename to crypto-simmetric/back-to-the-future/flask_session/4045d29f0b79c1d08649341810340839 diff --git a/back-to-the-future/flask_session/4194f36392bf1754170d5fe415784bb6 b/crypto-simmetric/back-to-the-future/flask_session/4194f36392bf1754170d5fe415784bb6 similarity index 100% rename from back-to-the-future/flask_session/4194f36392bf1754170d5fe415784bb6 rename to crypto-simmetric/back-to-the-future/flask_session/4194f36392bf1754170d5fe415784bb6 diff --git a/back-to-the-future/flask_session/41e7ceab99b36b9c6ddfceda67b23d86 b/crypto-simmetric/back-to-the-future/flask_session/41e7ceab99b36b9c6ddfceda67b23d86 similarity index 100% rename from back-to-the-future/flask_session/41e7ceab99b36b9c6ddfceda67b23d86 rename to crypto-simmetric/back-to-the-future/flask_session/41e7ceab99b36b9c6ddfceda67b23d86 diff --git a/back-to-the-future/flask_session/44e295cb48a46ba798a4deb74c1d51fe b/crypto-simmetric/back-to-the-future/flask_session/44e295cb48a46ba798a4deb74c1d51fe similarity index 100% rename from back-to-the-future/flask_session/44e295cb48a46ba798a4deb74c1d51fe rename to crypto-simmetric/back-to-the-future/flask_session/44e295cb48a46ba798a4deb74c1d51fe diff --git a/back-to-the-future/flask_session/44fecfba0dc706bae1979dd26541f996 b/crypto-simmetric/back-to-the-future/flask_session/44fecfba0dc706bae1979dd26541f996 similarity index 100% rename from back-to-the-future/flask_session/44fecfba0dc706bae1979dd26541f996 rename to crypto-simmetric/back-to-the-future/flask_session/44fecfba0dc706bae1979dd26541f996 diff --git a/back-to-the-future/flask_session/4637adc8fcbadc7335a5db1afba82d5b b/crypto-simmetric/back-to-the-future/flask_session/4637adc8fcbadc7335a5db1afba82d5b similarity index 100% rename from back-to-the-future/flask_session/4637adc8fcbadc7335a5db1afba82d5b rename to crypto-simmetric/back-to-the-future/flask_session/4637adc8fcbadc7335a5db1afba82d5b diff --git a/back-to-the-future/flask_session/46d7e4294b97ab96e98ec04a25c1079d b/crypto-simmetric/back-to-the-future/flask_session/46d7e4294b97ab96e98ec04a25c1079d similarity index 100% rename from back-to-the-future/flask_session/46d7e4294b97ab96e98ec04a25c1079d rename to crypto-simmetric/back-to-the-future/flask_session/46d7e4294b97ab96e98ec04a25c1079d diff --git a/back-to-the-future/flask_session/474f2efa7ab0b8ebdd5b31d0e04d8936 b/crypto-simmetric/back-to-the-future/flask_session/474f2efa7ab0b8ebdd5b31d0e04d8936 similarity index 100% rename from back-to-the-future/flask_session/474f2efa7ab0b8ebdd5b31d0e04d8936 rename to crypto-simmetric/back-to-the-future/flask_session/474f2efa7ab0b8ebdd5b31d0e04d8936 diff --git a/back-to-the-future/flask_session/475265cc6b2f15d7876969341f9ecfe5 b/crypto-simmetric/back-to-the-future/flask_session/475265cc6b2f15d7876969341f9ecfe5 similarity index 100% rename from back-to-the-future/flask_session/475265cc6b2f15d7876969341f9ecfe5 rename to crypto-simmetric/back-to-the-future/flask_session/475265cc6b2f15d7876969341f9ecfe5 diff --git a/back-to-the-future/flask_session/475406c8bb6137367c32491d9b11e8b4 b/crypto-simmetric/back-to-the-future/flask_session/475406c8bb6137367c32491d9b11e8b4 similarity index 100% rename from back-to-the-future/flask_session/475406c8bb6137367c32491d9b11e8b4 rename to crypto-simmetric/back-to-the-future/flask_session/475406c8bb6137367c32491d9b11e8b4 diff --git a/back-to-the-future/flask_session/4881cccd9d4e554d12b3b4cb562e121f b/crypto-simmetric/back-to-the-future/flask_session/4881cccd9d4e554d12b3b4cb562e121f similarity index 100% rename from back-to-the-future/flask_session/4881cccd9d4e554d12b3b4cb562e121f rename to crypto-simmetric/back-to-the-future/flask_session/4881cccd9d4e554d12b3b4cb562e121f diff --git a/back-to-the-future/flask_session/4a2fdee53084fd9c9cefaba0b3f2aafa b/crypto-simmetric/back-to-the-future/flask_session/4a2fdee53084fd9c9cefaba0b3f2aafa similarity index 100% rename from back-to-the-future/flask_session/4a2fdee53084fd9c9cefaba0b3f2aafa rename to crypto-simmetric/back-to-the-future/flask_session/4a2fdee53084fd9c9cefaba0b3f2aafa diff --git a/back-to-the-future/flask_session/4b4d9e68e4fce71f0456346365a32eaa b/crypto-simmetric/back-to-the-future/flask_session/4b4d9e68e4fce71f0456346365a32eaa similarity index 100% rename from back-to-the-future/flask_session/4b4d9e68e4fce71f0456346365a32eaa rename to crypto-simmetric/back-to-the-future/flask_session/4b4d9e68e4fce71f0456346365a32eaa diff --git a/back-to-the-future/flask_session/4cf826448fa3bd52099306ea9b466de5 b/crypto-simmetric/back-to-the-future/flask_session/4cf826448fa3bd52099306ea9b466de5 similarity index 100% rename from back-to-the-future/flask_session/4cf826448fa3bd52099306ea9b466de5 rename to crypto-simmetric/back-to-the-future/flask_session/4cf826448fa3bd52099306ea9b466de5 diff --git a/back-to-the-future/flask_session/4d8ef0814c65793be382a2cf0bc877e2 b/crypto-simmetric/back-to-the-future/flask_session/4d8ef0814c65793be382a2cf0bc877e2 similarity index 100% rename from back-to-the-future/flask_session/4d8ef0814c65793be382a2cf0bc877e2 rename to crypto-simmetric/back-to-the-future/flask_session/4d8ef0814c65793be382a2cf0bc877e2 diff --git a/back-to-the-future/flask_session/4fc63499e023c5028c6a9da7d5480d60 b/crypto-simmetric/back-to-the-future/flask_session/4fc63499e023c5028c6a9da7d5480d60 similarity index 100% rename from back-to-the-future/flask_session/4fc63499e023c5028c6a9da7d5480d60 rename to crypto-simmetric/back-to-the-future/flask_session/4fc63499e023c5028c6a9da7d5480d60 diff --git a/back-to-the-future/flask_session/4ffef230349985069206288eb02d82b5 b/crypto-simmetric/back-to-the-future/flask_session/4ffef230349985069206288eb02d82b5 similarity index 100% rename from back-to-the-future/flask_session/4ffef230349985069206288eb02d82b5 rename to crypto-simmetric/back-to-the-future/flask_session/4ffef230349985069206288eb02d82b5 diff --git a/back-to-the-future/flask_session/51cecbf8195bfc6a13e0da953bd48148 b/crypto-simmetric/back-to-the-future/flask_session/51cecbf8195bfc6a13e0da953bd48148 similarity index 100% rename from back-to-the-future/flask_session/51cecbf8195bfc6a13e0da953bd48148 rename to crypto-simmetric/back-to-the-future/flask_session/51cecbf8195bfc6a13e0da953bd48148 diff --git a/back-to-the-future/flask_session/51eaea4bc081a86a1f3b45cb97d62cd2 b/crypto-simmetric/back-to-the-future/flask_session/51eaea4bc081a86a1f3b45cb97d62cd2 similarity index 100% rename from back-to-the-future/flask_session/51eaea4bc081a86a1f3b45cb97d62cd2 rename to crypto-simmetric/back-to-the-future/flask_session/51eaea4bc081a86a1f3b45cb97d62cd2 diff --git a/back-to-the-future/flask_session/52cdc5894b84ba73ce12a4e2eccc036b b/crypto-simmetric/back-to-the-future/flask_session/52cdc5894b84ba73ce12a4e2eccc036b similarity index 100% rename from back-to-the-future/flask_session/52cdc5894b84ba73ce12a4e2eccc036b rename to crypto-simmetric/back-to-the-future/flask_session/52cdc5894b84ba73ce12a4e2eccc036b diff --git a/back-to-the-future/flask_session/535ea9247d222f784cbe0fc03b48253c b/crypto-simmetric/back-to-the-future/flask_session/535ea9247d222f784cbe0fc03b48253c similarity index 100% rename from back-to-the-future/flask_session/535ea9247d222f784cbe0fc03b48253c rename to crypto-simmetric/back-to-the-future/flask_session/535ea9247d222f784cbe0fc03b48253c diff --git a/back-to-the-future/flask_session/53a2c58e148b94e301ec515a879fa4c0 b/crypto-simmetric/back-to-the-future/flask_session/53a2c58e148b94e301ec515a879fa4c0 similarity index 100% rename from back-to-the-future/flask_session/53a2c58e148b94e301ec515a879fa4c0 rename to crypto-simmetric/back-to-the-future/flask_session/53a2c58e148b94e301ec515a879fa4c0 diff --git a/back-to-the-future/flask_session/549ba9bf9c35c315878dea93d90b5258 b/crypto-simmetric/back-to-the-future/flask_session/549ba9bf9c35c315878dea93d90b5258 similarity index 100% rename from back-to-the-future/flask_session/549ba9bf9c35c315878dea93d90b5258 rename to crypto-simmetric/back-to-the-future/flask_session/549ba9bf9c35c315878dea93d90b5258 diff --git a/back-to-the-future/flask_session/557c207c4a8f4aa12d0be3fb37f26c1b b/crypto-simmetric/back-to-the-future/flask_session/557c207c4a8f4aa12d0be3fb37f26c1b similarity index 100% rename from back-to-the-future/flask_session/557c207c4a8f4aa12d0be3fb37f26c1b rename to crypto-simmetric/back-to-the-future/flask_session/557c207c4a8f4aa12d0be3fb37f26c1b diff --git a/back-to-the-future/flask_session/5581e4f92bbbf541137bb9fd01e40138 b/crypto-simmetric/back-to-the-future/flask_session/5581e4f92bbbf541137bb9fd01e40138 similarity index 100% rename from back-to-the-future/flask_session/5581e4f92bbbf541137bb9fd01e40138 rename to crypto-simmetric/back-to-the-future/flask_session/5581e4f92bbbf541137bb9fd01e40138 diff --git a/back-to-the-future/flask_session/55d07cf56513f7b6dcf6720762cced16 b/crypto-simmetric/back-to-the-future/flask_session/55d07cf56513f7b6dcf6720762cced16 similarity index 100% rename from back-to-the-future/flask_session/55d07cf56513f7b6dcf6720762cced16 rename to crypto-simmetric/back-to-the-future/flask_session/55d07cf56513f7b6dcf6720762cced16 diff --git a/back-to-the-future/flask_session/56c3c4879f2bddff9d00ef7e6275a697 b/crypto-simmetric/back-to-the-future/flask_session/56c3c4879f2bddff9d00ef7e6275a697 similarity index 100% rename from back-to-the-future/flask_session/56c3c4879f2bddff9d00ef7e6275a697 rename to crypto-simmetric/back-to-the-future/flask_session/56c3c4879f2bddff9d00ef7e6275a697 diff --git a/back-to-the-future/flask_session/58b7ac10ff62c14e1de4311b560754b8 b/crypto-simmetric/back-to-the-future/flask_session/58b7ac10ff62c14e1de4311b560754b8 similarity index 100% rename from back-to-the-future/flask_session/58b7ac10ff62c14e1de4311b560754b8 rename to crypto-simmetric/back-to-the-future/flask_session/58b7ac10ff62c14e1de4311b560754b8 diff --git a/back-to-the-future/flask_session/590bd52c75abd2f0d3639406b0f1c30d b/crypto-simmetric/back-to-the-future/flask_session/590bd52c75abd2f0d3639406b0f1c30d similarity index 100% rename from back-to-the-future/flask_session/590bd52c75abd2f0d3639406b0f1c30d rename to crypto-simmetric/back-to-the-future/flask_session/590bd52c75abd2f0d3639406b0f1c30d diff --git a/back-to-the-future/flask_session/593c688f858bd03766e90a3e9a2b282a b/crypto-simmetric/back-to-the-future/flask_session/593c688f858bd03766e90a3e9a2b282a similarity index 100% rename from back-to-the-future/flask_session/593c688f858bd03766e90a3e9a2b282a rename to crypto-simmetric/back-to-the-future/flask_session/593c688f858bd03766e90a3e9a2b282a diff --git a/back-to-the-future/flask_session/599a13187cf3905bd83c51a88e15051b b/crypto-simmetric/back-to-the-future/flask_session/599a13187cf3905bd83c51a88e15051b similarity index 100% rename from back-to-the-future/flask_session/599a13187cf3905bd83c51a88e15051b rename to crypto-simmetric/back-to-the-future/flask_session/599a13187cf3905bd83c51a88e15051b diff --git a/back-to-the-future/flask_session/5a348ab337dd4e8e7c4e4cea1f353ff7 b/crypto-simmetric/back-to-the-future/flask_session/5a348ab337dd4e8e7c4e4cea1f353ff7 similarity index 100% rename from back-to-the-future/flask_session/5a348ab337dd4e8e7c4e4cea1f353ff7 rename to crypto-simmetric/back-to-the-future/flask_session/5a348ab337dd4e8e7c4e4cea1f353ff7 diff --git a/back-to-the-future/flask_session/5aed18302d608521438e3a868452d8d8 b/crypto-simmetric/back-to-the-future/flask_session/5aed18302d608521438e3a868452d8d8 similarity index 100% rename from back-to-the-future/flask_session/5aed18302d608521438e3a868452d8d8 rename to crypto-simmetric/back-to-the-future/flask_session/5aed18302d608521438e3a868452d8d8 diff --git a/back-to-the-future/flask_session/5b424fd21abff51f1e624a85d51b98d8 b/crypto-simmetric/back-to-the-future/flask_session/5b424fd21abff51f1e624a85d51b98d8 similarity index 100% rename from back-to-the-future/flask_session/5b424fd21abff51f1e624a85d51b98d8 rename to crypto-simmetric/back-to-the-future/flask_session/5b424fd21abff51f1e624a85d51b98d8 diff --git a/back-to-the-future/flask_session/5ba2f545b95750b6bfe1a51fab7fb873 b/crypto-simmetric/back-to-the-future/flask_session/5ba2f545b95750b6bfe1a51fab7fb873 similarity index 100% rename from back-to-the-future/flask_session/5ba2f545b95750b6bfe1a51fab7fb873 rename to crypto-simmetric/back-to-the-future/flask_session/5ba2f545b95750b6bfe1a51fab7fb873 diff --git a/back-to-the-future/flask_session/5d51a79f68d6250ed5b2f541cad26233 b/crypto-simmetric/back-to-the-future/flask_session/5d51a79f68d6250ed5b2f541cad26233 similarity index 100% rename from back-to-the-future/flask_session/5d51a79f68d6250ed5b2f541cad26233 rename to crypto-simmetric/back-to-the-future/flask_session/5d51a79f68d6250ed5b2f541cad26233 diff --git a/back-to-the-future/flask_session/5d651b3090eeb753c83660ab85f8f92e b/crypto-simmetric/back-to-the-future/flask_session/5d651b3090eeb753c83660ab85f8f92e similarity index 100% rename from back-to-the-future/flask_session/5d651b3090eeb753c83660ab85f8f92e rename to crypto-simmetric/back-to-the-future/flask_session/5d651b3090eeb753c83660ab85f8f92e diff --git a/back-to-the-future/flask_session/5da1f95513e0a30f161b44e6a72ccd9e b/crypto-simmetric/back-to-the-future/flask_session/5da1f95513e0a30f161b44e6a72ccd9e similarity index 100% rename from back-to-the-future/flask_session/5da1f95513e0a30f161b44e6a72ccd9e rename to crypto-simmetric/back-to-the-future/flask_session/5da1f95513e0a30f161b44e6a72ccd9e diff --git a/back-to-the-future/flask_session/5e0b5119963e598a12b2e8d11d826f87 b/crypto-simmetric/back-to-the-future/flask_session/5e0b5119963e598a12b2e8d11d826f87 similarity index 100% rename from back-to-the-future/flask_session/5e0b5119963e598a12b2e8d11d826f87 rename to crypto-simmetric/back-to-the-future/flask_session/5e0b5119963e598a12b2e8d11d826f87 diff --git a/back-to-the-future/flask_session/5e12e69a160901f3ba1f2aa5d61e6c55 b/crypto-simmetric/back-to-the-future/flask_session/5e12e69a160901f3ba1f2aa5d61e6c55 similarity index 100% rename from back-to-the-future/flask_session/5e12e69a160901f3ba1f2aa5d61e6c55 rename to crypto-simmetric/back-to-the-future/flask_session/5e12e69a160901f3ba1f2aa5d61e6c55 diff --git a/back-to-the-future/flask_session/5e3ccf08d66b4f01faa3310cd9c2fa7e b/crypto-simmetric/back-to-the-future/flask_session/5e3ccf08d66b4f01faa3310cd9c2fa7e similarity index 100% rename from back-to-the-future/flask_session/5e3ccf08d66b4f01faa3310cd9c2fa7e rename to crypto-simmetric/back-to-the-future/flask_session/5e3ccf08d66b4f01faa3310cd9c2fa7e diff --git a/back-to-the-future/flask_session/5e650f50f36a1ec55b0481b8cd59cc16 b/crypto-simmetric/back-to-the-future/flask_session/5e650f50f36a1ec55b0481b8cd59cc16 similarity index 100% rename from back-to-the-future/flask_session/5e650f50f36a1ec55b0481b8cd59cc16 rename to crypto-simmetric/back-to-the-future/flask_session/5e650f50f36a1ec55b0481b8cd59cc16 diff --git a/back-to-the-future/flask_session/5ed3806c4c1423f7fe4b95ff8ba7b051 b/crypto-simmetric/back-to-the-future/flask_session/5ed3806c4c1423f7fe4b95ff8ba7b051 similarity index 100% rename from back-to-the-future/flask_session/5ed3806c4c1423f7fe4b95ff8ba7b051 rename to crypto-simmetric/back-to-the-future/flask_session/5ed3806c4c1423f7fe4b95ff8ba7b051 diff --git a/back-to-the-future/flask_session/5f9f092c20daaadd6e258cc43af81769 b/crypto-simmetric/back-to-the-future/flask_session/5f9f092c20daaadd6e258cc43af81769 similarity index 100% rename from back-to-the-future/flask_session/5f9f092c20daaadd6e258cc43af81769 rename to crypto-simmetric/back-to-the-future/flask_session/5f9f092c20daaadd6e258cc43af81769 diff --git a/back-to-the-future/flask_session/5fb994cf3f73a61d50f371985221734c b/crypto-simmetric/back-to-the-future/flask_session/5fb994cf3f73a61d50f371985221734c similarity index 100% rename from back-to-the-future/flask_session/5fb994cf3f73a61d50f371985221734c rename to crypto-simmetric/back-to-the-future/flask_session/5fb994cf3f73a61d50f371985221734c diff --git a/back-to-the-future/flask_session/603c3b0f06af7b425b5efd8e9e3b745a b/crypto-simmetric/back-to-the-future/flask_session/603c3b0f06af7b425b5efd8e9e3b745a similarity index 100% rename from back-to-the-future/flask_session/603c3b0f06af7b425b5efd8e9e3b745a rename to crypto-simmetric/back-to-the-future/flask_session/603c3b0f06af7b425b5efd8e9e3b745a diff --git a/back-to-the-future/flask_session/60cfd184618711ba978b7e1b9f31a2b2 b/crypto-simmetric/back-to-the-future/flask_session/60cfd184618711ba978b7e1b9f31a2b2 similarity index 100% rename from back-to-the-future/flask_session/60cfd184618711ba978b7e1b9f31a2b2 rename to crypto-simmetric/back-to-the-future/flask_session/60cfd184618711ba978b7e1b9f31a2b2 diff --git a/back-to-the-future/flask_session/6161ef45609b99d43b48b6b7ca147cfc b/crypto-simmetric/back-to-the-future/flask_session/6161ef45609b99d43b48b6b7ca147cfc similarity index 100% rename from back-to-the-future/flask_session/6161ef45609b99d43b48b6b7ca147cfc rename to crypto-simmetric/back-to-the-future/flask_session/6161ef45609b99d43b48b6b7ca147cfc diff --git a/back-to-the-future/flask_session/618643ea4d02452e823ec6df41f52bb0 b/crypto-simmetric/back-to-the-future/flask_session/618643ea4d02452e823ec6df41f52bb0 similarity index 100% rename from back-to-the-future/flask_session/618643ea4d02452e823ec6df41f52bb0 rename to crypto-simmetric/back-to-the-future/flask_session/618643ea4d02452e823ec6df41f52bb0 diff --git a/back-to-the-future/flask_session/6211c8e9cd4e37476e3ae51a811e6b33 b/crypto-simmetric/back-to-the-future/flask_session/6211c8e9cd4e37476e3ae51a811e6b33 similarity index 100% rename from back-to-the-future/flask_session/6211c8e9cd4e37476e3ae51a811e6b33 rename to crypto-simmetric/back-to-the-future/flask_session/6211c8e9cd4e37476e3ae51a811e6b33 diff --git a/back-to-the-future/flask_session/62f15f1e29ed09ceeec0a334371c98ea b/crypto-simmetric/back-to-the-future/flask_session/62f15f1e29ed09ceeec0a334371c98ea similarity index 100% rename from back-to-the-future/flask_session/62f15f1e29ed09ceeec0a334371c98ea rename to crypto-simmetric/back-to-the-future/flask_session/62f15f1e29ed09ceeec0a334371c98ea diff --git a/back-to-the-future/flask_session/64eb52dbd0218e7e9211367cb1a370f0 b/crypto-simmetric/back-to-the-future/flask_session/64eb52dbd0218e7e9211367cb1a370f0 similarity index 100% rename from back-to-the-future/flask_session/64eb52dbd0218e7e9211367cb1a370f0 rename to crypto-simmetric/back-to-the-future/flask_session/64eb52dbd0218e7e9211367cb1a370f0 diff --git a/back-to-the-future/flask_session/655a2ab36539350da3457188ca1b7936 b/crypto-simmetric/back-to-the-future/flask_session/655a2ab36539350da3457188ca1b7936 similarity index 100% rename from back-to-the-future/flask_session/655a2ab36539350da3457188ca1b7936 rename to crypto-simmetric/back-to-the-future/flask_session/655a2ab36539350da3457188ca1b7936 diff --git a/back-to-the-future/flask_session/658ef25095bee94c521ccb986c8605a0 b/crypto-simmetric/back-to-the-future/flask_session/658ef25095bee94c521ccb986c8605a0 similarity index 100% rename from back-to-the-future/flask_session/658ef25095bee94c521ccb986c8605a0 rename to crypto-simmetric/back-to-the-future/flask_session/658ef25095bee94c521ccb986c8605a0 diff --git a/back-to-the-future/flask_session/66284e62f56cd4899ad8d91118241103 b/crypto-simmetric/back-to-the-future/flask_session/66284e62f56cd4899ad8d91118241103 similarity index 100% rename from back-to-the-future/flask_session/66284e62f56cd4899ad8d91118241103 rename to crypto-simmetric/back-to-the-future/flask_session/66284e62f56cd4899ad8d91118241103 diff --git a/back-to-the-future/flask_session/66943cb90e86f8a416fd87c01c338159 b/crypto-simmetric/back-to-the-future/flask_session/66943cb90e86f8a416fd87c01c338159 similarity index 100% rename from back-to-the-future/flask_session/66943cb90e86f8a416fd87c01c338159 rename to crypto-simmetric/back-to-the-future/flask_session/66943cb90e86f8a416fd87c01c338159 diff --git a/back-to-the-future/flask_session/66946c8ad5068199b1d26cf3c6775eff b/crypto-simmetric/back-to-the-future/flask_session/66946c8ad5068199b1d26cf3c6775eff similarity index 100% rename from back-to-the-future/flask_session/66946c8ad5068199b1d26cf3c6775eff rename to crypto-simmetric/back-to-the-future/flask_session/66946c8ad5068199b1d26cf3c6775eff diff --git a/back-to-the-future/flask_session/680932858c7c7bad9b25a0b904b14cea b/crypto-simmetric/back-to-the-future/flask_session/680932858c7c7bad9b25a0b904b14cea similarity index 100% rename from back-to-the-future/flask_session/680932858c7c7bad9b25a0b904b14cea rename to crypto-simmetric/back-to-the-future/flask_session/680932858c7c7bad9b25a0b904b14cea diff --git a/back-to-the-future/flask_session/681fac0a6daf110c6de16ea27eed86de b/crypto-simmetric/back-to-the-future/flask_session/681fac0a6daf110c6de16ea27eed86de similarity index 100% rename from back-to-the-future/flask_session/681fac0a6daf110c6de16ea27eed86de rename to crypto-simmetric/back-to-the-future/flask_session/681fac0a6daf110c6de16ea27eed86de diff --git a/back-to-the-future/flask_session/68e7a49a02a4835ef6c55562b07dbee2 b/crypto-simmetric/back-to-the-future/flask_session/68e7a49a02a4835ef6c55562b07dbee2 similarity index 100% rename from back-to-the-future/flask_session/68e7a49a02a4835ef6c55562b07dbee2 rename to crypto-simmetric/back-to-the-future/flask_session/68e7a49a02a4835ef6c55562b07dbee2 diff --git a/back-to-the-future/flask_session/694f624b9ac56068b2b10be0b73cbe88 b/crypto-simmetric/back-to-the-future/flask_session/694f624b9ac56068b2b10be0b73cbe88 similarity index 100% rename from back-to-the-future/flask_session/694f624b9ac56068b2b10be0b73cbe88 rename to crypto-simmetric/back-to-the-future/flask_session/694f624b9ac56068b2b10be0b73cbe88 diff --git a/back-to-the-future/flask_session/6a2976642738f63614c8f3bf4707f895 b/crypto-simmetric/back-to-the-future/flask_session/6a2976642738f63614c8f3bf4707f895 similarity index 100% rename from back-to-the-future/flask_session/6a2976642738f63614c8f3bf4707f895 rename to crypto-simmetric/back-to-the-future/flask_session/6a2976642738f63614c8f3bf4707f895 diff --git a/back-to-the-future/flask_session/6cd96cb30ee9d148980fe470ad234108 b/crypto-simmetric/back-to-the-future/flask_session/6cd96cb30ee9d148980fe470ad234108 similarity index 100% rename from back-to-the-future/flask_session/6cd96cb30ee9d148980fe470ad234108 rename to crypto-simmetric/back-to-the-future/flask_session/6cd96cb30ee9d148980fe470ad234108 diff --git a/back-to-the-future/flask_session/6f672b111009ff2b0f581d15fe590c40 b/crypto-simmetric/back-to-the-future/flask_session/6f672b111009ff2b0f581d15fe590c40 similarity index 100% rename from back-to-the-future/flask_session/6f672b111009ff2b0f581d15fe590c40 rename to crypto-simmetric/back-to-the-future/flask_session/6f672b111009ff2b0f581d15fe590c40 diff --git a/back-to-the-future/flask_session/6f6a6c916e873716387a15a5b65b9bdd b/crypto-simmetric/back-to-the-future/flask_session/6f6a6c916e873716387a15a5b65b9bdd similarity index 100% rename from back-to-the-future/flask_session/6f6a6c916e873716387a15a5b65b9bdd rename to crypto-simmetric/back-to-the-future/flask_session/6f6a6c916e873716387a15a5b65b9bdd diff --git a/back-to-the-future/flask_session/6ffad316904ff85580781e6de604193b b/crypto-simmetric/back-to-the-future/flask_session/6ffad316904ff85580781e6de604193b similarity index 100% rename from back-to-the-future/flask_session/6ffad316904ff85580781e6de604193b rename to crypto-simmetric/back-to-the-future/flask_session/6ffad316904ff85580781e6de604193b diff --git a/back-to-the-future/flask_session/7104cf420d98e3ad5d4a7ec2774bf6d8 b/crypto-simmetric/back-to-the-future/flask_session/7104cf420d98e3ad5d4a7ec2774bf6d8 similarity index 100% rename from back-to-the-future/flask_session/7104cf420d98e3ad5d4a7ec2774bf6d8 rename to crypto-simmetric/back-to-the-future/flask_session/7104cf420d98e3ad5d4a7ec2774bf6d8 diff --git a/back-to-the-future/flask_session/72c1be3fb528c9dad754a11c38157cb2 b/crypto-simmetric/back-to-the-future/flask_session/72c1be3fb528c9dad754a11c38157cb2 similarity index 100% rename from back-to-the-future/flask_session/72c1be3fb528c9dad754a11c38157cb2 rename to crypto-simmetric/back-to-the-future/flask_session/72c1be3fb528c9dad754a11c38157cb2 diff --git a/back-to-the-future/flask_session/7379c7079d5b3f39a728ca4db1efc909 b/crypto-simmetric/back-to-the-future/flask_session/7379c7079d5b3f39a728ca4db1efc909 similarity index 100% rename from back-to-the-future/flask_session/7379c7079d5b3f39a728ca4db1efc909 rename to crypto-simmetric/back-to-the-future/flask_session/7379c7079d5b3f39a728ca4db1efc909 diff --git a/back-to-the-future/flask_session/73b4f5158c17b7856f27d4223342263b b/crypto-simmetric/back-to-the-future/flask_session/73b4f5158c17b7856f27d4223342263b similarity index 100% rename from back-to-the-future/flask_session/73b4f5158c17b7856f27d4223342263b rename to crypto-simmetric/back-to-the-future/flask_session/73b4f5158c17b7856f27d4223342263b diff --git a/back-to-the-future/flask_session/73d90008cfe88e6bcbd7d981ef97ce73 b/crypto-simmetric/back-to-the-future/flask_session/73d90008cfe88e6bcbd7d981ef97ce73 similarity index 100% rename from back-to-the-future/flask_session/73d90008cfe88e6bcbd7d981ef97ce73 rename to crypto-simmetric/back-to-the-future/flask_session/73d90008cfe88e6bcbd7d981ef97ce73 diff --git a/back-to-the-future/flask_session/75460bf321af4f464430c25b892c6401 b/crypto-simmetric/back-to-the-future/flask_session/75460bf321af4f464430c25b892c6401 similarity index 100% rename from back-to-the-future/flask_session/75460bf321af4f464430c25b892c6401 rename to crypto-simmetric/back-to-the-future/flask_session/75460bf321af4f464430c25b892c6401 diff --git a/back-to-the-future/flask_session/75b9032eb9a907c8bdf10a742869b93b b/crypto-simmetric/back-to-the-future/flask_session/75b9032eb9a907c8bdf10a742869b93b similarity index 100% rename from back-to-the-future/flask_session/75b9032eb9a907c8bdf10a742869b93b rename to crypto-simmetric/back-to-the-future/flask_session/75b9032eb9a907c8bdf10a742869b93b diff --git a/back-to-the-future/flask_session/75e30eaa64fbc5c30aaafd1f6b5a1ec9 b/crypto-simmetric/back-to-the-future/flask_session/75e30eaa64fbc5c30aaafd1f6b5a1ec9 similarity index 100% rename from back-to-the-future/flask_session/75e30eaa64fbc5c30aaafd1f6b5a1ec9 rename to crypto-simmetric/back-to-the-future/flask_session/75e30eaa64fbc5c30aaafd1f6b5a1ec9 diff --git a/back-to-the-future/flask_session/7611e8459b1c57c139dd815af9c38a6d b/crypto-simmetric/back-to-the-future/flask_session/7611e8459b1c57c139dd815af9c38a6d similarity index 100% rename from back-to-the-future/flask_session/7611e8459b1c57c139dd815af9c38a6d rename to crypto-simmetric/back-to-the-future/flask_session/7611e8459b1c57c139dd815af9c38a6d diff --git a/back-to-the-future/flask_session/7620eeef9aa9bb45aa4105100c2aba28 b/crypto-simmetric/back-to-the-future/flask_session/7620eeef9aa9bb45aa4105100c2aba28 similarity index 100% rename from back-to-the-future/flask_session/7620eeef9aa9bb45aa4105100c2aba28 rename to crypto-simmetric/back-to-the-future/flask_session/7620eeef9aa9bb45aa4105100c2aba28 diff --git a/back-to-the-future/flask_session/774d132d942cc4e1df0a9b65f56d989d b/crypto-simmetric/back-to-the-future/flask_session/774d132d942cc4e1df0a9b65f56d989d similarity index 100% rename from back-to-the-future/flask_session/774d132d942cc4e1df0a9b65f56d989d rename to crypto-simmetric/back-to-the-future/flask_session/774d132d942cc4e1df0a9b65f56d989d diff --git a/back-to-the-future/flask_session/7b351c93040332dfa14d20943ab1fffa b/crypto-simmetric/back-to-the-future/flask_session/7b351c93040332dfa14d20943ab1fffa similarity index 100% rename from back-to-the-future/flask_session/7b351c93040332dfa14d20943ab1fffa rename to crypto-simmetric/back-to-the-future/flask_session/7b351c93040332dfa14d20943ab1fffa diff --git a/back-to-the-future/flask_session/7b54bbd31475cdecc2ac6483b3d3d2d8 b/crypto-simmetric/back-to-the-future/flask_session/7b54bbd31475cdecc2ac6483b3d3d2d8 similarity index 100% rename from back-to-the-future/flask_session/7b54bbd31475cdecc2ac6483b3d3d2d8 rename to crypto-simmetric/back-to-the-future/flask_session/7b54bbd31475cdecc2ac6483b3d3d2d8 diff --git a/back-to-the-future/flask_session/7c0aa187bd2b31ed70f027ba782fe016 b/crypto-simmetric/back-to-the-future/flask_session/7c0aa187bd2b31ed70f027ba782fe016 similarity index 100% rename from back-to-the-future/flask_session/7c0aa187bd2b31ed70f027ba782fe016 rename to crypto-simmetric/back-to-the-future/flask_session/7c0aa187bd2b31ed70f027ba782fe016 diff --git a/back-to-the-future/flask_session/7c5ea86c5f948df7d1b3a080ed06a534 b/crypto-simmetric/back-to-the-future/flask_session/7c5ea86c5f948df7d1b3a080ed06a534 similarity index 100% rename from back-to-the-future/flask_session/7c5ea86c5f948df7d1b3a080ed06a534 rename to crypto-simmetric/back-to-the-future/flask_session/7c5ea86c5f948df7d1b3a080ed06a534 diff --git a/back-to-the-future/flask_session/7c7acbc49ba72490e28e859d01efef4a b/crypto-simmetric/back-to-the-future/flask_session/7c7acbc49ba72490e28e859d01efef4a similarity index 100% rename from back-to-the-future/flask_session/7c7acbc49ba72490e28e859d01efef4a rename to crypto-simmetric/back-to-the-future/flask_session/7c7acbc49ba72490e28e859d01efef4a diff --git a/back-to-the-future/flask_session/7cf9fbc07f681f6f75da84738dfe4855 b/crypto-simmetric/back-to-the-future/flask_session/7cf9fbc07f681f6f75da84738dfe4855 similarity index 100% rename from back-to-the-future/flask_session/7cf9fbc07f681f6f75da84738dfe4855 rename to crypto-simmetric/back-to-the-future/flask_session/7cf9fbc07f681f6f75da84738dfe4855 diff --git a/back-to-the-future/flask_session/7d04354d3f2607804cc2a300edb151bf b/crypto-simmetric/back-to-the-future/flask_session/7d04354d3f2607804cc2a300edb151bf similarity index 100% rename from back-to-the-future/flask_session/7d04354d3f2607804cc2a300edb151bf rename to crypto-simmetric/back-to-the-future/flask_session/7d04354d3f2607804cc2a300edb151bf diff --git a/back-to-the-future/flask_session/7e06e982a4bb60d5c2dcca77c6cda329 b/crypto-simmetric/back-to-the-future/flask_session/7e06e982a4bb60d5c2dcca77c6cda329 similarity index 100% rename from back-to-the-future/flask_session/7e06e982a4bb60d5c2dcca77c6cda329 rename to crypto-simmetric/back-to-the-future/flask_session/7e06e982a4bb60d5c2dcca77c6cda329 diff --git a/back-to-the-future/flask_session/7fec0913063560cd930414cab2393246 b/crypto-simmetric/back-to-the-future/flask_session/7fec0913063560cd930414cab2393246 similarity index 100% rename from back-to-the-future/flask_session/7fec0913063560cd930414cab2393246 rename to crypto-simmetric/back-to-the-future/flask_session/7fec0913063560cd930414cab2393246 diff --git a/back-to-the-future/flask_session/80261ed5475b925955fd4baddcb851e1 b/crypto-simmetric/back-to-the-future/flask_session/80261ed5475b925955fd4baddcb851e1 similarity index 100% rename from back-to-the-future/flask_session/80261ed5475b925955fd4baddcb851e1 rename to crypto-simmetric/back-to-the-future/flask_session/80261ed5475b925955fd4baddcb851e1 diff --git a/back-to-the-future/flask_session/8191d002f3140fa7d644547d5d095055 b/crypto-simmetric/back-to-the-future/flask_session/8191d002f3140fa7d644547d5d095055 similarity index 100% rename from back-to-the-future/flask_session/8191d002f3140fa7d644547d5d095055 rename to crypto-simmetric/back-to-the-future/flask_session/8191d002f3140fa7d644547d5d095055 diff --git a/back-to-the-future/flask_session/81cc7626288f9a804b06b66307b37b3e b/crypto-simmetric/back-to-the-future/flask_session/81cc7626288f9a804b06b66307b37b3e similarity index 100% rename from back-to-the-future/flask_session/81cc7626288f9a804b06b66307b37b3e rename to crypto-simmetric/back-to-the-future/flask_session/81cc7626288f9a804b06b66307b37b3e diff --git a/back-to-the-future/flask_session/8360be0b64a48671598a410327283aea b/crypto-simmetric/back-to-the-future/flask_session/8360be0b64a48671598a410327283aea similarity index 100% rename from back-to-the-future/flask_session/8360be0b64a48671598a410327283aea rename to crypto-simmetric/back-to-the-future/flask_session/8360be0b64a48671598a410327283aea diff --git a/back-to-the-future/flask_session/845556a2734c30e0d96b7bdfa0a82d9f b/crypto-simmetric/back-to-the-future/flask_session/845556a2734c30e0d96b7bdfa0a82d9f similarity index 100% rename from back-to-the-future/flask_session/845556a2734c30e0d96b7bdfa0a82d9f rename to crypto-simmetric/back-to-the-future/flask_session/845556a2734c30e0d96b7bdfa0a82d9f diff --git a/back-to-the-future/flask_session/846667689ca0fd8add512ce55c04fa72 b/crypto-simmetric/back-to-the-future/flask_session/846667689ca0fd8add512ce55c04fa72 similarity index 100% rename from back-to-the-future/flask_session/846667689ca0fd8add512ce55c04fa72 rename to crypto-simmetric/back-to-the-future/flask_session/846667689ca0fd8add512ce55c04fa72 diff --git a/back-to-the-future/flask_session/8487b52e9db2efa57f688178a32f1280 b/crypto-simmetric/back-to-the-future/flask_session/8487b52e9db2efa57f688178a32f1280 similarity index 100% rename from back-to-the-future/flask_session/8487b52e9db2efa57f688178a32f1280 rename to crypto-simmetric/back-to-the-future/flask_session/8487b52e9db2efa57f688178a32f1280 diff --git a/back-to-the-future/flask_session/8502fc6e0df4d9fc03abcd552c1bf898 b/crypto-simmetric/back-to-the-future/flask_session/8502fc6e0df4d9fc03abcd552c1bf898 similarity index 100% rename from back-to-the-future/flask_session/8502fc6e0df4d9fc03abcd552c1bf898 rename to crypto-simmetric/back-to-the-future/flask_session/8502fc6e0df4d9fc03abcd552c1bf898 diff --git a/back-to-the-future/flask_session/86524c3023c21547b5ece1e90b3acfc3 b/crypto-simmetric/back-to-the-future/flask_session/86524c3023c21547b5ece1e90b3acfc3 similarity index 100% rename from back-to-the-future/flask_session/86524c3023c21547b5ece1e90b3acfc3 rename to crypto-simmetric/back-to-the-future/flask_session/86524c3023c21547b5ece1e90b3acfc3 diff --git a/back-to-the-future/flask_session/8735ce113f7ae5b512f09140a41870d5 b/crypto-simmetric/back-to-the-future/flask_session/8735ce113f7ae5b512f09140a41870d5 similarity index 100% rename from back-to-the-future/flask_session/8735ce113f7ae5b512f09140a41870d5 rename to crypto-simmetric/back-to-the-future/flask_session/8735ce113f7ae5b512f09140a41870d5 diff --git a/back-to-the-future/flask_session/893d4ff49053c750ae186c4ca8b0e913 b/crypto-simmetric/back-to-the-future/flask_session/893d4ff49053c750ae186c4ca8b0e913 similarity index 100% rename from back-to-the-future/flask_session/893d4ff49053c750ae186c4ca8b0e913 rename to crypto-simmetric/back-to-the-future/flask_session/893d4ff49053c750ae186c4ca8b0e913 diff --git a/back-to-the-future/flask_session/8975db8d69782ad129a121656c516c32 b/crypto-simmetric/back-to-the-future/flask_session/8975db8d69782ad129a121656c516c32 similarity index 100% rename from back-to-the-future/flask_session/8975db8d69782ad129a121656c516c32 rename to crypto-simmetric/back-to-the-future/flask_session/8975db8d69782ad129a121656c516c32 diff --git a/back-to-the-future/flask_session/89ae79a7f847f2aed1dec02434721beb b/crypto-simmetric/back-to-the-future/flask_session/89ae79a7f847f2aed1dec02434721beb similarity index 100% rename from back-to-the-future/flask_session/89ae79a7f847f2aed1dec02434721beb rename to crypto-simmetric/back-to-the-future/flask_session/89ae79a7f847f2aed1dec02434721beb diff --git a/back-to-the-future/flask_session/89ccf44a4bfcbe8d6334014843788840 b/crypto-simmetric/back-to-the-future/flask_session/89ccf44a4bfcbe8d6334014843788840 similarity index 100% rename from back-to-the-future/flask_session/89ccf44a4bfcbe8d6334014843788840 rename to crypto-simmetric/back-to-the-future/flask_session/89ccf44a4bfcbe8d6334014843788840 diff --git a/back-to-the-future/flask_session/8b756f4b7369e6ebe3f9878cc3f84735 b/crypto-simmetric/back-to-the-future/flask_session/8b756f4b7369e6ebe3f9878cc3f84735 similarity index 100% rename from back-to-the-future/flask_session/8b756f4b7369e6ebe3f9878cc3f84735 rename to crypto-simmetric/back-to-the-future/flask_session/8b756f4b7369e6ebe3f9878cc3f84735 diff --git a/back-to-the-future/flask_session/8b85aa662e6655fcefdc9d802d6379b4 b/crypto-simmetric/back-to-the-future/flask_session/8b85aa662e6655fcefdc9d802d6379b4 similarity index 100% rename from back-to-the-future/flask_session/8b85aa662e6655fcefdc9d802d6379b4 rename to crypto-simmetric/back-to-the-future/flask_session/8b85aa662e6655fcefdc9d802d6379b4 diff --git a/back-to-the-future/flask_session/8d01680ee416d58a97dba83e6fd6f876 b/crypto-simmetric/back-to-the-future/flask_session/8d01680ee416d58a97dba83e6fd6f876 similarity index 100% rename from back-to-the-future/flask_session/8d01680ee416d58a97dba83e6fd6f876 rename to crypto-simmetric/back-to-the-future/flask_session/8d01680ee416d58a97dba83e6fd6f876 diff --git a/back-to-the-future/flask_session/8dc34737beb8c62cf2ee397263f4884e b/crypto-simmetric/back-to-the-future/flask_session/8dc34737beb8c62cf2ee397263f4884e similarity index 100% rename from back-to-the-future/flask_session/8dc34737beb8c62cf2ee397263f4884e rename to crypto-simmetric/back-to-the-future/flask_session/8dc34737beb8c62cf2ee397263f4884e diff --git a/back-to-the-future/flask_session/8e3397bf2f65f7d28b85af8059742f08 b/crypto-simmetric/back-to-the-future/flask_session/8e3397bf2f65f7d28b85af8059742f08 similarity index 100% rename from back-to-the-future/flask_session/8e3397bf2f65f7d28b85af8059742f08 rename to crypto-simmetric/back-to-the-future/flask_session/8e3397bf2f65f7d28b85af8059742f08 diff --git a/back-to-the-future/flask_session/8e944ccdcedd5715279e25e60964639b b/crypto-simmetric/back-to-the-future/flask_session/8e944ccdcedd5715279e25e60964639b similarity index 100% rename from back-to-the-future/flask_session/8e944ccdcedd5715279e25e60964639b rename to crypto-simmetric/back-to-the-future/flask_session/8e944ccdcedd5715279e25e60964639b diff --git a/back-to-the-future/flask_session/8f24ad0909b3832bc1175d87e6d6dd67 b/crypto-simmetric/back-to-the-future/flask_session/8f24ad0909b3832bc1175d87e6d6dd67 similarity index 100% rename from back-to-the-future/flask_session/8f24ad0909b3832bc1175d87e6d6dd67 rename to crypto-simmetric/back-to-the-future/flask_session/8f24ad0909b3832bc1175d87e6d6dd67 diff --git a/back-to-the-future/flask_session/9022c917e9bb52f7a3f9df245ece4959 b/crypto-simmetric/back-to-the-future/flask_session/9022c917e9bb52f7a3f9df245ece4959 similarity index 100% rename from back-to-the-future/flask_session/9022c917e9bb52f7a3f9df245ece4959 rename to crypto-simmetric/back-to-the-future/flask_session/9022c917e9bb52f7a3f9df245ece4959 diff --git a/back-to-the-future/flask_session/920f185c31832f3643f275c94b6b6436 b/crypto-simmetric/back-to-the-future/flask_session/920f185c31832f3643f275c94b6b6436 similarity index 100% rename from back-to-the-future/flask_session/920f185c31832f3643f275c94b6b6436 rename to crypto-simmetric/back-to-the-future/flask_session/920f185c31832f3643f275c94b6b6436 diff --git a/back-to-the-future/flask_session/93cfdcd1af2e31356ba3e4c797c7180e b/crypto-simmetric/back-to-the-future/flask_session/93cfdcd1af2e31356ba3e4c797c7180e similarity index 100% rename from back-to-the-future/flask_session/93cfdcd1af2e31356ba3e4c797c7180e rename to crypto-simmetric/back-to-the-future/flask_session/93cfdcd1af2e31356ba3e4c797c7180e diff --git a/back-to-the-future/flask_session/9406fe9ae36b2cb3db15fcedf29d8992 b/crypto-simmetric/back-to-the-future/flask_session/9406fe9ae36b2cb3db15fcedf29d8992 similarity index 100% rename from back-to-the-future/flask_session/9406fe9ae36b2cb3db15fcedf29d8992 rename to crypto-simmetric/back-to-the-future/flask_session/9406fe9ae36b2cb3db15fcedf29d8992 diff --git a/back-to-the-future/flask_session/954589c7959251139379e24a16c9e437 b/crypto-simmetric/back-to-the-future/flask_session/954589c7959251139379e24a16c9e437 similarity index 100% rename from back-to-the-future/flask_session/954589c7959251139379e24a16c9e437 rename to crypto-simmetric/back-to-the-future/flask_session/954589c7959251139379e24a16c9e437 diff --git a/back-to-the-future/flask_session/97178654b5c0c9ca132ba2720ad4bd0a b/crypto-simmetric/back-to-the-future/flask_session/97178654b5c0c9ca132ba2720ad4bd0a similarity index 100% rename from back-to-the-future/flask_session/97178654b5c0c9ca132ba2720ad4bd0a rename to crypto-simmetric/back-to-the-future/flask_session/97178654b5c0c9ca132ba2720ad4bd0a diff --git a/back-to-the-future/flask_session/9764607bd0d51e03d21bc4f73d7a3fb0 b/crypto-simmetric/back-to-the-future/flask_session/9764607bd0d51e03d21bc4f73d7a3fb0 similarity index 100% rename from back-to-the-future/flask_session/9764607bd0d51e03d21bc4f73d7a3fb0 rename to crypto-simmetric/back-to-the-future/flask_session/9764607bd0d51e03d21bc4f73d7a3fb0 diff --git a/back-to-the-future/flask_session/982cc845e05dfd464f333f7d16d55f3a b/crypto-simmetric/back-to-the-future/flask_session/982cc845e05dfd464f333f7d16d55f3a similarity index 100% rename from back-to-the-future/flask_session/982cc845e05dfd464f333f7d16d55f3a rename to crypto-simmetric/back-to-the-future/flask_session/982cc845e05dfd464f333f7d16d55f3a diff --git a/back-to-the-future/flask_session/984f06e0ef3f2b3c55d9fbbe3cbd4811 b/crypto-simmetric/back-to-the-future/flask_session/984f06e0ef3f2b3c55d9fbbe3cbd4811 similarity index 100% rename from back-to-the-future/flask_session/984f06e0ef3f2b3c55d9fbbe3cbd4811 rename to crypto-simmetric/back-to-the-future/flask_session/984f06e0ef3f2b3c55d9fbbe3cbd4811 diff --git a/back-to-the-future/flask_session/98e47b81eb2790747fd6a39be77f858e b/crypto-simmetric/back-to-the-future/flask_session/98e47b81eb2790747fd6a39be77f858e similarity index 100% rename from back-to-the-future/flask_session/98e47b81eb2790747fd6a39be77f858e rename to crypto-simmetric/back-to-the-future/flask_session/98e47b81eb2790747fd6a39be77f858e diff --git a/back-to-the-future/flask_session/990b8182389a471712fd4449c602f1a5 b/crypto-simmetric/back-to-the-future/flask_session/990b8182389a471712fd4449c602f1a5 similarity index 100% rename from back-to-the-future/flask_session/990b8182389a471712fd4449c602f1a5 rename to crypto-simmetric/back-to-the-future/flask_session/990b8182389a471712fd4449c602f1a5 diff --git a/back-to-the-future/flask_session/9924990b4546e6196feae2e41bcded8c b/crypto-simmetric/back-to-the-future/flask_session/9924990b4546e6196feae2e41bcded8c similarity index 100% rename from back-to-the-future/flask_session/9924990b4546e6196feae2e41bcded8c rename to crypto-simmetric/back-to-the-future/flask_session/9924990b4546e6196feae2e41bcded8c diff --git a/back-to-the-future/flask_session/9a15c035a8938bbaf7ee32ac1aa45f15 b/crypto-simmetric/back-to-the-future/flask_session/9a15c035a8938bbaf7ee32ac1aa45f15 similarity index 100% rename from back-to-the-future/flask_session/9a15c035a8938bbaf7ee32ac1aa45f15 rename to crypto-simmetric/back-to-the-future/flask_session/9a15c035a8938bbaf7ee32ac1aa45f15 diff --git a/back-to-the-future/flask_session/9e013599d6b47a15db72409a1629f594 b/crypto-simmetric/back-to-the-future/flask_session/9e013599d6b47a15db72409a1629f594 similarity index 100% rename from back-to-the-future/flask_session/9e013599d6b47a15db72409a1629f594 rename to crypto-simmetric/back-to-the-future/flask_session/9e013599d6b47a15db72409a1629f594 diff --git a/back-to-the-future/flask_session/9e57e62465a479e679a6adbd4b958157 b/crypto-simmetric/back-to-the-future/flask_session/9e57e62465a479e679a6adbd4b958157 similarity index 100% rename from back-to-the-future/flask_session/9e57e62465a479e679a6adbd4b958157 rename to crypto-simmetric/back-to-the-future/flask_session/9e57e62465a479e679a6adbd4b958157 diff --git a/back-to-the-future/flask_session/9ea35b83ec748d413674ea8e6ca87ccb b/crypto-simmetric/back-to-the-future/flask_session/9ea35b83ec748d413674ea8e6ca87ccb similarity index 100% rename from back-to-the-future/flask_session/9ea35b83ec748d413674ea8e6ca87ccb rename to crypto-simmetric/back-to-the-future/flask_session/9ea35b83ec748d413674ea8e6ca87ccb diff --git a/back-to-the-future/flask_session/9fc417b4957fde835b5e7b64b5104ac8 b/crypto-simmetric/back-to-the-future/flask_session/9fc417b4957fde835b5e7b64b5104ac8 similarity index 100% rename from back-to-the-future/flask_session/9fc417b4957fde835b5e7b64b5104ac8 rename to crypto-simmetric/back-to-the-future/flask_session/9fc417b4957fde835b5e7b64b5104ac8 diff --git a/back-to-the-future/flask_session/a00a363e74e8854d89553aedcabb4c6a b/crypto-simmetric/back-to-the-future/flask_session/a00a363e74e8854d89553aedcabb4c6a similarity index 100% rename from back-to-the-future/flask_session/a00a363e74e8854d89553aedcabb4c6a rename to crypto-simmetric/back-to-the-future/flask_session/a00a363e74e8854d89553aedcabb4c6a diff --git a/back-to-the-future/flask_session/a07fed5d740a8dd02ef4928198e01133 b/crypto-simmetric/back-to-the-future/flask_session/a07fed5d740a8dd02ef4928198e01133 similarity index 100% rename from back-to-the-future/flask_session/a07fed5d740a8dd02ef4928198e01133 rename to crypto-simmetric/back-to-the-future/flask_session/a07fed5d740a8dd02ef4928198e01133 diff --git a/back-to-the-future/flask_session/a0bf9254a3236ad8dac9f6675055541d b/crypto-simmetric/back-to-the-future/flask_session/a0bf9254a3236ad8dac9f6675055541d similarity index 100% rename from back-to-the-future/flask_session/a0bf9254a3236ad8dac9f6675055541d rename to crypto-simmetric/back-to-the-future/flask_session/a0bf9254a3236ad8dac9f6675055541d diff --git a/back-to-the-future/flask_session/a0e8349de3483ae232069dbfc1396c7c b/crypto-simmetric/back-to-the-future/flask_session/a0e8349de3483ae232069dbfc1396c7c similarity index 100% rename from back-to-the-future/flask_session/a0e8349de3483ae232069dbfc1396c7c rename to crypto-simmetric/back-to-the-future/flask_session/a0e8349de3483ae232069dbfc1396c7c diff --git a/back-to-the-future/flask_session/a101e31a62c14e8ea2cf4c779e1b7d37 b/crypto-simmetric/back-to-the-future/flask_session/a101e31a62c14e8ea2cf4c779e1b7d37 similarity index 100% rename from back-to-the-future/flask_session/a101e31a62c14e8ea2cf4c779e1b7d37 rename to crypto-simmetric/back-to-the-future/flask_session/a101e31a62c14e8ea2cf4c779e1b7d37 diff --git a/back-to-the-future/flask_session/a22a2e117a8fe7f9a97f845528859ed0 b/crypto-simmetric/back-to-the-future/flask_session/a22a2e117a8fe7f9a97f845528859ed0 similarity index 100% rename from back-to-the-future/flask_session/a22a2e117a8fe7f9a97f845528859ed0 rename to crypto-simmetric/back-to-the-future/flask_session/a22a2e117a8fe7f9a97f845528859ed0 diff --git a/back-to-the-future/flask_session/a348d839170ede14f17edd94e2f166a0 b/crypto-simmetric/back-to-the-future/flask_session/a348d839170ede14f17edd94e2f166a0 similarity index 100% rename from back-to-the-future/flask_session/a348d839170ede14f17edd94e2f166a0 rename to crypto-simmetric/back-to-the-future/flask_session/a348d839170ede14f17edd94e2f166a0 diff --git a/back-to-the-future/flask_session/a3d5bcca8210816c93aa4c61352532aa b/crypto-simmetric/back-to-the-future/flask_session/a3d5bcca8210816c93aa4c61352532aa similarity index 100% rename from back-to-the-future/flask_session/a3d5bcca8210816c93aa4c61352532aa rename to crypto-simmetric/back-to-the-future/flask_session/a3d5bcca8210816c93aa4c61352532aa diff --git a/back-to-the-future/flask_session/a56aa0344508a51bd93a4f3ea8d6c30e b/crypto-simmetric/back-to-the-future/flask_session/a56aa0344508a51bd93a4f3ea8d6c30e similarity index 100% rename from back-to-the-future/flask_session/a56aa0344508a51bd93a4f3ea8d6c30e rename to crypto-simmetric/back-to-the-future/flask_session/a56aa0344508a51bd93a4f3ea8d6c30e diff --git a/back-to-the-future/flask_session/a57b6e892f4830587aea495552784ed9 b/crypto-simmetric/back-to-the-future/flask_session/a57b6e892f4830587aea495552784ed9 similarity index 100% rename from back-to-the-future/flask_session/a57b6e892f4830587aea495552784ed9 rename to crypto-simmetric/back-to-the-future/flask_session/a57b6e892f4830587aea495552784ed9 diff --git a/back-to-the-future/flask_session/a5a7c21278a12837bd88b87302fe68a7 b/crypto-simmetric/back-to-the-future/flask_session/a5a7c21278a12837bd88b87302fe68a7 similarity index 100% rename from back-to-the-future/flask_session/a5a7c21278a12837bd88b87302fe68a7 rename to crypto-simmetric/back-to-the-future/flask_session/a5a7c21278a12837bd88b87302fe68a7 diff --git a/back-to-the-future/flask_session/a5e8f792a5f0fdcdf5f666a1d14a23bc b/crypto-simmetric/back-to-the-future/flask_session/a5e8f792a5f0fdcdf5f666a1d14a23bc similarity index 100% rename from back-to-the-future/flask_session/a5e8f792a5f0fdcdf5f666a1d14a23bc rename to crypto-simmetric/back-to-the-future/flask_session/a5e8f792a5f0fdcdf5f666a1d14a23bc diff --git a/back-to-the-future/flask_session/a803d35caa6bdd7e02955a7bd7319d28 b/crypto-simmetric/back-to-the-future/flask_session/a803d35caa6bdd7e02955a7bd7319d28 similarity index 100% rename from back-to-the-future/flask_session/a803d35caa6bdd7e02955a7bd7319d28 rename to crypto-simmetric/back-to-the-future/flask_session/a803d35caa6bdd7e02955a7bd7319d28 diff --git a/back-to-the-future/flask_session/a8417dbcc14d9a8cf376b5d6ac2be10a b/crypto-simmetric/back-to-the-future/flask_session/a8417dbcc14d9a8cf376b5d6ac2be10a similarity index 100% rename from back-to-the-future/flask_session/a8417dbcc14d9a8cf376b5d6ac2be10a rename to crypto-simmetric/back-to-the-future/flask_session/a8417dbcc14d9a8cf376b5d6ac2be10a diff --git a/back-to-the-future/flask_session/a86aa5afcb0a6f305aa8502781d96fcb b/crypto-simmetric/back-to-the-future/flask_session/a86aa5afcb0a6f305aa8502781d96fcb similarity index 100% rename from back-to-the-future/flask_session/a86aa5afcb0a6f305aa8502781d96fcb rename to crypto-simmetric/back-to-the-future/flask_session/a86aa5afcb0a6f305aa8502781d96fcb diff --git a/back-to-the-future/flask_session/a97a1ab003cda1e66e80df2a97f4e4c8 b/crypto-simmetric/back-to-the-future/flask_session/a97a1ab003cda1e66e80df2a97f4e4c8 similarity index 100% rename from back-to-the-future/flask_session/a97a1ab003cda1e66e80df2a97f4e4c8 rename to crypto-simmetric/back-to-the-future/flask_session/a97a1ab003cda1e66e80df2a97f4e4c8 diff --git a/back-to-the-future/flask_session/a99e725d1a5105e4330dbb2ab295b044 b/crypto-simmetric/back-to-the-future/flask_session/a99e725d1a5105e4330dbb2ab295b044 similarity index 100% rename from back-to-the-future/flask_session/a99e725d1a5105e4330dbb2ab295b044 rename to crypto-simmetric/back-to-the-future/flask_session/a99e725d1a5105e4330dbb2ab295b044 diff --git a/back-to-the-future/flask_session/a9dc030de1ace0b44370bee19e7acc70 b/crypto-simmetric/back-to-the-future/flask_session/a9dc030de1ace0b44370bee19e7acc70 similarity index 100% rename from back-to-the-future/flask_session/a9dc030de1ace0b44370bee19e7acc70 rename to crypto-simmetric/back-to-the-future/flask_session/a9dc030de1ace0b44370bee19e7acc70 diff --git a/back-to-the-future/flask_session/aa774380b6cfedcacd5229d8d55de6ea b/crypto-simmetric/back-to-the-future/flask_session/aa774380b6cfedcacd5229d8d55de6ea similarity index 100% rename from back-to-the-future/flask_session/aa774380b6cfedcacd5229d8d55de6ea rename to crypto-simmetric/back-to-the-future/flask_session/aa774380b6cfedcacd5229d8d55de6ea diff --git a/back-to-the-future/flask_session/aacf73f04458fb0cac639324f8d23ef9 b/crypto-simmetric/back-to-the-future/flask_session/aacf73f04458fb0cac639324f8d23ef9 similarity index 100% rename from back-to-the-future/flask_session/aacf73f04458fb0cac639324f8d23ef9 rename to crypto-simmetric/back-to-the-future/flask_session/aacf73f04458fb0cac639324f8d23ef9 diff --git a/back-to-the-future/flask_session/ad1354ac688b6e7cb3d324495b7f5eb2 b/crypto-simmetric/back-to-the-future/flask_session/ad1354ac688b6e7cb3d324495b7f5eb2 similarity index 100% rename from back-to-the-future/flask_session/ad1354ac688b6e7cb3d324495b7f5eb2 rename to crypto-simmetric/back-to-the-future/flask_session/ad1354ac688b6e7cb3d324495b7f5eb2 diff --git a/back-to-the-future/flask_session/ad16b66739c9bbfbf32c3130f98dd0a7 b/crypto-simmetric/back-to-the-future/flask_session/ad16b66739c9bbfbf32c3130f98dd0a7 similarity index 100% rename from back-to-the-future/flask_session/ad16b66739c9bbfbf32c3130f98dd0a7 rename to crypto-simmetric/back-to-the-future/flask_session/ad16b66739c9bbfbf32c3130f98dd0a7 diff --git a/back-to-the-future/flask_session/ad99f6117878482ab7106b4d974cfe90 b/crypto-simmetric/back-to-the-future/flask_session/ad99f6117878482ab7106b4d974cfe90 similarity index 100% rename from back-to-the-future/flask_session/ad99f6117878482ab7106b4d974cfe90 rename to crypto-simmetric/back-to-the-future/flask_session/ad99f6117878482ab7106b4d974cfe90 diff --git a/back-to-the-future/flask_session/add69d43e0c9c22cb6ae3f24658b21cd b/crypto-simmetric/back-to-the-future/flask_session/add69d43e0c9c22cb6ae3f24658b21cd similarity index 100% rename from back-to-the-future/flask_session/add69d43e0c9c22cb6ae3f24658b21cd rename to crypto-simmetric/back-to-the-future/flask_session/add69d43e0c9c22cb6ae3f24658b21cd diff --git a/back-to-the-future/flask_session/af23a5dd9dbbe86d6cae6ca8a95a94c9 b/crypto-simmetric/back-to-the-future/flask_session/af23a5dd9dbbe86d6cae6ca8a95a94c9 similarity index 100% rename from back-to-the-future/flask_session/af23a5dd9dbbe86d6cae6ca8a95a94c9 rename to crypto-simmetric/back-to-the-future/flask_session/af23a5dd9dbbe86d6cae6ca8a95a94c9 diff --git a/back-to-the-future/flask_session/afd84e1511d5e9e36607751cf7b7ac96 b/crypto-simmetric/back-to-the-future/flask_session/afd84e1511d5e9e36607751cf7b7ac96 similarity index 100% rename from back-to-the-future/flask_session/afd84e1511d5e9e36607751cf7b7ac96 rename to crypto-simmetric/back-to-the-future/flask_session/afd84e1511d5e9e36607751cf7b7ac96 diff --git a/back-to-the-future/flask_session/afe1ec12fb39790665014610669101bb b/crypto-simmetric/back-to-the-future/flask_session/afe1ec12fb39790665014610669101bb similarity index 100% rename from back-to-the-future/flask_session/afe1ec12fb39790665014610669101bb rename to crypto-simmetric/back-to-the-future/flask_session/afe1ec12fb39790665014610669101bb diff --git a/back-to-the-future/flask_session/b05afd0b1ba046e6e56dfb91cade5852 b/crypto-simmetric/back-to-the-future/flask_session/b05afd0b1ba046e6e56dfb91cade5852 similarity index 100% rename from back-to-the-future/flask_session/b05afd0b1ba046e6e56dfb91cade5852 rename to crypto-simmetric/back-to-the-future/flask_session/b05afd0b1ba046e6e56dfb91cade5852 diff --git a/back-to-the-future/flask_session/b1247ef5153c8cb20af6eaa532c4e53f b/crypto-simmetric/back-to-the-future/flask_session/b1247ef5153c8cb20af6eaa532c4e53f similarity index 100% rename from back-to-the-future/flask_session/b1247ef5153c8cb20af6eaa532c4e53f rename to crypto-simmetric/back-to-the-future/flask_session/b1247ef5153c8cb20af6eaa532c4e53f diff --git a/back-to-the-future/flask_session/b34f7207987081570979b3c3bbc6ae2f b/crypto-simmetric/back-to-the-future/flask_session/b34f7207987081570979b3c3bbc6ae2f similarity index 100% rename from back-to-the-future/flask_session/b34f7207987081570979b3c3bbc6ae2f rename to crypto-simmetric/back-to-the-future/flask_session/b34f7207987081570979b3c3bbc6ae2f diff --git a/back-to-the-future/flask_session/b593f82fb66d006980e8a43a0417a1ef b/crypto-simmetric/back-to-the-future/flask_session/b593f82fb66d006980e8a43a0417a1ef similarity index 100% rename from back-to-the-future/flask_session/b593f82fb66d006980e8a43a0417a1ef rename to crypto-simmetric/back-to-the-future/flask_session/b593f82fb66d006980e8a43a0417a1ef diff --git a/back-to-the-future/flask_session/b5e3b8a6b694614c74fa55892ec7831b b/crypto-simmetric/back-to-the-future/flask_session/b5e3b8a6b694614c74fa55892ec7831b similarity index 100% rename from back-to-the-future/flask_session/b5e3b8a6b694614c74fa55892ec7831b rename to crypto-simmetric/back-to-the-future/flask_session/b5e3b8a6b694614c74fa55892ec7831b diff --git a/back-to-the-future/flask_session/b61f47d48cfde46dc72a64c6ff49259b b/crypto-simmetric/back-to-the-future/flask_session/b61f47d48cfde46dc72a64c6ff49259b similarity index 100% rename from back-to-the-future/flask_session/b61f47d48cfde46dc72a64c6ff49259b rename to crypto-simmetric/back-to-the-future/flask_session/b61f47d48cfde46dc72a64c6ff49259b diff --git a/back-to-the-future/flask_session/b775978d6a3936c4100e344e8378371e b/crypto-simmetric/back-to-the-future/flask_session/b775978d6a3936c4100e344e8378371e similarity index 100% rename from back-to-the-future/flask_session/b775978d6a3936c4100e344e8378371e rename to crypto-simmetric/back-to-the-future/flask_session/b775978d6a3936c4100e344e8378371e diff --git a/back-to-the-future/flask_session/b77f6ebf9bf330d992f7fcc42ad3eb80 b/crypto-simmetric/back-to-the-future/flask_session/b77f6ebf9bf330d992f7fcc42ad3eb80 similarity index 100% rename from back-to-the-future/flask_session/b77f6ebf9bf330d992f7fcc42ad3eb80 rename to crypto-simmetric/back-to-the-future/flask_session/b77f6ebf9bf330d992f7fcc42ad3eb80 diff --git a/back-to-the-future/flask_session/b79918f57d6585431b357364a047b2fb b/crypto-simmetric/back-to-the-future/flask_session/b79918f57d6585431b357364a047b2fb similarity index 100% rename from back-to-the-future/flask_session/b79918f57d6585431b357364a047b2fb rename to crypto-simmetric/back-to-the-future/flask_session/b79918f57d6585431b357364a047b2fb diff --git a/back-to-the-future/flask_session/b7fa05ef1c055c8721a0844fa2f9c517 b/crypto-simmetric/back-to-the-future/flask_session/b7fa05ef1c055c8721a0844fa2f9c517 similarity index 100% rename from back-to-the-future/flask_session/b7fa05ef1c055c8721a0844fa2f9c517 rename to crypto-simmetric/back-to-the-future/flask_session/b7fa05ef1c055c8721a0844fa2f9c517 diff --git a/back-to-the-future/flask_session/b807e74d42b1d517c52e3a34da1fc725 b/crypto-simmetric/back-to-the-future/flask_session/b807e74d42b1d517c52e3a34da1fc725 similarity index 100% rename from back-to-the-future/flask_session/b807e74d42b1d517c52e3a34da1fc725 rename to crypto-simmetric/back-to-the-future/flask_session/b807e74d42b1d517c52e3a34da1fc725 diff --git a/back-to-the-future/flask_session/b880a4c620be6a758aa72e4fac35b79b b/crypto-simmetric/back-to-the-future/flask_session/b880a4c620be6a758aa72e4fac35b79b similarity index 100% rename from back-to-the-future/flask_session/b880a4c620be6a758aa72e4fac35b79b rename to crypto-simmetric/back-to-the-future/flask_session/b880a4c620be6a758aa72e4fac35b79b diff --git a/back-to-the-future/flask_session/b90531b031af291fc09f3b47f35d1871 b/crypto-simmetric/back-to-the-future/flask_session/b90531b031af291fc09f3b47f35d1871 similarity index 100% rename from back-to-the-future/flask_session/b90531b031af291fc09f3b47f35d1871 rename to crypto-simmetric/back-to-the-future/flask_session/b90531b031af291fc09f3b47f35d1871 diff --git a/back-to-the-future/flask_session/b9400bb738c7fb91a7635749b053a137 b/crypto-simmetric/back-to-the-future/flask_session/b9400bb738c7fb91a7635749b053a137 similarity index 100% rename from back-to-the-future/flask_session/b9400bb738c7fb91a7635749b053a137 rename to crypto-simmetric/back-to-the-future/flask_session/b9400bb738c7fb91a7635749b053a137 diff --git a/back-to-the-future/flask_session/ba501d97a8ebd9381fa271b3ab0d7697 b/crypto-simmetric/back-to-the-future/flask_session/ba501d97a8ebd9381fa271b3ab0d7697 similarity index 100% rename from back-to-the-future/flask_session/ba501d97a8ebd9381fa271b3ab0d7697 rename to crypto-simmetric/back-to-the-future/flask_session/ba501d97a8ebd9381fa271b3ab0d7697 diff --git a/back-to-the-future/flask_session/bb5f6cf3892f52c07e415dc25f8f101b b/crypto-simmetric/back-to-the-future/flask_session/bb5f6cf3892f52c07e415dc25f8f101b similarity index 100% rename from back-to-the-future/flask_session/bb5f6cf3892f52c07e415dc25f8f101b rename to crypto-simmetric/back-to-the-future/flask_session/bb5f6cf3892f52c07e415dc25f8f101b diff --git a/back-to-the-future/flask_session/bb8d2676fc45b286c0960ab707864605 b/crypto-simmetric/back-to-the-future/flask_session/bb8d2676fc45b286c0960ab707864605 similarity index 100% rename from back-to-the-future/flask_session/bb8d2676fc45b286c0960ab707864605 rename to crypto-simmetric/back-to-the-future/flask_session/bb8d2676fc45b286c0960ab707864605 diff --git a/back-to-the-future/flask_session/bc7f8eea85fde0dab7441656a0720464 b/crypto-simmetric/back-to-the-future/flask_session/bc7f8eea85fde0dab7441656a0720464 similarity index 100% rename from back-to-the-future/flask_session/bc7f8eea85fde0dab7441656a0720464 rename to crypto-simmetric/back-to-the-future/flask_session/bc7f8eea85fde0dab7441656a0720464 diff --git a/back-to-the-future/flask_session/bd172c6f4b31759dec337e178368e06c b/crypto-simmetric/back-to-the-future/flask_session/bd172c6f4b31759dec337e178368e06c similarity index 100% rename from back-to-the-future/flask_session/bd172c6f4b31759dec337e178368e06c rename to crypto-simmetric/back-to-the-future/flask_session/bd172c6f4b31759dec337e178368e06c diff --git a/back-to-the-future/flask_session/bd3c4e53cec3fc00e19f9aa86d41cd67 b/crypto-simmetric/back-to-the-future/flask_session/bd3c4e53cec3fc00e19f9aa86d41cd67 similarity index 100% rename from back-to-the-future/flask_session/bd3c4e53cec3fc00e19f9aa86d41cd67 rename to crypto-simmetric/back-to-the-future/flask_session/bd3c4e53cec3fc00e19f9aa86d41cd67 diff --git a/back-to-the-future/flask_session/bf5fe566688bf3064500b3385ebbecc2 b/crypto-simmetric/back-to-the-future/flask_session/bf5fe566688bf3064500b3385ebbecc2 similarity index 100% rename from back-to-the-future/flask_session/bf5fe566688bf3064500b3385ebbecc2 rename to crypto-simmetric/back-to-the-future/flask_session/bf5fe566688bf3064500b3385ebbecc2 diff --git a/back-to-the-future/flask_session/c0cb3c32fbabf136c0e37c5c72fc0d72 b/crypto-simmetric/back-to-the-future/flask_session/c0cb3c32fbabf136c0e37c5c72fc0d72 similarity index 100% rename from back-to-the-future/flask_session/c0cb3c32fbabf136c0e37c5c72fc0d72 rename to crypto-simmetric/back-to-the-future/flask_session/c0cb3c32fbabf136c0e37c5c72fc0d72 diff --git a/back-to-the-future/flask_session/c1081ae4a28b263b856b460f1e3aad0b b/crypto-simmetric/back-to-the-future/flask_session/c1081ae4a28b263b856b460f1e3aad0b similarity index 100% rename from back-to-the-future/flask_session/c1081ae4a28b263b856b460f1e3aad0b rename to crypto-simmetric/back-to-the-future/flask_session/c1081ae4a28b263b856b460f1e3aad0b diff --git a/back-to-the-future/flask_session/c1414d247b0547ff543b9cc03c9b90d8 b/crypto-simmetric/back-to-the-future/flask_session/c1414d247b0547ff543b9cc03c9b90d8 similarity index 100% rename from back-to-the-future/flask_session/c1414d247b0547ff543b9cc03c9b90d8 rename to crypto-simmetric/back-to-the-future/flask_session/c1414d247b0547ff543b9cc03c9b90d8 diff --git a/back-to-the-future/flask_session/c310c4fd7a943a6b153fc77027b5f8b0 b/crypto-simmetric/back-to-the-future/flask_session/c310c4fd7a943a6b153fc77027b5f8b0 similarity index 100% rename from back-to-the-future/flask_session/c310c4fd7a943a6b153fc77027b5f8b0 rename to crypto-simmetric/back-to-the-future/flask_session/c310c4fd7a943a6b153fc77027b5f8b0 diff --git a/back-to-the-future/flask_session/c31e413c0847de4691012ef81e31acae b/crypto-simmetric/back-to-the-future/flask_session/c31e413c0847de4691012ef81e31acae similarity index 100% rename from back-to-the-future/flask_session/c31e413c0847de4691012ef81e31acae rename to crypto-simmetric/back-to-the-future/flask_session/c31e413c0847de4691012ef81e31acae diff --git a/back-to-the-future/flask_session/c321ceed93116c26ec88e3254fa3cd97 b/crypto-simmetric/back-to-the-future/flask_session/c321ceed93116c26ec88e3254fa3cd97 similarity index 100% rename from back-to-the-future/flask_session/c321ceed93116c26ec88e3254fa3cd97 rename to crypto-simmetric/back-to-the-future/flask_session/c321ceed93116c26ec88e3254fa3cd97 diff --git a/back-to-the-future/flask_session/c4e25dd28c5cd961ccea2bd778bffd4e b/crypto-simmetric/back-to-the-future/flask_session/c4e25dd28c5cd961ccea2bd778bffd4e similarity index 100% rename from back-to-the-future/flask_session/c4e25dd28c5cd961ccea2bd778bffd4e rename to crypto-simmetric/back-to-the-future/flask_session/c4e25dd28c5cd961ccea2bd778bffd4e diff --git a/back-to-the-future/flask_session/c629ee7f10f944228ad6f78ae03738ea b/crypto-simmetric/back-to-the-future/flask_session/c629ee7f10f944228ad6f78ae03738ea similarity index 100% rename from back-to-the-future/flask_session/c629ee7f10f944228ad6f78ae03738ea rename to crypto-simmetric/back-to-the-future/flask_session/c629ee7f10f944228ad6f78ae03738ea diff --git a/back-to-the-future/flask_session/c6506c668b96a1eb79cde01880bc8425 b/crypto-simmetric/back-to-the-future/flask_session/c6506c668b96a1eb79cde01880bc8425 similarity index 100% rename from back-to-the-future/flask_session/c6506c668b96a1eb79cde01880bc8425 rename to crypto-simmetric/back-to-the-future/flask_session/c6506c668b96a1eb79cde01880bc8425 diff --git a/back-to-the-future/flask_session/c6997ce4a7d458b00b06210ae7446850 b/crypto-simmetric/back-to-the-future/flask_session/c6997ce4a7d458b00b06210ae7446850 similarity index 100% rename from back-to-the-future/flask_session/c6997ce4a7d458b00b06210ae7446850 rename to crypto-simmetric/back-to-the-future/flask_session/c6997ce4a7d458b00b06210ae7446850 diff --git a/back-to-the-future/flask_session/c7f207647209e38730bbe64c9249abe5 b/crypto-simmetric/back-to-the-future/flask_session/c7f207647209e38730bbe64c9249abe5 similarity index 100% rename from back-to-the-future/flask_session/c7f207647209e38730bbe64c9249abe5 rename to crypto-simmetric/back-to-the-future/flask_session/c7f207647209e38730bbe64c9249abe5 diff --git a/back-to-the-future/flask_session/c88c19634f04d1be57cf5b79d52202c7 b/crypto-simmetric/back-to-the-future/flask_session/c88c19634f04d1be57cf5b79d52202c7 similarity index 100% rename from back-to-the-future/flask_session/c88c19634f04d1be57cf5b79d52202c7 rename to crypto-simmetric/back-to-the-future/flask_session/c88c19634f04d1be57cf5b79d52202c7 diff --git a/back-to-the-future/flask_session/c95a6b7b5656c9a6b3194a242f8231a7 b/crypto-simmetric/back-to-the-future/flask_session/c95a6b7b5656c9a6b3194a242f8231a7 similarity index 100% rename from back-to-the-future/flask_session/c95a6b7b5656c9a6b3194a242f8231a7 rename to crypto-simmetric/back-to-the-future/flask_session/c95a6b7b5656c9a6b3194a242f8231a7 diff --git a/back-to-the-future/flask_session/c9a0e34374ced611ddc8dbb936fd2c2b b/crypto-simmetric/back-to-the-future/flask_session/c9a0e34374ced611ddc8dbb936fd2c2b similarity index 100% rename from back-to-the-future/flask_session/c9a0e34374ced611ddc8dbb936fd2c2b rename to crypto-simmetric/back-to-the-future/flask_session/c9a0e34374ced611ddc8dbb936fd2c2b diff --git a/back-to-the-future/flask_session/ca8e5e6d4bad4979a94c477c5b411acd b/crypto-simmetric/back-to-the-future/flask_session/ca8e5e6d4bad4979a94c477c5b411acd similarity index 100% rename from back-to-the-future/flask_session/ca8e5e6d4bad4979a94c477c5b411acd rename to crypto-simmetric/back-to-the-future/flask_session/ca8e5e6d4bad4979a94c477c5b411acd diff --git a/back-to-the-future/flask_session/caa93220695c6291992e702873ef8c6b b/crypto-simmetric/back-to-the-future/flask_session/caa93220695c6291992e702873ef8c6b similarity index 100% rename from back-to-the-future/flask_session/caa93220695c6291992e702873ef8c6b rename to crypto-simmetric/back-to-the-future/flask_session/caa93220695c6291992e702873ef8c6b diff --git a/back-to-the-future/flask_session/cafdd19d230fec60d9022e9e9eb67ff2 b/crypto-simmetric/back-to-the-future/flask_session/cafdd19d230fec60d9022e9e9eb67ff2 similarity index 100% rename from back-to-the-future/flask_session/cafdd19d230fec60d9022e9e9eb67ff2 rename to crypto-simmetric/back-to-the-future/flask_session/cafdd19d230fec60d9022e9e9eb67ff2 diff --git a/back-to-the-future/flask_session/cb03c2a66a4bf7139c9205ce5b0feb5a b/crypto-simmetric/back-to-the-future/flask_session/cb03c2a66a4bf7139c9205ce5b0feb5a similarity index 100% rename from back-to-the-future/flask_session/cb03c2a66a4bf7139c9205ce5b0feb5a rename to crypto-simmetric/back-to-the-future/flask_session/cb03c2a66a4bf7139c9205ce5b0feb5a diff --git a/back-to-the-future/flask_session/cb5460332e84b66b455014c9b77bb6bc b/crypto-simmetric/back-to-the-future/flask_session/cb5460332e84b66b455014c9b77bb6bc similarity index 100% rename from back-to-the-future/flask_session/cb5460332e84b66b455014c9b77bb6bc rename to crypto-simmetric/back-to-the-future/flask_session/cb5460332e84b66b455014c9b77bb6bc diff --git a/back-to-the-future/flask_session/cd07e684036026dc7d067803bde21393 b/crypto-simmetric/back-to-the-future/flask_session/cd07e684036026dc7d067803bde21393 similarity index 100% rename from back-to-the-future/flask_session/cd07e684036026dc7d067803bde21393 rename to crypto-simmetric/back-to-the-future/flask_session/cd07e684036026dc7d067803bde21393 diff --git a/back-to-the-future/flask_session/cd6b9d32946111528aaa6fefcba32cc4 b/crypto-simmetric/back-to-the-future/flask_session/cd6b9d32946111528aaa6fefcba32cc4 similarity index 100% rename from back-to-the-future/flask_session/cd6b9d32946111528aaa6fefcba32cc4 rename to crypto-simmetric/back-to-the-future/flask_session/cd6b9d32946111528aaa6fefcba32cc4 diff --git a/back-to-the-future/flask_session/cd83f976398476e1f6633a24c82cca00 b/crypto-simmetric/back-to-the-future/flask_session/cd83f976398476e1f6633a24c82cca00 similarity index 100% rename from back-to-the-future/flask_session/cd83f976398476e1f6633a24c82cca00 rename to crypto-simmetric/back-to-the-future/flask_session/cd83f976398476e1f6633a24c82cca00 diff --git a/back-to-the-future/flask_session/ceaa00c54604860ca376a77131786d85 b/crypto-simmetric/back-to-the-future/flask_session/ceaa00c54604860ca376a77131786d85 similarity index 100% rename from back-to-the-future/flask_session/ceaa00c54604860ca376a77131786d85 rename to crypto-simmetric/back-to-the-future/flask_session/ceaa00c54604860ca376a77131786d85 diff --git a/back-to-the-future/flask_session/cf835731cebab59413319af12a738e94 b/crypto-simmetric/back-to-the-future/flask_session/cf835731cebab59413319af12a738e94 similarity index 100% rename from back-to-the-future/flask_session/cf835731cebab59413319af12a738e94 rename to crypto-simmetric/back-to-the-future/flask_session/cf835731cebab59413319af12a738e94 diff --git a/back-to-the-future/flask_session/cfa68eb972fa756c8697a8fcbcfcbbea b/crypto-simmetric/back-to-the-future/flask_session/cfa68eb972fa756c8697a8fcbcfcbbea similarity index 100% rename from back-to-the-future/flask_session/cfa68eb972fa756c8697a8fcbcfcbbea rename to crypto-simmetric/back-to-the-future/flask_session/cfa68eb972fa756c8697a8fcbcfcbbea diff --git a/back-to-the-future/flask_session/d0cad7b45a22150d0a5a8512bb72164b b/crypto-simmetric/back-to-the-future/flask_session/d0cad7b45a22150d0a5a8512bb72164b similarity index 100% rename from back-to-the-future/flask_session/d0cad7b45a22150d0a5a8512bb72164b rename to crypto-simmetric/back-to-the-future/flask_session/d0cad7b45a22150d0a5a8512bb72164b diff --git a/back-to-the-future/flask_session/d0d6526dc3928c1608dafa53c1fe9c9e b/crypto-simmetric/back-to-the-future/flask_session/d0d6526dc3928c1608dafa53c1fe9c9e similarity index 100% rename from back-to-the-future/flask_session/d0d6526dc3928c1608dafa53c1fe9c9e rename to crypto-simmetric/back-to-the-future/flask_session/d0d6526dc3928c1608dafa53c1fe9c9e diff --git a/back-to-the-future/flask_session/d0f85bd43b91c8a4ed49ef3267c4fa4c b/crypto-simmetric/back-to-the-future/flask_session/d0f85bd43b91c8a4ed49ef3267c4fa4c similarity index 100% rename from back-to-the-future/flask_session/d0f85bd43b91c8a4ed49ef3267c4fa4c rename to crypto-simmetric/back-to-the-future/flask_session/d0f85bd43b91c8a4ed49ef3267c4fa4c diff --git a/back-to-the-future/flask_session/d0fc857d940dbf06c737897ad95c2815 b/crypto-simmetric/back-to-the-future/flask_session/d0fc857d940dbf06c737897ad95c2815 similarity index 100% rename from back-to-the-future/flask_session/d0fc857d940dbf06c737897ad95c2815 rename to crypto-simmetric/back-to-the-future/flask_session/d0fc857d940dbf06c737897ad95c2815 diff --git a/back-to-the-future/flask_session/d11382c4f410be6ea22b86a0420f0379 b/crypto-simmetric/back-to-the-future/flask_session/d11382c4f410be6ea22b86a0420f0379 similarity index 100% rename from back-to-the-future/flask_session/d11382c4f410be6ea22b86a0420f0379 rename to crypto-simmetric/back-to-the-future/flask_session/d11382c4f410be6ea22b86a0420f0379 diff --git a/back-to-the-future/flask_session/d1b129979af646f1903f93fda426262a b/crypto-simmetric/back-to-the-future/flask_session/d1b129979af646f1903f93fda426262a similarity index 100% rename from back-to-the-future/flask_session/d1b129979af646f1903f93fda426262a rename to crypto-simmetric/back-to-the-future/flask_session/d1b129979af646f1903f93fda426262a diff --git a/back-to-the-future/flask_session/d1d0d1e353b091e55d437fbba7768c0b b/crypto-simmetric/back-to-the-future/flask_session/d1d0d1e353b091e55d437fbba7768c0b similarity index 100% rename from back-to-the-future/flask_session/d1d0d1e353b091e55d437fbba7768c0b rename to crypto-simmetric/back-to-the-future/flask_session/d1d0d1e353b091e55d437fbba7768c0b diff --git a/back-to-the-future/flask_session/d1f6a6b3ff606b79ed83489af16c752c b/crypto-simmetric/back-to-the-future/flask_session/d1f6a6b3ff606b79ed83489af16c752c similarity index 100% rename from back-to-the-future/flask_session/d1f6a6b3ff606b79ed83489af16c752c rename to crypto-simmetric/back-to-the-future/flask_session/d1f6a6b3ff606b79ed83489af16c752c diff --git a/back-to-the-future/flask_session/d2d35bf9c724a0feec1b446af094e02a b/crypto-simmetric/back-to-the-future/flask_session/d2d35bf9c724a0feec1b446af094e02a similarity index 100% rename from back-to-the-future/flask_session/d2d35bf9c724a0feec1b446af094e02a rename to crypto-simmetric/back-to-the-future/flask_session/d2d35bf9c724a0feec1b446af094e02a diff --git a/back-to-the-future/flask_session/d31b32fe78e9e7408d3b1f165ee3a823 b/crypto-simmetric/back-to-the-future/flask_session/d31b32fe78e9e7408d3b1f165ee3a823 similarity index 100% rename from back-to-the-future/flask_session/d31b32fe78e9e7408d3b1f165ee3a823 rename to crypto-simmetric/back-to-the-future/flask_session/d31b32fe78e9e7408d3b1f165ee3a823 diff --git a/back-to-the-future/flask_session/d3bc3c2a65cba96928e1ffa8889a3bf9 b/crypto-simmetric/back-to-the-future/flask_session/d3bc3c2a65cba96928e1ffa8889a3bf9 similarity index 100% rename from back-to-the-future/flask_session/d3bc3c2a65cba96928e1ffa8889a3bf9 rename to crypto-simmetric/back-to-the-future/flask_session/d3bc3c2a65cba96928e1ffa8889a3bf9 diff --git a/back-to-the-future/flask_session/d5998a88757db1c51a28bf64c368ad99 b/crypto-simmetric/back-to-the-future/flask_session/d5998a88757db1c51a28bf64c368ad99 similarity index 100% rename from back-to-the-future/flask_session/d5998a88757db1c51a28bf64c368ad99 rename to crypto-simmetric/back-to-the-future/flask_session/d5998a88757db1c51a28bf64c368ad99 diff --git a/back-to-the-future/flask_session/d700947294c64219224e5510b68fce24 b/crypto-simmetric/back-to-the-future/flask_session/d700947294c64219224e5510b68fce24 similarity index 100% rename from back-to-the-future/flask_session/d700947294c64219224e5510b68fce24 rename to crypto-simmetric/back-to-the-future/flask_session/d700947294c64219224e5510b68fce24 diff --git a/back-to-the-future/flask_session/d86641dc0fc1950fc5192156bcdd294d b/crypto-simmetric/back-to-the-future/flask_session/d86641dc0fc1950fc5192156bcdd294d similarity index 100% rename from back-to-the-future/flask_session/d86641dc0fc1950fc5192156bcdd294d rename to crypto-simmetric/back-to-the-future/flask_session/d86641dc0fc1950fc5192156bcdd294d diff --git a/back-to-the-future/flask_session/da1192e27218f04c4df981b45eba12f0 b/crypto-simmetric/back-to-the-future/flask_session/da1192e27218f04c4df981b45eba12f0 similarity index 100% rename from back-to-the-future/flask_session/da1192e27218f04c4df981b45eba12f0 rename to crypto-simmetric/back-to-the-future/flask_session/da1192e27218f04c4df981b45eba12f0 diff --git a/back-to-the-future/flask_session/da5ffd2e4afdd8b1586525f65b5382f6 b/crypto-simmetric/back-to-the-future/flask_session/da5ffd2e4afdd8b1586525f65b5382f6 similarity index 100% rename from back-to-the-future/flask_session/da5ffd2e4afdd8b1586525f65b5382f6 rename to crypto-simmetric/back-to-the-future/flask_session/da5ffd2e4afdd8b1586525f65b5382f6 diff --git a/back-to-the-future/flask_session/da6d3b5ed9ccd8a18515221c7c29f2e1 b/crypto-simmetric/back-to-the-future/flask_session/da6d3b5ed9ccd8a18515221c7c29f2e1 similarity index 100% rename from back-to-the-future/flask_session/da6d3b5ed9ccd8a18515221c7c29f2e1 rename to crypto-simmetric/back-to-the-future/flask_session/da6d3b5ed9ccd8a18515221c7c29f2e1 diff --git a/back-to-the-future/flask_session/daeb7defe566351156bec27a5627566a b/crypto-simmetric/back-to-the-future/flask_session/daeb7defe566351156bec27a5627566a similarity index 100% rename from back-to-the-future/flask_session/daeb7defe566351156bec27a5627566a rename to crypto-simmetric/back-to-the-future/flask_session/daeb7defe566351156bec27a5627566a diff --git a/back-to-the-future/flask_session/db5c89e54de75a14db842a65aa1a87b2 b/crypto-simmetric/back-to-the-future/flask_session/db5c89e54de75a14db842a65aa1a87b2 similarity index 100% rename from back-to-the-future/flask_session/db5c89e54de75a14db842a65aa1a87b2 rename to crypto-simmetric/back-to-the-future/flask_session/db5c89e54de75a14db842a65aa1a87b2 diff --git a/back-to-the-future/flask_session/db7303e646ac2d62cb8bbcaf68cca828 b/crypto-simmetric/back-to-the-future/flask_session/db7303e646ac2d62cb8bbcaf68cca828 similarity index 100% rename from back-to-the-future/flask_session/db7303e646ac2d62cb8bbcaf68cca828 rename to crypto-simmetric/back-to-the-future/flask_session/db7303e646ac2d62cb8bbcaf68cca828 diff --git a/back-to-the-future/flask_session/db8deb947463b3320b1399cb9f87bfba b/crypto-simmetric/back-to-the-future/flask_session/db8deb947463b3320b1399cb9f87bfba similarity index 100% rename from back-to-the-future/flask_session/db8deb947463b3320b1399cb9f87bfba rename to crypto-simmetric/back-to-the-future/flask_session/db8deb947463b3320b1399cb9f87bfba diff --git a/back-to-the-future/flask_session/dc1dff4e65c17747a9f2043231a5b984 b/crypto-simmetric/back-to-the-future/flask_session/dc1dff4e65c17747a9f2043231a5b984 similarity index 100% rename from back-to-the-future/flask_session/dc1dff4e65c17747a9f2043231a5b984 rename to crypto-simmetric/back-to-the-future/flask_session/dc1dff4e65c17747a9f2043231a5b984 diff --git a/back-to-the-future/flask_session/dc296930884123b35a5c53bbcb1ad8fc b/crypto-simmetric/back-to-the-future/flask_session/dc296930884123b35a5c53bbcb1ad8fc similarity index 100% rename from back-to-the-future/flask_session/dc296930884123b35a5c53bbcb1ad8fc rename to crypto-simmetric/back-to-the-future/flask_session/dc296930884123b35a5c53bbcb1ad8fc diff --git a/back-to-the-future/flask_session/df0430679640015518d904b92776f724 b/crypto-simmetric/back-to-the-future/flask_session/df0430679640015518d904b92776f724 similarity index 100% rename from back-to-the-future/flask_session/df0430679640015518d904b92776f724 rename to crypto-simmetric/back-to-the-future/flask_session/df0430679640015518d904b92776f724 diff --git a/back-to-the-future/flask_session/df11adc24639177bb9c0839d84daa593 b/crypto-simmetric/back-to-the-future/flask_session/df11adc24639177bb9c0839d84daa593 similarity index 100% rename from back-to-the-future/flask_session/df11adc24639177bb9c0839d84daa593 rename to crypto-simmetric/back-to-the-future/flask_session/df11adc24639177bb9c0839d84daa593 diff --git a/back-to-the-future/flask_session/df924cf66e321a1348121a1cabcd29b5 b/crypto-simmetric/back-to-the-future/flask_session/df924cf66e321a1348121a1cabcd29b5 similarity index 100% rename from back-to-the-future/flask_session/df924cf66e321a1348121a1cabcd29b5 rename to crypto-simmetric/back-to-the-future/flask_session/df924cf66e321a1348121a1cabcd29b5 diff --git a/back-to-the-future/flask_session/dfc2c46d59be654a2e332461cf11447e b/crypto-simmetric/back-to-the-future/flask_session/dfc2c46d59be654a2e332461cf11447e similarity index 100% rename from back-to-the-future/flask_session/dfc2c46d59be654a2e332461cf11447e rename to crypto-simmetric/back-to-the-future/flask_session/dfc2c46d59be654a2e332461cf11447e diff --git a/back-to-the-future/flask_session/e256a6fc2997892bd945dfa65d6e3d4a b/crypto-simmetric/back-to-the-future/flask_session/e256a6fc2997892bd945dfa65d6e3d4a similarity index 100% rename from back-to-the-future/flask_session/e256a6fc2997892bd945dfa65d6e3d4a rename to crypto-simmetric/back-to-the-future/flask_session/e256a6fc2997892bd945dfa65d6e3d4a diff --git a/back-to-the-future/flask_session/e2b5a66739332a746d43f465ae9889ef b/crypto-simmetric/back-to-the-future/flask_session/e2b5a66739332a746d43f465ae9889ef similarity index 100% rename from back-to-the-future/flask_session/e2b5a66739332a746d43f465ae9889ef rename to crypto-simmetric/back-to-the-future/flask_session/e2b5a66739332a746d43f465ae9889ef diff --git a/back-to-the-future/flask_session/e30690e9f3419164d1ca1ed795944854 b/crypto-simmetric/back-to-the-future/flask_session/e30690e9f3419164d1ca1ed795944854 similarity index 100% rename from back-to-the-future/flask_session/e30690e9f3419164d1ca1ed795944854 rename to crypto-simmetric/back-to-the-future/flask_session/e30690e9f3419164d1ca1ed795944854 diff --git a/back-to-the-future/flask_session/e3b35579ddaa8fdca3bfdd7589f77f88 b/crypto-simmetric/back-to-the-future/flask_session/e3b35579ddaa8fdca3bfdd7589f77f88 similarity index 100% rename from back-to-the-future/flask_session/e3b35579ddaa8fdca3bfdd7589f77f88 rename to crypto-simmetric/back-to-the-future/flask_session/e3b35579ddaa8fdca3bfdd7589f77f88 diff --git a/back-to-the-future/flask_session/e45611843e2ddaf7d897be760a2455c7 b/crypto-simmetric/back-to-the-future/flask_session/e45611843e2ddaf7d897be760a2455c7 similarity index 100% rename from back-to-the-future/flask_session/e45611843e2ddaf7d897be760a2455c7 rename to crypto-simmetric/back-to-the-future/flask_session/e45611843e2ddaf7d897be760a2455c7 diff --git a/back-to-the-future/flask_session/e4cdb37fc6127fd3b2aa01d53d00f688 b/crypto-simmetric/back-to-the-future/flask_session/e4cdb37fc6127fd3b2aa01d53d00f688 similarity index 100% rename from back-to-the-future/flask_session/e4cdb37fc6127fd3b2aa01d53d00f688 rename to crypto-simmetric/back-to-the-future/flask_session/e4cdb37fc6127fd3b2aa01d53d00f688 diff --git a/back-to-the-future/flask_session/e58c12d06f9064b0c53e828208001d5a b/crypto-simmetric/back-to-the-future/flask_session/e58c12d06f9064b0c53e828208001d5a similarity index 100% rename from back-to-the-future/flask_session/e58c12d06f9064b0c53e828208001d5a rename to crypto-simmetric/back-to-the-future/flask_session/e58c12d06f9064b0c53e828208001d5a diff --git a/back-to-the-future/flask_session/e5a6944a3ff0ebf60b4670fe40a7f593 b/crypto-simmetric/back-to-the-future/flask_session/e5a6944a3ff0ebf60b4670fe40a7f593 similarity index 100% rename from back-to-the-future/flask_session/e5a6944a3ff0ebf60b4670fe40a7f593 rename to crypto-simmetric/back-to-the-future/flask_session/e5a6944a3ff0ebf60b4670fe40a7f593 diff --git a/back-to-the-future/flask_session/e74297c0a86ae1c128618618a8b50bc0 b/crypto-simmetric/back-to-the-future/flask_session/e74297c0a86ae1c128618618a8b50bc0 similarity index 100% rename from back-to-the-future/flask_session/e74297c0a86ae1c128618618a8b50bc0 rename to crypto-simmetric/back-to-the-future/flask_session/e74297c0a86ae1c128618618a8b50bc0 diff --git a/back-to-the-future/flask_session/e778dec5a8adbd18365d124ff668e7f1 b/crypto-simmetric/back-to-the-future/flask_session/e778dec5a8adbd18365d124ff668e7f1 similarity index 100% rename from back-to-the-future/flask_session/e778dec5a8adbd18365d124ff668e7f1 rename to crypto-simmetric/back-to-the-future/flask_session/e778dec5a8adbd18365d124ff668e7f1 diff --git a/back-to-the-future/flask_session/e88189732217df5915a5b1c3a8fb8379 b/crypto-simmetric/back-to-the-future/flask_session/e88189732217df5915a5b1c3a8fb8379 similarity index 100% rename from back-to-the-future/flask_session/e88189732217df5915a5b1c3a8fb8379 rename to crypto-simmetric/back-to-the-future/flask_session/e88189732217df5915a5b1c3a8fb8379 diff --git a/back-to-the-future/flask_session/e8e138b0058292a5a274d344df3d1195 b/crypto-simmetric/back-to-the-future/flask_session/e8e138b0058292a5a274d344df3d1195 similarity index 100% rename from back-to-the-future/flask_session/e8e138b0058292a5a274d344df3d1195 rename to crypto-simmetric/back-to-the-future/flask_session/e8e138b0058292a5a274d344df3d1195 diff --git a/back-to-the-future/flask_session/e923b6aa9df3b01e5182b1a003bf35ec b/crypto-simmetric/back-to-the-future/flask_session/e923b6aa9df3b01e5182b1a003bf35ec similarity index 100% rename from back-to-the-future/flask_session/e923b6aa9df3b01e5182b1a003bf35ec rename to crypto-simmetric/back-to-the-future/flask_session/e923b6aa9df3b01e5182b1a003bf35ec diff --git a/back-to-the-future/flask_session/e974e3a27a6325862014cc322254eae9 b/crypto-simmetric/back-to-the-future/flask_session/e974e3a27a6325862014cc322254eae9 similarity index 100% rename from back-to-the-future/flask_session/e974e3a27a6325862014cc322254eae9 rename to crypto-simmetric/back-to-the-future/flask_session/e974e3a27a6325862014cc322254eae9 diff --git a/back-to-the-future/flask_session/e9fa9601ed3049fc587f4fe7a79b714d b/crypto-simmetric/back-to-the-future/flask_session/e9fa9601ed3049fc587f4fe7a79b714d similarity index 100% rename from back-to-the-future/flask_session/e9fa9601ed3049fc587f4fe7a79b714d rename to crypto-simmetric/back-to-the-future/flask_session/e9fa9601ed3049fc587f4fe7a79b714d diff --git a/back-to-the-future/flask_session/ea4feb9cbd4982377f8952f693c508d7 b/crypto-simmetric/back-to-the-future/flask_session/ea4feb9cbd4982377f8952f693c508d7 similarity index 100% rename from back-to-the-future/flask_session/ea4feb9cbd4982377f8952f693c508d7 rename to crypto-simmetric/back-to-the-future/flask_session/ea4feb9cbd4982377f8952f693c508d7 diff --git a/back-to-the-future/flask_session/eb719038ef362e4fde8b7b3224d75098 b/crypto-simmetric/back-to-the-future/flask_session/eb719038ef362e4fde8b7b3224d75098 similarity index 100% rename from back-to-the-future/flask_session/eb719038ef362e4fde8b7b3224d75098 rename to crypto-simmetric/back-to-the-future/flask_session/eb719038ef362e4fde8b7b3224d75098 diff --git a/back-to-the-future/flask_session/ee19c744649264c1537173fba3a11df4 b/crypto-simmetric/back-to-the-future/flask_session/ee19c744649264c1537173fba3a11df4 similarity index 100% rename from back-to-the-future/flask_session/ee19c744649264c1537173fba3a11df4 rename to crypto-simmetric/back-to-the-future/flask_session/ee19c744649264c1537173fba3a11df4 diff --git a/back-to-the-future/flask_session/ee87118eb53b5c941f2134ee0cd61508 b/crypto-simmetric/back-to-the-future/flask_session/ee87118eb53b5c941f2134ee0cd61508 similarity index 100% rename from back-to-the-future/flask_session/ee87118eb53b5c941f2134ee0cd61508 rename to crypto-simmetric/back-to-the-future/flask_session/ee87118eb53b5c941f2134ee0cd61508 diff --git a/back-to-the-future/flask_session/ef064997d68d665a6ef04443d43eaae3 b/crypto-simmetric/back-to-the-future/flask_session/ef064997d68d665a6ef04443d43eaae3 similarity index 100% rename from back-to-the-future/flask_session/ef064997d68d665a6ef04443d43eaae3 rename to crypto-simmetric/back-to-the-future/flask_session/ef064997d68d665a6ef04443d43eaae3 diff --git a/back-to-the-future/flask_session/efd4c0fb34e78ea7cd825af8f89b0fbc b/crypto-simmetric/back-to-the-future/flask_session/efd4c0fb34e78ea7cd825af8f89b0fbc similarity index 100% rename from back-to-the-future/flask_session/efd4c0fb34e78ea7cd825af8f89b0fbc rename to crypto-simmetric/back-to-the-future/flask_session/efd4c0fb34e78ea7cd825af8f89b0fbc diff --git a/back-to-the-future/flask_session/f0dd61f72859cdbe4e4f9a417e659817 b/crypto-simmetric/back-to-the-future/flask_session/f0dd61f72859cdbe4e4f9a417e659817 similarity index 100% rename from back-to-the-future/flask_session/f0dd61f72859cdbe4e4f9a417e659817 rename to crypto-simmetric/back-to-the-future/flask_session/f0dd61f72859cdbe4e4f9a417e659817 diff --git a/back-to-the-future/flask_session/f33166d7a9275a433902c984d9ae6b4a b/crypto-simmetric/back-to-the-future/flask_session/f33166d7a9275a433902c984d9ae6b4a similarity index 100% rename from back-to-the-future/flask_session/f33166d7a9275a433902c984d9ae6b4a rename to crypto-simmetric/back-to-the-future/flask_session/f33166d7a9275a433902c984d9ae6b4a diff --git a/back-to-the-future/flask_session/f435dcda99208cbdac00b580b6e40b93 b/crypto-simmetric/back-to-the-future/flask_session/f435dcda99208cbdac00b580b6e40b93 similarity index 100% rename from back-to-the-future/flask_session/f435dcda99208cbdac00b580b6e40b93 rename to crypto-simmetric/back-to-the-future/flask_session/f435dcda99208cbdac00b580b6e40b93 diff --git a/back-to-the-future/flask_session/f4745a9cf85051fd561cb8325c5e4314 b/crypto-simmetric/back-to-the-future/flask_session/f4745a9cf85051fd561cb8325c5e4314 similarity index 100% rename from back-to-the-future/flask_session/f4745a9cf85051fd561cb8325c5e4314 rename to crypto-simmetric/back-to-the-future/flask_session/f4745a9cf85051fd561cb8325c5e4314 diff --git a/back-to-the-future/flask_session/f49747bd1cb88b14c946e5a167412850 b/crypto-simmetric/back-to-the-future/flask_session/f49747bd1cb88b14c946e5a167412850 similarity index 100% rename from back-to-the-future/flask_session/f49747bd1cb88b14c946e5a167412850 rename to crypto-simmetric/back-to-the-future/flask_session/f49747bd1cb88b14c946e5a167412850 diff --git a/back-to-the-future/flask_session/f63cf29bae980013270fbf4f1f9ec772 b/crypto-simmetric/back-to-the-future/flask_session/f63cf29bae980013270fbf4f1f9ec772 similarity index 100% rename from back-to-the-future/flask_session/f63cf29bae980013270fbf4f1f9ec772 rename to crypto-simmetric/back-to-the-future/flask_session/f63cf29bae980013270fbf4f1f9ec772 diff --git a/back-to-the-future/flask_session/f700cc8bd7d384a318b16419cc59820b b/crypto-simmetric/back-to-the-future/flask_session/f700cc8bd7d384a318b16419cc59820b similarity index 100% rename from back-to-the-future/flask_session/f700cc8bd7d384a318b16419cc59820b rename to crypto-simmetric/back-to-the-future/flask_session/f700cc8bd7d384a318b16419cc59820b diff --git a/back-to-the-future/flask_session/f7dd1d01df355bed4bd0c3199557e610 b/crypto-simmetric/back-to-the-future/flask_session/f7dd1d01df355bed4bd0c3199557e610 similarity index 100% rename from back-to-the-future/flask_session/f7dd1d01df355bed4bd0c3199557e610 rename to crypto-simmetric/back-to-the-future/flask_session/f7dd1d01df355bed4bd0c3199557e610 diff --git a/back-to-the-future/flask_session/f84876bdeaa1e73ba1863dae6aac850e b/crypto-simmetric/back-to-the-future/flask_session/f84876bdeaa1e73ba1863dae6aac850e similarity index 100% rename from back-to-the-future/flask_session/f84876bdeaa1e73ba1863dae6aac850e rename to crypto-simmetric/back-to-the-future/flask_session/f84876bdeaa1e73ba1863dae6aac850e diff --git a/back-to-the-future/flask_session/f9385592b78b595cd41625cc39ab1c27 b/crypto-simmetric/back-to-the-future/flask_session/f9385592b78b595cd41625cc39ab1c27 similarity index 100% rename from back-to-the-future/flask_session/f9385592b78b595cd41625cc39ab1c27 rename to crypto-simmetric/back-to-the-future/flask_session/f9385592b78b595cd41625cc39ab1c27 diff --git a/back-to-the-future/flask_session/f9a8c0ad84ed84cfeecd4ace493df951 b/crypto-simmetric/back-to-the-future/flask_session/f9a8c0ad84ed84cfeecd4ace493df951 similarity index 100% rename from back-to-the-future/flask_session/f9a8c0ad84ed84cfeecd4ace493df951 rename to crypto-simmetric/back-to-the-future/flask_session/f9a8c0ad84ed84cfeecd4ace493df951 diff --git a/back-to-the-future/flask_session/f9b86358cb779b1dd907dfa8f1849b55 b/crypto-simmetric/back-to-the-future/flask_session/f9b86358cb779b1dd907dfa8f1849b55 similarity index 100% rename from back-to-the-future/flask_session/f9b86358cb779b1dd907dfa8f1849b55 rename to crypto-simmetric/back-to-the-future/flask_session/f9b86358cb779b1dd907dfa8f1849b55 diff --git a/back-to-the-future/flask_session/fa1ff5df9646c63b4c384ad7647eca9b b/crypto-simmetric/back-to-the-future/flask_session/fa1ff5df9646c63b4c384ad7647eca9b similarity index 100% rename from back-to-the-future/flask_session/fa1ff5df9646c63b4c384ad7647eca9b rename to crypto-simmetric/back-to-the-future/flask_session/fa1ff5df9646c63b4c384ad7647eca9b diff --git a/back-to-the-future/flask_session/fc6babfe600fb622a3bb209a8fc10e30 b/crypto-simmetric/back-to-the-future/flask_session/fc6babfe600fb622a3bb209a8fc10e30 similarity index 100% rename from back-to-the-future/flask_session/fc6babfe600fb622a3bb209a8fc10e30 rename to crypto-simmetric/back-to-the-future/flask_session/fc6babfe600fb622a3bb209a8fc10e30 diff --git a/decrypt-the-flag/3 b/crypto-simmetric/decrypt-the-flag/3 similarity index 100% rename from decrypt-the-flag/3 rename to crypto-simmetric/decrypt-the-flag/3 diff --git a/decrypt-the-flag/attack.py b/crypto-simmetric/decrypt-the-flag/attack.py similarity index 100% rename from decrypt-the-flag/attack.py rename to crypto-simmetric/decrypt-the-flag/attack.py diff --git a/decrypt-the-flag/chall.py b/crypto-simmetric/decrypt-the-flag/chall.py similarity index 100% rename from decrypt-the-flag/chall.py rename to crypto-simmetric/decrypt-the-flag/chall.py diff --git a/crypto-simmetric/decrypt_it_if_you_are_fast_enough/attack.py b/crypto-simmetric/decrypt_it_if_you_are_fast_enough/attack.py new file mode 100644 index 0000000..4a1f657 --- /dev/null +++ b/crypto-simmetric/decrypt_it_if_you_are_fast_enough/attack.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python3 +import os +import random +from time import time +from pwn import * + +HOST = "130.192.5.212" +PORT = "6562" +server = remote(HOST, PORT) +example_flag = "5377d37d23d8b447c3ad04300eaf24d033fceb109ebf764876103b150ff7693f16d220d1a56b2043f503c2fd5ebd" +lenFlag = len(bytes.fromhex(example_flag)) +sleepT = 0.1 +print(server.recv(1024)) +sleep(sleepT) +server.send(b'y\n') +sleep(sleepT) +print(server.recv(1024)) +sleep(sleepT) +payload = b'A'*lenFlag +server.send(payload) +server.send(b'\n') + +seed = int(time.time()) +payload_enc = server.recv(1024) +server.send(b'f\n') +flag_enc = server.recv(1024) +print(f"Payload:{payload_enc.split(b'\n')[0]} flagEnc:{flag_enc.split(b'\n')[0]}") +payload_enc = bytes.fromhex(payload_enc.split(b'\n')[0].decode()) +flag_enc = bytes.fromhex(flag_enc.split(b'\n')[0].decode()) + +ks = [ p ^ pe for p,pe in zip(payload,payload_enc)] +flag = [ f ^ k for f,k in zip(flag_enc,ks)] +print(bytes(flag)) +# The script sometimes fail if it goes to fast, just rerun it diff --git a/crypto-simmetric/decrypt_it_if_you_are_fast_enough/chall.py b/crypto-simmetric/decrypt_it_if_you_are_fast_enough/chall.py new file mode 100644 index 0000000..d32978f --- /dev/null +++ b/crypto-simmetric/decrypt_it_if_you_are_fast_enough/chall.py @@ -0,0 +1,31 @@ +import os +import random +from time import time +from Crypto.Cipher import ChaCha20 +from Crypto.Util.number import long_to_bytes +from secret import flag + +key = os.urandom(32) + + +def encrypt(msg): + random.seed(int(time())) + cipher = ChaCha20.new( + key=key, nonce=long_to_bytes(random.getrandbits(12*8))) + return cipher.encrypt(msg.encode()) + + +def main(): + + confirm = input("Want to encrypt? (y/n/f)") + while confirm.lower() != 'n': + if confirm.lower() == 'y': + msg = input("> ") + print(encrypt(msg).hex()) + elif confirm.lower() == 'f': + print(encrypt(flag).hex()) + confirm = input("Want to encrypt something else? (y/n/f)") + + +if __name__ == '__main__': + main() diff --git a/fool-the-oracle-v2/attack.py b/crypto-simmetric/fool-the-oracle-v2/attack.py similarity index 100% rename from fool-the-oracle-v2/attack.py rename to crypto-simmetric/fool-the-oracle-v2/attack.py diff --git a/fool-the-oracle-v2/chall.py b/crypto-simmetric/fool-the-oracle-v2/chall.py similarity index 100% rename from fool-the-oracle-v2/chall.py rename to crypto-simmetric/fool-the-oracle-v2/chall.py diff --git a/fool-the-oracle-v3/attack.py b/crypto-simmetric/fool-the-oracle-v3/attack.py similarity index 98% rename from fool-the-oracle-v3/attack.py rename to crypto-simmetric/fool-the-oracle-v3/attack.py index 56ecef5..7b5b5c2 100644 --- a/fool-the-oracle-v3/attack.py +++ b/crypto-simmetric/fool-the-oracle-v3/attack.py @@ -33,8 +33,8 @@ firstBlock=b"CRYPTO25{e3ab216" secondBlock="9-39d5-43aa-bde7" thirdBlock="-02286c2e2e56}" flag="CRYPTO25{e3ab2169-39d5-43aa-bde7-02286c2e2e56}" -#lastBlock=b'A'*16 -lastBlock=firstBlock +lastBlock=b'A'*16 +#lastBlock=firstBlock flagGuessed=b'' #beginning=32 #end=48 diff --git a/fool-the-oracle-v3/chall.py b/crypto-simmetric/fool-the-oracle-v3/chall.py similarity index 100% rename from fool-the-oracle-v3/chall.py rename to crypto-simmetric/fool-the-oracle-v3/chall.py diff --git a/crypto-simmetric/fool-the-oracle-v4/attack-old.py b/crypto-simmetric/fool-the-oracle-v4/attack-old.py new file mode 100644 index 0000000..7b5b5c2 --- /dev/null +++ b/crypto-simmetric/fool-the-oracle-v4/attack-old.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python3 +from pwn import * + +HOST = "130.192.5.212" +PORT = "6543" + +server = remote(HOST,PORT) +sleepT = 0.1 + +firstBlock=b"CRYPTO25{e3ab216" +#If the pad generated is correct the second and third block are equal +#Then I guessed the random pad +for i in range(16): + pad=b'A'*i + secondBlock=b'B'*16 + thirdBlock=b'B'*16 + server.send(b'enc\n') + server.recv(1024) + sleep(sleepT) + #The second pad can be whatever + toSend = pad + secondBlock + thirdBlock + print(f"Sending {toSend} with len {len(toSend)}") + server.send( toSend.hex()) + server.send(b'\n') + sleep(sleepT) + ciphertext = server.recv(1024) + ciphertext = bytes.fromhex(ciphertext.strip(b" >").split(b"\n")[0].decode('utf-8')) + if ciphertext[16:32] == ciphertext[32:48]: + PAD_NUM=i + print(f"Found the right padding num:{PAD_NUM}") + break +firstBlock=b"CRYPTO25{e3ab216" +secondBlock="9-39d5-43aa-bde7" +thirdBlock="-02286c2e2e56}" +flag="CRYPTO25{e3ab2169-39d5-43aa-bde7-02286c2e2e56}" +lastBlock=b'A'*16 +#lastBlock=firstBlock +flagGuessed=b'' +#beginning=32 +#end=48 +beginning=48 +end=64 +flag=b'' + +for j in range(1,3): + print(f"{'-'*5} Finding block n:{j+1} {'-'*5}") + for i in range(16): + beforePad = b'A'*PAD_NUM + pad = lastBlock[(i+1):] + #pad = b'A'*(16 - (len(flagGuessed)+1) ) + fPayload = pad + flagGuessed + for guess in string.printable: + guess = bytes(guess,'utf-8') + server.send(b'enc\n') + server.recv(1024) + sleep(sleepT) + #The second pad can be whatever + toSend = beforePad + fPayload+guess+pad + print(f"Payload len: {len(fPayload+guess)} Pad len: {len(pad)}") + print(f"Sending {toSend} with len {len(toSend)}") + server.send( toSend.hex()) + server.send(b'\n') + sleep(sleepT) + ciphertext = server.recv(1024) + ciphertext = bytes.fromhex(ciphertext.strip(b" >").split(b"\n")[0].decode('utf-8')) + if ciphertext[16:32] == ciphertext[beginning:end]: + #print(f"Block1:{ciphertext[0:16]} Block2:{ciphertext[16:32]}") + print(f"Matched guess: {guess}") + flagGuessed += guess + print(f"Already Guessed: {flagGuessed}") + break + sleep(sleepT) + lastBlock=flagGuessed + flag+=lastBlock + print(f"Entire block guessed:{lastBlock}") + flagGuessed=b'' + beginning+=16 + end+=16 + if(b'}' in flagGuessed): + break +print(flag) diff --git a/crypto-simmetric/fool-the-oracle-v4/attack.py b/crypto-simmetric/fool-the-oracle-v4/attack.py new file mode 100644 index 0000000..c68747a --- /dev/null +++ b/crypto-simmetric/fool-the-oracle-v4/attack.py @@ -0,0 +1,165 @@ +#!/usr/bin/env python3 + +from Cryptodome.Random import get_random_bytes +from pwn import * +HOST = "130.192.5.212" +PORT = "6544" +lenFlag = len("CRYPTO25{}")+36 # 46 total +server = remote(HOST, PORT) +#padding1 + padding2 = 10 +PAD_NUM = 10 +#AES block 16 +#server.send(b"enc\n") +flagGuessed = b'' +sleepT = 0.1 +pad1Len = 0 +pad2Len = 0 +#print(server.recv(1024)) +# Indovina +for i in range(1,6): + pad=b'A'*(16-i) + secondBlock=b'B'*16 + thirdBlock=b'B'*16 + print(server.recvline()) + print(server.recvline()) + print(server.recvline()) + print(server.recvline()) + server.send(b'enc\n') + toSend = pad + secondBlock + thirdBlock + print(f"Sending {toSend} with len {len(toSend)}") + server.send( toSend.hex()) + server.send(b'\n') + ciphertext = server.recvline().strip(b"> >").strip() + ciphertext = bytes.fromhex(ciphertext.decode('utf-8')) + if ciphertext[16:32] == ciphertext[32:48]: + pad1Len = i + pad2Len = 10-i + print(f"Found the right padding num:{pad1Len} and second pad len:{pad2Len}") + break +assert(pad1Len <= 6) +assert(pad2Len > 0) +print('-------') +pad2Guessed = b'' +sleepT = 0.1 +# Conoscere pad2 serve solo per indovinare il primo blocco +for i in range(pad2Len): + pad1 = b'A' * (16-pad1Len) + data = b'B' * (16 - (len(pad2Guessed)+1) ) + fPayload = data + pad2Guessed + for g in range(255): + assert(g != 255) + server.recvline() + server.recvline() + server.recvline() + server.recvline() + guess = g.to_bytes() + server.send(b'enc\n') + toSend = pad1 + fPayload + guess + data + print(f"Sending {toSend} with len {len(toSend)} and PAD2Len:{pad2Len} len Fpayload:{len(fPayload)} and len data:{len(data)}") + server.send( toSend.hex()) + server.send(b'\n') + ciphertext = server.recvline().strip(b"> >").strip() + ciphertext = bytes.fromhex(ciphertext.decode('utf-8')) + if ciphertext[16:32] == ciphertext[32:48]: + print(f"Matched guess: {guess}") + pad2Guessed += guess + print(f"Already Guessed: {pad2Guessed}") + break +assert(len(pad2Guessed) == pad2Len) +print(f"FOUND PADDING 2:{pad2Guessed}") +# Mi servono 6 byte di padding +firstBlock = b'CRYPTO25{' +# flag CRYPTO25{df0b0f03-0bd4-4dc8 +# CRYPTO25{df0b0f03-0bd4-4dc8-9043-bcdac301684c} +#firstBlock = b'CRYPTO25{df0b0f0' +#secondBlock =b'' +#secondBlock = b'3-0bd4-4dc8-9043' +firstBlock = b'' +secondBlock = b'' +thirdBlock = b'' +# Devo tagliare il PADDING2 quindi mando un blocco che contiene il PADDING2 - i primi X Byte + blocco che gia' conosco + guess +# Dopo mando X Byte di A in modo che in questo blocco finiscano gli stessi byte del padding2 che ho tagliato +# Comparo il terzo blocco che sara' PADDIN2 tagliato + Byte della flag che ho + Byte della flag che voglio indovinare +pad1 = b'A' * (16 - pad1Len) +for i in range(7): + for guess in string.printable: + server.recvline() + server.recvline() + server.recvline() + server.recvline() + + guess = bytes(guess,'utf-8') + + server.send(b'enc\n') + # Lunghezza che mi serve per avere blocco + guess nel blocco che mando + lenNeeded = 16 - len(firstBlock) - 1 + # Questo blocco fa da cuscinetto e serve solo per tagliare i primi byte che ignoro del padding2 aggiunti dal server + # Se devo scartare i primi 3 byte quindi questo sara' 16 - 3 byte lungo + useless = b'Z' * (16 - (pad2Len - lenNeeded)) + if(pad2Len > lenNeeded ): + # 1 Blocco + 2 Blocco da controllare + 3 blocco inutile + toSend = pad1 + pad2Guessed[(pad2Len - lenNeeded):] + firstBlock + guess + useless + #print(f"Payload len: {len(fPayload+pad2Guessed+guess+fPayload)}") + print(f"Sending {toSend} with len {len(toSend)} len data:{len(data)}") + server.send( toSend.hex()) + server.send(b'\n') + ciphertext = server.recvline().strip(b"> >").strip() + ciphertext = bytes.fromhex(ciphertext.decode('utf-8')) + if ciphertext[16:32] == ciphertext[48:64]: + print(f"Matched guess: {guess}") + firstBlock += guess + print(f"FLAG Already Guessed: {firstBlock}") + break +for i in range(16): + for guess in string.printable: + server.recvline() + server.recvline() + server.recvline() + server.recvline() + + guess = bytes(guess,'utf-8') + + server.send(b'enc\n') + # Per indovinare il secondo blocco possiamo usare il primo, tagliandolo in base a quanto + # conosco del secondo blocco, metto sempre in mezzo un blocco cuscinetto (alla fine e' meglio avere due blocchi cuscinetto) che include byte a caso + # + padding2 messo dal server + # + i byte della flag che gia' conosco e voglio tagliare, in modo che quelli del secondo blocco della flag siano comparabili con guess + + useless = b'Z' * (32 - pad2Len - (len(secondBlock) + 1)) + toSend = pad1 + firstBlock[len(secondBlock)+1:] + secondBlock + guess + useless + print(f"Sending {toSend} len first+second+guess:{len(firstBlock[len(secondBlock)+1:]+secondBlock+guess)} len useless:{len(useless)} len pad2:{pad2Len}") + server.send( toSend.hex()) + server.send(b'\n') + ciphertext = server.recvline().strip(b"> >").strip() + ciphertext = bytes.fromhex(ciphertext.decode('utf-8')) + if ciphertext[16:32] == ciphertext[64:80]: + print(f"Matched guess: {guess}") + secondBlock += guess + print(f"FLAG Already Guessed: {firstBlock + secondBlock}") + break +for i in range(16): + for guess in string.printable: + server.recvline() + server.recvline() + server.recvline() + server.recvline() + + guess = bytes(guess,'utf-8') + + server.send(b'enc\n') + # Per indovinare il secondo blocco possiamo usare il primo, tagliandolo in base a quanto + # conosco del secondo blocco, metto sempre in mezzo un blocco cuscinetto che include byte a caso + padding2 messo dal server + # + i byte della flag che gia' conosco e voglio tagliare, in modo che quelli del secondo blocco della flag siano comparabili con guess + + useless = b'Z' * (48 - pad2Len - (len(thirdBlock) + 16 + 1)) + toSend = pad1 + secondBlock[len(thirdBlock)+1:] + thirdBlock + guess + useless + print(f"Sending {toSend} len second+third+guess:{len(secondBlock[len(thirdBlock)+1:]+thirdBlock+guess)} len useless:{len(useless)} len pad2:{pad2Len}") + server.send( toSend.hex()) + server.send(b'\n') + ciphertext = server.recvline().strip(b"> >").strip() + ciphertext = bytes.fromhex(ciphertext.decode('utf-8')) + if ciphertext[16:32] == ciphertext[80:96]: + print(f"Matched guess: {guess}") + thirdBlock += guess + print(f"FLAG Already Guessed: {firstBlock + secondBlock + thirdBlock}") + break diff --git a/crypto-simmetric/fool-the-oracle-v4/attack.py.bak b/crypto-simmetric/fool-the-oracle-v4/attack.py.bak new file mode 100644 index 0000000..9f261a3 --- /dev/null +++ b/crypto-simmetric/fool-the-oracle-v4/attack.py.bak @@ -0,0 +1,123 @@ +#!/usr/bin/env python3 + +from Cryptodome.Random import get_random_bytes +from pwn import * +HOST = "130.192.5.212" +PORT = "6544" +lenFlag = len("CRYPTO25{}")+36 # 46 total +server = remote(HOST, PORT) +#padding1 + padding2 = 10 +PAD_NUM = 10 +#AES block 16 +#server.send(b"enc\n") +flagGuessed = b'' +sleepT = 0.1 +pad1Len = 0 +pad2Len = 0 +#print(server.recv(1024)) +for i in range(1,6): + pad=b'A'*(16-i) + secondBlock=b'B'*16 + thirdBlock=b'B'*16 + print(server.recvline()) + print(server.recvline()) + print(server.recvline()) + print(server.recvline()) + server.send(b'enc\n') + toSend = pad + secondBlock + thirdBlock + print(f"Sending {toSend} with len {len(toSend)}") + server.send( toSend.hex()) + server.send(b'\n') + ciphertext = server.recvline().strip(b"> >").strip() + ciphertext = bytes.fromhex(ciphertext.decode('utf-8')) + if ciphertext[16:32] == ciphertext[32:48]: + pad1Len = i + pad2Len = 10-i + print(f"Found the right padding num:{pad1Len} and second pad len:{pad2Len}") + break +assert(pad1Len <= 6) +assert(pad2Len > 0) +print('-------') +pad2Guessed = b'' +sleepT = 0.1 +for i in range(pad2Len): + pad1 = b'A' * (16-pad1Len) + data = b'B' * (16 - (len(pad2Guessed)+1) ) + fPayload = data + pad2Guessed + for g in range(255): + assert(g != 255) + print(server.recvline()) + print(server.recvline()) + print(server.recvline()) + print(server.recvline()) + guess = g.to_bytes() + server.send(b'enc\n') + toSend = pad1 + fPayload + guess + data + print(f"Sending {toSend} with len {len(toSend)} and PAD2Len:{pad2Len}") + server.send( toSend.hex()) + server.send(b'\n') + ciphertext = server.recvline().strip(b"> >").strip() + ciphertext = bytes.fromhex(ciphertext.decode('utf-8')) + print(ciphertext) + #print(server.recv(4096)) + #sleep(3) + """try: + ciphertext = server.recv(4096) + ciphertext = bytes.fromhex(ciphertext.strip(b" >").split(b'\n')[0].strip().decode('utf-8')) + #print(ciphertext) + #ciphertext = bytes.fromhex(ciphertext.strip(b" >").split(b"\n")[0].decode('utf-8')) + except: + ciphertext = bytes.fromhex(ciphertext.split(b'\n')[4].strip(b" >").decode('utf-8')) + #print(f"ERROR CIPHER:{ciphertext}") + #g = g - 1 + + if ciphertext[16:32] == ciphertext[32:48]: + print(f"Matched guess: {guess}") + pad2Guessed += guess + print(f"Already Guessed: {pad2Guessed}") + break + #sleep(sleepT)""" +assert(len(pad2Guessed) == pad2Len) +print(f"FOUND PADDING 2:{pad2Guessed}") +#sleep(1000) +firstBlock = b'' +#already guessed 280043 +for i in range(3): + for j in range(16): + pad1 = b'A' * (16-pad1Len) + #data = b'B'*(16-pad2Len-(j+1)) + data = b'B'*(16 - pad2Len - (len(firstBlock)+1) ) + fPayload = data + firstBlock + for guess in string.printable: + guess = bytes(guess,'utf-8') + server.send(b'enc\n') + #server.recv(1024) + sleep(sleepT) + #The second pad can be whatever + #if(len(firstBlock)>0): + # toSend = pad1 + fPayload + firstBlock + guess + data + #$else: + toSend = pad1 + fPayload + pad2Guessed + guess + fPayload + print(f"Payload len: {len(fPayload+pad2Guessed+guess+fPayload)}") + print(f"Sending {toSend} with len {len(toSend)} and PAD2Len:{pad2Len}") + server.send( toSend.hex()) + server.send(b'\n') + sleep(sleepT) + #print(server.recv(4096)) + #sleep(3) + try: + ciphertext = server.recv(4096) + ciphertext = bytes.fromhex(ciphertext.strip(b" >").split(b'\n')[0].strip().decode('utf-8')) + #print(ciphertext) + #ciphertext = bytes.fromhex(ciphertext.strip(b" >").split(b"\n")[0].decode('utf-8')) + except: + ciphertext = bytes.fromhex(ciphertext.split(b'\n')[4].strip(b" >").decode('utf-8')) + #print(f"ERROR CIPHER:{ciphertext}") + #g = g - 1 + + if ciphertext[16:32] == ciphertext[32:48]: + print(f"Matched guess: {guess}") + + firstBlock += guess + print(f"FLAG Already Guessed: {firstBlock}") + break diff --git a/crypto-simmetric/fool-the-oracle-v4/chall.py b/crypto-simmetric/fool-the-oracle-v4/chall.py new file mode 100644 index 0000000..f70bea3 --- /dev/null +++ b/crypto-simmetric/fool-the-oracle-v4/chall.py @@ -0,0 +1,44 @@ +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad, unpad +from Crypto.Random import get_random_bytes +from random import randint +from secret import flag + +assert (len(flag) == len("CRYPTO25{}") + 36) + +key = get_random_bytes(24) +padding1_len = randint(1, 6) +padding1 = get_random_bytes(padding1_len) +padding2 = get_random_bytes(10 - padding1_len) +flag = flag.encode() + + +def encrypt() -> bytes: + data = bytes.fromhex(input("> ").strip()) + payload = padding1 + data + padding2 + flag + + cipher = AES.new(key=key, mode=AES.MODE_ECB) + print(cipher.encrypt(pad(payload, AES.block_size)).hex()) + + +def main(): + menu = \ + "What do you want to do?\n" + \ + "quit - quit the program\n" + \ + "enc - encrypt something\n" + \ + "help - show this menu again\n" + \ + "> " + + while True: + cmd = input(menu).strip() + + if cmd == "quit": + break + elif cmd == "help": + continue + elif cmd == "enc": + encrypt() + + +if __name__ == '__main__': + main() diff --git a/crypto-simmetric/fool-the-oracle-v4/nc b/crypto-simmetric/fool-the-oracle-v4/nc new file mode 100644 index 0000000..e69de29 diff --git a/fool-the-oracle/attack.py b/crypto-simmetric/fool-the-oracle/attack.py similarity index 98% rename from fool-the-oracle/attack.py rename to crypto-simmetric/fool-the-oracle/attack.py index e572196..f062db5 100644 --- a/fool-the-oracle/attack.py +++ b/crypto-simmetric/fool-the-oracle/attack.py @@ -15,8 +15,8 @@ firstBlock=b"CRYPTO25{96ce8a9" secondBlock=b"3-d548-4f88-bc6c" thirdBlock=b"-db6eb3c96382}" -print(firstBlock+secondBlock+thirdBlock) -sleep(1000) +#print(firstBlock+secondBlock+thirdBlock) +#sleep(1000) flagGuessed=b"" """for i in range(15): diff --git a/fool-the-oracle/chall.py b/crypto-simmetric/fool-the-oracle/chall.py similarity index 100% rename from fool-the-oracle/chall.py rename to crypto-simmetric/fool-the-oracle/chall.py diff --git a/fool-the-oracle/lecture.py b/crypto-simmetric/fool-the-oracle/lecture.py similarity index 100% rename from fool-the-oracle/lecture.py rename to crypto-simmetric/fool-the-oracle/lecture.py diff --git a/force-decryption/attack.py b/crypto-simmetric/force-decryption/attack.py similarity index 100% rename from force-decryption/attack.py rename to crypto-simmetric/force-decryption/attack.py diff --git a/force-decryption/chall.py b/crypto-simmetric/force-decryption/chall.py similarity index 100% rename from force-decryption/chall.py rename to crypto-simmetric/force-decryption/chall.py diff --git a/force-decryption/lecture.py b/crypto-simmetric/force-decryption/lecture.py similarity index 100% rename from force-decryption/lecture.py rename to crypto-simmetric/force-decryption/lecture.py diff --git a/forge-a-cookie/attack.py b/crypto-simmetric/forge-a-cookie/attack.py similarity index 100% rename from forge-a-cookie/attack.py rename to crypto-simmetric/forge-a-cookie/attack.py diff --git a/forge-a-cookie/chall.py b/crypto-simmetric/forge-a-cookie/chall.py similarity index 100% rename from forge-a-cookie/chall.py rename to crypto-simmetric/forge-a-cookie/chall.py diff --git a/forge-another-cookie/attack.py b/crypto-simmetric/forge-another-cookie/attack.py similarity index 100% rename from forge-another-cookie/attack.py rename to crypto-simmetric/forge-another-cookie/attack.py diff --git a/forge-another-cookie/chall.py b/crypto-simmetric/forge-another-cookie/chall.py similarity index 100% rename from forge-another-cookie/chall.py rename to crypto-simmetric/forge-another-cookie/chall.py diff --git a/crypto-simmetric/forge-another-json-cookie/attack.py b/crypto-simmetric/forge-another-json-cookie/attack.py new file mode 100644 index 0000000..b33b910 --- /dev/null +++ b/crypto-simmetric/forge-another-json-cookie/attack.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python3 + +from Cryptodome.Cipher import AES +from Cryptodome.Util.Padding import pad, unpad +import json +import base64 +from pwn import * +HOST = "130.192.5.212" +PORT = 6551 + +server = remote(HOST,PORT) + +# 1 | 2 Block | 3 Block | 4 Block | +#RICORDA ALLA FINE C'e' SEMPRE " in PIU' +#name = 'aa true "a " ' +# AGGIUNGI anche 'aa' +name = 'aa'+' '*(16-len('true')-1)+':true'+' '*(15)+'"'+'a'+' '*14+","+" "*15+' '*15+'"'+' '*15+' '*5+'a' +print(len(name)) +#print(name) + +print(server.recvline()) +#print(server.recvline()) +server.send(name) +server.send(b'\n') +tok = server.recvline() +tok = tok.split(b":")[1].strip() +print(tok) +server.recvline() +server.recvline() +server.recvline() +server.recvline() +server.send(b'flag\n') +print(server.recvline()) +enc = base64.b64decode(tok) +tok = enc[0:16]+enc[112:128]+enc[16:32]+enc[64:80]+enc[48:64]+enc[96:112]+enc[128:144] +tok = base64.b64encode(tok).decode() +server.send(tok) +server.send(b'\n') +print(server.recvline()) +print(server.recvline()) +print(server.recvline()) +print(server.recvline()) +print(server.recvline()) +print(server.recvline()) +print(server.recvline()) +print(server.recvline()) +print(server.recvline()) +#print(f"{payload} | len:{len(payload)}") +#token = json.dumps({ +# "username": name, + +#}) +#enc = token.encode() +#for i in range(0,len(enc),16): +# print(enc[i:i+16]) +#print(enc[0:16]+enc[112:128]+enc[16:32]+enc[64:80]+enc[48:64]+enc[96:112]+enc[128:144]) diff --git a/crypto-simmetric/forge-another-json-cookie/chall.py b/crypto-simmetric/forge-another-json-cookie/chall.py new file mode 100644 index 0000000..637e1dd --- /dev/null +++ b/crypto-simmetric/forge-another-json-cookie/chall.py @@ -0,0 +1,63 @@ +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad, unpad +from Crypto.Random import get_random_bytes +from secret import flag +import json +import base64 + +key = get_random_bytes(32) + + +def get_user_token(name): + cipher = AES.new(key=key, mode=AES.MODE_ECB) + token = json.dumps({ + "username": name, + "admin": False + }) + + enc_token = cipher.encrypt(pad(token.encode(), AES.block_size)) + return f"{base64.b64encode(enc_token).decode()}" + + +def check_user_token(token): + cipher = AES.new(key=key, mode=AES.MODE_ECB) + dec_token = unpad(cipher.decrypt(base64.b64decode(token)), AES.block_size) + + user = json.loads(dec_token) + + if user.get("admin", False) == True: + return True + else: + return False + + +def get_flag(): + token = input("What is your token?\n> ").strip() + if check_user_token(token): + print("You are admin!") + print(f"This is your flag!\n{flag}") + else: + print("HEY! WHAT ARE YOU DOING!?") + exit(1) + + +if __name__ == "__main__": + name = input("Hi, please tell me your name!\n> ").strip() + token = get_user_token(name) + print("This is your token: " + token) + + menu = \ + "What do you want to do?\n" + \ + "quit - quit the program\n" + \ + "help - show this menu again\n" + \ + "flag - get the flag\n" + \ + "> " + while True: + cmd = input(menu).strip() + + if cmd == "quit": + break + elif cmd == "help": + continue + elif cmd == "flag": + get_flag() diff --git a/guess-mode-double-shot/attack.py b/crypto-simmetric/guess-mode-double-shot/attack.py similarity index 100% rename from guess-mode-double-shot/attack.py rename to crypto-simmetric/guess-mode-double-shot/attack.py diff --git a/guess-mode-double-shot/chall.py b/crypto-simmetric/guess-mode-double-shot/chall.py similarity index 100% rename from guess-mode-double-shot/chall.py rename to crypto-simmetric/guess-mode-double-shot/chall.py diff --git a/guess-mode-one-shot/ECBvsCBCClient.py b/crypto-simmetric/guess-mode-one-shot/ECBvsCBCClient.py similarity index 100% rename from guess-mode-one-shot/ECBvsCBCClient.py rename to crypto-simmetric/guess-mode-one-shot/ECBvsCBCClient.py diff --git a/guess-mode-one-shot/chall.py b/crypto-simmetric/guess-mode-one-shot/chall.py similarity index 100% rename from guess-mode-one-shot/chall.py rename to crypto-simmetric/guess-mode-one-shot/chall.py diff --git a/guess-mode-one-shot/main.py b/crypto-simmetric/guess-mode-one-shot/main.py similarity index 95% rename from guess-mode-one-shot/main.py rename to crypto-simmetric/guess-mode-one-shot/main.py index d5be861..bb31e6e 100644 --- a/guess-mode-one-shot/main.py +++ b/crypto-simmetric/guess-mode-one-shot/main.py @@ -8,9 +8,7 @@ from pwn import * from Cryptodome.Cipher import AES -# see note info on smartphone from Cryptodome.Random import get_random_bytes -#from secret import flag import random ############################ BLOCK_SIZE = AES.block_size @@ -50,7 +48,7 @@ for i in range(128): for i in range(0,int(len(ciphertext_hex)//BLOCK_SIZE_HEX)): print(ciphertext_hex[i*BLOCK_SIZE_HEX:(i+1)*BLOCK_SIZE_HEX]) - + #Check if two blocks are equal print("Selected mode is", end=' ') if ciphertext[0:32] == ciphertext[32:64] : server.send("ECB") @@ -65,4 +63,4 @@ for i in range(128): print("-"*10+"-"*10) #print(f"{server.recv(1024)}") #print(f"{server.recv(1024)}") -print(f"FLAG:{server.recv(1024)}") \ No newline at end of file +print(f"FLAG:{server.recv(1024)}") diff --git a/crypto-simmetric/long-file/attack.py b/crypto-simmetric/long-file/attack.py new file mode 100644 index 0000000..125b6fb --- /dev/null +++ b/crypto-simmetric/long-file/attack.py @@ -0,0 +1,49 @@ +import numpy +from string import * +KEYSTREAM_SIZE = 1000 + +CHARACTER_FREQ = { + 'a': 0.0651738, 'b': 0.0124248, 'c': 0.0217339, 'd': 0.0349835, 'e': 0.1041442, 'f': 0.0197881, 'g': 0.0158610, + 'h': 0.0492888, 'i': 0.0558094, 'j': 0.0009033, 'k': 0.0050529, 'l': 0.0331490, 'm': 0.0202124, 'n': 0.0564513, + 'o': 0.0596302, 'p': 0.0137645, 'q': 0.0008606, 'r': 0.0497563, 's': 0.0515760, 't': 0.0729357, 'u': 0.0225134, + 'v': 0.0082903, 'w': 0.0171272, 'x': 0.0013692, 'y': 0.0145984, 'z': 0.0007836, ' ': 0.1918182 +} # ',' + +with open("./file.enc", "rb") as f: + data = f.read() + +lines = [] +candidates_list = [] + +for i in range(0,len(data), KEYSTREAM_SIZE): + lines.append(data[i:i+KEYSTREAM_SIZE]) + +for byte_to_guess in range(KEYSTREAM_SIZE): + counters = numpy.zeros(256,dtype=float) + for guessed_byte in range(256): + for line in lines: + if chr(line[byte_to_guess] ^ guessed_byte) in printable: + counters[guessed_byte] += CHARACTER_FREQ.get(chr(line[byte_to_guess] ^ guessed_byte).lower(),0) + + max_match = max(counters) + + match_list = [(counters[i],i) for i in range(256)] + ordered_match_list=sorted(match_list, reverse=True) + + candidates = [] + #for pair in ordered_match_list: + # if pair[0] < max_match * .95: + # break + # candidates.append(pair) + + candidates_list.append(ordered_match_list) + +keystream = bytearray() +for x in candidates_list: + keystream += x[0][1].to_bytes(1,byteorder='big') + +from Cryptodome.Util.strxor import strxor + +for line in lines: + l = min(len(keystream),len(line)) + print(strxor(line[:l],keystream[:l])) diff --git a/crypto-simmetric/long-file/chall.py b/crypto-simmetric/long-file/chall.py new file mode 100644 index 0000000..1e1fa82 --- /dev/null +++ b/crypto-simmetric/long-file/chall.py @@ -0,0 +1,25 @@ +import os +from Crypto.Cipher import ChaCha20 + + +key = os.urandom(32) +nonce = os.urandom(12) +print(f"Using key: {key.hex()}, nonce: {nonce.hex()}") + +with open("./bigfile.txt", "r") as f: + data = f.read().encode() + +KEYSTREAM_SIZE = 1000 + +cipher = ChaCha20.new(key=key, nonce=nonce) + +# THe ChaCha20 keystream is repeated each 1000 bytes +keystream = bytes([x ^ y for x, y in zip( + b"\00"*KEYSTREAM_SIZE, cipher.encrypt(b"\00"*KEYSTREAM_SIZE))]) + +print(len(data)) + +with open("./file.enc", "wb") as f: + for i in range(0, len(data), KEYSTREAM_SIZE): + f.write( + bytes([p ^ k for p, k in zip(data[i:i+KEYSTREAM_SIZE], keystream)])) diff --git a/crypto-simmetric/long-file/file.enc b/crypto-simmetric/long-file/file.enc new file mode 100644 index 0000000000000000000000000000000000000000..89bf88c9a87d4c492d3a436d55869635f56c10cb GIT binary patch literal 100000 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