2 * Created on: 23.04.2010
5 #ifndef MODULE_CCCAM_DATA_H_
6 #define MODULE_CCCAM_DATA_H_
8 #include "cscrypt/rc6.h"
9 #include "cscrypt/idea.h"
13 #define CC_MAXMSGSIZE 0x400 // by Project::Keynation: Buffer size is limited on "O" CCCam to 1024 bytes
14 #define CC_MAX_PROV 32
15 #define SWAPC(X, Y) do { char p; p = *X; *X = *Y; *Y = p; } while(0)
17 #if (defined(WIN32) || defined(__CYGWIN__)) && !defined(MSG_WAITALL)
21 #define MINIMIZE_NONE 0
22 #define MINIMIZE_HOPS 1
23 #define MINIMIZE_CAID 2
24 #define MINIMIZE_TRANSPARENT 3
26 #define CCCAM_MODE_NOTINIT 0
27 #define CCCAM_MODE_NORMAL 1
28 #define CCCAM_MODE_SHUTDOWN 0xFF
32 #define MIN_RATING -25
54 MSG_CMD_0C
= 0x0c, // CCCam 2.2.x fake client checks
55 MSG_CMD_0D
= 0x0d, // "
56 MSG_CMD_0E
= 0x0e, // "
57 MSG_NEW_CARD_SIDINFO
= 0x0f,
58 MSG_SLEEPSEND
= 0x80, // Sleepsend support
59 MSG_CACHE_PUSH
= 0x81, // CacheEx Cache-Push In/Out
60 MSG_CACHE_FILTER
= 0x82, // CacheEx Cache-Filter Request
62 MSG_CACHE_FEATURE_EXCHANGE
= 0x83, // CacheEx feature-exchange
63 MSG_CACHE_FEATURE_EXCHANGE_REPLY
= 0x84, // CacheEx feature-exchange-reply
64 MSG_CACHE_FEATURE_TRIGGER
= 0x85, // CacheEx feature-trigger
65 MSG_CW_ECM_LGF
= 0x86, // oscam lg-flagged CW
67 MSG_CW_NOK1
= 0xfe, // Node no more available
68 MSG_CW_NOK2
= 0xff, // No decoding
69 MSG_NO_HEADER
= 0xffff
74 uint8_t keytable
[256];
97 uint32_t prov
; // provider
98 uint8_t sa
[4]; // shared address
104 CT_CARD_BY_SERVICE_READER
= 2,
105 CT_CARD_BY_SERVICE_USER
= 3,
106 CT_CARD_BY_CAID1
= 4,
107 CT_CARD_BY_CAID2
= 5,
108 CT_CARD_BY_CAID3
= 6,
114 uint32_t id
; // cccam card (share) id - reader
119 uint8_t hexserial
[8]; // card serial (for au)
120 LLIST
*providers
; // providers (struct cc_provider)
121 LLIST
*badsids
; // sids that have failed to decode (struct cc_srvid_block)
122 LLIST
*goodsids
; // sids that could decoded (struct cc_srvid)
123 LLIST
*remote_nodes
; // remote note id, 8 bytes
124 struct s_reader
*origin_reader
;
126 cc_card_type card_type
;
127 struct s_sidtab
*sidtab
; // pointer to sidtab entry if card_type = CT_CARD_BY_SERVICE
148 MODE_CMD_0x0C_NONE
= 0,
149 MODE_CMD_0x0C_RC6
= 1,
150 MODE_CMD_0x0C_RC4
= 2,
151 MODE_CMD_0x0C_CC_CRYPT
= 3,
152 MODE_CMD_0x0C_AES
= 4,
153 MODE_CMD_0x0C_IDEA
= 5,
156 struct cc_extended_ecm_idx
160 struct cc_card
*card
;
161 struct cc_srvid srvid
;
172 struct cc_crypt_block block
[2]; // crypto state blocks
174 uint8_t node_id
[8]; // client node id
175 uint8_t peer_node_id
[8]; // server node id
176 uint8_t peer_version
[8]; // server version
177 uint8_t dcw
[16]; // control words
178 uint8_t cmd0b_aeskey
[16];
179 uint8_t cmd05_aeskey
[16];
180 struct cc_crypt_block cmd05_cryptkey
;
182 uint8_t is_oscam_cccam
;
183 uint8_t cmd05_active
;
184 int32_t cmd05_data_len
;
185 uint8_t cmd05_data
[256];
186 cc_cmd05_mode cmd05_mode
;
187 int32_t cmd05_offset
;
189 cc_cmd0c_mode cmd0c_mode
;
190 struct cc_crypt_block cmd0c_cryptkey
;
191 RC6KEY cmd0c_RC6_cryptkey
;
192 AES_KEY cmd0c_AES_key
;
193 IDEA_KEY_SCHEDULE cmd0c_IDEA_dkey
;
195 uint8_t receive_buffer
[CC_MAXMSGSIZE
];
196 uint8_t send_buffer
[CC_MAXMSGSIZE
];
198 LLIST
*cards
; // cards list
202 int32_t card_added_count
;
203 int32_t card_removed_count
;
204 uint8_t just_logged_in
; // true for checking NOK direct after login
205 uint8_t key_table
; // key for CMD 0B
207 LLIST
*pending_emms
; // pending emm list
209 uint32_t recv_ecmtask
;
211 struct cc_card
*last_emm_card
;
212 int32_t server_ecm_pending
; // initialized by server
213 uint16_t server_ecm_idx
;
215 CS_MUTEX_LOCK lockcmd
;
217 CS_MUTEX_LOCK cards_busy
;
218 struct timeb ecm_time
;
222 char remote_version
[7];
223 char remote_build
[7];
224 char remote_oscam
[200];
227 uint32_t remote_build_nr
;
230 // Extended Mode for SPECIAL clients:
231 uint8_t extended_mode
;
232 LLIST
*extended_ecm_idx
;
236 int8_t multics_version
[2];
243 int32_t num_reshare0
;
244 int32_t num_reshare1
;
245 int32_t num_reshare2
;
246 int32_t num_resharex
;
250 #ifdef CS_CACHEEX_AIO
251 uint8_t extended_lg_flagged_cws
;