import Control.DeepSeq (NFData)
import Control.Monad (Monad(..), forM_, replicateM)
-import Data.Bits
import Data.Bool
import Data.Char (Char)
import Data.Either (Either(..), either)
import Data.Semigroup (Semigroup(..))
import Data.Text (Text)
import GHC.Generics (Generic)
-import Numeric.Natural (Natural)
-import Prelude (Integral(..), fromIntegral, div)
+import Prelude (Integral(..), fromIntegral)
import Text.Show (Show(..))
import qualified Control.Monad.Trans.State.Strict as S
import qualified Crypto.KDF.PBKDF2 as Crypto
import qualified Data.Aeson as JSON
import qualified Data.Aeson.Types as JSON
-import qualified Data.ByteArray as ByteArray
-import qualified Data.ByteString as BS
import qualified Data.Char as Char
import qualified Data.List as List
import qualified Data.Text as Text
-- using 'Crypto.fastPBKDF2_SHA256'.
credentialSecretKey :: Reifies c FFC => UUID -> Credential -> (SecretKey c)
credentialSecretKey (UUID uuid) (Credential cred) =
- fromNatural $
- BS.foldl' -- NOTE: interpret the SHA256 as a big-endian number.
- (\acc b -> acc`shiftL`8 + fromIntegral b)
- (0::Natural) $
+ fromNatural $ decodeBigEndian $
Crypto.fastPBKDF2_SHA256
Crypto.Parameters
{ Crypto.iterCounts = 1000
) where
import Control.Arrow (first)
-import Control.Applicative (Applicative(..))
import Control.DeepSeq (NFData)
import Control.Monad (Monad(..), unless)
-import Control.Monad.Trans.Reader (ReaderT(..), asks)
-import Control.Monad.Trans.Class (MonadTrans(..))
import Data.Aeson (ToJSON(..),FromJSON(..),(.:),(.:?),(.=))
import Data.Bits
import Data.Bool
let s = bs <> BS.intercalate (fromString ",") (bytesNat <$> gs)
let h = Crypto.hashWith Crypto.SHA256 s
fromNatural $
- BS.foldl' -- NOTE: interpret the SHA256 as a big-endian number.
- (\acc b -> acc`shiftL`8 + fromIntegral b)
- (0::Natural)
- (ByteArray.convert h)
+ decodeBigEndian $ ByteArray.convert h
+
+-- | @('decodeBigEndian' bs)@ interpret @bs@ as big-endian number.
+decodeBigEndian :: BS.ByteString -> Natural
+decodeBigEndian =
+ BS.foldl'
+ (\acc b -> acc`shiftL`8 + fromIntegral b)
+ (0::Natural)
-- * Type 'E'
-- | An exponent of a (necessarily cyclic) subgroup of a Finite Prime Field.