{-# LANGUAGE OverloadedStrings, GeneralizedNewtypeDeriving, MultiParamTypeClasses, FlexibleInstances #-} {- Copyright 2016 Joey Hess - - Licensed under the GNU AGPL version 3 or higher. -} module Types where import Types.Cost import qualified Data.ByteString as B import Data.String import Control.DeepSeq -- | keysafe stores secret keys. newtype SecretKey = SecretKey B.ByteString -- | The secret key, encrypted with a password. data EncryptedSecretKey = EncryptedSecretKey B.ByteString (CostCalc BruteForceOp UnknownPassword) instance NFData EncryptedSecretKey where rnf (EncryptedSecretKey b _) = rnf b instance Show EncryptedSecretKey where show (EncryptedSecretKey b _) = show b instance Bruteforceable EncryptedSecretKey UnknownPassword where getBruteCostCalc (EncryptedSecretKey _ cc) = cc -- | Objects stored on a keysafe server are (probably) a shard of an -- encrypted secret key. newtype StorableObject = StorableObject { fromStorableObject :: B.ByteString } deriving (Show) -- | An identifier for a StorableObject newtype StorableObjectIdent = StorableObjectIdent B.ByteString deriving (Show, NFData) -- | A shard, with a known number (N of M). data Shard = Shard ShardNum StorableObject type ShardNum = Int -- | A password used to encrypt a key stored in keysafe. newtype Password = Password B.ByteString deriving (IsString) -- | A name associated with a key stored in keysafe. newtype Name = Name B.ByteString deriving (Show) -- | Source of the secret key stored in keysafe. data SecretKeySource = GpgKey KeyId | KeyFile FilePath deriving (Show) -- | The keyid is any value that is unique to a private key, and can be -- looked up somehow without knowing the private key. -- -- A gpg keyid is the obvious example. data KeyId = KeyId B.ByteString deriving (Show) data BenchmarkResult t = BenchmarkResult { expectedBenchmark :: t, actualBenchmark :: t } deriving (Show)