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
use crate::{Id, IdKind, ID_LEN};
#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Debug, PartialEq)]
pub struct PrivateId {
len: usize,
buf: [u8; ID_LEN],
}
#[cfg_attr(feature = "wasm", wasm_bindgen)]
impl PrivateId {
pub const fn new(sn: &[u8]) -> Self {
let mut i_s = 0;
while i_s < sn.len() && sn[i_s] == 0 {
i_s += 1;
}
let sn_len = sn.len() - i_s;
let mut buf = [0; ID_LEN];
buf[0] = 0x00 | sn_len as u8;
let mut i = 0;
while i < sn_len {
buf[1 + i] = sn[i_s + i];
i += 1;
}
return PrivateId {
len: 1 + sn_len,
buf,
};
}
pub const fn id(&self) -> Id {
Id {
len: self.len,
buf: self.buf,
}
}
pub fn try_from(id: &Id) -> Option<PrivateId> {
if id.kind() != IdKind::Private {
return None;
}
return Some(PrivateId {
len: id.len,
buf: id.buf,
});
}
}