{"id":16618325,"url":"https://github.com/marekyggdrasil/minicurve","last_synced_at":"2026-04-17T16:32:25.334Z","repository":{"id":57441795,"uuid":"405107329","full_name":"marekyggdrasil/minicurve","owner":"marekyggdrasil","description":"A simple library for elliptic curve visualization.","archived":false,"fork":false,"pushed_at":"2021-09-14T15:17:55.000Z","size":51,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-14T10:41:03.474Z","etag":null,"topics":["cryptography","education","visualisation","visualization"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marekyggdrasil.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-09-10T14:23:51.000Z","updated_at":"2021-11-20T14:22:16.000Z","dependencies_parsed_at":"2022-09-19T14:41:42.887Z","dependency_job_id":null,"html_url":"https://github.com/marekyggdrasil/minicurve","commit_stats":null,"previous_names":["marekyggdrasil/potatoes"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/marekyggdrasil/minicurve","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marekyggdrasil%2Fminicurve","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marekyggdrasil%2Fminicurve/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marekyggdrasil%2Fminicurve/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marekyggdrasil%2Fminicurve/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marekyggdrasil","download_url":"https://codeload.github.com/marekyggdrasil/minicurve/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marekyggdrasil%2Fminicurve/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31936608,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-17T12:37:54.787Z","status":"ssl_error","status_checked_at":"2026-04-17T12:37:25.095Z","response_time":62,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cryptography","education","visualisation","visualization"],"created_at":"2024-10-12T02:19:33.710Z","updated_at":"2026-04-17T16:32:25.314Z","avatar_url":"https://github.com/marekyggdrasil.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# minicurve\n\nA very simple library developed by [Marek Narozniak](https://mareknarozniak.com/) for visualizing finite field over elliptic curve. The idea of making this library originates in a cryptography-related tutorial series\n\n1. [Elliptic Curve Cryptography and Diffie-Hellman Key Exchange](https://mareknarozniak.com/2020/11/30/ecdh/)\n2. [Eliptic Curve Digital Signature Algorithm](https://mareknarozniak.com/2021/03/16/ecdsa/)\n3. [Schnorr Signature](https://mareknarozniak.com/2021/05/25/schnorr-signature/)\n4. [Pedersen Commitments and Confidential Transactions](https://mareknarozniak.com/2021/06/22/ct/)\n\nDisclaimer. This library is NOT secure and NOT efficient. It is meant for purely educational purposes for visualizing tutorials. Do NOT use it for any cryptography applications!\n\n## Installation\n\nSuper simple!\n\n```\npip install minicurve\n```\n\n## Tutorial\n\nPoints addition is as simple as `R=P+Q`, you can visualize parent points using arrows as follows.\n\n```python\nfrom minicurve import MiniCurve as mc\nfrom minicurve import Visualizer\n\n# curve parameters\na = 1\nb = 7\np = 13\n\nP = mc(a, b, p, x=10, y=4, label='P', color='tab:orange')\nQ = mc(a, b, p, x=9, y=11, label='Q', color='tab:orange')\n\n# addition of curve points\nR = P + Q\nR.setColor('tab:red')\nR.setLabel('R')\n\nR.x_delta = -0.3\nR.arrow_thickness = 0.01 # you can control the thickness of the arrow\nR.arrow_head = 20 # and its head\n\n# visualize the finite field\nvis = Visualizer(a, b, p)\nvis.makeField()\nvis.points = [P, Q, R]\nvis.generatePlot(title='points addition $P+Q=R$ using minicurve', addition=True)\n# addition=True option will use arrows to visualize addition parents\n\nvis.plot('images/example_add.png')\n```\n\noutputs\n\n![output-addition](https://github.com/marekyggdrasil/minicurve/blob/main/images/example_add.png?raw=true)\n\nMultiplication by scalar works in similar way as you can simply `P=4*G` and visualize the scalar using arrow path\n\n```python\nfrom minicurve import MiniCurve as mc\nfrom minicurve import Visualizer\n\n# curve parameters\na = 0\nb = 5\np = 7\n\nG = mc(a, b, p, x=3, y=2, label='G', color='tab:green', tracing=True)\n# tracing=True option will enabling plotting the arrows indicating scalar multiplication\n\n# private key\nk = 4\n\n# public key\nP = k*G\n\nP.setColor('tab:orange')\nP.setLabel('P')\nP.x_delta = 0.08 # you can control the label placement relative to the point\n\n# visualize the finite field\nvis = Visualizer(a, b, p)\nvis.makeField()\nvis.points = [G, P]\nvis.generatePlot(title='scalar multiplication $k \\cdot G=P, k=4$ using minicurve')\nvis.plot('images/example_mul.png')\n```\n\noutputs\n\n![output-multiplication](https://github.com/marekyggdrasil/minicurve/blob/main/images/example_mul.png?raw=true)\n\n## FAQ\n\n### What are the valid values of colors?\n\nWe are using [Matplotlib colors](https://matplotlib.org/stable/tutorials/colors/colors.html).\n\n## Thanks!\n\nCode for computing [quadratic residues](https://en.wikipedia.org/wiki/Quadratic_residue) from [this gist](https://gist.github.com/nakov/60d62bdf4067ea72b7832ce9f71ae079). Thanks to [Nakov](https://gist.github.com/nakov).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarekyggdrasil%2Fminicurve","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarekyggdrasil%2Fminicurve","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarekyggdrasil%2Fminicurve/lists"}