Generate HashAlgorithmPrefix instances
This commit is contained in:
parent
caec601cd1
commit
e67d8fb223
@ -34,6 +34,9 @@ instance HashAlgorithm MD5 where
|
||||
hashInternalUpdate = c_md5_update
|
||||
hashInternalFinalize = c_md5_finalize
|
||||
|
||||
instance HashAlgorithmPrefix MD5 where
|
||||
hashInternalFinalizePrefix = c_md5_finalize_prefix
|
||||
|
||||
foreign import ccall unsafe "cryptonite_md5_init"
|
||||
c_md5_init :: Ptr (Context a)-> IO ()
|
||||
|
||||
@ -42,3 +45,6 @@ foreign import ccall "cryptonite_md5_update"
|
||||
|
||||
foreign import ccall unsafe "cryptonite_md5_finalize"
|
||||
c_md5_finalize :: Ptr (Context a) -> Ptr (Digest a) -> IO ()
|
||||
|
||||
foreign import ccall "cryptonite_md5_finalize_prefix"
|
||||
c_md5_finalize_prefix :: Ptr (Context a) -> Ptr Word8 -> Word32 -> Word32 -> Ptr (Digest a) -> IO ()
|
||||
|
||||
@ -34,6 +34,9 @@ instance HashAlgorithm SHA1 where
|
||||
hashInternalUpdate = c_sha1_update
|
||||
hashInternalFinalize = c_sha1_finalize
|
||||
|
||||
instance HashAlgorithmPrefix SHA1 where
|
||||
hashInternalFinalizePrefix = c_sha1_finalize_prefix
|
||||
|
||||
foreign import ccall unsafe "cryptonite_sha1_init"
|
||||
c_sha1_init :: Ptr (Context a)-> IO ()
|
||||
|
||||
@ -42,3 +45,6 @@ foreign import ccall "cryptonite_sha1_update"
|
||||
|
||||
foreign import ccall unsafe "cryptonite_sha1_finalize"
|
||||
c_sha1_finalize :: Ptr (Context a) -> Ptr (Digest a) -> IO ()
|
||||
|
||||
foreign import ccall "cryptonite_sha1_finalize_prefix"
|
||||
c_sha1_finalize_prefix :: Ptr (Context a) -> Ptr Word8 -> Word32 -> Word32 -> Ptr (Digest a) -> IO ()
|
||||
|
||||
@ -34,6 +34,9 @@ instance HashAlgorithm SHA224 where
|
||||
hashInternalUpdate = c_sha224_update
|
||||
hashInternalFinalize = c_sha224_finalize
|
||||
|
||||
instance HashAlgorithmPrefix SHA224 where
|
||||
hashInternalFinalizePrefix = c_sha224_finalize_prefix
|
||||
|
||||
foreign import ccall unsafe "cryptonite_sha224_init"
|
||||
c_sha224_init :: Ptr (Context a)-> IO ()
|
||||
|
||||
@ -42,3 +45,6 @@ foreign import ccall "cryptonite_sha224_update"
|
||||
|
||||
foreign import ccall unsafe "cryptonite_sha224_finalize"
|
||||
c_sha224_finalize :: Ptr (Context a) -> Ptr (Digest a) -> IO ()
|
||||
|
||||
foreign import ccall "cryptonite_sha224_finalize_prefix"
|
||||
c_sha224_finalize_prefix :: Ptr (Context a) -> Ptr Word8 -> Word32 -> Word32 -> Ptr (Digest a) -> IO ()
|
||||
|
||||
@ -34,6 +34,9 @@ instance HashAlgorithm SHA256 where
|
||||
hashInternalUpdate = c_sha256_update
|
||||
hashInternalFinalize = c_sha256_finalize
|
||||
|
||||
instance HashAlgorithmPrefix SHA256 where
|
||||
hashInternalFinalizePrefix = c_sha256_finalize_prefix
|
||||
|
||||
foreign import ccall unsafe "cryptonite_sha256_init"
|
||||
c_sha256_init :: Ptr (Context a)-> IO ()
|
||||
|
||||
@ -42,3 +45,6 @@ foreign import ccall "cryptonite_sha256_update"
|
||||
|
||||
foreign import ccall unsafe "cryptonite_sha256_finalize"
|
||||
c_sha256_finalize :: Ptr (Context a) -> Ptr (Digest a) -> IO ()
|
||||
|
||||
foreign import ccall "cryptonite_sha256_finalize_prefix"
|
||||
c_sha256_finalize_prefix :: Ptr (Context a) -> Ptr Word8 -> Word32 -> Word32 -> Ptr (Digest a) -> IO ()
|
||||
|
||||
@ -34,6 +34,9 @@ instance HashAlgorithm SHA384 where
|
||||
hashInternalUpdate = c_sha384_update
|
||||
hashInternalFinalize = c_sha384_finalize
|
||||
|
||||
instance HashAlgorithmPrefix SHA384 where
|
||||
hashInternalFinalizePrefix = c_sha384_finalize_prefix
|
||||
|
||||
foreign import ccall unsafe "cryptonite_sha384_init"
|
||||
c_sha384_init :: Ptr (Context a)-> IO ()
|
||||
|
||||
@ -42,3 +45,6 @@ foreign import ccall "cryptonite_sha384_update"
|
||||
|
||||
foreign import ccall unsafe "cryptonite_sha384_finalize"
|
||||
c_sha384_finalize :: Ptr (Context a) -> Ptr (Digest a) -> IO ()
|
||||
|
||||
foreign import ccall "cryptonite_sha384_finalize_prefix"
|
||||
c_sha384_finalize_prefix :: Ptr (Context a) -> Ptr Word8 -> Word32 -> Word32 -> Ptr (Digest a) -> IO ()
|
||||
|
||||
@ -34,6 +34,9 @@ instance HashAlgorithm SHA512 where
|
||||
hashInternalUpdate = c_sha512_update
|
||||
hashInternalFinalize = c_sha512_finalize
|
||||
|
||||
instance HashAlgorithmPrefix SHA512 where
|
||||
hashInternalFinalizePrefix = c_sha512_finalize_prefix
|
||||
|
||||
foreign import ccall unsafe "cryptonite_sha512_init"
|
||||
c_sha512_init :: Ptr (Context a)-> IO ()
|
||||
|
||||
@ -42,3 +45,6 @@ foreign import ccall "cryptonite_sha512_update"
|
||||
|
||||
foreign import ccall unsafe "cryptonite_sha512_finalize"
|
||||
c_sha512_finalize :: Ptr (Context a) -> Ptr (Digest a) -> IO ()
|
||||
|
||||
foreign import ccall "cryptonite_sha512_finalize_prefix"
|
||||
c_sha512_finalize_prefix :: Ptr (Context a) -> Ptr Word8 -> Word32 -> Word32 -> Ptr (Digest a) -> IO ()
|
||||
|
||||
30
gen/Gen.hs
30
gen/Gen.hs
@ -54,6 +54,7 @@ data Prop =
|
||||
data HashCustom =
|
||||
HashSimple Bits -- digest size in bits
|
||||
Bytes -- block length in bytes
|
||||
Bool -- has HashAlgorithmPrefix instance?
|
||||
| HashMulti [Prop] [(Bits, Bytes)] -- list of (digest output size in *bits*, block size in bytes)
|
||||
|
||||
hashModules =
|
||||
@ -62,22 +63,22 @@ hashModules =
|
||||
, GenHashModule "Blake2sp" "blake2.h" "blake2sp" 1752 (HashMulti [] [(224,64), (256,64)])
|
||||
, GenHashModule "Blake2b" "blake2.h" "blake2b" 248 (HashMulti [] [(160, 128), (224, 128), (256, 128), (384, 128), (512,128)])
|
||||
, GenHashModule "Blake2bp" "blake2.h" "blake2bp" 1768 (HashMulti [] [(512,128)])
|
||||
, GenHashModule "MD2" "md2.h" "md2" 96 (HashSimple 128 16)
|
||||
, GenHashModule "MD4" "md4.h" "md4" 96 (HashSimple 128 64)
|
||||
, GenHashModule "MD5" "md5.h" "md5" 96 (HashSimple 128 64)
|
||||
, GenHashModule "SHA1" "sha1.h" "sha1" 96 (HashSimple 160 64)
|
||||
, GenHashModule "SHA224" "sha256.h" "sha224" 192 (HashSimple 224 64)
|
||||
, GenHashModule "SHA256" "sha256.h" "sha256" 192 (HashSimple 256 64)
|
||||
, GenHashModule "SHA384" "sha512.h" "sha384" 256 (HashSimple 384 128)
|
||||
, GenHashModule "SHA512" "sha512.h" "sha512" 256 (HashSimple 512 128)
|
||||
, GenHashModule "MD2" "md2.h" "md2" 96 (HashSimple 128 16 False)
|
||||
, GenHashModule "MD4" "md4.h" "md4" 96 (HashSimple 128 64 False)
|
||||
, GenHashModule "MD5" "md5.h" "md5" 96 (HashSimple 128 64 True)
|
||||
, GenHashModule "SHA1" "sha1.h" "sha1" 96 (HashSimple 160 64 True)
|
||||
, GenHashModule "SHA224" "sha256.h" "sha224" 192 (HashSimple 224 64 True)
|
||||
, GenHashModule "SHA256" "sha256.h" "sha256" 192 (HashSimple 256 64 True)
|
||||
, GenHashModule "SHA384" "sha512.h" "sha384" 256 (HashSimple 384 128 True)
|
||||
, GenHashModule "SHA512" "sha512.h" "sha512" 256 (HashSimple 512 128 True)
|
||||
, GenHashModule "SHA512t" "sha512.h" "sha512t" 256 (HashMulti [] [(224,128),(256,128)])
|
||||
, GenHashModule "Keccak" "keccak.h" "keccak" 352 (HashMulti [VarCtx sha3CtxSize] [(224,144),(256,136),(384,104),(512,72)])
|
||||
, GenHashModule "SHA3" "sha3.h" "sha3" 352 (HashMulti [VarCtx sha3CtxSize] [(224,144),(256,136),(384,104),(512,72)])
|
||||
, GenHashModule "RIPEMD160" "ripemd.h" "ripemd160" 128 (HashSimple 160 64)
|
||||
, GenHashModule "RIPEMD160" "ripemd.h" "ripemd160" 128 (HashSimple 160 64 False)
|
||||
, GenHashModule "Skein256" "skein256.h" "skein256" 96 (HashMulti [] [(224,32),(256,32)])
|
||||
, GenHashModule "Skein512" "skein512.h" "skein512" 160 (HashMulti [] [(224,64),(256,64),(384,64),(512,64)])
|
||||
, GenHashModule "Tiger" "tiger.h" "tiger" 96 (HashSimple 192 64)
|
||||
, GenHashModule "Whirlpool" "whirlpool.h" "whirlpool" 168 (HashSimple 512 64)
|
||||
, GenHashModule "Tiger" "tiger.h" "tiger" 96 (HashSimple 192 64 False)
|
||||
, GenHashModule "Whirlpool" "whirlpool.h" "whirlpool" 168 (HashSimple 512 64 False)
|
||||
]
|
||||
|
||||
sha3CtxSize :: Bits -> Bytes
|
||||
@ -105,13 +106,16 @@ renderHashModules genOpts = do
|
||||
|
||||
let (tpl, addVars, multiVars) =
|
||||
case ghmCustomizable ghm of
|
||||
HashSimple digestSize blockLength ->
|
||||
HashSimple digestSize blockLength hasPrefixInstance ->
|
||||
(hashTemplate,
|
||||
[ ("DIGEST_SIZE_BITS" , showBits digestSize)
|
||||
, ("DIGEST_SIZE_BYTES", showBytes digestSize)
|
||||
, ("BLOCK_SIZE_BYTES" , showBytes blockLength)
|
||||
],
|
||||
[ ("HASPREFIXINSTANCE",
|
||||
[[] | hasPrefixInstance]
|
||||
)
|
||||
]
|
||||
, []
|
||||
)
|
||||
HashMulti props customSizes ->
|
||||
let customCtxSize =
|
||||
|
||||
@ -45,7 +45,7 @@ renderTemplate template attrs multiAttrs =
|
||||
renderAtom (Tpl n t) =
|
||||
case lookup n multiAttrs of
|
||||
Nothing -> error ("cannot find inner template attributes for: " ++ n)
|
||||
Just [] -> error ("empty multiattrs for: " ++ n)
|
||||
Just [] -> ""
|
||||
Just (i:is) ->
|
||||
renderTemplate t (i ++ attrs) [] ++
|
||||
concatMap (\inAttrs -> renderTemplate t (inAttrs ++ attrs ++ [("COMMA", ",")]) []) is
|
||||
|
||||
@ -32,7 +32,10 @@ instance HashAlgorithm %%MODULENAME%% where
|
||||
hashInternalContextSize _ = %%CTX_SIZE_BYTES%%
|
||||
hashInternalInit = c_%%HASHNAME%%_init
|
||||
hashInternalUpdate = c_%%HASHNAME%%_update
|
||||
hashInternalFinalize = c_%%HASHNAME%%_finalize
|
||||
hashInternalFinalize = c_%%HASHNAME%%_finalize%{HASPREFIXINSTANCE%}
|
||||
|
||||
instance HashAlgorithmPrefix %%MODULENAME%% where
|
||||
hashInternalFinalizePrefix = c_%%HASHNAME%%_finalize_prefix%{HASPREFIXINSTANCE%}
|
||||
|
||||
foreign import ccall unsafe "cryptonite_%%HASHNAME%%_init"
|
||||
c_%%HASHNAME%%_init :: Ptr (Context a)-> IO ()
|
||||
@ -41,4 +44,7 @@ foreign import ccall "cryptonite_%%HASHNAME%%_update"
|
||||
c_%%HASHNAME%%_update :: Ptr (Context a) -> Ptr Word8 -> Word32 -> IO ()
|
||||
|
||||
foreign import ccall unsafe "cryptonite_%%HASHNAME%%_finalize"
|
||||
c_%%HASHNAME%%_finalize :: Ptr (Context a) -> Ptr (Digest a) -> IO ()
|
||||
c_%%HASHNAME%%_finalize :: Ptr (Context a) -> Ptr (Digest a) -> IO ()%{HASPREFIXINSTANCE%}
|
||||
|
||||
foreign import ccall "cryptonite_%%HASHNAME%%_finalize_prefix"
|
||||
c_%%HASHNAME%%_finalize_prefix :: Ptr (Context a) -> Ptr Word8 -> Word32 -> Word32 -> Ptr (Digest a) -> IO ()%{HASPREFIXINSTANCE%}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user