/** * \mainpage SuperDog Licensing API * \file dog_api.h SuperDog Licensing API declarations * * Copyright (C) 2016 SafeNet, Inc. All rights reserved. * */ #ifndef __DOG_API_H__ #define __DOG_API_H__ #if !defined(WITH_AKSTYPES) && !defined(WITH_OEFTYPES) # if defined(_MSC_VER) || defined(__WATCOMC__) || defined(__BORLANDC__) typedef unsigned __int64 dog_u64_t; typedef signed __int64 dog_s64_t; # else typedef unsigned long long dog_u64_t; typedef signed long long dog_s64_t; # endif # if defined(_MSC_VER) typedef unsigned long dog_u32_t; typedef signed long dog_s32_t; # else typedef unsigned int dog_u32_t; typedef signed int dog_s32_t; # endif typedef unsigned short dog_u16_t; typedef signed short dog_s16_t; typedef signed char dog_s8_t; typedef unsigned char dog_u8_t; #endif #if defined(_WIN32) || defined(WIN32) || defined(_MSC_VER) || defined(__BORLANDC__) # define DOG_CALLCONV __stdcall #else # define DOG_CALLCONV #endif #ifdef __cplusplus extern "C" { #endif /** * @defgroup dog_feature_ids Feature ID defines * * @{ */ /** * \brief The SuperDog default Feature ID * * Available in every SuperDog */ #define DOG_DEFAULT_FID 0 /** * @} */ /** * @defgroup dog_file_ids Data File ID defines * * @{ */ /** * \brief File ID for default read-write data file * * File ID for default read-write data file. */ #define DOG_FILEID_RW 0xfff4 /** * @} */ /** * @defgroup dog_error_codes Licensing API Status Codes * * @{ */ enum dog_error_codes { /** Request successfully completed */ DOG_STATUS_OK = 0, /** Request exceeds data file range */ DOG_MEM_RANGE = 1, /** System is out of memory */ DOG_INSUF_MEM = 3, /** Too many open login sessions */ DOG_TMOF = 4, /** Access denied */ DOG_ACCESS_DENIED = 5, /** Required SuperDog not found */ DOG_NOT_FOUND = 7, /** Encryption/decryption data length is too short */ DOG_TOO_SHORT = 8, /** Invalid input handle */ DOG_INV_HND = 9, /** Specified File ID not recognized by API */ DOG_INV_FILEID = 10, /** Invalid XML format */ DOG_INV_FORMAT = 15, /** Unable to execute function in this context */ DOG_REQ_NOT_SUPP = 16, /** Binary data passed to function does not contain valid update */ DOG_INV_UPDATE_OBJ = 17, /** SuperDog to be updated not found */ DOG_KEYID_NOT_FOUND = 18, /** Required XML tags not found; Contents in binary data are missing * or invalid */ DOG_INV_UPDATE_DATA = 19, /** Update not supported by SuperDog */ DOG_INV_UPDATE_NOTSUPP = 20, /** Update counter is set incorrectly */ DOG_INV_UPDATE_CNTR = 21, /** Invalid Vendor Code passed */ DOG_INV_VCODE = 22, /** Passed time value is outside supported value range */ DOG_INV_TIME = 24, /** Acknowledge data requested by the update, however the ack_data * input parameter is NULL */ DOG_NO_ACK_SPACE = 26, /** Program running on a terminal server */ DOG_TS_DETECTED = 27, /** Unknown algorithm used in V2C file */ DOG_UNKNOWN_ALG = 29, /** Signature verification failed */ DOG_INV_SIG = 30, /** Requested Feature not available */ DOG_FEATURE_NOT_FOUND = 31, /** Communication error between API and local SuperDog License Manager */ DOG_LOCAL_COMM_ERR = 33, /** Vendor Code not recognized by API */ DOG_UNKNOWN_VCODE = 34, /** Invalid XML specification */ DOG_INV_SPEC = 35, /** Invalid XML scope */ DOG_INV_SCOPE = 36, /** Too many SuperDog currently connected */ DOG_TOO_MANY_KEYS = 37, /** Session was interrupted */ DOG_BROKEN_SESSION = 39, /** Feature has expired */ DOG_FEATURE_EXPIRED = 41, /** SuperDog License Manager version too old */ DOG_OLD_LM = 42, /** USB error occurred when communicating with a SuperDog */ DOG_DEVICE_ERR = 43, /** System time has been tampered with */ DOG_TIME_ERR = 45, /** Communication error occurred in secure channel */ DOG_SCHAN_ERR = 46, /** Corrupt data exists in secure storage area of SuperDog SL */ DOG_STORAGE_CORRUPT = 47, /** Unable to locate a Feature matching the scope */ DOG_SCOPE_RESULTS_EMPTY = 50, /** SuperDog SL incompatible with machine hardware; SuperDog SL is locked * to different hardware. OR: * In the case of a V2C file, conflict between SuperDog SL data and machine * hardware data; SuperDog SL locked to different hardware */ DOG_HARDWARE_MODIFIED = 52, /** Trying to install a V2C file with an update counter that is out * of sequence with the update counter in the SuperDog. * The values of the update counter in the file are lower than * those in the SuperDog. */ DOG_UPDATE_TOO_OLD = 54, /** Trying to install a V2C file with an update counter that is out * of sequence with the update counter in the SuperDog. * The first value of the update counter in the file is greater than * the value in the SuperDog. */ DOG_UPDATE_TOO_NEW = 55, /** Cloned SuperDog SL secure storage detected */ DOG_CLONE_DETECTED = 64, /** Specified V2C update already installed */ DOG_UPDATE_ALREADY_ADDED = 65, /** Secure storage ID mismatch */ DOG_SECURE_STORE_ID_MISMATCH = 78, /** Unable to locate dynamic library for API */ DOG_NO_API_DYLIB = 400, /** Dynamic library for API is invalid */ DOG_INV_API_DYLIB = 401, /** Object incorrectly initialized */ DOG_INVALID_OBJECT = 500, /** Invalid function parameter */ DOG_INVALID_PARAMETER = 501, /** Logging in twice to the same object */ DOG_ALREADY_LOGGED_IN = 502, /** Logging out twice of the same object */ DOG_ALREADY_LOGGED_OUT = 503, /** Incorrect use of system or platform */ DOG_OPERATION_FAILED = 525, /** Requested function not implemented */ DOG_NOT_IMPL = 698, /** Internal error occurred in API */ DOG_INT_ERR = 699, DOG_NEXT_FREE_VALUES = 7001, }; /** * @} */ /** * @defgroup dog_general SuperDog typedefs and macros * * @{ */ /** A SuperDog status code */ typedef enum dog_error_codes dog_status_t; /** SuperDog size type */ typedef dog_u32_t dog_size_t; /** SuperDog connection handle */ typedef dog_u32_t dog_handle_t; /** SuperDog Feature ID */ typedef dog_u32_t dog_feature_t; /** SuperDog File ID */ typedef dog_u32_t dog_fileid_t; /** SuperDog timestamp, representing elapsed seconds since * Jan-01-1970 0:00:00 GMT */ typedef dog_u64_t dog_time_t; /** SuperDog Vendor Code buffer */ typedef const void *dog_vendor_code_t; /** format to retrieve update info (C2V) */ #define DOG_UPDATEINFO "" /** format to retrieve session info */ #define DOG_SESSIONINFO "" /** format to retrieve hardware info */ #define DOG_KEYINFO "" /** format to retrieve host fingerprint info */ #define DOG_FINGERPRINT "" /** * Invalid handle value for dog_login() and dog_login_scope() functions. */ #define DOG_INVALID_HANDLE_VALUE 0 /** * \brief Minimum block size for dog_encrypt() and dog_decrypt() functions. */ #define DOG_MIN_BLOCK_SIZE 16 /** * @} */ /** * @defgroup dog_basic The Basic SuperDog Licensing API * * @{ */ dog_status_t DOG_CALLCONV dog_login(dog_feature_t feature_id, dog_vendor_code_t vendor_code, dog_handle_t *handle); dog_status_t DOG_CALLCONV dog_login_scope(dog_feature_t feature_id, const char *scope, dog_vendor_code_t vendor_code, dog_handle_t *handle); dog_status_t DOG_CALLCONV dog_logout(dog_handle_t handle); dog_status_t DOG_CALLCONV dog_encrypt(dog_handle_t handle, void *buffer, dog_size_t length); dog_status_t DOG_CALLCONV dog_decrypt(dog_handle_t handle, void *buffer, dog_size_t length); dog_status_t DOG_CALLCONV dog_read(dog_handle_t handle, dog_fileid_t fileid, dog_size_t offset, dog_size_t length, void *buffer); dog_status_t DOG_CALLCONV dog_write(dog_handle_t handle, dog_fileid_t fileid, dog_size_t offset, dog_size_t length, const void *buffer); dog_status_t DOG_CALLCONV dog_get_size(dog_handle_t handle, dog_fileid_t fileid, dog_size_t *size); dog_status_t DOG_CALLCONV dog_get_time(dog_handle_t handle, dog_time_t *time); dog_status_t DOG_CALLCONV dog_get_info(const char *scope, const char *format, dog_vendor_code_t vendor_code, char **info); dog_status_t DOG_CALLCONV dog_get_sessioninfo(dog_handle_t handle, const char *format, char **info); void DOG_CALLCONV dog_free(char *info); dog_status_t DOG_CALLCONV dog_update(const char *update_data, char **ack_data); dog_status_t DOG_CALLCONV dog_get_version(unsigned int *major_version, unsigned int *minor_version, unsigned int *build_server, unsigned int *build_number, dog_vendor_code_t vendor_code); dog_status_t DOG_CALLCONV dog_datetime_to_dogtime(unsigned int day, unsigned int month, unsigned int year, unsigned int hour, unsigned int minute, unsigned int second, dog_time_t *time); dog_status_t DOG_CALLCONV dog_dogtime_to_datetime(dog_time_t time, unsigned int *day, unsigned int *month, unsigned int *year, unsigned int *hour, unsigned int *minute, unsigned int *second); /** * @} */ #ifdef __cplusplus } // extern "C" #endif #endif /* __DOG_API_H__ */