hnix-store-core-0.4.2.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 Bytes
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
| Bytes.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)