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::new(sn, digest.into())
62 }
63}
64
65impl From<(Digest, u64, Digest)> for EventSeal {
66 fn from((identifier, sn, digest): (Digest, u64, Digest)) -> Self {
67 let said: SelfAddressingIdentifier = identifier.into();
68 let digest_said: SelfAddressingIdentifier = digest.into();
69 EventSeal::new(
70 IdentifierPrefix::SelfAddressing(said.into()),
71 sn,
72 digest_said.into(),
73 )
74 }
75}
76
77impl From<(PublicKey, u64, Digest)> for EventSeal {
78 fn from((identifier, sn, digest): (PublicKey, u64, Digest)) -> Self {
79 let digest_said: SelfAddressingIdentifier = digest.into();
80 EventSeal::new(
81 IdentifierPrefix::Basic(identifier.into()),
82 sn,
83 digest_said.into(),
84 )
85 }
86}
87
88impl From<Identifier> for IdentifierPrefix {
89 fn from(identifier: Identifier) -> Self {
90 match identifier.0 {
91 IdentifierCode::Basic(bp) => IdentifierPrefix::Basic(BasicPrefix::new(
92 bp,
93 crate::keys::PublicKey::new(identifier.1),
94 )),
95 IdentifierCode::SelfAddressing(sa) => IdentifierPrefix::SelfAddressing(
96 SelfAddressingIdentifier::new(sa.into(), identifier.1).into(),
97 ),
98 }
99 }
100}
101
102impl Into<Signature> for SelfSigningPrefix {
103 fn into(self) -> Signature {
104 (self.get_code(), self.derivative())
105 }
106}
107
108impl Into<PublicKey> for BasicPrefix {
109 fn into(self) -> PublicKey {
110 (self.get_code(), self.derivative())
111 }
112}
113
114impl Into<CesrIndexedSignature> for IndexedSignature {
115 fn into(self) -> CesrIndexedSignature {
116 (
117 AttachedSignatureCode::new(self.signature.get_code(), (&self.index).into()),
118 self.derivative(),
119 )
120 }
121}
122
123impl Into<CesrIndex> for &Index {
124 fn into(self) -> CesrIndex {
125 match self {
126 Index::CurrentOnly(i) => {
127 if *i < 64 {
128 CesrIndex::CurrentOnly(*i)
129 } else {
130 CesrIndex::BigCurrentOnly(*i)
131 }
132 }
133 Index::BothSame(i) => CesrIndex::BothSame(*i),
134 Index::BothDifferent(i, pi) => {
135 if *i < 64 {
136 CesrIndex::Dual(*i, *pi)
137 } else {
138 CesrIndex::BigDual(*i, *pi)
139 }
140 }
141 }
142 }
143}
144
145impl Into<Identifier> for IdentifierPrefix {
146 fn into(self) -> Identifier {
147 match &self {
148 IdentifierPrefix::Basic(bp) => {
149 (IdentifierCode::Basic(bp.get_code()), self.derivative())
150 }
151 IdentifierPrefix::SelfAddressing(sa) => (
152 IdentifierCode::SelfAddressing((&sa.said.derivation).into()),
153 self.derivative(),
154 ),
155 IdentifierPrefix::SelfSigning(_ss) => todo!(),
156 }
157 }
158}