diff options
Diffstat (limited to 'Crypto/Argon2/FFI.hsc')
-rw-r--r-- | Crypto/Argon2/FFI.hsc | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/Crypto/Argon2/FFI.hsc b/Crypto/Argon2/FFI.hsc new file mode 100644 index 0000000..e12d530 --- /dev/null +++ b/Crypto/Argon2/FFI.hsc @@ -0,0 +1,127 @@ +{-# LANGUAGE ForeignFunctionInterface #-} +{-# LANGUAGE PatternSynonyms #-} + +module Crypto.Argon2.FFI where + +#include <argon2.h> +#include <stdint.h> + +{- + +Copyright (c) 2016, Ollie Charles + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * Neither the name of Ollie Charles nor the names of other + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + -} + +import Foreign +import Foreign.C + +foreign import ccall unsafe "argon2.h argon2i_hash_encoded" argon2i_hash_encoded :: (#type const uint32_t) -> (#type const uint32_t) -> (#type const uint32_t) -> Ptr a -> (#type const size_t) -> Ptr b -> (# type const size_t) -> (#type const size_t) -> CString -> (#type const size_t) -> IO (#type int) + +foreign import ccall unsafe "argon2.h argon2i_hash_raw" argon2i_hash_raw :: (#type const uint32_t) -> (#type const uint32_t) -> (#type const uint32_t) -> Ptr a -> (#type const size_t) -> Ptr b -> (#type size_t) -> Ptr c -> (#type const size_t) -> IO (#type int) + +foreign import ccall unsafe "argon2.h argon2d_hash_encoded" argon2d_hash_encoded :: (#type const uint32_t) -> (#type const uint32_t) -> (#type const uint32_t) -> Ptr a -> (#type const size_t) -> Ptr b -> (# type const size_t) -> (#type const size_t) -> CString -> (#type const size_t) -> IO (#type int) + +foreign import ccall unsafe "argon2.h argon2d_hash_raw" argon2d_hash_raw :: (#type const uint32_t) -> (#type const uint32_t) -> (#type const uint32_t) -> Ptr a -> (#type const size_t) -> Ptr b -> (#type size_t) -> Ptr c -> (#type const size_t) -> IO (#type int) + +foreign import ccall unsafe "argon2.h argon2i_verify" argon2i_verify :: CString -> Ptr a -> (#type const size_t) -> IO (#type int) + +foreign import ccall unsafe "argon2.h argon2d_verify" argon2d_verify :: CString -> Ptr a -> (#type const size_t) -> IO (#type int) + +pattern ARGON2_OK = (#const ARGON2_OK) +pattern ARGON2_OUTPUT_PTR_NULL = (#const ARGON2_OUTPUT_PTR_NULL) +pattern ARGON2_OUTPUT_TOO_SHORT = (#const ARGON2_OUTPUT_TOO_SHORT) +pattern ARGON2_OUTPUT_TOO_LONG = (#const ARGON2_OUTPUT_TOO_LONG) +pattern ARGON2_PWD_TOO_SHORT = (#const ARGON2_PWD_TOO_SHORT) +pattern ARGON2_PWD_TOO_LONG = (#const ARGON2_PWD_TOO_LONG) +pattern ARGON2_SALT_TOO_SHORT = (#const ARGON2_SALT_TOO_SHORT) +pattern ARGON2_SALT_TOO_LONG = (#const ARGON2_SALT_TOO_LONG) +pattern ARGON2_AD_TOO_SHORT = (#const ARGON2_AD_TOO_SHORT) +pattern ARGON2_AD_TOO_LONG = (#const ARGON2_AD_TOO_LONG) +pattern ARGON2_SECRET_TOO_SHORT = (#const ARGON2_SECRET_TOO_SHORT) +pattern ARGON2_SECRET_TOO_LONG = (#const ARGON2_SECRET_TOO_LONG) +pattern ARGON2_TIME_TOO_SMALL = (#const ARGON2_TIME_TOO_SMALL) +pattern ARGON2_TIME_TOO_LARGE = (#const ARGON2_TIME_TOO_LARGE) +pattern ARGON2_MEMORY_TOO_LITTLE = (#const ARGON2_MEMORY_TOO_LITTLE) +pattern ARGON2_MEMORY_TOO_MUCH = (#const ARGON2_MEMORY_TOO_MUCH) +pattern ARGON2_LANES_TOO_FEW = (#const ARGON2_LANES_TOO_FEW) +pattern ARGON2_LANES_TOO_MANY = (#const ARGON2_LANES_TOO_MANY) +pattern ARGON2_PWD_PTR_MISMATCH = (#const ARGON2_PWD_PTR_MISMATCH) +pattern ARGON2_SALT_PTR_MISMATCH = (#const ARGON2_SALT_PTR_MISMATCH) +pattern ARGON2_SECRET_PTR_MISMATCH = (#const ARGON2_SECRET_PTR_MISMATCH) +pattern ARGON2_AD_PTR_MISMATCH = (#const ARGON2_AD_PTR_MISMATCH) +pattern ARGON2_MEMORY_ALLOCATION_ERROR = (#const ARGON2_MEMORY_ALLOCATION_ERROR) +pattern ARGON2_FREE_MEMORY_CBK_NULL = (#const ARGON2_FREE_MEMORY_CBK_NULL) +pattern ARGON2_ALLOCATE_MEMORY_CBK_NULL = (#const ARGON2_ALLOCATE_MEMORY_CBK_NULL) +pattern ARGON2_INCORRECT_PARAMETER = (#const ARGON2_INCORRECT_PARAMETER) +pattern ARGON2_INCORRECT_TYPE = (#const ARGON2_INCORRECT_TYPE) +pattern ARGON2_OUT_PTR_MISMATCH = (#const ARGON2_OUT_PTR_MISMATCH) +pattern ARGON2_THREADS_TOO_FEW = (#const ARGON2_THREADS_TOO_FEW) +pattern ARGON2_THREADS_TOO_MANY = (#const ARGON2_THREADS_TOO_MANY) +pattern ARGON2_MISSING_ARGS = (#const ARGON2_MISSING_ARGS) +pattern ARGON2_ENCODING_FAIL = (#const ARGON2_ENCODING_FAIL) +pattern ARGON2_DECODING_FAIL = (#const ARGON2_DECODING_FAIL) + +pattern ARGON2_MIN_LANES = (#const ARGON2_MIN_LANES) +pattern ARGON2_MAX_LANES = (#const ARGON2_MAX_LANES) + +pattern ARGON2_MIN_THREADS = (#const ARGON2_MIN_THREADS) +pattern ARGON2_MAX_THREADS = (#const ARGON2_MAX_THREADS) + +pattern ARGON2_SYNC_POINTS = (#const ARGON2_SYNC_POINTS) + +pattern ARGON2_MIN_OUTLEN = (#const ARGON2_MIN_OUTLEN) +pattern ARGON2_MAX_OUTLEN = (#const ARGON2_MAX_OUTLEN) + +pattern ARGON2_MIN_MEMORY = (#const ARGON2_MIN_MEMORY) + +pattern ARGON2_MAX_MEMORY_BITS = (#const ARGON2_MAX_MEMORY_BITS) +pattern ARGON2_MAX_MEMORY = (#const ARGON2_MAX_MEMORY) + +pattern ARGON2_MIN_TIME = (#const ARGON2_MIN_TIME) +pattern ARGON2_MAX_TIME = (#const ARGON2_MAX_TIME) + +pattern ARGON2_MIN_PWD_LENGTH = (#const ARGON2_MIN_PWD_LENGTH) +pattern ARGON2_MAX_PWD_LENGTH = (#const ARGON2_MAX_PWD_LENGTH) + +pattern ARGON2_MIN_AD_LENGTH = (#const ARGON2_MIN_AD_LENGTH) +pattern ARGON2_MAX_AD_LENGTH = (#const ARGON2_MAX_AD_LENGTH) + +pattern ARGON2_MIN_SALT_LENGTH = (#const ARGON2_MIN_SALT_LENGTH) +pattern ARGON2_MAX_SALT_LENGTH = (#const ARGON2_MAX_SALT_LENGTH) + +pattern ARGON2_MIN_SECRET = (#const ARGON2_MIN_SECRET) +pattern ARGON2_MAX_SECRET = (#const ARGON2_MAX_SECRET) + +pattern ARGON2_FLAG_CLEAR_PASSWORD = (#const ARGON2_FLAG_CLEAR_PASSWORD) +pattern ARGON2_FLAG_CLEAR_SECRET = (#const ARGON2_FLAG_CLEAR_SECRET) +pattern ARGON2_FLAG_CLEAR_MEMORY = (#const ARGON2_FLAG_CLEAR_MEMORY) +pattern ARGON2_DEFAULT_FLAGS = (#const ARGON2_DEFAULT_FLAGS) |