11import std/ times
22import confutils, chronicles, chronos, results
3+ import protobuf_serialization, protobuf_serialization/ pkg/ results
34
45import logos_delivery/ waku/ [waku_core, common/ protobuf]
5- import libp2p/ protobuf/ minprotobuf
66
7- export times, confutils, chronicles, chronos, results, waku_core, protobuf, minprotobuf
7+ export times, confutils, chronicles, chronos, results, waku_core, protobuf
88
99type SerializedKey * = seq [byte ]
1010
@@ -16,57 +16,47 @@ type WakuStealthCommitmentMsg* = object
1616 stealthCommitment* : Opt [SerializedKey ]
1717 viewTag* : Opt [uint64 ]
1818
19- proc decode * (T: type WakuStealthCommitmentMsg , buffer: seq [byte ]): ProtoResult [T] =
19+ type WakuStealthCommitmentMsgPB {.proto2 .} = object
20+ request {.fieldNumber : 1 , pint .}: Opt [uint64 ]
21+ spendingPubKey {.fieldNumber : 2 .}: Opt [seq [byte ]]
22+ viewingPubKey {.fieldNumber : 3 .}: Opt [seq [byte ]]
23+ stealthCommitment {.fieldNumber : 4 .}: Opt [seq [byte ]]
24+ ephemeralPubKey {.fieldNumber : 5 .}: Opt [seq [byte ]]
25+ viewTag {.fieldNumber : 6 , pint .}: Opt [uint64 ]
26+
27+ proc nonEmptyKey (o: Opt [seq [byte ]]): Opt [SerializedKey ] =
28+ if o.isSome () and o.get ().len > 0 :
29+ o
30+ else :
31+ Opt .none (SerializedKey )
32+
33+ proc decode * (T: type WakuStealthCommitmentMsg , buffer: seq [byte ]): ProtobufResult [T] =
34+ var pb: WakuStealthCommitmentMsgPB
35+ try :
36+ pb = Protobuf .decode (buffer, WakuStealthCommitmentMsgPB )
37+ except SerializationError :
38+ return err (protobuf.ProtobufError (kind: ProtobufErrorKind .DecodeFailure ))
39+
2040 var msg = WakuStealthCommitmentMsg ()
21- let pb = initProtoBuffer (buffer)
22-
23- var request: uint64
24- discard ? pb.getField (1 , request)
25- msg.request = request == 1
26- var spendingPubKey = newSeq [byte ]()
27- discard ? pb.getField (2 , spendingPubKey)
28- msg.spendingPubKey =
29- if spendingPubKey.len > 0 :
30- Opt .some (spendingPubKey)
31- else :
32- Opt .none (SerializedKey )
33- var viewingPubKey = newSeq [byte ]()
34- discard ? pb.getField (3 , viewingPubKey)
35- msg.viewingPubKey =
36- if viewingPubKey.len > 0 :
37- Opt .some (viewingPubKey)
38- else :
39- Opt .none (SerializedKey )
41+ msg.request = pb.request.get (0 'u64 ) == 1
42+ msg.spendingPubKey = nonEmptyKey (pb.spendingPubKey)
43+ msg.viewingPubKey = nonEmptyKey (pb.viewingPubKey)
4044
4145 if msg.spendingPubKey.isSome () and msg.viewingPubKey.isSome ():
4246 msg.stealthCommitment = Opt .none (SerializedKey )
4347 msg.viewTag = Opt .none (uint64 )
4448 return ok (msg)
4549 if msg.spendingPubKey.isSome () and msg.viewingPubKey.isNone ():
46- return err (ProtoError . RequiredFieldMissing )
50+ return err (protobuf. ProtobufError (kind: ProtobufErrorKind . DecodeFailure ) )
4751 if msg.spendingPubKey.isNone () and msg.viewingPubKey.isSome ():
48- return err (ProtoError . RequiredFieldMissing )
52+ return err (protobuf. ProtobufError (kind: ProtobufErrorKind . DecodeFailure ) )
4953 if msg.request == true and msg.spendingPubKey.isNone () and msg.viewingPubKey.isNone ():
50- return err (ProtoError .RequiredFieldMissing )
51-
52- var stealthCommitment = newSeq [byte ]()
53- discard ? pb.getField (4 , stealthCommitment)
54- msg.stealthCommitment =
55- if stealthCommitment.len > 0 :
56- Opt .some (stealthCommitment)
57- else :
58- Opt .none (SerializedKey )
54+ return err (protobuf.ProtobufError (kind: ProtobufErrorKind .DecodeFailure ))
5955
60- var ephemeralPubKey = newSeq [byte ]()
61- discard ? pb.getField (5 , ephemeralPubKey)
62- msg.ephemeralPubKey =
63- if ephemeralPubKey.len > 0 :
64- Opt .some (ephemeralPubKey)
65- else :
66- Opt .none (SerializedKey )
56+ msg.stealthCommitment = nonEmptyKey (pb.stealthCommitment)
57+ msg.ephemeralPubKey = nonEmptyKey (pb.ephemeralPubKey)
6758
68- var viewTag: uint64
69- discard ? pb.getField (6 , viewTag)
59+ let viewTag = pb.viewTag.get (0 'u64 )
7060 msg.viewTag =
7161 if viewTag != 0 :
7262 Opt .some (viewTag)
@@ -75,37 +65,31 @@ proc decode*(T: type WakuStealthCommitmentMsg, buffer: seq[byte]): ProtoResult[T
7565
7666 if msg.stealthCommitment.isNone () and msg.viewTag.isNone () and
7767 msg.ephemeralPubKey.isNone ():
78- return err (ProtoError . RequiredFieldMissing )
68+ return err (protobuf. ProtobufError (kind: ProtobufErrorKind . DecodeFailure ) )
7969
8070 if msg.stealthCommitment.isSome () and msg.viewTag.isNone ():
81- return err (ProtoError . RequiredFieldMissing )
71+ return err (protobuf. ProtobufError (kind: ProtobufErrorKind . DecodeFailure ) )
8272
8373 if msg.stealthCommitment.isNone () and msg.viewTag.isSome ():
84- return err (ProtoError . RequiredFieldMissing )
74+ return err (protobuf. ProtobufError (kind: ProtobufErrorKind . DecodeFailure ) )
8575
8676 if msg.stealthCommitment.isSome () and msg.viewTag.isSome ():
8777 msg.spendingPubKey = Opt .none (SerializedKey )
8878 msg.viewingPubKey = Opt .none (SerializedKey )
8979
9080 ok (msg)
9181
92- proc encode * (msg: WakuStealthCommitmentMsg ): ProtoBuffer =
93- var serialised = initProtoBuffer ()
94-
95- serialised.write (1 , uint64 (msg.request))
96-
97- if msg.spendingPubKey.isSome ():
98- serialised.write (2 , msg.spendingPubKey.get ())
99- if msg.viewingPubKey.isSome ():
100- serialised.write (3 , msg.viewingPubKey.get ())
101- if msg.stealthCommitment.isSome ():
102- serialised.write (4 , msg.stealthCommitment.get ())
103- if msg.ephemeralPubKey.isSome ():
104- serialised.write (5 , msg.ephemeralPubKey.get ())
105- if msg.viewTag.isSome ():
106- serialised.write (6 , msg.viewTag.get ())
107-
108- return serialised
82+ proc encode * (msg: WakuStealthCommitmentMsg ): seq [byte ] =
83+ Protobuf .encode (
84+ WakuStealthCommitmentMsgPB (
85+ request: Opt .some (uint64 (msg.request)),
86+ spendingPubKey: msg.spendingPubKey,
87+ viewingPubKey: msg.viewingPubKey,
88+ stealthCommitment: msg.stealthCommitment,
89+ ephemeralPubKey: msg.ephemeralPubKey,
90+ viewTag: msg.viewTag,
91+ )
92+ )
10993
11094func toByteSeq * (str: string ): seq [byte ] {.inline .} =
11195 # # Converts a string to the corresponding byte sequence.
0 commit comments