-- | -- Module : Crypto.TripleSec.Constants -- License : BSD-style -- Maintainer : Sam Protas -- Stability : experimental -- Portability : unknown -- module Crypto.TripleSec.Constants where import Data.Word import qualified Crypto.KDF.Scrypt as Scrypt import qualified Crypto.TripleSec.Internal as I import Crypto.TripleSec.Internal (ByteArray) magicBytes :: [Word8] magicBytes = [0x1c, 0x94, 0xd7, 0xde] packedMagicBytes :: ByteArray ba => ba packedMagicBytes = I.pack magicBytes versionBytes :: [Word8] versionBytes = [0x00, 0x00, 0x00, 0x03] packedVersionBytes :: ByteArray ba => ba packedVersionBytes = I.pack versionBytes saltLen, macOutputLen, macKeyLen, cipherKeyLen, ivLen, salsaIvLen, totalIvLen, dkLen, overhead :: Int saltLen = 16 macOutputLen = 64 macKeyLen = 48 cipherKeyLen = 32 ivLen = 16 salsaIvLen = 24 totalIvLen = 2 * ivLen + salsaIvLen dkLen = 2 * macKeyLen + 3 * cipherKeyLen overhead = length magicBytes + length versionBytes + saltLen + 2 * macOutputLen + totalIvLen paramsScrypt :: Scrypt.Parameters paramsScrypt = Scrypt.Parameters ((2 :: Word64) ^ (15 :: Word64)) 8 1 dkLen