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)
18 # define MSG_WAITALL 0
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
61 MSG_CW_NOK1
= 0xfe, //Node no more available
62 MSG_CW_NOK2
= 0xff, //No decoding
63 MSG_NO_HEADER
= 0xffff
68 uint8_t keytable
[256];
91 uint32_t prov
; //provider
92 uint8_t sa
[4]; //shared address
98 CT_CARD_BY_SERVICE_READER
= 2,
99 CT_CARD_BY_SERVICE_USER
= 3,
100 CT_CARD_BY_CAID1
= 4,
101 CT_CARD_BY_CAID2
= 5,
102 CT_CARD_BY_CAID3
= 6,
108 uint32_t id
; // cccam card (share) id - reader
113 uint8_t hexserial
[8]; // card serial (for au)
114 LLIST
*providers
; // providers (struct cc_provider)
115 LLIST
*badsids
; // sids that have failed to decode (struct cc_srvid_block)
116 LLIST
*goodsids
; //sids that could decoded (struct cc_srvid)
117 LLIST
*remote_nodes
; //remote note id, 8 bytes
118 struct s_reader
*origin_reader
;
120 cc_card_type card_type
;
121 struct s_sidtab
*sidtab
; //pointer to sidtab entry if card_type = CT_CARD_BY_SERVICE
142 MODE_CMD_0x0C_NONE
= 0,
143 MODE_CMD_0x0C_RC6
= 1,
144 MODE_CMD_0x0C_RC4
= 2,
145 MODE_CMD_0x0C_CC_CRYPT
= 3,
146 MODE_CMD_0x0C_AES
= 4,
147 MODE_CMD_0x0C_IDEA
= 5,
151 struct cc_extended_ecm_idx
155 struct cc_card
*card
;
156 struct cc_srvid srvid
;
167 struct cc_crypt_block block
[2]; // crypto state blocks
169 uint8_t node_id
[8], // client node id
170 peer_node_id
[8], // server node id
171 peer_version
[8], // server version
172 dcw
[16]; // control words
173 uint8_t cmd0b_aeskey
[16];
174 uint8_t cmd05_aeskey
[16];
175 struct cc_crypt_block cmd05_cryptkey
;
177 uint8_t is_oscam_cccam
;
178 uint8_t cmd05_active
;
179 int32_t cmd05_data_len
;
180 uint8_t cmd05_data
[256];
181 cc_cmd05_mode cmd05_mode
;
182 int32_t cmd05_offset
;
184 cc_cmd0c_mode cmd0c_mode
;
185 struct cc_crypt_block cmd0c_cryptkey
;
186 RC6KEY cmd0c_RC6_cryptkey
;
187 AES_KEY cmd0c_AES_key
;
188 IDEA_KEY_SCHEDULE cmd0c_IDEA_dkey
;
190 uint8_t receive_buffer
[CC_MAXMSGSIZE
];
191 uint8_t send_buffer
[CC_MAXMSGSIZE
];
193 LLIST
*cards
; // cards list
197 int32_t card_added_count
;
198 int32_t card_removed_count
;
199 uint8_t just_logged_in
; //true for checking NOK direct after login
200 uint8_t key_table
; //key for CMD 0B
202 LLIST
*pending_emms
; //pending emm list
204 uint32_t recv_ecmtask
;
206 struct cc_card
*last_emm_card
;
207 int32_t server_ecm_pending
; //initialized by server
208 uint16_t server_ecm_idx
;
210 CS_MUTEX_LOCK lockcmd
;
212 CS_MUTEX_LOCK cards_busy
;
213 struct timeb ecm_time
;
217 char remote_version
[7];
218 char remote_build
[7];
219 char remote_oscam
[200];
222 uint32_t remote_build_nr
;
225 //Extended Mode for SPECIAL clients:
226 uint8_t extended_mode
;
227 LLIST
*extended_ecm_idx
;
231 int8_t multics_version
[2];
238 int32_t num_reshare0
;
239 int32_t num_reshare1
;
240 int32_t num_reshare2
;
241 int32_t num_resharex
;