module Network.CCNx.Messages ( Message (..) , ContentObject (..) , Content , Name , Component , SignedInfo (..) , Interest (..) , PublisherPublicKeyDigest , Exclude (..) , AnyBloom (..) , ChildSelector , AnswerOriginKind , Scope , Nonce , MinSuffixComponents , MaxSuffixComponents , Timestamp , FreshnessSeconds , FinalBlockID , Type (..) , KeyLocator (..) , Signature (..) , DigestAlgorithm , Witness , SignatureBits , PublisherID (..) ) where import Data.ByteString (ByteString) import Data.Word -- | The two types of CCNx messages. data Message = ContentObjectMessage ContentObject | InterestMessage Interest data ContentObject = ContentObject Signature Name SignedInfo Content type Content = ByteString type Name = [Component] type Component = String data SignedInfo = SignedInfo PublisherPublicKeyDigest Timestamp (Maybe Type) (Maybe FreshnessSeconds) (Maybe FinalBlockID) (Maybe KeyLocator) data Interest = Interest Name (Maybe MinSuffixComponents) (Maybe MaxSuffixComponents) (Maybe PublisherID) (Maybe Exclude) (Maybe ChildSelector) (Maybe AnswerOriginKind) (Maybe Scope) (Maybe Nonce) type PublisherPublicKeyDigest = String data Exclude = Exclude (Maybe AnyBloom) [(Component, Maybe AnyBloom)] data AnyBloom = Any | Bloom String type ChildSelector = Int type AnswerOriginKind = Int type Scope = Int type Nonce = String type MinSuffixComponents = Int type MaxSuffixComponents = Int type Timestamp = Word16 -- 12 bit fraction type FreshnessSeconds = Int type FinalBlockID = String data Type = DATA | ENCR | GONE | KEY | LINK | NACK data KeyLocator = Key String | Certificate String | KeyName Name (Maybe PublisherID) data Signature = Signature (Maybe DigestAlgorithm) (Maybe Witness) SignatureBits type DigestAlgorithm = String type Witness = String type SignatureBits = String data PublisherID = PublisherIDPublisherPublicKeyDigest PublisherPublicKeyDigest | PublisherCertificateDigest String | PublisherIssuerKeyDigest String | PublisherIssuerCertificateDigest String