sbp-4.10.0: src/SwiftNav/SBP/Signing.hs
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE RecordWildCards #-}
-- |
-- Module: SwiftNav.SBP.Signing
-- Copyright: Copyright (C) 2015-2021 Swift Navigation, Inc.
-- License: MIT
-- Contact: https://support.swiftnav.com
-- Stability: experimental
-- Portability: portable
--
-- \< Messages relating to signatures \>
module SwiftNav.SBP.Signing
( module SwiftNav.SBP.Signing
) where
import BasicPrelude
import Control.Lens
import Control.Monad.Loops
import Data.Binary
import Data.Binary.Get
import Data.Binary.IEEE754
import Data.Binary.Put
import Data.ByteString.Lazy hiding (ByteString)
import Data.Int
import Data.Word
import SwiftNav.SBP.TH
import SwiftNav.SBP.Types
import SwiftNav.SBP.Gnss
{-# ANN module ("HLint: ignore Use camelCase"::String) #-}
{-# ANN module ("HLint: ignore Redundant do"::String) #-}
{-# ANN module ("HLint: ignore Use newtype instead of data"::String) #-}
msgEd25519SignatureDep :: Word16
msgEd25519SignatureDep = 0x0C01
data MsgEd25519SignatureDep = MsgEd25519SignatureDep
{ _msgEd25519SignatureDep_signature :: ![Word8]
-- ^ ED25519 signature for messages.
, _msgEd25519SignatureDep_fingerprint :: ![Word8]
-- ^ SHA-1 fingerprint of the associated certificate.
, _msgEd25519SignatureDep_signed_messages :: ![Word32]
-- ^ CRCs of signed messages.
} deriving ( Show, Read, Eq )
instance Binary MsgEd25519SignatureDep where
get = do
_msgEd25519SignatureDep_signature <- replicateM 64 getWord8
_msgEd25519SignatureDep_fingerprint <- replicateM 20 getWord8
_msgEd25519SignatureDep_signed_messages <- whileM (not <$> isEmpty) getWord32le
pure MsgEd25519SignatureDep {..}
put MsgEd25519SignatureDep {..} = do
mapM_ putWord8 _msgEd25519SignatureDep_signature
mapM_ putWord8 _msgEd25519SignatureDep_fingerprint
mapM_ putWord32le _msgEd25519SignatureDep_signed_messages
$(makeSBP 'msgEd25519SignatureDep ''MsgEd25519SignatureDep)
$(makeJSON "_msgEd25519SignatureDep_" ''MsgEd25519SignatureDep)
$(makeLenses ''MsgEd25519SignatureDep)
msgEd25519Certificate :: Word16
msgEd25519Certificate = 0x0C02
data MsgEd25519Certificate = MsgEd25519Certificate
{ _msgEd25519Certificate_n_msg :: !Word8
-- ^ Total number messages that make up the certificate. First nibble is the
-- size of the sequence (n), second nibble is the zero-indexed counter
-- (ith packet of n)
, _msgEd25519Certificate_fingerprint :: ![Word8]
-- ^ SHA-1 fingerprint of the associated certificate.
, _msgEd25519Certificate_certificate_bytes :: ![Word8]
-- ^ ED25519 certificate bytes.
} deriving ( Show, Read, Eq )
instance Binary MsgEd25519Certificate where
get = do
_msgEd25519Certificate_n_msg <- getWord8
_msgEd25519Certificate_fingerprint <- replicateM 20 getWord8
_msgEd25519Certificate_certificate_bytes <- whileM (not <$> isEmpty) getWord8
pure MsgEd25519Certificate {..}
put MsgEd25519Certificate {..} = do
putWord8 _msgEd25519Certificate_n_msg
mapM_ putWord8 _msgEd25519Certificate_fingerprint
mapM_ putWord8 _msgEd25519Certificate_certificate_bytes
$(makeSBP 'msgEd25519Certificate ''MsgEd25519Certificate)
$(makeJSON "_msgEd25519Certificate_" ''MsgEd25519Certificate)
$(makeLenses ''MsgEd25519Certificate)
msgEd25519Signature :: Word16
msgEd25519Signature = 0x0C03
data MsgEd25519Signature = MsgEd25519Signature
{ _msgEd25519Signature_stream_counter :: !Word8
-- ^ Signature message counter. Zero indexed and incremented with each
-- signature message. The counter will not increment if this message was
-- in response to an on demand request. The counter will roll over after
-- 256 messages. Upon connection, the value of the counter may not
-- initially be zero.
, _msgEd25519Signature_on_demand_counter :: !Word8
-- ^ On demand message counter. Zero indexed and incremented with each
-- signature message sent in response to an on demand message. The counter
-- will roll over after 256 messages. Upon connection, the value of the
-- counter may not initially be zero.
, _msgEd25519Signature_signature :: ![Word8]
-- ^ ED25519 signature for messages.
, _msgEd25519Signature_fingerprint :: ![Word8]
-- ^ SHA-1 fingerprint of the associated certificate.
, _msgEd25519Signature_signed_messages :: ![Word32]
-- ^ CRCs of signed messages.
} deriving ( Show, Read, Eq )
instance Binary MsgEd25519Signature where
get = do
_msgEd25519Signature_stream_counter <- getWord8
_msgEd25519Signature_on_demand_counter <- getWord8
_msgEd25519Signature_signature <- replicateM 64 getWord8
_msgEd25519Signature_fingerprint <- replicateM 20 getWord8
_msgEd25519Signature_signed_messages <- whileM (not <$> isEmpty) getWord32le
pure MsgEd25519Signature {..}
put MsgEd25519Signature {..} = do
putWord8 _msgEd25519Signature_stream_counter
putWord8 _msgEd25519Signature_on_demand_counter
mapM_ putWord8 _msgEd25519Signature_signature
mapM_ putWord8 _msgEd25519Signature_fingerprint
mapM_ putWord32le _msgEd25519Signature_signed_messages
$(makeSBP 'msgEd25519Signature ''MsgEd25519Signature)
$(makeJSON "_msgEd25519Signature_" ''MsgEd25519Signature)
$(makeLenses ''MsgEd25519Signature)