opcua_crypto/
thumbprint.rs1use serde::{Deserialize, Serialize};
7
8use opcua_types::ByteString;
9
10#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)]
14pub struct Thumbprint {
15 value: [u8; Thumbprint::THUMBPRINT_SIZE],
18}
19
20impl From<Thumbprint> for ByteString {
21 fn from(value: Thumbprint) -> Self {
22 Self::from(&value.value)
23 }
24}
25
26impl Thumbprint {
27 pub const THUMBPRINT_SIZE: usize = 20;
29
30 pub fn new(digest: &[u8]) -> Thumbprint {
32 if digest.len() != Thumbprint::THUMBPRINT_SIZE {
33 panic!("Thumbprint is the wrong length, {}", digest.len());
34 }
35 let mut value = [0u8; Thumbprint::THUMBPRINT_SIZE];
36 value.clone_from_slice(digest);
37 Thumbprint { value }
38 }
39
40 pub fn as_byte_string(&self) -> ByteString {
42 ByteString::from(&self.value)
43 }
44
45 pub fn as_hex_string(&self) -> String {
47 let mut hex_string = String::with_capacity(self.value.len() * 2);
48 for b in self.value.iter() {
49 hex_string.push_str(&format!("{b:02x}"))
50 }
51 hex_string
52 }
53
54 pub fn value(&self) -> &[u8] {
56 &self.value[..]
57 }
58}