/***************************************************************
* Copyright (C) Aktiv Co. 2026-2026                            *
* biopkcs11t.h                                                 *
* This file contains all symbols for bio functions             *
***************************************************************/

#ifndef __BIOPKCS11T_H__
#define __BIOPKCS11T_H__

#include <rtpkcs11.h>

/* CK_FUNCTION_LIST_BIO is a structure holding a Cryptoki spec
 * version and pointers of appropriate types to all the bio functions */
typedef struct CK_FUNCTION_LIST_BIO CK_FUNCTION_LIST_BIO;

typedef CK_FUNCTION_LIST_BIO CK_PTR CK_FUNCTION_LIST_BIO_PTR;

typedef CK_FUNCTION_LIST_BIO_PTR CK_PTR CK_FUNCTION_LIST_BIO_PTR_PTR;

#define CK_BIO_MAX_ADAPTER_NAME_LENGTH 32

#define CK_BIO_DEFAULT_INIT_FLAG 0x00u

#define CK_BIO_AUTHENTICATE_WITH_LOGIN_FLAG 0x01u

#define CK_BIO_DEAUTHENTICATE_WITH_LOGOUT_FLAG 0x01u

typedef struct CK_BIO_SCANNERS_ADAPTER_INFO {
    CK_CHAR name[CK_BIO_MAX_ADAPTER_NAME_LENGTH];
    CK_BBOOL available;
} CK_BIO_SCANNERS_ADAPTER_INFO;

typedef CK_BIO_SCANNERS_ADAPTER_INFO CK_PTR CK_BIO_SCANNERS_ADAPTER_INFO_PTR;

typedef struct CK_BIO_SCANNER_INFO {
    CK_ULONG id;
    CK_CHAR adapterName[CK_BIO_MAX_ADAPTER_NAME_LENGTH];
} CK_BIO_SCANNER_INFO;

typedef CK_BIO_SCANNER_INFO CK_PTR CK_BIO_SCANNER_INFO_PTR;

typedef CK_ULONG CK_BIO_FINGERPRINT_TYPE;
#define CK_BIO_FT_UNKNOWN 0UL
#define CK_BIO_FT_RIGHT_THUMB 1UL
#define CK_BIO_FT_RIGHT_INDEX 2UL
#define CK_BIO_FT_RIGHT_MIDDLE 3UL
#define CK_BIO_FT_RIGHT_RING 4UL
#define CK_BIO_FT_RIGHT_LITTLE 5UL
#define CK_BIO_FT_LEFT_THUMB 6UL
#define CK_BIO_FT_LEFT_INDEX 7UL
#define CK_BIO_FT_LEFT_MIDDLE 8UL
#define CK_BIO_FT_LEFT_RING 9UL
#define CK_BIO_FT_LEFT_LITTLE 10UL

typedef CK_BIO_FINGERPRINT_TYPE CK_PTR CK_BIO_FINGERPRINT_TYPE_PTR;

typedef struct CK_BIO_FINGERPRINT_INFO {
    CK_ULONG fingerprintId;
    CK_VENDOR_AUTHENTICATION_FACTOR_TYPE type;
    CK_ULONG retryCountLeft;
    CK_ULONG maxRetryCount;
} CK_BIO_FINGERPRINT_INFO;

typedef CK_BIO_FINGERPRINT_INFO CK_PTR CK_BIO_FINGERPRINT_INFO_PTR;

typedef struct CK_BIO_FINGERPRINT_SCAN_PARAMS {
    CK_BIO_FINGERPRINT_TYPE type;
    CK_ULONG targetScansCount;
} CK_BIO_FINGERPRINT_SCAN_PARAMS;

typedef CK_BIO_FINGERPRINT_SCAN_PARAMS CK_PTR CK_BIO_FINGERPRINT_SCAN_PARAMS_PTR;

typedef struct CK_BIO_FINGERPRINT_SCAN_STATUS {
    CK_BIO_FINGERPRINT_TYPE type;
    CK_ULONG currentScansCount;
    CK_ULONG targetScansCount;
} CK_BIO_FINGERPRINT_SCAN_STATUS;

typedef CK_BIO_FINGERPRINT_SCAN_STATUS CK_PTR CK_BIO_FINGERPRINT_SCAN_STATUS_PTR;

typedef struct CK_BIO_VERSION {
    CK_ULONG major;
    CK_ULONG minor;
    CK_ULONG patch;
} CK_BIO_VERSION;

typedef CK_BIO_VERSION CK_PTR CK_BIO_VERSION_PTR;

/* Extended error codes */
#define CKR_BIO_ALREADY_INITIALIZED                 (CKR_VENDOR_DEFINED+13UL)
#define CKR_BIO_NOT_INITIALIZED                     (CKR_VENDOR_DEFINED+14UL)
#define CKR_BIO_SCANNER_NOT_FOUND                   (CKR_VENDOR_DEFINED+15UL)
#define CKR_BIO_SET_FINGERPRINT_NOT_COMPLETE        (CKR_VENDOR_DEFINED+16UL)
#define CKR_BIO_INAPPROPRIATE_SESSION_STATE         (CKR_VENDOR_DEFINED+17UL)
#define CKR_BIO_FINGERPRINT_NOT_FOUND               (CKR_VENDOR_DEFINED+18UL)
#define CKR_BIO_SET_FINGERPRINT_NOT_INITIALIZED     (CKR_VENDOR_DEFINED+19UL)
#define CKR_BIO_SET_FINGERPRINT_ALREADY_INITIALIZED (CKR_VENDOR_DEFINED+20UL)
#define CKR_BIO_INVALID_FINGERPRINT_TYPE            (CKR_VENDOR_DEFINED+21UL)
#define CKR_BIO_SET_FINGERPRINT_ALREADY_COMPLETED   (CKR_VENDOR_DEFINED+22UL)
#define CKR_BIO_NOT_SUPPORTED                       (CKR_VENDOR_DEFINED+23UL)
#define CKR_BIO_MULTIPLE_FINGERPRINTS_FOUND         (CKR_VENDOR_DEFINED+24UL)
#define CKR_BIO_UNKNOWN_AUTHENTICATOR_TYPE          (CKR_VENDOR_DEFINED+25UL)
#define CKR_BIO_MULTIPLE_METADATA_OBJECTS_FOUND     (CKR_VENDOR_DEFINED+26UL)
#define CKR_BIO_FINGERPRINT_INCORRECT               (CKR_VENDOR_DEFINED+27UL)
#define CKR_BIO_UNACCEPTABLE_FINGERPRINT            (CKR_VENDOR_DEFINED+28UL)
#define CKR_BIO_SCAN_TIMEOUT                        (CKR_VENDOR_DEFINED+29UL)
#define CKR_BIO_SCAN_ABORTED                        (CKR_VENDOR_DEFINED+30UL)
#define CKR_BIO_SCANNER_DRIVER_ERROR                (CKR_VENDOR_DEFINED+31UL)
#define CKR_BIO_FAILED_TO_PARSE_METADATA            (CKR_VENDOR_DEFINED+32UL)
#define CKR_BIO_FAILED_TO_LOAD_CACHE                (CKR_VENDOR_DEFINED+33UL)
#define CKR_BIO_FAILED_TO_CREATE_CACHE              (CKR_VENDOR_DEFINED+34UL)
#define CKR_BIO_CACHE_ERROR                         (CKR_VENDOR_DEFINED+35UL)

#endif /* __BIOPKCS11T_H__ */
