lightning_signer/util/
byte_utils.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#![allow(missing_docs)]

#[inline]
pub fn slice_to_be16(v: &[u8]) -> u16 {
    ((v[0] as u16) << 8 * 1) | ((v[1] as u16) << 8 * 0)
}
#[inline]
pub fn slice_to_be32(v: &[u8]) -> u32 {
    ((v[0] as u32) << 8 * 3)
        | ((v[1] as u32) << 8 * 2)
        | ((v[2] as u32) << 8 * 1)
        | ((v[3] as u32) << 8 * 0)
}
#[inline]
pub fn slice_to_le32(v: &[u8]) -> u32 {
    ((v[0] as u32) << 8 * 0)
        | ((v[1] as u32) << 8 * 1)
        | ((v[2] as u32) << 8 * 2)
        | ((v[3] as u32) << 8 * 3)
}
#[inline]
pub fn slice_to_be48(v: &[u8]) -> u64 {
    ((v[0] as u64) << 8 * 5)
        | ((v[1] as u64) << 8 * 4)
        | ((v[2] as u64) << 8 * 3)
        | ((v[3] as u64) << 8 * 2)
        | ((v[4] as u64) << 8 * 1)
        | ((v[5] as u64) << 8 * 0)
}
#[inline]
pub fn slice_to_be64(v: &[u8]) -> u64 {
    ((v[0] as u64) << 8 * 7)
        | ((v[1] as u64) << 8 * 6)
        | ((v[2] as u64) << 8 * 5)
        | ((v[3] as u64) << 8 * 4)
        | ((v[4] as u64) << 8 * 3)
        | ((v[5] as u64) << 8 * 2)
        | ((v[6] as u64) << 8 * 1)
        | ((v[7] as u64) << 8 * 0)
}

#[inline]
pub fn be16_to_array(u: u16) -> [u8; 2] {
    let mut v = [0; 2];
    v[0] = ((u >> 8 * 1) & 0xff) as u8;
    v[1] = ((u >> 8 * 0) & 0xff) as u8;
    v
}
#[inline]
pub fn be32_to_array(u: u32) -> [u8; 4] {
    let mut v = [0; 4];
    v[0] = ((u >> 8 * 3) & 0xff) as u8;
    v[1] = ((u >> 8 * 2) & 0xff) as u8;
    v[2] = ((u >> 8 * 1) & 0xff) as u8;
    v[3] = ((u >> 8 * 0) & 0xff) as u8;
    v
}
#[inline]
pub fn le32_to_array(u: u32) -> [u8; 4] {
    let mut v = [0; 4];
    v[0] = ((u >> 8 * 0) & 0xff) as u8;
    v[1] = ((u >> 8 * 1) & 0xff) as u8;
    v[2] = ((u >> 8 * 2) & 0xff) as u8;
    v[3] = ((u >> 8 * 3) & 0xff) as u8;
    v
}
#[inline]
pub fn be48_to_array(u: u64) -> [u8; 6] {
    assert!(u & 0xffff_0000_0000_0000 == 0);
    let mut v = [0; 6];
    v[0] = ((u >> 8 * 5) & 0xff) as u8;
    v[1] = ((u >> 8 * 4) & 0xff) as u8;
    v[2] = ((u >> 8 * 3) & 0xff) as u8;
    v[3] = ((u >> 8 * 2) & 0xff) as u8;
    v[4] = ((u >> 8 * 1) & 0xff) as u8;
    v[5] = ((u >> 8 * 0) & 0xff) as u8;
    v
}
#[inline]
pub fn be64_to_array(u: u64) -> [u8; 8] {
    let mut v = [0; 8];
    v[0] = ((u >> 8 * 7) & 0xff) as u8;
    v[1] = ((u >> 8 * 6) & 0xff) as u8;
    v[2] = ((u >> 8 * 5) & 0xff) as u8;
    v[3] = ((u >> 8 * 4) & 0xff) as u8;
    v[4] = ((u >> 8 * 3) & 0xff) as u8;
    v[5] = ((u >> 8 * 2) & 0xff) as u8;
    v[6] = ((u >> 8 * 1) & 0xff) as u8;
    v[7] = ((u >> 8 * 0) & 0xff) as u8;
    v
}

#[inline]
pub fn le64_to_array(u: u64) -> [u8; 8] {
    let mut v = [0; 8];
    v[0] = ((u >> 8 * 0) & 0xff) as u8;
    v[1] = ((u >> 8 * 1) & 0xff) as u8;
    v[2] = ((u >> 8 * 2) & 0xff) as u8;
    v[3] = ((u >> 8 * 3) & 0xff) as u8;
    v[4] = ((u >> 8 * 4) & 0xff) as u8;
    v[5] = ((u >> 8 * 5) & 0xff) as u8;
    v[6] = ((u >> 8 * 6) & 0xff) as u8;
    v[7] = ((u >> 8 * 7) & 0xff) as u8;
    v
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_all() {
        assert_eq!(slice_to_be16(&[0xde, 0xad]), 0xdead);
        assert_eq!(slice_to_be32(&[0xde, 0xad, 0xbe, 0xef]), 0xdeadbeef);
        assert_eq!(slice_to_le32(&[0xef, 0xbe, 0xad, 0xde]), 0xdeadbeef);
        assert_eq!(slice_to_be48(&[0xde, 0xad, 0xbe, 0xef, 0x1b, 0xad]), 0xdeadbeef1bad);
        assert_eq!(
            slice_to_be64(&[0xde, 0xad, 0xbe, 0xef, 0x1b, 0xad, 0x1d, 0xea]),
            0xdeadbeef1bad1dea
        );
        assert_eq!(be16_to_array(0xdead), [0xde, 0xad]);
        assert_eq!(be32_to_array(0xdeadbeef), [0xde, 0xad, 0xbe, 0xef]);
        assert_eq!(le32_to_array(0xdeadbeef), [0xef, 0xbe, 0xad, 0xde]);
        assert_eq!(be48_to_array(0xdeadbeef1bad), [0xde, 0xad, 0xbe, 0xef, 0x1b, 0xad]);
        assert_eq!(
            be64_to_array(0xdeadbeef1bad1dea),
            [0xde, 0xad, 0xbe, 0xef, 0x1b, 0xad, 0x1d, 0xea]
        );
        assert_eq!(
            le64_to_array(0xdeadbeef1bad1dea),
            [0xea, 0x1d, 0xad, 0x1b, 0xef, 0xbe, 0xad, 0xde]
        );
    }
}