CARD_VIACCESS,
CARD_NAGRA,
CARD_NDS,
+ CARD_CRYPTOWORKS,
CARD_UNKNOWN
} card_type_t;
void cwc_emm_viaccess(cwc_t *cwc, uint8_t *data, int len);
void cwc_emm_nagra(cwc_t *cwc, uint8_t *data, int len);
void cwc_emm_nds(cwc_t *cwc, uint8_t *data, int len);
+void cwc_emm_cryptoworks(cwc_t *cwc, uint8_t *data, int len);
/**
tvhlog(LOG_INFO, "cwc", "%s: nds card",
cwc->cwc_hostname);
break;
+ case 0x0d:
+ cwc->cwc_card_type = CARD_CRYPTOWORKS;
+ tvhlog(LOG_INFO, "cwc", "%s: cryptoworks card",
+ cwc->cwc_hostname);
+ break;
default:
cwc->cwc_card_type = CARD_UNKNOWN;
break;
case CARD_NDS:
cwc_emm_nds(cwc, data, len);
break;
+ case CARD_CRYPTOWORKS:
+ cwc_emm_cryptoworks(cwc, data, len);
+ break;
case CARD_UNKNOWN:
break;
}
cwc_send_msg(cwc, data, len, 0, 1);
}
+void
+cwc_emm_cryptoworks(cwc_t *cwc, uint8_t *data, int len)
+{
+ int match = 0;
+
+ switch (data[0]) {
+ case 0x82: /* unique */
+ match = len >= 10 && memcmp(data + 5, cwc->cwc_ua + 3, 5) == 0;
+ break;
+ case 0x84: /* shared */
+ match = len >= 9 && memcmp(data + 5, cwc->cwc_ua + 3, 4) == 0;
+ break;
+ case 0x86: /* shared header */
+ case 0x88: /* global */
+ case 0x89: /* global */
+ match = 1;
+ break;
+ default:
+ break;
+ }
+
+ if (match)
+ cwc_send_msg(cwc, data, len, 0, 1);
+}
+
/**
*
*/
{ "Irdeto", 0x0600 },
{ "Irdeto", 0x0602 },
{ "Irdeto", 0x0604 },
+ { "Irdeto", 0x0624 },
+ { "Irdeto", 0x0666 },
{ "Jerroldgi", 0x0700 },
{ "Matra", 0x0800 },
{ "NDS", 0x0900 },
{ "Nokia", 0x0A00 },
{ "Conax", 0x0B00 },
{ "NTL", 0x0C00 },
- { "CryptoWorks", 0x0D00 },
+ { "CryptoWorks", 0x0D00 },
+ { "CryptoWorks", 0x0D01 },
+ { "CryptoWorks", 0x0D02 },
+ { "CryptoWorks", 0x0D03 },
+ { "CryptoWorks", 0x0D05 },
+ { "CryptoWorks", 0x0D0F },
+ { "CryptoWorks", 0x0D70 },
+ { "CryptoWorks ICE", 0x0D96 },
+ { "CryptoWorks ICE", 0x0D97 },
{ "PowerVu", 0x0E00 },
{ "Sony", 0x0F00 },
{ "Tandberg", 0x1000 },