Working with numbers (primes, modular, etc.)
Project description
libnum
This is a python library for some numbers functions:
- working with primes (generating, primality tests)
- common maths (gcd, lcm, n'th root)
- modular arithmetics (inverse, Jacobi symbol, square root, solve CRT)
- converting strings to numbers or binary strings
Library may be used for learning/experimenting/research purposes. Should NOT be used for secure crypto implementations.
Installation
$ pip install libnum
Note that only Python 3 version is maintained.
Development
For development or building this repository, poetry is needed.
Tests can be ran with
$ pytest --doctest-modules .
List of functions
Common maths
- len_in_bits(n) - number of bits in binary representation of @n
- randint_bits(size) - random number with a given bit size
- extract_prime_power(a, p) - s,t such that a = p**s * t
- nroot(x, n) - truncated n'th root of x
- gcd(a, b, ...) - greatest common divisor of all arguments
- lcm(a, b, ...) - least common multiplier of all arguments
- xgcd(a, b) - Extented Euclid GCD algorithm, returns (x, y, g) : a * x + b * y = gcd(a, b) = g
Modular
- has_invmod(a, n) - checks if a has modulo inverse
- invmod(a, n) - modulo inverse
- solve_crt(remainders, modules) - solve Chinese Remainder Theoreme
- factorial_mod(n, factors) - compute factorial modulo composite number, needs factorization
- nCk_mod(n, k, factors) - compute combinations number modulo composite number, needs factorization
- nCk_mod_prime_power(n, k, p, e) - compute combinations number modulo prime power
Modular square roots
- jacobi(a, b) - Jacobi symbol
- has_sqrtmod_prime_power(a, p, k) - checks if a number has modular square root, modulus is p**k
- sqrtmod_prime_power(a, p, k) - modular square root by p**k
- has_sqrtmod(a, factors) - checks if a composite number has modular square root, needs factorization
- sqrtmod(a, factors) - modular square root by a composite modulus, needs factorization
Primes
- primes(n) - list of primes not greater than @n, slow method
- generate_prime(size, k=25) - generates a pseudo-prime with @size bits length. @k is a number of tests.
- generate_prime_from_string(s, size=None, k=25) - generate a pseudo-prime starting with @s in string representation
Factorization
- is_power(n) - check if @n is p**k, k >= 2: return (p, k) or False
- factorize(n) - factorize @n (currently with rho-Pollard method) warning: format of factorization is now dict like {p1: e1, p2: e2, ...}
ECC
- Curve(a, b, p, g, order, cofactor, seed) - class for representing elliptic curve. Methods:
- .is_null(p) - checks if point is null
- .is_opposite(p1, p2) - checks if 2 points are opposite
- .check(p) - checks if point is on the curve
- .check_x(x) - checks if there are points with given x on the curve (and returns them if any)
- .find_points_in_range(start, end) - list of points in range of x coordinate
- .find_points_rand(count) - list of count random points
- .add(p1, p2) - p1 + p2 on elliptic curve
- .power(p, n) - n✕P or (P + P + ... + P) n times
- .generate(n) - n✕G
- .get_order(p, limit) - slow method, trying to determine order of p; limit is max order to try
Converting
- s2n(s) - packed string to number
- n2s(n) - number to packed string
- s2b(s) - packed string to binary string
- b2s(b) - binary string to packed string
Stuff
- grey_code(n) - number in Grey code
- rev_grey_code(g) - number from Grey code
- nCk(n, k) - number of combinations
- factorial(n) - factorial
About
Author: hellman
License: MIT License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file libnum-1.7.1.tar.gz.
File metadata
- Download URL: libnum-1.7.1.tar.gz
- Upload date:
- Size: 13.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.0rc1 CPython/3.8.2 Linux/5.4.0-47-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c13d0001c8e67d0e310e36f16b59c14114840b718888a613e17ad36c6ecc9422
|
|
| MD5 |
80f92bfe9b1372d73c2d7c116f861bff
|
|
| BLAKE2b-256 |
d1b325a3af3537d5dbcd23c651b942e6715b55f3ffeada97a5be328c0f1ac7a1
|
File details
Details for the file libnum-1.7.1-py3-none-any.whl.
File metadata
- Download URL: libnum-1.7.1-py3-none-any.whl
- Upload date:
- Size: 14.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.0rc1 CPython/3.8.2 Linux/5.4.0-47-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eb56a64397e68571795792a6732102387dd74d16596a115e03c3d0215149fa35
|
|
| MD5 |
5880e4525ad58f77afb0249950fa46fe
|
|
| BLAKE2b-256 |
5fc717e4c6bf91e06c6ac1fbe2100f4761248cac960e63a4cc4d63a9c53afac0
|