{ "info": { "author": "", "author_email": "dolev146 , yaakov103 , Aviad Gilboa , Daniel Zaken ", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "# Multi-Party Computation Cryptography - Final Project\n\n* finish writing the development process api and demo and screenshots adding tests\n* fix the SSD document https://docs.google.com/document/d/1oWhDiyfaaCHef23QWVzcB4Yah-8EvjGF3wODgSoSex4/edit#\n\n\n\n| | | |\n|-|-|-|\n| | | |\n| | | |\n\n\n![tenor](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/b900f69f-0f6e-4a04-a579-478dfcbc34ba)\n- [Multi-Party Computation Cryptography - Final Project](#multi-party-computation-cryptography---final-project)\n * [About](#about)\n * [What is Multi-Party Computation (MPC)?](#what-is-multi-party-computation-mpc)\n * [Authors](#authors)\n * [Project Overview](#project-overview)\n \t* [Project Goal](#project-goal)\n \t* [Introduction](#introduction)\n \t* [Methods & Algorithms](#methods--algorithms)\n \t\t* [Design Considerations](#design-considerations)\n \t\t* [Selected approach](#selected-approach)\n \t* [Pseudo Code Bit OR](#pseudo-code-bit-or)\n \t\t* [Procedure PrivacyPreservingBitOr:](#procedure-privacypreservingbitor)\n \t\t* [Infrastracture](#infrastracture)\n \t\t* [User Interface](#user-interface)\n * [Development proccess](#development-proccess)\n * [API Reference](#api-reference)\n \t* [Get item](#get-item)\n \t* [add(num1, num2)](#add-num1--num2-)\n * [Appendix](#appendix)\n * [License](#license)\n * [Tech Stack](#tech-stack)\n * [Usage/Examples](#usageexamples)\n * [Demo](#demo)\n * [Environment Variables](#environment-variables)\n * [Run Locally](#run-locally)\n- [Files & Project structure](#files--project-structure)\n\n\nTable of contents generated with markdown-toc\n\n\n\n\n## About\n\nThis project is an implementation of a secure multi-party protocol for the secure set-union problem and the secure all-pairs shortest path problem. The protocol is devised from existing literature and is tailored for enhanced efficiency in a semi-honest setting with a dishonest majority.\n\n## What is Multi-Party Computation (MPC)?\n\n[Multi-Party Computation (MPC)](https://en.wikipedia.org/wiki/Secure_multi-party_computation) is a subfield of cryptography that enables multiple entities to jointly compute a function over their inputs while keeping those inputs private. In the context of this project, we focus on a 2-party computation, where both entities share inputs and follow the MPC protocol, ensuring the privacy of their inputs.\n***Without the intervention of a server (Third party) in the proccess.***\n\n\n\n## Authors\n- [@Dolev Dublon](https://www.github.com/dolev146)\n- [@Yakov Khodorkovski](https://github.com/yakov103)\n- [@Daniel Zaken](https://github.com/aaaa)\n- [@Aviad Gilboa](https://github.com/aaaa)\n\n\n## Project Overview\n\n## Project Goal\n\nThe primary objective of this project is to implement a secure multi-party protocol that is specifically designed for the secure set-union problem and the secure all-pairs shortest path problem. Our protocol aims to achieve greater efficiency than generic MPC protocols, especially in semi-honest settings with a dishonest majority. We base our approach on existing research by Justin Brickell and Vitaly Shmatikov, which you can access [here](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/blob/main/shmat_asiacrypt05.pdf).\n\n\n## Introduction\n\nOur protocol deals with two semi-honest groups. Since the late 1980s, general protocols have theoretically allowed secure computation in polynomial time and with a security parameter, enabling both players to compute safely under computational complexity assumptions. While these general protocols are theoretically efficient, they are not always practically efficient. Therefore, people have been trying to create specific security protocols for specific functions that are more efficient than the general protocols.\n\nThe use of various generic libraries, such as YAO, and GMW, has proven to be less efficient, prompting efforts to develop more efficient approaches. We will implement the All-Pairs Shortest Path functionality to contribute to the ecosystem of implementations, aiming to create more efficient implementations in this domain.\n\n## Methods & Algorithms\n\n### Design Considerations\n***There were two algorithms for the set union to implement in our protocol:***\n1. A provided pseudocode that utilized YAO and GMW for the calculation of the minimum using a generic library. However, this did not fit with our chosen programming language.\n2. A tree pruning method that utilized ElGamal and BitOr to reveal information securely.\n\n### Selected approach\n**We have decided to implement the BitOr operation to achieve a union without relying on a generic library.**\n\n| Image | Cryptographer | Link |\n|:-----:|:-------------:|:----:|\n| | Elgamal | [Wikipedia](https://en.wikipedia.org/wiki/Taher_Elgamal) |\n| | Yao | [Wikipedia](https://en.wikipedia.org/wiki/Andrew_Yao) |\n\n\n\n\nbecause the iterative method required using a generic library to calculate the minimum in a secure way.\n\n## Pseudo Code Bit OR\n\n### Procedure PrivacyPreservingBitOr:\n1. Alice initializes:\n\t- Selects cyclic group $G$ of prime order $q$\n\t- Chooses $g$ (quadratic residue) and large prime p $(p=2q+1)$\n\t- Chooses private key $k \u2208 \\{0, ..., q-1\\}$\n\t- Picks random $r \u2208 \\{2, ..., q-1\\}$\n\t- If Alice's bit is $0$, calculates $C_a = (g^r, g^{(kr)})$\n\t- If Alice's bit is $1$, calculates $C_a = (g^r, g\\cdot g^{(kr)})$\n2. Alice sends $(C_a, q, g, g^k)$ to Bob, keeping k private\n3. Bob receives $(C_a, q, g, g^k)$ and unpacks $C_a$ into $(\u03b1, \u03b2)$\n\t- Picks random $r' \u2208 \\{2, ..., q-1\\}$\n\t- If Bob's bit is $0$, calculate C_b = (\u03b1^r', \u03b2^r')\n\t- If Bob's bit is $1$, calculate C_b = (\u03b1^r', g^r'*\u03b2^r')\n4. Bob sends $C_b$ back to Alice\n5. Alice receives $C_b$, unpacks it into $(\u03b3, \u03b4)$\n\t- Calculates $b = \\frac{\u03b4}{\u03b3^k}$\n\t\t- If $b = 1$, returns $0$\n\t\t- If $b \u2260 1$, returns $1$\ninsert diagram here\n\n### Infrastracture\n**Using Flask and Gunicorn servers on cloud platforms of Microsoft Azure. we represent parties involved in the secure computation.**\n\n### User Interface \nWe built a library mainly for software developers, but included visual aids and infrastructure for easier understanding. It's designed to show anyone how our system works, especially in Multi-party computation. Our simple interface gives a clear view of the protocol's progress and even includes a log output to follow the entire process.\n\nInsert screens here\n\n[ QR code for GitHub repo on bottom-right ]\n\n\n## Development proccess\n\nAt first the Development process was to read a lot and get deep into the article of Justin Brickell and Vitaly Shmatikov, which you can access [here](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/blob/main/shmat_asiacrypt05.pdf).\nand we met every week from the begining reading it, and also reading the article [A Proof of Security of Yao\u2019s Protocol for Two-Party Computation]() by Yehuda Lindell Benny Pinkas and we had to learn a lot about the secure computation proofs and theory [Semi-Honest Adversaries](https://www.youtube.com/watch?time_continue=2&v=z3U-5mf6hGw&feature=emb_title) and this lecture as well.\nThis is the first step is to get into the field so we can understand the problem more deeply.\nthen we wrote the \n\n\nSynchronization was one of our biggest obstacle for us as a team and for the threads in the program between the clients\n\n \n\n## API Reference\n\n```http\nGET /api/datapoint\n\n```\n| Parameter | Type | Description |\n\n| :-------- | :------- | :------------------------- |\n\n| `api_key` | `string` | **Required**. Your API key |\n\n \n\n#### Get item\n\n \n```http\n\nGET /api/items/${id}\n\n```\n\n| Parameter | Type | Description |\n\n| :-------- | :------- | :-------------------------------- |\n\n| `id` | `string` | **Required**. Id of item to fetch |\n\n \n\n#### add(num1, num2)\n\n \n\nTakes two numbers and returns the sum.\n \n\n## Appendix\n\nAny additional information goes here\n\n \n\n## License\n\n[MIT](https://choosealicense.com/licenses/mit/)\n\n \n\n## Tech Stack\n\n**Client:** HTML CSS JAVASCRIPT, Jinja engine for flask\n**Server:** PYTHON FLASK\n\n \n\n## Usage/Examples\n\n \n\n```javascript\n\nimport Component from 'my-project'\n\n \n\nfunction App() {\n\nreturn \n\n}\n\n```\n\n \n\n## Demo\n\n \nInsert gif *and* image for the video demo on youtube\n\n \n\n## Deployment\n\n1. get a user on Microsoft Azure\n2. \n\n \n\nTo deploy this project run\n\n \n\n```bash\n\ngunicorn \n\n```\n\n\n## Environment Variables\n\n \n\nTo run this project, you will need to add the following environment variables to your .env file\n\n \n\n`API_KEY`\n\n \n\n`ANOTHER_API_KEY`\n\n \n\n## Run Locally\n\n \n\nClone the project\n\n \n\n```bash\n\ngit clone https://link-to-project\n\n```\n\n \n\nGo to the project directory\n\n \n\n```bash\n\ncd my-project\n\n```\n\n \n\nInstall dependencies\n\n \n\n```bash\n\npip install flask .....\n\n```\n\n \n\nStart the server\n\n \n\n```bash\n\nnpm run start\n\n```\n\n\n# Files & Project structure\n\n\n\n\n\n\n# Documents\n\n## Vision Statement - MPC protocol implementation\n\n[Vision Statement](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/blob/main/Vision%20Statement.pdf)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/3e22173b-be80-4746-b7b7-4db4799b849f)\n\n## SRD Document\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/09dcdd56-e8ba-45f1-ba25-8544524c27b4)\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/ef478b28-d05c-4edd-b201-ab6fc9e814ee)\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/9f4f8271-74f1-41b4-a672-8fdd11575010)\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/70a49f9d-c8ce-4830-b104-e681c543bde3)\n\n\n\n## Privacy-Preserving Graph Algorithms in the Semi-honest Model \nby Justin Brickell and Bitaly Shmatikov\nThe University of Texas at Austin, Austin TX 78712, USA\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/2654a3ec-b54b-453b-b145-715c0d433361)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/2b57663d-4d07-4970-b9a8-461075e4aef6)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/a8e72665-b145-4e67-bcec-b88d4981f38f)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/0116c98b-50b0-46af-be92-e9f66279912b)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/dcbdc241-2316-4271-9546-da2dad9aba5d)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/335b4709-193f-4864-9ba1-81212f662828)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/af600236-eb82-45d4-8e11-603cb28979c1)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/552b3d33-a234-4f97-8ab8-3418add22251)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/20ca3c72-9c7e-47a5-b7e6-e7b288867e3f)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/91939058-7fda-48c8-be64-9b29695398c9)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/97d7ebbb-c5e0-40f6-80e7-4fbd70c6f7e7)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/0dffe14f-ba64-488f-a231-d85d394dbf5a)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/e4cf9373-1415-4eb5-9ca0-da23227695a3)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/f91500cd-673f-4039-a87e-f89c6666201d)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/c266f0f4-2981-44ea-81e8-1dd979774881)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/9dc89741-eb14-45b0-a60a-0177618f470e)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/4a9c9bec-558b-4dad-addb-df39eead53ff)\n\n## A Proof of Security of Yao\u2019s Protocol for Two-Party Computation\nby Yehuda Lindell\u2217 Benny Pinkas June 26, 2006\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/0e7a292c-7a5b-480e-ab81-da043b70b404)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/780f2e66-5728-4b98-a4ad-75f50cee0654)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/dc2ab284-266c-4b89-804f-4e2362f924b3)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/e3bbfad1-1b5e-46ff-95e8-5b7df34b7aeb)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/7b758edc-d86e-41d3-afb8-86908928d64d)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/ca574f7f-6c70-4cd7-b655-b489942574dd)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/5780f0db-ff62-4681-a53d-453bda441eb5)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/3f1cc5fe-3687-4d50-8903-90cd480a1652)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/cbe47ad0-de81-4abf-a871-36397b17512a)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/1eb3e8da-3483-4a4b-a0a7-c65aba6e6adc)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/0218a6d6-353e-4928-8063-dd6475962420)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/a15dbe0e-1ed8-450a-b4a6-ab16ea817569)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/0358a39f-3c52-4840-b33f-edc8f904479d)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/686aaadf-de8f-4e42-a833-c685f7ae84ab)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/b7416f62-096f-4cea-9961-d3455a0b7b90)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/1e03d6b8-4425-411b-82b5-3b4c908ff0f6)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/af317636-cb29-4f17-9cbf-13b9b468ff37)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/f0fb1300-5982-4626-8128-61cf5a958fac)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/2ca61858-3b15-4835-9ddb-7168f1301c5b)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/b99430ae-bce6-41fb-990f-04ca7bccc52e)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/9aecc0d6-0213-4869-bbdc-98a2a30f6f13)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/dab391c2-608f-46d7-851f-0107bb8696d2)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/ec44d686-e41b-4ad6-9051-7905bedd3c59)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/585ba500-db60-4887-8963-d60172741707)\n\n![image](https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy/assets/62290677/2936c444-bf5a-4671-b66f-7207a3fd7645)\n\n\n\nfor original code go here\n* https://github.com/Dolev-Dublon/Final-Project-Multiple-Party-Computation-Cryptograpy\n\n\n\n\n\n\n\n\n##### notes\n- notes for final project https://docs.google.com/document/d/1d35ExjbP7p1KzuKcKIswkkOI2wedrJmxIr1OTyWHQyg/edit# \n- vistion statements notes https://docs.google.com/document/d/1xL3wtaWKGzi0FGTweE9COot-9TdP_mHv4BdzA2mkEAg/edit?usp=sharing \n- SSD https://docs.google.com/document/d/1oWhDiyfaaCHef23QWVzcB4Yah-8EvjGF3wODgSoSex4/edit?usp=sharing \n- SRD https://docs.google.com/document/d/1w5ZWddqB6iOTN4Ku2wOdZLmmxYpQKhgURkkDfFiViZY/edit?usp=sharing\n\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "addy-mpc", "package_url": "https://pypi.org/project/addy-mpc/", "platform": null, "project_url": "https://pypi.org/project/addy-mpc/", "project_urls": { "Homepage": "https://github.com/pypa/sampleproject" }, "release_url": "https://pypi.org/project/addy-mpc/0.0.1/", "requires_dist": [ "matplotlib", "networkx", "numpy", "sympy" ], "requires_python": ">=3.7", "summary": "mpc implementation of all pairs shortest path", "version": "0.0.1", "yanked": false, "yanked_reason": null }, "last_serial": 21617207, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "blake2b_256": "ef41670bee7c304ee5a093a88b4d83016dd94119756933522527122925593c84", "md5": "f14ed56da211527fd499be2902a0baad", "sha256": "632e37cd7bfe93c252615bd4e5bcb8fe612d91ebebf28731e7d056d9201c88d1" }, "downloads": -1, "filename": "addy_mpc-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "f14ed56da211527fd499be2902a0baad", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 18199, "upload_time": "2023-08-13T09:20:51", "upload_time_iso_8601": "2023-08-13T09:20:51.421183Z", "url": "https://files.pythonhosted.org/packages/ef/41/670bee7c304ee5a093a88b4d83016dd94119756933522527122925593c84/addy_mpc-0.0.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "blake2b_256": "f5c8d85da1591ce663b191dbd8e6d816588db88e5b5cc3b768d35452268c49a3", "md5": "6eb4c78944e12ca1fbe4f1ccd43c51a4", "sha256": "2c80aba0782fee80fc6ab389703d172219f16b0cd88262a747ad483dde4ad0c5" }, "downloads": -1, "filename": "addy_mpc-0.0.1.tar.gz", "has_sig": false, "md5_digest": "6eb4c78944e12ca1fbe4f1ccd43c51a4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 13349, "upload_time": "2023-08-13T09:20:53", "upload_time_iso_8601": "2023-08-13T09:20:53.402123Z", "url": "https://files.pythonhosted.org/packages/f5/c8/d85da1591ce663b191dbd8e6d816588db88e5b5cc3b768d35452268c49a3/addy_mpc-0.0.1.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "blake2b_256": "ef41670bee7c304ee5a093a88b4d83016dd94119756933522527122925593c84", "md5": "f14ed56da211527fd499be2902a0baad", "sha256": "632e37cd7bfe93c252615bd4e5bcb8fe612d91ebebf28731e7d056d9201c88d1" }, "downloads": -1, "filename": "addy_mpc-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "f14ed56da211527fd499be2902a0baad", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 18199, "upload_time": "2023-08-13T09:20:51", "upload_time_iso_8601": "2023-08-13T09:20:51.421183Z", "url": "https://files.pythonhosted.org/packages/ef/41/670bee7c304ee5a093a88b4d83016dd94119756933522527122925593c84/addy_mpc-0.0.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "blake2b_256": "f5c8d85da1591ce663b191dbd8e6d816588db88e5b5cc3b768d35452268c49a3", "md5": "6eb4c78944e12ca1fbe4f1ccd43c51a4", "sha256": "2c80aba0782fee80fc6ab389703d172219f16b0cd88262a747ad483dde4ad0c5" }, "downloads": -1, "filename": "addy_mpc-0.0.1.tar.gz", "has_sig": false, "md5_digest": "6eb4c78944e12ca1fbe4f1ccd43c51a4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 13349, "upload_time": "2023-08-13T09:20:53", "upload_time_iso_8601": "2023-08-13T09:20:53.402123Z", "url": "https://files.pythonhosted.org/packages/f5/c8/d85da1591ce663b191dbd8e6d816588db88e5b5cc3b768d35452268c49a3/addy_mpc-0.0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }