hnix-store-core-0.2.0.0: src/System/Nix/Internal/Signature.hs
{-|
Description : Nix-relevant interfaces to NaCl signatures.
-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module System.Nix.Internal.Signature where
import Data.ByteString (ByteString)
import qualified Data.ByteString as BS
import Data.Coerce (coerce)
import Crypto.Saltine.Core.Sign (PublicKey)
import Crypto.Saltine.Class (IsEncoding(..))
import qualified Crypto.Saltine.Internal.ByteSizes as NaClSizes
-- | A NaCl signature.
newtype Signature = Signature ByteString deriving (Eq, Ord)
instance IsEncoding Signature where
decode s
| BS.length s == NaClSizes.sign = Just (Signature s)
| otherwise = Nothing
encode = coerce
-- | A detached NaCl signature attesting to a nix archive's validity.
data NarSignature = NarSignature
{ -- | The public key used to sign the archive.
publicKey :: PublicKey
, -- | The archive's signature.
sig :: Signature
} deriving (Eq, Ord)