#ifndef __PROTOCOL_CONTROLLER_MULTOS_USER_H_
#define __PROTOCOL_CONTROLLER_MULTOS_USER_H_

#ifdef __cplusplus
extern "C"
{
    #endif

#ifndef NDEBUG
# include <stdio.h>
#endif

#include <stddef.h>
#include <stdint.h>
#include <string.h>
#include <assert.h>
#include <unistd.h>

#include <mcl/bn_c256.h>
#include <openssl/sha.h>

#include "config/config.h"

#include "models/verifier.h"
#include "models/user.h"
#include "system.h"

#include "multos/apdu.h"
#include "apdu/command.h"
#include "lib/pcsc/reader.h"

#include "helpers/mcl_helper.h"
#include "helpers/multos_helper.h"
#include "helpers/aes_helper.h"

#include "helpers/multosio.h"

extern int ve_get_verifier_identifier_M(verifier_identifier_t *identifier);

extern int ve_set_verifier_private_key_M(verifier_private_key_t *ve_private_key);

extern  int ve_get_verifier_nonce_M(verifier_nonce_t *ve_nonce);

extern int ve_set_user_identifier_M(user_identifier_t *identifier);

extern int ve_set_user_nonce_M(user_nonce_t *nonce);

extern int ve_verify_M(reader_t *reader, verifier_session_key_t *sessionKey, verifier_cipher_output_t *ve_cipher_output, user_keys_t *ue_keys, verifier_identifier_t *ve_identifier, user_identifier_t *ue_identifier, verifier_nonce_t *ve_nonce, user_nonce_t *ue_nonce);

extern int test(reader_t *reader, verifier_identifier_t *identifier);

#ifdef __cplusplus
}
#endif

#endif /* __PROTOCOL_CONTROLLER_MULTOS_USER_H_ */

