Skip to main content

a library for calculating Tate bilinear pairing especially on super-singularelliptic curve E:y^2=x^3-x+1 in affine coordinates defined over a Galois Field GF(3^m)

Project description

Introduction

This package is a Python library for calculating Tate bilinear pairing, especially on super-singular elliptic curve $E:y^2=x^3-x+1$ in affine coordinates defined over a Galois Field $GF(3^m)$.

This package is also for calculating the addition of two elements in the elliptic curve group, and the addition of $k$ identical element in the elliptic curve group.

The code of this package for computing the Tate bilinear pairing follows the paper by Beuchat et al [3]. The code of this package for computing the elliptic curve group operation follows the paper by Kerins et al [2].

This package is in PURE Python, working with Python 2.7 and 3.2.

This package computes one Tate bilinear pairing within 10.1 seconds @ AMD P320 (2.1GHz).


What is Tate bilinear pairing

Generally speaking, The Tate bilinear pairing algorithm is a transformation that takes two points on an elliptic curve and outputs a nonzero element in the extension field $GF(3^{6m})$. The state-of-the-art way of computing the Tate bilinear pairing is eta pairing, introduced by Barreto et al [4]. For more information, please refer to [1,2,3,4].


Usage 1: calculating Tate bilinear pairing

Given two random numbers like this:

>>> import random
>>> a = random.randint(0,1000)
>>> b = random.randint(0,1000)

Computing two elements $[inf1, x1, y1]$, and $[inf2, x2, y2]$ in the elliptic curve group:

>>> from tate_bilinear_pairing import ecc
>>> g = ecc.gen()
>>> inf1, x1, y1 = ecc.scalar_mult(a, g)
>>> inf2, x2, y2 = ecc.scalar_mult(b, g)

Tate bilinear pairing is done via:

>>> from tate_bilinear_pairing import eta
>>> t = eta.pairing(x1, y1, x2, y2)

Usage 2: calculating the addition of two elements in the elliptic curve group

Given two elements $p1=[inf1, x1, y1]$, and $p2=[inf2, x2, y2]$ in the elliptic curve group, the addition is done via:

>>> p3 = ecc.add(p1, p2)

Usage 3: calculating the addition of $k$ identical elements

Given a non-negative integer $k$ and an group element $p1=[inf1, x1, y1]$, $k cdot p1$ is computed via:

>>> p3 = ecc.scalar_mult(k, p1)

References

[1] I. Duursma, H.S. Lee.

“Tate pairing implementation for hyper-elliptic curves $y^2=x^p-x+d$”.

[2] T. Kerins, W.P. Marnane, E.M. Popovici, and P.S.L.M. Barreto.
“Efficient hardware for the Tate pairing calculation in characteristic

three”.

[3] J. Beuchat, N. Brisebarre, J. Detrey, E. Okamoto, M. Shirase, and T. Takagi.
“Algorithms and Arithmetic Operators for Computing the $eta_T$ Pairing

in Characteristic Three”.

[4] P.S.L.M. Barreto, S.D. Galbraith, C. O hEigeartaigh, and M. Scott,

“Efficient Pairing Computation on Supersingular Abelian Varieties”.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tate_bilinear_pairing-0.2.3.tar.gz (12.2 kB view details)

Uploaded Source

File details

Details for the file tate_bilinear_pairing-0.2.3.tar.gz.

File metadata

File hashes

Hashes for tate_bilinear_pairing-0.2.3.tar.gz
Algorithm Hash digest
SHA256 68f18f01e81681a45dcaa2420f8fbb37f007d185273ddbcadbbf169c3e51929a
MD5 8e9db10dde19a0b4d562c97a41ce4cbd
BLAKE2b-256 e3658c5e58c904d5bc1a8a03426d73ee4bbe45f29f48b45971765ca9cdc1a0e0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page