Small, insecure and visual ECC library for educational purposes

# minicurve

A very simple library developed by Marek Narozniak for visualizing finite field over elliptic curve. The idea of making this library originates in a cryptography-related tutorial series

Disclaimer. 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!

## Installation

Super simple!

pip install minicurve


## Tutorial

Points addition is as simple as R=P+Q, you can visualize parent points using arrows as follows.

from minicurve import MiniCurve as mc
from minicurve import Visualizer

# curve parameters
a = 1
b = 7
p = 13

P = mc(a, b, p, x=10, y=4, label='P', color='tab:orange')
Q = mc(a, b, p, x=9, y=11, label='Q', color='tab:orange')

R = P + Q
R.setColor('tab:red')
R.setLabel('R')

R.x_delta = -0.3
R.arrow_thickness = 0.01 # you can control the thickness of the arrow

# visualize the finite field
vis = Visualizer(a, b, p)
vis.makeField()
vis.points = [P, Q, R]
vis.generatePlot(title='points addition $P+Q=R$ using minicurve', addition=True)



outputs

Multiplication by scalar works in similar way as you can simply P=4*G and visualize the scalar using arrow path

from minicurve import MiniCurve as mc
from minicurve import Visualizer

# curve parameters
a = 0
b = 5
p = 7

G = mc(a, b, p, x=3, y=2, label='G', color='tab:green', tracing=True)
# tracing=True option will enabling plotting the arrows indicating scalar multiplication

# private key
k = 4

# public key
P = k*G

P.setColor('tab:orange')
P.setLabel('P')
P.x_delta = 0.08 # you can control the label placement relative to the point

# visualize the finite field
vis = Visualizer(a, b, p)
vis.makeField()
vis.points = [G, P]
vis.generatePlot(title='scalar multiplication $k \cdot G=P, k=4$ using minicurve')
vis.plot('images/example_mul.png')


outputs

## FAQ

### What are the valid values of colors?

We are using Matplotlib colors.

## Thanks!

Code for computing quadratic residues from this gist. Thanks to Nakov.

## Project details

Uploaded source
Uploaded py3