#ifdef LTC_BASE64
int
base64_encode(
const
unsigned
char
*in, unsigned
long
len,
char
*out, unsigned
long
*outlen);
int
base64_decode(
const
char
*in, unsigned
long
len,
unsigned
char
*out, unsigned
long
*outlen);
int
base64_strict_decode(
const
char
*in, unsigned
long
len,
unsigned
char
*out, unsigned
long
*outlen);
int
base64_sane_decode(
const
char
*in, unsigned
long
inlen,
unsigned
char
*out, unsigned
long
*outlen);
#endif
#ifdef LTC_BASE64_URL
int
base64url_encode(
const
unsigned
char
*in, unsigned
long
len,
char
*out, unsigned
long
*outlen);
int
base64url_strict_encode(
const
unsigned
char
*in, unsigned
long
inlen,
char
*out, unsigned
long
*outlen);
int
base64url_decode(
const
char
*in, unsigned
long
len,
unsigned
char
*out, unsigned
long
*outlen);
int
base64url_strict_decode(
const
char
*in, unsigned
long
len,
unsigned
char
*out, unsigned
long
*outlen);
int
base64url_sane_decode(
const
char
*in, unsigned
long
inlen,
unsigned
char
*out, unsigned
long
*outlen);
#endif
#ifdef LTC_BASE32
typedef
enum
{
BASE32_RFC4648 = 0,
BASE32_BASE32HEX = 1,
BASE32_ZBASE32 = 2,
BASE32_CROCKFORD = 3
} base32_alphabet;
int
base32_encode(
const
unsigned
char
*in, unsigned
long
inlen,
char
*out, unsigned
long
*outlen,
base32_alphabet id);
int
base32_decode(
const
char
*in, unsigned
long
inlen,
unsigned
char
*out, unsigned
long
*outlen,
base32_alphabet id);
#endif
#ifdef LTC_BASE16
int
base16_encode(
const
unsigned
char
*in, unsigned
long
inlen,
char
*out, unsigned
long
*outlen,
int
caps);
int
base16_decode(
const
char
*in, unsigned
long
inlen,
unsigned
char
*out, unsigned
long
*outlen);
#endif
#ifdef LTC_HKDF
int
hkdf_test(
void
);
int
hkdf_extract(
int
hash_idx,
const
unsigned
char
*salt, unsigned
long
saltlen,
const
unsigned
char
*in, unsigned
long
inlen,
unsigned
char
*out, unsigned
long
*outlen);
int
hkdf_expand(
int
hash_idx,
const
unsigned
char
*info, unsigned
long
infolen,
const
unsigned
char
*in, unsigned
long
inlen,
unsigned
char
*out, unsigned
long
outlen);
int
hkdf(
int
hash_idx,
const
unsigned
char
*salt, unsigned
long
saltlen,
const
unsigned
char
*info, unsigned
long
infolen,
const
unsigned
char
*in, unsigned
long
inlen,
unsigned
char
*out, unsigned
long
outlen);
#endif /* LTC_HKDF */
int
mem_neq(
const
void
*a,
const
void
*b,
size_t
len);
void
zeromem(
volatile
void
*dst,
size_t
len);
#ifdef LTC_SOURCE
void
copy_or_zeromem(
const
unsigned
char
* src, unsigned
char
* dest, unsigned
long
len,
int
coz);
#endif
void
burn_stack(unsigned
long
len);
const
char
*error_to_string(
int
err);
extern
const
char
*crypt_build_settings;
int
crypt_fsa(
void
*mp, ...);
int
crypt_get_constant(
const
char
* namein,
int
*valueout);
int
crypt_list_all_constants(
char
*names_list, unsigned
int
*names_list_size);
int
crypt_get_size(
const
char
* namein, unsigned
int
*sizeout);
int
crypt_list_all_sizes(
char
*names_list, unsigned
int
*names_list_size);
#ifdef LTM_DESC
LTC_DEPRECATED
void
init_LTM(
void
);
#endif
#ifdef TFM_DESC
LTC_DEPRECATED
void
init_TFM(
void
);
#endif
#ifdef GMP_DESC
LTC_DEPRECATED
void
init_GMP(
void
);
#endif
int
crypt_mp_init(
const
char
* mpi);
#ifdef LTC_ADLER32
typedef
struct
adler32_state_s
{
unsigned
short
s[2];
} adler32_state;
void
adler32_init(adler32_state *ctx);
void
adler32_update(adler32_state *ctx,
const
unsigned
char
*input, unsigned
long
length);
void
adler32_finish(
const
adler32_state *ctx,
void
*hash, unsigned
long
size);
int
adler32_test(
void
);
#endif
#ifdef LTC_CRC32
typedef
struct
crc32_state_s
{
ulong32 crc;
} crc32_state;
void
crc32_init(crc32_state *ctx);
void
crc32_update(crc32_state *ctx,
const
unsigned
char
*input, unsigned
long
length);
void
crc32_finish(
const
crc32_state *ctx,
void
*hash, unsigned
long
size);
int
crc32_test(
void
);
#endif
#ifdef LTC_PADDING
enum
padding_type {
LTC_PAD_PKCS7 = 0x0000U,
#ifdef LTC_RNG_GET_BYTES
LTC_PAD_ISO_10126 = 0x1000U,
#endif
LTC_PAD_ANSI_X923 = 0x2000U,
LTC_PAD_ONE_AND_ZERO = 0x8000U,
LTC_PAD_ZERO = 0x9000U,
LTC_PAD_ZERO_ALWAYS = 0xA000U,
};
int
padding_pad(unsigned
char
*data, unsigned
long
length, unsigned
long
* padded_length, unsigned
long
mode);
int
padding_depad(
const
unsigned
char
*data, unsigned
long
*length, unsigned
long
mode);
#ifdef LTC_SOURCE
#define LTC_PAD_MASK (0xF000U)
#endif
#endif /* LTC_PADDING */
int
compare_testvector(
const
void
* is,
const
unsigned
long
is_len,
const
void
* should,
const
unsigned
long
should_len,
const
char
* what,
int
which);