summaryrefslogtreecommitdiffhomepage
path: root/Crypto.hs
blob: 3d0529d3b100c9ce124458c2b5e1910f12ef4f35 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
module Crypto where

import Val
import Hash
import Types

import qualified Crypto.PubKey.Ed25519 as Ed25519
import Data.ByteArray (convert)
import Crypto.Error

dummySignature :: Signature
dummySignature = Unsigned

-- | Sign any Hashable value.
sign :: Hashable v => Ed25519.SecretKey -> Ed25519.PublicKey -> v -> Signature
sign sk pk v = Ed25519 $ Val $ convert $
	Ed25519.sign sk pk $ val $ hashValue $ hash v

-- | Verifiy a signature of any Hashable value.
verify :: Hashable v => Ed25519.PublicKey -> v -> Signature -> Bool
verify pk v (Ed25519 (Val s)) = case Ed25519.signature s of
	CryptoPassed sig -> Ed25519.verify pk (val $ hashValue $ hash v) sig
	CryptoFailed _ -> False
verify _ _ Unsigned = False