mirror of
https://github.com/lightningdevkit/rust-lightning.git
synced 2025-02-26 15:42:52 +01:00
This changes the LICENSE file and adds license headers to most files to relicense under dual Apache-2.0 and MIT. This is helpful in that we retain the patent grant issued under Apache-2.0-licensed work, avoiding some sticky patent issues, while still allowing users who are more comfortable with the simpler MIT license to use that. See https://github.com/rust-bitcoin/rust-lightning/issues/659 for relicensing statements from code authors.
135 lines
3.8 KiB
Rust
135 lines
3.8 KiB
Rust
// This file is Copyright its original authors, visible in version control
|
|
// history.
|
|
//
|
|
// This file is licensed under the Apache License, Version 2.0 <LICENSE-APACHE
|
|
// or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
|
|
// You may not use this file except in accordance with one or both of these
|
|
// licenses.
|
|
|
|
#[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)
|
|
}
|
|
#[cfg(not(feature = "fuzztarget"))] // Used only by poly1305
|
|
#[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
|
|
}
|
|
#[cfg(not(feature = "fuzztarget"))] // Used only by poly1305
|
|
#[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]);
|
|
}
|
|
}
|