dpp/identity/identity_public_key/v0/
mod.rs

1mod 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}