cryptonite-0.27: Cryptography Primitives sink
License BSD-style
Maintainer Danny Navarro <j@dannynavarro.net>
Stability experimental
Portability Good
Safe Haskell None
Language Haskell2010

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

type BinaryPolynomial = Integer Source #

Binary Polynomial represented by an integer

addF2m :: Integer -> Integer -> Integer Source #

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

mulF2m Source #

Multiplication over F₂m.

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

squareF2m' :: Integer -> Integer Source #

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.

squareF2m Source #

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.

powF2m Source #

Arguments

:: BinaryPolynomial

Modulus

-> Integer

a

-> Integer

b

-> Integer

Exponentiation in F₂m by computing a^b mod fx .

This implements an exponentiation by squaring based solution. It inherits the same restrictions as squareF2m . Negative exponents are disallowed.

modF2m Source #

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.

sqrtF2m Source #

Arguments

:: BinaryPolynomial

Modulus

-> Integer

a

-> Integer

Square rooot in F₂m.

We exploit the fact that a^(2^m) = a , or in particular, a^(2^m - 1) = 1 from a classical result by Lagrange. Thus the square root is simply a^(2^(m - 1)) .

invF2m Source #

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.

divF2m Source #

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.