keri_core/prefix/
cesr_adapter.rs1use cesrox::primitives::{
2 codes::attached_signature_code::{AttachedSignatureCode, Index as CesrIndex},
3 CesrPrimitive, Digest, Identifier, IdentifierCode, IndexedSignature as CesrIndexedSignature,
4 PublicKey, Signature,
5};
6use said::SelfAddressingIdentifier;
7
8use crate::{
9 event::sections::seal::{EventSeal, SourceSeal},
10 prefix::{BasicPrefix, IdentifierPrefix, IndexedSignature, SelfSigningPrefix},
11};
12
13use super::attached_signature::Index;
14
15impl From<CesrIndexedSignature> for IndexedSignature {
16 fn from((code, value): CesrIndexedSignature) -> Self {
17 match code.index {
18 CesrIndex::BothSame(i) => {
19 IndexedSignature::new_both_same(SelfSigningPrefix::new(code.code, value), i)
20 }
21 CesrIndex::Dual(i, pi) => {
22 IndexedSignature::new_both_diffrent(SelfSigningPrefix::new(code.code, value), i, pi)
23 }
24 CesrIndex::BigDual(i, pi) => {
25 IndexedSignature::new_both_diffrent(SelfSigningPrefix::new(code.code, value), i, pi)
26 }
27 CesrIndex::CurrentOnly(i) => {
28 IndexedSignature::new_current_only(SelfSigningPrefix::new(code.code, value), i)
29 }
30 CesrIndex::BigCurrentOnly(i) => {
31 IndexedSignature::new_current_only(SelfSigningPrefix::new(code.code, value), i)
32 }
33 }
34 }
35}
36
37impl From<CesrIndex> for Index {
38 fn from(value: CesrIndex) -> Self {
39 match value {
40 CesrIndex::BothSame(i) => Index::BothSame(i),
41 CesrIndex::Dual(i, pi) | CesrIndex::BigDual(i, pi) => Index::BothDifferent(i, pi),
42 CesrIndex::CurrentOnly(i) | CesrIndex::BigCurrentOnly(i) => Index::CurrentOnly(i),
43 }
44 }
45}
46
47impl From<PublicKey> for BasicPrefix {
48 fn from(pk: PublicKey) -> Self {
49 BasicPrefix::new(pk.0, crate::keys::PublicKey::new(pk.1))
50 }
51}
52
53impl From<Signature> for SelfSigningPrefix {
54 fn from((code, value): Signature) -> Self {
55 SelfSigningPrefix::new(code, value)
56 }
57}
58
59impl From<(u64, Digest)> for SourceSeal {
60 fn from((sn, digest): (u64, Digest)) -> Self {
61 SourceSeal {
62 sn,
63 digest: digest.into(),
64 }
65 }
66}
67
68impl From<(Digest, u64, Digest)> for EventSeal {
69 fn from((identifier, sn, digest): (Digest, u64, Digest)) -> Self {
70 let said: SelfAddressingIdentifier = identifier.into();
71 let digest_said: SelfAddressingIdentifier = digest.into();
72 EventSeal::new(
73 IdentifierPrefix::SelfAddressing(said.into()),
74 sn,
75 digest_said.into(),
76 )
77 }
78}
79
80impl From<(PublicKey, u64, Digest)> for EventSeal {
81 fn from((identifier, sn, digest): (PublicKey, u64, Digest)) -> Self {
82 let digest_said: SelfAddressingIdentifier = digest.into();
83 EventSeal::new(
84 IdentifierPrefix::Basic(identifier.into()),
85 sn,
86 digest_said.into(),
87 )
88 }
89}
90
91impl From<Identifier> for IdentifierPrefix {
92 fn from(identifier: Identifier) -> Self {
93 match identifier.0 {
94 IdentifierCode::Basic(bp) => IdentifierPrefix::Basic(BasicPrefix::new(
95 bp,
96 crate::keys::PublicKey::new(identifier.1),
97 )),
98 IdentifierCode::SelfAddressing(sa) => IdentifierPrefix::SelfAddressing(
99 SelfAddressingIdentifier::new(sa.into(), identifier.1).into(),
100 ),
101 }
102 }
103}
104
105impl Into<Signature> for SelfSigningPrefix {
106 fn into(self) -> Signature {
107 (self.get_code(), self.derivative())
108 }
109}
110
111impl Into<PublicKey> for BasicPrefix {
112 fn into(self) -> PublicKey {
113 (self.get_code(), self.derivative())
114 }
115}
116
117impl Into<CesrIndexedSignature> for IndexedSignature {
118 fn into(self) -> CesrIndexedSignature {
119 (
120 AttachedSignatureCode::new(self.signature.get_code(), (&self.index).into()),
121 self.derivative(),
122 )
123 }
124}
125
126impl Into<CesrIndex> for &Index {
127 fn into(self) -> CesrIndex {
128 match self {
129 Index::CurrentOnly(i) => {
130 if *i < 64 {
131 CesrIndex::CurrentOnly(*i)
132 } else {
133 CesrIndex::BigCurrentOnly(*i)
134 }
135 }
136 Index::BothSame(i) => CesrIndex::BothSame(*i),
137 Index::BothDifferent(i, pi) => {
138 if *i < 64 {
139 CesrIndex::Dual(*i, *pi)
140 } else {
141 CesrIndex::BigDual(*i, *pi)
142 }
143 }
144 }
145 }
146}
147
148impl Into<Identifier> for IdentifierPrefix {
149 fn into(self) -> Identifier {
150 match &self {
151 IdentifierPrefix::Basic(bp) => {
152 (IdentifierCode::Basic(bp.get_code()), self.derivative())
153 }
154 IdentifierPrefix::SelfAddressing(sa) => (
155 IdentifierCode::SelfAddressing((&sa.said.derivation).into()),
156 self.derivative(),
157 ),
158 IdentifierPrefix::SelfSigning(_ss) => todo!(),
159 }
160 }
161}