dpp/identity/identity_public_key/v0/
mod.rs1mod accessors;
2mod conversion;
3mod methods;
4#[cfg(feature = "random-public-keys")]
5mod random;
6
7pub use crate::identity::KeyType;
8pub use crate::identity::Purpose;
9pub use crate::identity::SecurityLevel;
10
11use bincode::{Decode, Encode};
12
13#[cfg(feature = "json-conversion")]
14use crate::serialization::json_safe_fields;
15use platform_value::BinaryData;
16use serde::{Deserialize, Serialize};
17
18use crate::identity::identity_public_key::contract_bounds::ContractBounds;
19use crate::identity::identity_public_key::key_type::KEY_TYPE_MAX_SIZE_TYPE;
20use crate::identity::Purpose::AUTHENTICATION;
21use crate::identity::SecurityLevel::MASTER;
22use crate::identity::{KeyID, TimestampMillis};
23#[cfg(feature = "state-transitions")]
24use crate::state_transition::public_key_in_creation::v0::IdentityPublicKeyInCreationV0;
25
26#[cfg_attr(feature = "json-conversion", json_safe_fields)]
27#[derive(
28 Default,
29 Debug,
30 Serialize,
31 Deserialize,
32 Encode,
33 Decode,
34 Clone,
35 PartialEq,
36 Eq,
37 Ord,
38 PartialOrd,
39 Hash,
40)]
41#[serde(rename_all = "camelCase")]
42pub struct IdentityPublicKeyV0 {
43 pub id: KeyID,
44 pub purpose: Purpose,
45 pub security_level: SecurityLevel,
46 pub contract_bounds: Option<ContractBounds>,
47 #[serde(rename = "type")]
48 pub key_type: KeyType,
49 pub read_only: bool,
50 pub data: BinaryData,
51 #[serde(default)]
52 pub disabled_at: Option<TimestampMillis>,
53}
54
55impl IdentityPublicKeyV0 {
56 pub fn max_possible_size_key(id: KeyID) -> Self {
57 let key_type = *KEY_TYPE_MAX_SIZE_TYPE;
58 let purpose = AUTHENTICATION;
59 let security_level = MASTER;
60 let read_only = false;
61 let data = BinaryData::new(vec![255; key_type.default_size()]);
62
63 IdentityPublicKeyV0 {
64 id,
65 key_type,
66 purpose,
67 security_level,
68 read_only,
69 disabled_at: None,
70 data,
71 contract_bounds: None,
72 }
73 }
74}
75
76#[cfg(feature = "state-transitions")]
77impl Into<IdentityPublicKeyInCreationV0> for &IdentityPublicKeyV0 {
78 fn into(self) -> IdentityPublicKeyInCreationV0 {
79 IdentityPublicKeyInCreationV0 {
80 id: self.id,
81 purpose: self.purpose,
82 security_level: self.security_level,
83 key_type: self.key_type,
84 read_only: self.read_only,
85 data: self.data.clone(),
86 signature: BinaryData::default(),
87 contract_bounds: self.contract_bounds.clone(),
88 }
89 }
90}