cryptonite-0.23: Cryptography Primitives sink

Crypto.Number.F2m

Description

This module provides basic arithmetic operations over F₂m. Performance is not optimal and it doesn't provide protection against timing attacks. The m parameter is implicitly derived from the irreducible polynomial where applicable.

Synopsis

# Documentation

Binary Polynomial represented by an integer

Addition over F₂m. This is just a synonym of xor.

Arguments

 :: BinaryPolynomial Modulus -> Integer -> Integer -> Integer

Multiplication over F₂m.

This function is undefined for negative arguments, because their bit representation is platform-dependent. Zero modulus is also prohibited.

Squaring over F₂m without reduction by modulo.

The implementation utilizes the fact that for binary polynomial S(x) we have S(x)^2 = S(x^2). In other words, insert a zero bit between every bits of argument: 1101 -> 1010001.

This function is undefined for negative arguments, because their bit representation is platform-dependent.

Arguments

 :: BinaryPolynomial Modulus -> Integer -> Integer

Squaring over F₂m.

This function is undefined for negative arguments, because their bit representation is platform-dependent. Zero modulus is also prohibited.

Arguments

 :: BinaryPolynomial Modulus -> Integer -> Integer

Reduction by modulo over F₂m.

This function is undefined for negative arguments, because their bit representation is platform-dependent. Zero modulus is also prohibited.

Arguments

 :: BinaryPolynomial Modulus -> Integer -> Maybe Integer

Modular inversion over F₂m. If n doesn't have an inverse, Nothing is returned.

This function is undefined for negative arguments, because their bit representation is platform-dependent. Zero modulus is also prohibited.

Arguments

 :: BinaryPolynomial Modulus -> Integer Dividend -> Integer Divisor -> Maybe Integer Quotient

Division over F₂m. If the dividend doesn't have an inverse it returns Nothing.

This function is undefined for negative arguments, because their bit representation is platform-dependent. Zero modulus is also prohibited.