425 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			425 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | /**
 | ||
|  |  * \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     "<dogformat format=\"updateinfo\"/>"
 | ||
|  | 
 | ||
|  | /** format to retrieve session info */ | ||
|  | #define DOG_SESSIONINFO    "<dogformat format=\"sessioninfo\"/>"
 | ||
|  | 
 | ||
|  | /** format to retrieve hardware info */ | ||
|  | #define DOG_KEYINFO        "<dogformat format=\"keyinfo\"/>"
 | ||
|  | 
 | ||
|  | /** format to retrieve host fingerprint info */ | ||
|  | #define DOG_FINGERPRINT    "<dogformat format=\"host_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__ */
 |