8#include <botan/internal/ffi_util.h>
10#if defined(BOTAN_HAS_HOTP)
11 #include <botan/otp.h>
18#if defined(BOTAN_HAS_HOTP)
25 const uint8_t key[],
size_t key_len,
29 if(hotp ==
nullptr || key ==
nullptr ||
hash_algo ==
nullptr)
34#if defined(BOTAN_HAS_HOTP)
37 *hotp =
new botan_hotp_struct(
50#if defined(BOTAN_HAS_HOTP)
60 uint64_t hotp_counter)
62#if defined(BOTAN_HAS_HOTP)
63 if(hotp ==
nullptr || hotp_code ==
nullptr)
77 uint64_t* next_hotp_counter,
79 uint64_t hotp_counter,
82#if defined(BOTAN_HAS_HOTP)
85 auto resp = h.
verify_hotp(hotp_code, hotp_counter, resync_range);
88 *next_hotp_counter = resp.second;
94 BOTAN_UNUSED(hotp, next_hotp_counter, hotp_code, hotp_counter, resync_range);
#define BOTAN_UNUSED(...)
uint32_t generate_hotp(uint64_t counter)
std::pair< bool, uint64_t > verify_hotp(uint32_t otp, uint64_t starting_counter, size_t resync_range=0)
struct botan_hotp_struct * botan_hotp_t
@ BOTAN_FFI_ERROR_NOT_IMPLEMENTED
@ BOTAN_FFI_INVALID_VERIFIER
@ BOTAN_FFI_ERROR_NULL_POINTER
int botan_hotp_generate(botan_hotp_t hotp, uint32_t *hotp_code, uint64_t hotp_counter)
int botan_hotp_destroy(botan_hotp_t hotp)
int botan_hotp_check(botan_hotp_t hotp, uint64_t *next_hotp_counter, uint32_t hotp_code, uint64_t hotp_counter, size_t resync_range)
int botan_hotp_init(botan_hotp_t *hotp, const uint8_t key[], size_t key_len, const char *hash_algo, size_t digits)
#define BOTAN_FFI_DO(T, obj, param, block)
#define BOTAN_FFI_CHECKED_DELETE(o)
#define BOTAN_FFI_RETURNING(T, obj, param, block)
#define BOTAN_FFI_DECLARE_STRUCT(NAME, TYPE, MAGIC)
int ffi_guard_thunk(const char *func_name, std::function< int()> thunk)
AlgorithmIdentifier hash_algo