packages feed

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)