|
@@ -10,6 +10,7 @@ import Crypto.Error (maybeCryptoError)
|
|
|
import Data.Maybe
|
|
|
import qualified Text.Read as Read
|
|
|
|
|
|
+-- | Capability algorithms
|
|
|
data Algo = Sha3_512Ed25519 deriving (Eq, Ord, Bounded, Enum)
|
|
|
instance Show Algo where
|
|
|
show Sha3_512Ed25519 = "SHA3_512-ED25519"
|
|
@@ -22,26 +23,31 @@ instance Read.Read Algo where
|
|
|
lastIn = drop (length txt) input
|
|
|
in if firstIn == txt then Just (test, lastIn) else Nothing
|
|
|
|
|
|
+-- | Public capabilities data
|
|
|
+data PCP = PCPSha3_512Ed25519 ByteString Ed25519.PublicKey
|
|
|
+ | PAll
|
|
|
|
|
|
-data SCP = SCPSha3_512Ed25519 ByteString Ed25519.PublicKey
|
|
|
- | SAll
|
|
|
-
|
|
|
+-- | The fCMTP CP revocation header: "CP-Revoked"
|
|
|
revocationHeader :: String
|
|
|
revocationHeader = "CP-Revoked"
|
|
|
|
|
|
+-- | The fCMTP header for public access: "CP-Grant-All"
|
|
|
publicHeader :: String
|
|
|
publicHeader = "CP-Grant-All"
|
|
|
|
|
|
+-- | The fCMTP CP algorithm header: "CP-Algorithm"
|
|
|
algoHeader :: String
|
|
|
algoHeader = "CP-Algorithm"
|
|
|
|
|
|
+-- | The fCMTP CP shared key header: "CP-Shared-Key"
|
|
|
sharedKeyHeader :: String
|
|
|
sharedKeyHeader = "CP-Shared-Key"
|
|
|
|
|
|
+-- | The fMCTP CP id header: "CP-Id"
|
|
|
idHeader :: String
|
|
|
idHeader = "CP-Id"
|
|
|
|
|
|
-sFromHeaders :: Resc.PlainHeaders -> Maybe SCP
|
|
|
+sFromHeaders :: Resc.PlainHeaders -> Maybe PCP
|
|
|
sFromHeaders hh = let
|
|
|
shh = Resc.sealed hh
|
|
|
pbc = fromMaybe False $ Resc.getBooleanHeader shh publicHeader
|
|
@@ -49,12 +55,12 @@ sFromHeaders hh = let
|
|
|
in
|
|
|
if revoked then Nothing
|
|
|
else
|
|
|
- if pbc then Just SAll
|
|
|
+ if pbc then Just PAll
|
|
|
else do
|
|
|
algo <- Resc.getReadHeader shh algoHeader
|
|
|
sh' <- Resc.getBase64Header shh sharedKeyHeader
|
|
|
sh <- maybeCryptoError . Ed25519.publicKey $ sh'
|
|
|
cid <- Resc.getBase64Header shh idHeader
|
|
|
case algo of
|
|
|
- Sha3_512Ed25519 -> pure $ SCPSha3_512Ed25519 cid sh
|
|
|
+ Sha3_512Ed25519 -> pure $ PCPSha3_512Ed25519 cid sh
|
|
|
|