libsignal_protocol/keys/
pre_key.rs1use crate::{errors::FromInternalErrorCode, keys::KeyPair, raw_ptr::Raw};
2use failure::Error;
3use std::{
4 fmt::{self, Debug, Formatter},
5 ptr,
6};
7
8#[derive(Clone)]
10pub struct PreKey {
11 pub(crate) raw: Raw<sys::session_pre_key>,
12}
13
14impl PreKey {
15 pub fn new(id: u32, key_pair: &KeyPair) -> Result<PreKey, Error> {
17 unsafe {
18 let mut raw = ptr::null_mut();
19 sys::session_pre_key_create(&mut raw, id, key_pair.raw.as_ptr())
20 .into_result()?;
21
22 Ok(PreKey {
23 raw: Raw::from_ptr(raw),
24 })
25 }
26 }
27
28 pub fn id(&self) -> u32 {
30 unsafe { sys::session_pre_key_get_id(self.raw.as_const_ptr()) }
31 }
32
33 pub fn key_pair(&self) -> KeyPair {
35 unsafe {
36 let raw =
37 sys::session_pre_key_get_key_pair(self.raw.as_const_ptr());
38 assert!(!raw.is_null());
39 KeyPair {
40 raw: Raw::copied_from(raw),
41 }
42 }
43 }
44}
45
46impl_serializable!(PreKey, session_pre_key_serialize, foo);
47
48impl Debug for PreKey {
49 fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
50 f.debug_struct("PreKey")
51 .field("key_pair", &self.key_pair())
52 .field("id", &self.id())
53 .finish()
54 }
55}