Coverage Report

Created: 2025-07-23 06:36

/rust/registry/src/index.crates.io-6f17d22bba15001f/crypto-bigint-0.5.5/src/uint/concat.rs
Line
Count
Source (jump to first uncovered line)
1
use crate::{Concat, ConcatMixed, Limb, Uint};
2
3
impl<T> Concat for T
4
where
5
    T: ConcatMixed<T>,
6
{
7
    type Output = Self::MixedOutput;
8
}
9
10
/// Concatenate the two values, with `lo` as least significant and `hi`
11
/// as the most significant.
12
#[inline]
13
0
pub(crate) const fn concat_mixed<const L: usize, const H: usize, const O: usize>(
14
0
    lo: &Uint<L>,
15
0
    hi: &Uint<H>,
16
0
) -> Uint<O> {
17
0
    let top = L + H;
18
0
    let top = if top < O { top } else { O };
19
0
    let mut limbs = [Limb::ZERO; O];
20
0
    let mut i = 0;
21
22
0
    while i < top {
23
0
        if i < L {
24
0
            limbs[i] = lo.limbs[i];
25
0
        } else {
26
0
            limbs[i] = hi.limbs[i - L];
27
0
        }
28
0
        i += 1;
29
    }
30
31
0
    Uint { limbs }
32
0
}
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<16, 16, 32>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<24, 24, 48>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<1, 1, 2>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<1, 2, 3>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<1, 3, 4>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<1, 4, 5>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<1, 5, 6>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<1, 6, 7>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<1, 7, 8>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<1, 8, 9>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<1, 9, 10>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<1, 10, 11>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<1, 11, 12>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<1, 12, 13>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<1, 13, 14>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<1, 14, 15>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<1, 15, 16>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<28, 28, 56>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<32, 32, 64>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<33, 33, 66>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<34, 34, 68>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<2, 2, 4>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<2, 1, 3>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<2, 3, 5>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<2, 4, 6>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<2, 5, 7>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<2, 6, 8>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<2, 7, 9>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<2, 8, 10>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<2, 9, 11>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<2, 10, 12>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<2, 11, 13>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<2, 12, 14>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<2, 13, 15>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<2, 14, 16>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<48, 48, 96>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<3, 3, 6>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<3, 1, 4>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<3, 2, 5>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<3, 4, 7>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<3, 5, 8>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<3, 6, 9>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<3, 7, 10>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<3, 8, 11>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<3, 9, 12>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<3, 10, 13>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<3, 11, 14>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<3, 12, 15>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<3, 13, 16>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<64, 64, 128>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<4, 4, 8>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<4, 1, 5>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<4, 2, 6>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<4, 3, 7>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<4, 5, 9>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<4, 6, 10>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<4, 7, 11>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<4, 8, 12>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<4, 9, 13>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<4, 10, 14>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<4, 11, 15>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<4, 12, 16>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<5, 5, 10>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<5, 1, 6>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<5, 2, 7>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<5, 3, 8>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<5, 4, 9>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<5, 6, 11>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<5, 7, 12>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<5, 8, 13>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<5, 9, 14>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<5, 10, 15>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<5, 11, 16>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<6, 6, 12>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<6, 1, 7>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<6, 2, 8>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<6, 3, 9>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<6, 4, 10>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<6, 5, 11>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<6, 7, 13>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<6, 8, 14>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<6, 9, 15>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<6, 10, 16>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<7, 7, 14>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<7, 1, 8>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<7, 2, 9>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<7, 3, 10>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<7, 4, 11>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<7, 5, 12>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<7, 6, 13>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<7, 8, 15>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<7, 9, 16>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<128, 128, 256>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<8, 8, 16>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<8, 1, 9>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<8, 2, 10>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<8, 3, 11>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<8, 4, 12>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<8, 5, 13>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<8, 6, 14>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<8, 7, 15>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<9, 1, 10>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<9, 2, 11>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<9, 3, 12>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<9, 4, 13>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<9, 5, 14>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<9, 6, 15>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<9, 7, 16>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<10, 10, 20>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<10, 1, 11>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<10, 2, 12>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<10, 3, 13>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<10, 4, 14>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<10, 5, 15>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<10, 6, 16>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<11, 1, 12>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<11, 2, 13>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<11, 3, 14>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<11, 4, 15>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<11, 5, 16>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<12, 12, 24>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<12, 1, 13>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<12, 2, 14>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<12, 3, 15>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<12, 4, 16>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<13, 1, 14>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<13, 2, 15>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<13, 3, 16>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<14, 14, 28>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<14, 1, 15>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<14, 2, 16>
Unexecuted instantiation: crypto_bigint::uint::concat::concat_mixed::<15, 1, 16>
33
34
#[cfg(test)]
35
mod tests {
36
    use crate::{ConcatMixed, U128, U192, U64};
37
38
    #[test]
39
    fn concat() {
40
        let hi = U64::from_u64(0x0011223344556677);
41
        let lo = U64::from_u64(0x8899aabbccddeeff);
42
        assert_eq!(
43
            hi.concat(&lo),
44
            U128::from_be_hex("00112233445566778899aabbccddeeff")
45
        );
46
    }
47
48
    #[test]
49
    fn concat_mixed() {
50
        let a = U64::from_u64(0x0011223344556677);
51
        let b = U128::from_u128(0x8899aabbccddeeff_8899aabbccddeeff);
52
        assert_eq!(
53
            a.concat_mixed(&b),
54
            U192::from_be_hex("00112233445566778899aabbccddeeff8899aabbccddeeff")
55
        );
56
        assert_eq!(
57
            b.concat_mixed(&a),
58
            U192::from_be_hex("8899aabbccddeeff8899aabbccddeeff0011223344556677")
59
        );
60
    }
61
62
    #[test]
63
    fn convert() {
64
        let res: U128 = U64::ONE.mul_wide(&U64::ONE).into();
65
        assert_eq!(res, U128::ONE);
66
67
        let res: U128 = U64::ONE.square_wide().into();
68
        assert_eq!(res, U128::ONE);
69
    }
70
}