97 lines
2.8 KiB
C
Executable File
97 lines
2.8 KiB
C
Executable File
#ifndef MODULE_EMULATOR_OSEMU_H_
|
|
#define MODULE_EMULATOR_OSEMU_H_
|
|
|
|
#ifdef WITH_EMU
|
|
|
|
// Version info
|
|
#define EMU_VERSION 802
|
|
|
|
#define EMU_MAX_CHAR_KEYNAME 12
|
|
#define EMU_KEY_FILENAME "SoftCam.Key"
|
|
#define EMU_KEY_FILENAME_MAX_LEN 31
|
|
#define EMU_MAX_ECM_LEN MAX_ECM_SIZE
|
|
#define EMU_MAX_EMM_LEN MAX_EMM_SIZE
|
|
|
|
/*
|
|
* Error codes for ProccessECM and ProccessEMM functions
|
|
* 0 - OK
|
|
* 1 - ECM / EMM not supported
|
|
* 2 - ECM / EMM key not found
|
|
* 3 - ECM key rejected
|
|
* 4 - Corrupt data
|
|
* 5 - CW not found
|
|
* 6 - CW / ECM / EMM checksum error
|
|
* 7 - Out of memory
|
|
*/
|
|
|
|
#define EMU_OK 0
|
|
#define EMU_NOT_SUPPORTED 1
|
|
#define EMU_KEY_NOT_FOUND 2
|
|
#define EMU_KEY_REJECTED 3
|
|
#define EMU_CORRUPT_DATA 4
|
|
#define EMU_CW_NOT_FOUND 5
|
|
#define EMU_CHECKSUM_ERROR 6
|
|
#define EMU_OUT_OF_MEMORY 7
|
|
|
|
typedef struct KeyData KeyData;
|
|
|
|
struct KeyData
|
|
{
|
|
char identifier;
|
|
uint32_t provider;
|
|
char keyName[EMU_MAX_CHAR_KEYNAME];
|
|
uint8_t *key;
|
|
uint32_t keyLength;
|
|
KeyData *nextKey;
|
|
};
|
|
|
|
typedef struct
|
|
{
|
|
KeyData *EmuKeys;
|
|
uint32_t keyCount;
|
|
uint32_t keyMax;
|
|
} KeyDataContainer;
|
|
|
|
extern KeyDataContainer CwKeys;
|
|
extern KeyDataContainer ViKeys;
|
|
extern KeyDataContainer NagraKeys;
|
|
extern KeyDataContainer IrdetoKeys;
|
|
extern KeyDataContainer BissSWs; // 'F' identifier - BISS1 and BISS2 mode 1/E session words
|
|
extern KeyDataContainer Biss2Keys; // 'G' identifier - BISS2 mode CA session keys (ECM keys)
|
|
extern KeyDataContainer OmnicryptKeys;
|
|
extern KeyDataContainer PowervuKeys;
|
|
extern KeyDataContainer TandbergKeys;
|
|
extern KeyDataContainer StreamKeys;
|
|
extern uint8_t viasat_const[];
|
|
extern char *emu_keyfile_path;
|
|
extern pthread_mutex_t emu_key_data_mutex;
|
|
|
|
void emu_set_keyfile_path(const char *path);
|
|
void emu_clear_keydata(void);
|
|
uint8_t emu_read_keyfile(struct s_reader *rdr, const char *path);
|
|
void emu_read_keymemory(struct s_reader *rdr);
|
|
|
|
int8_t is_valid_dcw(uint8_t *dw);
|
|
int8_t char_to_bin(uint8_t *out, const char *in, uint32_t inLen);
|
|
void date_to_str(char *dateStr, uint8_t len, int8_t offset, uint8_t format);
|
|
|
|
KeyDataContainer *emu_get_key_container(char identifier);
|
|
|
|
int8_t emu_process_ecm(struct s_reader *rdr, const ECM_REQUEST *er, uint8_t *cw, EXTENDED_CW* cw_ex);
|
|
|
|
int8_t emu_process_emm(struct s_reader *rdr, uint16_t caid, const uint8_t *emm, uint32_t *keysAdded);
|
|
|
|
int8_t emu_find_key(char identifier, uint32_t provider, uint32_t providerIgnoreMask, char *keyName,
|
|
uint8_t *key, uint32_t maxKeyLength, uint8_t isCriticalKey, uint32_t keyRef,
|
|
uint8_t matchLength, uint32_t *getProvider);
|
|
|
|
int8_t emu_set_key(char identifier, uint32_t provider, char *keyName, uint8_t *orgKey, uint32_t keyLength,
|
|
uint8_t writeKey, char *comment, struct s_reader *rdr);
|
|
|
|
int8_t emu_update_key(char identifier, uint32_t provider, char *keyName, uint8_t *key, uint32_t keyLength,
|
|
uint8_t writeKey, char *comment);
|
|
|
|
#endif // WITH_EMU
|
|
|
|
#endif // MODULE_EMULATOR_H_
|