| Copyright | (c) Eric Crockett 2011-2017 Chris Peikert 2011-2017 |
|---|---|
| License | GPL-2 |
| Maintainer | ecrockett0@email.com |
| Stability | experimental |
| Portability | POSIX \( \def\C{\mathbb{C}} \) |
| Safe Haskell | None |
| Language | Haskell2010 |
Crypto.Lol.CRTrans
Description
Classes and helper methods for the Chinese remainder transform and ring extensions.
Documentation
class (Monad mon, Ring r) => CRTrans mon r where Source #
A ring that (possibly) supports invertible Chinese remainder transformations of various indices.
The values of crtInfo for different indices \(m\) should be
consistent, in the sense that if \(\omega_m\), \(\omega_{m'}\) are respectively
\(m\)th, \(m'\)th roots of unity where \(m\) divides \(m'\), then
it should be the case that \(\omega_{m'}^{m'/m}=\omega_m\).
Minimal complete definition
Methods
crtInfo :: Reflects m Int => TaggedT m mon (CRTInfo r) Source #
CRTInfo for a given index \(m\). The method itself may be
slow, but the function it returns should be fast, e.g., via
internal memoization.
Instances
| CRTrans Maybe Double Source # | Returns |
| CRTrans Maybe Int Source # | Returns |
| CRTrans Maybe Int64 Source # | Returns |
| CRTrans Maybe Integer Source # | Returns |
| (Monad mon, Transcendental a) => CRTrans mon (Complex a) Source # | Complex numbers have |
| (CRTrans mon a, CRTrans mon b) => CRTrans mon (a, b) Source # | Product ring |
| GFCtx k fp d => CRTrans Maybe (GF k fp d) Source # | |
| (Reflects k q z, ToInteger z, PID z, Enumerable (ZqBasic k q z)) => CRTrans Maybe (ZqBasic k q z) Source # | |
class (Ring r, Ring (CRTExt r)) => CRTEmbed r where Source #
A ring with a ring embedding into some ring that has
an invertible CRT transformation for every positive index \(m\).CRTExt r
Methods
toExt :: r -> CRTExt r Source #
Embeds from r to CRTExt r
fromExt :: CRTExt r -> r Source #
Projects from to CRTExt rr
Instances
| CRTEmbed Double Source # | Embeds into the complex numbers \(\C\). |
| CRTEmbed Int Source # | Embeds into the complex numbers \(\C\). |
| CRTEmbed Int64 Source # | Embeds into the complex numbers \(\C\). |
| CRTEmbed Integer Source # | Embeds into the complex numbers \(\C\). (May not have sufficient precision.) |
| Transcendental a => CRTEmbed (Complex a) Source # | Self-embed |
| (CRTEmbed a, CRTEmbed b) => CRTEmbed (a, b) Source # | Product ring |
| (Reflects k q z, ToInteger z, Ring (ZqBasic k q z)) => CRTEmbed (ZqBasic k q z) Source # | Embeds into the complex numbers \( \C \). |
type CRTInfo r = (Int -> r, r) Source #
Information that characterizes the (invertible) Chinese remainder
transformation over a ring \(R\) (represented by the type r), namely:
- a function that returns the \(i\)th power of some principal \(m\)th root of unity (for any integer \(i\))
- the multiplicative inverse of \(\hat{m}\in R\).