lightning_signer/util/
byte_utils.rs

1#![allow(missing_docs)]
2
3#[inline]
4pub fn slice_to_be16(v: &[u8]) -> u16 {
5    ((v[0] as u16) << 8 * 1) | ((v[1] as u16) << 8 * 0)
6}
7#[inline]
8pub fn slice_to_be32(v: &[u8]) -> u32 {
9    ((v[0] as u32) << 8 * 3)
10        | ((v[1] as u32) << 8 * 2)
11        | ((v[2] as u32) << 8 * 1)
12        | ((v[3] as u32) << 8 * 0)
13}
14#[inline]
15pub fn slice_to_le32(v: &[u8]) -> u32 {
16    ((v[0] as u32) << 8 * 0)
17        | ((v[1] as u32) << 8 * 1)
18        | ((v[2] as u32) << 8 * 2)
19        | ((v[3] as u32) << 8 * 3)
20}
21#[inline]
22pub fn slice_to_be48(v: &[u8]) -> u64 {
23    ((v[0] as u64) << 8 * 5)
24        | ((v[1] as u64) << 8 * 4)
25        | ((v[2] as u64) << 8 * 3)
26        | ((v[3] as u64) << 8 * 2)
27        | ((v[4] as u64) << 8 * 1)
28        | ((v[5] as u64) << 8 * 0)
29}
30#[inline]
31pub fn slice_to_be64(v: &[u8]) -> u64 {
32    ((v[0] as u64) << 8 * 7)
33        | ((v[1] as u64) << 8 * 6)
34        | ((v[2] as u64) << 8 * 5)
35        | ((v[3] as u64) << 8 * 4)
36        | ((v[4] as u64) << 8 * 3)
37        | ((v[5] as u64) << 8 * 2)
38        | ((v[6] as u64) << 8 * 1)
39        | ((v[7] as u64) << 8 * 0)
40}
41
42#[inline]
43pub fn be16_to_array(u: u16) -> [u8; 2] {
44    let mut v = [0; 2];
45    v[0] = ((u >> 8 * 1) & 0xff) as u8;
46    v[1] = ((u >> 8 * 0) & 0xff) as u8;
47    v
48}
49#[inline]
50pub fn be32_to_array(u: u32) -> [u8; 4] {
51    let mut v = [0; 4];
52    v[0] = ((u >> 8 * 3) & 0xff) as u8;
53    v[1] = ((u >> 8 * 2) & 0xff) as u8;
54    v[2] = ((u >> 8 * 1) & 0xff) as u8;
55    v[3] = ((u >> 8 * 0) & 0xff) as u8;
56    v
57}
58#[inline]
59pub fn le32_to_array(u: u32) -> [u8; 4] {
60    let mut v = [0; 4];
61    v[0] = ((u >> 8 * 0) & 0xff) as u8;
62    v[1] = ((u >> 8 * 1) & 0xff) as u8;
63    v[2] = ((u >> 8 * 2) & 0xff) as u8;
64    v[3] = ((u >> 8 * 3) & 0xff) as u8;
65    v
66}
67#[inline]
68pub fn be48_to_array(u: u64) -> [u8; 6] {
69    assert!(u & 0xffff_0000_0000_0000 == 0);
70    let mut v = [0; 6];
71    v[0] = ((u >> 8 * 5) & 0xff) as u8;
72    v[1] = ((u >> 8 * 4) & 0xff) as u8;
73    v[2] = ((u >> 8 * 3) & 0xff) as u8;
74    v[3] = ((u >> 8 * 2) & 0xff) as u8;
75    v[4] = ((u >> 8 * 1) & 0xff) as u8;
76    v[5] = ((u >> 8 * 0) & 0xff) as u8;
77    v
78}
79#[inline]
80pub fn be64_to_array(u: u64) -> [u8; 8] {
81    let mut v = [0; 8];
82    v[0] = ((u >> 8 * 7) & 0xff) as u8;
83    v[1] = ((u >> 8 * 6) & 0xff) as u8;
84    v[2] = ((u >> 8 * 5) & 0xff) as u8;
85    v[3] = ((u >> 8 * 4) & 0xff) as u8;
86    v[4] = ((u >> 8 * 3) & 0xff) as u8;
87    v[5] = ((u >> 8 * 2) & 0xff) as u8;
88    v[6] = ((u >> 8 * 1) & 0xff) as u8;
89    v[7] = ((u >> 8 * 0) & 0xff) as u8;
90    v
91}
92
93#[inline]
94pub fn le64_to_array(u: u64) -> [u8; 8] {
95    let mut v = [0; 8];
96    v[0] = ((u >> 8 * 0) & 0xff) as u8;
97    v[1] = ((u >> 8 * 1) & 0xff) as u8;
98    v[2] = ((u >> 8 * 2) & 0xff) as u8;
99    v[3] = ((u >> 8 * 3) & 0xff) as u8;
100    v[4] = ((u >> 8 * 4) & 0xff) as u8;
101    v[5] = ((u >> 8 * 5) & 0xff) as u8;
102    v[6] = ((u >> 8 * 6) & 0xff) as u8;
103    v[7] = ((u >> 8 * 7) & 0xff) as u8;
104    v
105}
106
107#[cfg(test)]
108mod tests {
109    use super::*;
110
111    #[test]
112    fn test_all() {
113        assert_eq!(slice_to_be16(&[0xde, 0xad]), 0xdead);
114        assert_eq!(slice_to_be32(&[0xde, 0xad, 0xbe, 0xef]), 0xdeadbeef);
115        assert_eq!(slice_to_le32(&[0xef, 0xbe, 0xad, 0xde]), 0xdeadbeef);
116        assert_eq!(slice_to_be48(&[0xde, 0xad, 0xbe, 0xef, 0x1b, 0xad]), 0xdeadbeef1bad);
117        assert_eq!(
118            slice_to_be64(&[0xde, 0xad, 0xbe, 0xef, 0x1b, 0xad, 0x1d, 0xea]),
119            0xdeadbeef1bad1dea
120        );
121        assert_eq!(be16_to_array(0xdead), [0xde, 0xad]);
122        assert_eq!(be32_to_array(0xdeadbeef), [0xde, 0xad, 0xbe, 0xef]);
123        assert_eq!(le32_to_array(0xdeadbeef), [0xef, 0xbe, 0xad, 0xde]);
124        assert_eq!(be48_to_array(0xdeadbeef1bad), [0xde, 0xad, 0xbe, 0xef, 0x1b, 0xad]);
125        assert_eq!(
126            be64_to_array(0xdeadbeef1bad1dea),
127            [0xde, 0xad, 0xbe, 0xef, 0x1b, 0xad, 0x1d, 0xea]
128        );
129        assert_eq!(
130            le64_to_array(0xdeadbeef1bad1dea),
131            [0xea, 0x1d, 0xad, 0x1b, 0xef, 0xbe, 0xad, 0xde]
132        );
133    }
134}