Skip to main content

crypto_bigint/modular/boxed_monty_form/
from.rs

1//! `From`-like conversions for [`BoxedMontyForm`] and [`BoxedMontyParams`].
2
3use super::{BoxedMontyForm, BoxedMontyParams, MontyParams};
4use crate::{
5    BoxedUint,
6    modular::{ConstMontyForm, ConstMontyParams, FixedMontyForm, FixedMontyParams},
7};
8
9impl<const LIMBS: usize, Params> From<ConstMontyForm<Params, LIMBS>> for BoxedMontyForm
10where
11    Params: ConstMontyParams<LIMBS>,
12{
13    fn from(input: ConstMontyForm<Params, LIMBS>) -> Self {
14        Self::from(&input)
15    }
16}
17
18impl<const LIMBS: usize, Params> From<&ConstMontyForm<Params, LIMBS>> for BoxedMontyForm
19where
20    Params: ConstMontyParams<LIMBS>,
21{
22    fn from(input: &ConstMontyForm<Params, LIMBS>) -> Self {
23        BoxedMontyForm {
24            montgomery_form: input.as_montgomery().into(),
25            params: Params::PARAMS.into(),
26        }
27    }
28}
29
30impl<const LIMBS: usize> From<FixedMontyForm<LIMBS>> for BoxedMontyForm {
31    fn from(input: FixedMontyForm<LIMBS>) -> Self {
32        Self::from(&input)
33    }
34}
35
36impl<const LIMBS: usize> From<&FixedMontyForm<LIMBS>> for BoxedMontyForm {
37    fn from(input: &FixedMontyForm<LIMBS>) -> Self {
38        BoxedMontyForm {
39            montgomery_form: input.as_montgomery().into(),
40            params: input.params().into(),
41        }
42    }
43}
44
45impl<const LIMBS: usize> From<&FixedMontyParams<LIMBS>> for BoxedMontyParams {
46    fn from(params: &FixedMontyParams<LIMBS>) -> Self {
47        MontyParams::<BoxedUint> {
48            modulus: params.modulus.into(),
49            one: params.one.into(),
50            r2: params.r2.into(),
51            mod_inv: params.mod_inv,
52            mod_leading_zeros: params.mod_leading_zeros,
53        }
54        .into()
55    }
56}
57
58impl<const LIMBS: usize> From<FixedMontyParams<LIMBS>> for BoxedMontyParams {
59    fn from(params: FixedMontyParams<LIMBS>) -> Self {
60        BoxedMontyParams::from(&params)
61    }
62}