summaryrefslogtreecommitdiffhomepage
path: root/ProtocolBuffers.hs
diff options
context:
space:
mode:
Diffstat (limited to 'ProtocolBuffers.hs')
-rw-r--r--ProtocolBuffers.hs83
1 files changed, 59 insertions, 24 deletions
diff --git a/ProtocolBuffers.hs b/ProtocolBuffers.hs
index d5d6a0e..2d59528 100644
--- a/ProtocolBuffers.hs
+++ b/ProtocolBuffers.hs
@@ -48,9 +48,6 @@ data MessageP a
data ActivityP a = ActivityP
{ activityP :: Required 6 (Message a)
- -- This is not included, because the hash is never actually sent
- -- over the wire!
- -- , prevAtivityP :: Optional 7 (Message HashP)
, elapsedTimeP :: Required 8 (Message ElapsedTimeP)
, activitySignatureP :: Required 9 (Message SignatureP)
}
@@ -63,52 +60,65 @@ data ControlP = ControlP
deriving (Generic)
data ControlActionP
- = RejectedP
- { rejectedP :: Required 12 (Message (ActivityP EnteredP)) }
+ = EnteredRejectedP
+ { enteredRejectedP :: Required 12 (Message HashP)
+ , enteredLastAcceptedP :: Optional 13 (Message HashP)
+ }
| SessionKeyP
- { sessionKeyP :: Required 13 (Message (PerhapsSignedP PublicKeyP)) }
+ { sessionKeyP :: Required 14 (Message (PerhapsSignedP PublicKeyP)) }
| SessionKeyAcceptedP
- { sessionKeyAcceptedP :: Required 14 (Message PublicKeyP) }
+ { sessionKeyAcceptedP :: Required 15 (Message PublicKeyP) }
| SessionKeyRejectedP
- { sessionKeyRejectedP :: Required 15 (Message PublicKeyP) }
+ { sessionKeyRejectedP :: Required 16 (Message PublicKeyP) }
| ChatMessageP
- { chatMessageSenderName :: Required 16 (Value B.ByteString)
- , chatMessage :: Required 17 (Value B.ByteString)
+ { chatMessageSenderName :: Required 17 (Value B.ByteString)
+ , chatMessage :: Required 18 (Value B.ByteString)
}
deriving (Generic)
data SignatureP
= Ed25519SignatureP
- { ed25519SignatureP :: Required 18 (Value B.ByteString) }
+ { ed25519SignatureP :: Required 19 (Value B.ByteString) }
| OtherSignatureP
- { otherSignatureP :: Required 19 (Value B.ByteString) }
+ { otherSignatureP :: Required 20 (Value B.ByteString) }
deriving (Generic)
data PublicKeyP = PublicKeyP
- { mkPublicKeyP :: Required 20 (Value B.ByteString) }
+ { mkPublicKeyP :: Required 21 (Value B.ByteString) }
deriving (Generic)
data PerhapsSignedP a
= GpgSignedP
- { gpgSignedValP :: Required 21 (Message a)
- , gpgSigP :: Required 22 (Message GpgSigP)
+ { gpgSignedValP :: Required 22 (Message a)
+ , gpgSigP :: Required 23 (Message GpgSigP)
}
| UnSignedP
- { mkUnSignedP :: Required 23 (Message a )
+ { mkUnSignedP :: Required 24 (Message a )
}
deriving (Generic)
data GpgSigP = GpgSigP
- { mkGpgSigP :: Required 24 (Value B.ByteString) }
+ { mkGpgSigP :: Required 25 (Value B.ByteString) }
deriving (Generic)
data ElapsedTimeP = ElapsedTimeP
- { mkElapsedTimeP :: Required 25 (Value Double) }
+ { mkElapsedTimeP :: Required 26 (Value Double) }
deriving (Generic)
data AnyMessageP
- = UserP { mkUserP :: Required 26 (Message (MessageP SeenP)) }
- | DeveloperP { mkDeveloperP :: Required 27 (Message (MessageP EnteredP)) }
+ = UserP { mkUserP :: Required 27 (Message (MessageP SeenP)) }
+ | DeveloperP { mkDeveloperP :: Required 28 (Message (MessageP EnteredP)) }
+ deriving (Generic)
+
+data HashP = HashP
+ { hashMethodP :: Required 29 (Message HashMethodP)
+ , hashValueP :: Required 30 (Value B.ByteString)
+ }
+ deriving (Generic)
+
+data HashMethodP
+ = SHA512P { mkSHA512P :: Required 31 (Value Bool) }
+ | SHA3P { mkSHA3P :: Required 32 (Value Bool) }
deriving (Generic)
-- | Conversion between protocol buffer messages and debug-me's main Types.
@@ -155,6 +165,7 @@ instance ProtocolBuffer p t => ProtocolBuffer (ActivityP p) (T.Activity t) where
fromProtocolBuffer p = T.Activity
{ T.activity = fromProtocolBuffer $ getField $ activityP p
, T.prevActivity = Nothing -- not sent over the wire
+ , T.prevEntered = Nothing -- not sent over the wire
, T.elapsedTime = fromProtocolBuffer $ getField $ elapsedTimeP p
, T.activitySignature = fromProtocolBuffer $ getField $ activitySignatureP p
}
@@ -170,8 +181,10 @@ instance ProtocolBuffer ControlP T.Control where
}
instance ProtocolBuffer ControlActionP T.ControlAction where
- toProtocolBuffer (T.Rejected t) = RejectedP
- { rejectedP = putField $ toProtocolBuffer t }
+ toProtocolBuffer t@(T.EnteredRejected {}) = EnteredRejectedP
+ { enteredRejectedP = putField $ toProtocolBuffer $ T.enteredRejected t
+ , enteredLastAcceptedP = putField $ toProtocolBuffer <$> T.enteredLastAccepted t
+ }
toProtocolBuffer (T.SessionKey t) = SessionKeyP
{ sessionKeyP = putField $ toProtocolBuffer t }
toProtocolBuffer (T.SessionKeyAccepted t) = SessionKeyAcceptedP
@@ -182,8 +195,10 @@ instance ProtocolBuffer ControlActionP T.ControlAction where
{ chatMessageSenderName = putField (val sendername)
, chatMessage = putField (val t)
}
- fromProtocolBuffer p@(RejectedP {}) = T.Rejected $
- fromProtocolBuffer $ getField $ rejectedP p
+ fromProtocolBuffer p@(EnteredRejectedP {}) = T.EnteredRejected
+ { T.enteredRejected = fromProtocolBuffer $ getField $ enteredRejectedP p
+ , T.enteredLastAccepted = fromProtocolBuffer <$> getField (enteredLastAcceptedP p)
+ }
fromProtocolBuffer p@(SessionKeyP {}) = T.SessionKey $
fromProtocolBuffer $ getField $ sessionKeyP p
fromProtocolBuffer p@(SessionKeyAcceptedP {}) = T.SessionKeyAccepted $
@@ -204,6 +219,22 @@ instance ProtocolBuffer SignatureP T.Signature where
fromProtocolBuffer p@(OtherSignatureP {}) = T.OtherSignature $
Val $ getField $ otherSignatureP p
+instance ProtocolBuffer HashP T.Hash where
+ toProtocolBuffer t = HashP
+ { hashMethodP = putField $ toProtocolBuffer $ T.hashMethod t
+ , hashValueP = putField $ val $ T.hashValue t
+ }
+ fromProtocolBuffer p = T.Hash
+ { T.hashMethod = fromProtocolBuffer $ getField $ hashMethodP p
+ , T.hashValue = Val $ getField $ hashValueP p
+ }
+
+instance ProtocolBuffer HashMethodP T.HashMethod where
+ toProtocolBuffer T.SHA512 = SHA512P { mkSHA512P = putField True }
+ toProtocolBuffer T.SHA3 = SHA3P { mkSHA3P = putField True }
+ fromProtocolBuffer (SHA512P {}) = T.SHA512
+ fromProtocolBuffer (SHA3P {}) = T.SHA3
+
instance ProtocolBuffer PublicKeyP T.PublicKey where
toProtocolBuffer (T.PublicKey t) = PublicKeyP
{ mkPublicKeyP = putField (val t) }
@@ -251,6 +282,10 @@ instance Encode ControlP
instance Decode ControlP
instance Encode ControlActionP
instance Decode ControlActionP
+instance Encode HashP
+instance Decode HashP
+instance Encode HashMethodP
+instance Decode HashMethodP
instance Encode SignatureP
instance Decode SignatureP
instance Encode PublicKeyP