Skip to content
This repository was archived by the owner on Apr 14, 2024. It is now read-only.

Commit

Permalink
Revert "Add icam DE v9"
Browse files Browse the repository at this point in the history
This reverts commit 997b30b.
  • Loading branch information
oscam-emu committed Mar 13, 2024
1 parent e72cfbb commit 99c4631
Show file tree
Hide file tree
Showing 16 changed files with 33 additions and 607 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -684,7 +684,7 @@ if (CMAKE_COMPILER_IS_GNUCC)
list(GET GCC_VERSION_COMPONENTS 0 GCC_MAJOR)
list(GET GCC_VERSION_COMPONENTS 0 GCC_MINOR)
add_definitions ("-W -Wall ")
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O3 -pipe -ffunction-sections -fdata-sections -funroll-loops -fomit-frame-pointer -fno-schedule-insns")
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O2")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O2")
set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 -ggdb")
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -ggdb")
Expand Down
7 changes: 2 additions & 5 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ override STD_DEFS += -D'CS_CONFDIR="$(CONF_DIR)"'
CC_WARN = -W -Wall -Wshadow -Wredundant-decls -Wstrict-prototypes -Wold-style-definition

# Compiler optimizations
CC_OPTS = -O3 -ggdb -pipe -ffunction-sections -fdata-sections -funroll-loops -fomit-frame-pointer -fno-schedule-insns
CC_OPTS = -O2 -ggdb -pipe -ffunction-sections -fdata-sections

CC = $(CROSS_DIR)$(CROSS)gcc
STRIP = $(CROSS_DIR)$(CROSS)strip
Expand All @@ -68,8 +68,6 @@ LDFLAGS = -Wl,--gc-sections
TARGETHELP := $(shell $(CC) --target-help 2>&1)
ifneq (,$(findstring sse2,$(TARGETHELP)))
override CFLAGS += -fexpensive-optimizations -mmmx -msse -msse2 -msse3
else ifneq (,$(findstring neon,$(TARGETHELP)))
override CFLAGS += -fexpensive-optimizations -mfpu=neon
else
override CFLAGS += -fexpensive-optimizations
endif
Expand Down Expand Up @@ -291,7 +289,6 @@ SRC-$(CONFIG_WITH_EMU) += module-emulator-streamserver.c
SRC-$(CONFIG_WITH_EMU) += module-emulator-biss.c
SRC-$(CONFIG_WITH_EMU) += module-emulator-cryptoworks.c
SRC-$(CONFIG_WITH_EMU) += module-emulator-director.c
SRC-$(CONFIG_WITH_EMU) += module-emulator-icam.c
SRC-$(CONFIG_WITH_EMU) += module-emulator-irdeto.c
SRC-$(CONFIG_WITH_EMU) += module-emulator-nagravision.c
SRC-$(CONFIG_WITH_EMU) += module-emulator-powervu.c
Expand Down Expand Up @@ -457,7 +454,7 @@ $(OBJDIR)/config.o: $(OBJDIR)/config.c
$(Q)$(CC) $(STD_DEFS) $(CC_OPTS) $(CC_WARN) $(CFLAGS) -c $< -o $@

$(OBJDIR)/%.o: %.c Makefile
@$(CC) $(CFLAGS) -MP -MM -MT $@ -o $(subst .o,.d,$@) $<
@$(CC) -MP -MM -MT $@ -o $(subst .o,.d,$@) $<
$(SAY) "CC $<"
$(Q)$(CC) $(STD_DEFS) $(CC_OPTS) $(CC_WARN) $(CFLAGS) -c $< -o $@

Expand Down
5 changes: 2 additions & 3 deletions config.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,11 @@

#define WITH_EMU 1
#define WITH_SOFTCAM 1
#define WITH_ARM_NEON 1
#define WEBIF 1
#define WEBIF_LIVELOG 1
#define WEBIF_JQUERY 1
//#define TOUCH 1
#define WITH_SSL 1
//#define WITH_SSL 1
#if defined(__linux__) || defined(__CYGWIN__)
#define HAVE_DVBAPI 1
#endif
Expand All @@ -34,7 +33,7 @@
#define MODULE_CCCAM 1
#define MODULE_CCCSHARE 1
#define MODULE_GBOX 1
#define MODULE_RADEGAST 1
//#define MODULE_RADEGAST 1
//#define MODULE_SERIAL 1
//#define MODULE_CONSTCW 1
//#define MODULE_PANDORA 1
Expand Down
4 changes: 1 addition & 3 deletions config.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/bin/sh

addons="WEBIF WEBIF_LIVELOG WEBIF_JQUERY TOUCH WITH_SSL HAVE_DVBAPI WITH_NEUTRINO READ_SDT_CHARSETS IRDETO_GUESSING CS_ANTICASC WITH_DEBUG MODULE_MONITOR WITH_LB CS_CACHEEX CS_CACHEEX_AIO CW_CYCLE_CHECK LCDSUPPORT LEDSUPPORT CLOCKFIX IPV6SUPPORT WITH_EMU WITH_SOFTCAM WITH_ARM_NEON"
addons="WEBIF WEBIF_LIVELOG WEBIF_JQUERY TOUCH WITH_SSL HAVE_DVBAPI WITH_NEUTRINO READ_SDT_CHARSETS IRDETO_GUESSING CS_ANTICASC WITH_DEBUG MODULE_MONITOR WITH_LB CS_CACHEEX CS_CACHEEX_AIO CW_CYCLE_CHECK LCDSUPPORT LEDSUPPORT CLOCKFIX IPV6SUPPORT WITH_EMU WITH_SOFTCAM"
protocols="MODULE_CAMD33 MODULE_CAMD35 MODULE_CAMD35_TCP MODULE_NEWCAMD MODULE_CCCAM MODULE_CCCSHARE MODULE_GBOX MODULE_RADEGAST MODULE_SCAM MODULE_SERIAL MODULE_CONSTCW MODULE_PANDORA MODULE_GHTTP"
readers="READER_NAGRA READER_NAGRA_MERLIN READER_IRDETO READER_CONAX READER_CRYPTOWORKS READER_SECA READER_VIACCESS READER_VIDEOGUARD READER_DRE READER_TONGFANG READER_BULCRYPT READER_GRIFFIN READER_DGCRYPT"
card_readers="CARDREADER_PHOENIX CARDREADER_INTERNAL CARDREADER_SC8IN1 CARDREADER_MP35 CARDREADER_SMARGO CARDREADER_DB2COM CARDREADER_STAPI CARDREADER_STAPI5 CARDREADER_STINGER CARDREADER_DRECAS"
Expand Down Expand Up @@ -28,7 +28,6 @@ CONFIG_WITH_LB=y
# CONFIG_IPV6SUPPORT=n
CONFIG_WITH_EMU=y
CONFIG_WITH_SOFTCAM=y
CONFIG_WITH_ARM_NEON=y
# CONFIG_MODULE_CAMD33=n
CONFIG_MODULE_CAMD35=y
CONFIG_MODULE_CAMD35_TCP=y
Expand Down Expand Up @@ -476,7 +475,6 @@ menu_addons() {
IPV6SUPPORT "IPv6 support (experimental)" $(check_test "IPV6SUPPORT") \
WITH_EMU "Emulator support" $(check_test "WITH_EMU") \
WITH_SOFTCAM "Built-in SoftCam.Key" $(check_test "WITH_SOFTCAM") \
WITH_ARM_NEON "ARM Neon Support" $(check_test "WITH_ARM_NEON") \
2> ${tempfile}

opt=${?}
Expand Down
11 changes: 0 additions & 11 deletions ffdecsa/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,4 @@ file (GLOB ffdecsa_hdrs "*.h")

set (lib_name "ffdecsa")

if (CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse -msse2 -msse3")
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "(arm)|(ARM)")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=neon")
set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -mfpu=neon")
endif (CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)")

if (CMAKE_COMPILER_IS_GNUCC)
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O3 -pipe -ffunction-sections -fdata-sections -funroll-loops -fomit-frame-pointer -fno-schedule-insns")
endif (CMAKE_COMPILER_IS_GNUCC)

add_library (${lib_name} STATIC ${ffdecsa_srcs} ${ffdecsa_hdrs})
144 changes: 3 additions & 141 deletions ffdecsa/ffdecsa.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
#include <stdlib.h>

#include "ffdecsa.h"
#include "../config.h"

#ifndef NULL
#define NULL 0
Expand Down Expand Up @@ -54,7 +53,6 @@
#define PARALLEL_128_2MMX 1284
#define PARALLEL_128_SSE 1285
#define PARALLEL_128_SSE2 1286
#define PARALLEL_128_NEON 1287

//////// our choice //////////////// our choice //////////////// our choice //////////////// our choice ////////
#ifndef PARALLEL_MODE
Expand All @@ -63,21 +61,13 @@
#define PARALLEL_MODE PARALLEL_128_SSE2

#elif defined(__mips__) || defined(__mips) || defined(__MIPS__)
//#define PARALLEL_MODE PARALLEL_64_LONG
#define PARALLEL_MODE PARALLEL_32_INT
#define PARALLEL_MODE PARALLEL_64_LONG

#elif defined(__sh__) || defined(__SH4__)
#define PARALLEL_MODE PARALLEL_32_INT
#define COPY_UNALIGNED_PKT
#define MEMALIGN_VAL 4

#elif defined(__arm__)
#ifdef WITH_ARM_NEON
#define PARALLEL_MODE PARALLEL_128_NEON
#else
#define PARALLEL_MODE PARALLEL_32_INT
#endif

#else
#define PARALLEL_MODE PARALLEL_32_INT
#endif
Expand Down Expand Up @@ -117,8 +107,6 @@
#include "parallel_128_sse.h"
#elif PARALLEL_MODE==PARALLEL_128_SSE2
#include "parallel_128_sse2.h"
#elif PARALLEL_MODE==PARALLEL_128_NEON
#include "parallel_128_neon.h"
#else
#error "unknown/undefined parallel mode"
#endif
Expand Down Expand Up @@ -290,96 +278,6 @@ static void key_schedule_block(

}

static void key_schedule_block_ecm(
unsigned char *ck, // [In] ck[0]-ck[7] 8 bytes | Key.
unsigned char *kk, // [Out] kk[0]-kk[55] 56 bytes | Key schedule.
unsigned char ecm) // ecm
{
static const unsigned char key_perm[0x40] = {
0x12,0x24,0x09,0x07,0x2A,0x31,0x1D,0x15, 0x1C,0x36,0x3E,0x32,0x13,0x21,0x3B,0x40,
0x18,0x14,0x25,0x27,0x02,0x35,0x1B,0x01, 0x22,0x04,0x0D,0x0E,0x39,0x28,0x1A,0x29,
0x33,0x23,0x34,0x0C,0x16,0x30,0x1E,0x3A, 0x2D,0x1F,0x08,0x19,0x17,0x2F,0x3D,0x11,
0x3C,0x05,0x38,0x2B,0x0B,0x06,0x0A,0x2C, 0x20,0x3F,0x2E,0x0F,0x03,0x26,0x10,0x37,
};

static const unsigned char ecm_perm[0x100] = {
0x00,0x02,0x80,0x82,0x20,0x22,0xa0,0xa2, 0x04,0x06,0x84,0x86,0x24,0x26,0xa4,0xa6,
0x40,0x42,0xc0,0xc2,0x60,0x62,0xe0,0xe2, 0x44,0x46,0xc4,0xc6,0x64,0x66,0xe4,0xe6,
0x01,0x03,0x81,0x83,0x21,0x23,0xa1,0xa3, 0x05,0x07,0x85,0x87,0x25,0x27,0xa5,0xa7,
0x41,0x43,0xc1,0xc3,0x61,0x63,0xe1,0xe3, 0x45,0x47,0xc5,0xc7,0x65,0x67,0xe5,0xe7,
0x08,0x0a,0x88,0x8a,0x28,0x2a,0xa8,0xaa, 0x0c,0x0e,0x8c,0x8e,0x2c,0x2e,0xac,0xae,
0x48,0x4a,0xc8,0xca,0x68,0x6a,0xe8,0xea, 0x4c,0x4e,0xcc,0xce,0x6c,0x6e,0xec,0xee,
0x09,0x0b,0x89,0x8b,0x29,0x2b,0xa9,0xab, 0x0d,0x0f,0x8d,0x8f,0x2d,0x2f,0xad,0xaf,
0x49,0x4b,0xc9,0xcb,0x69,0x6b,0xe9,0xeb, 0x4d,0x4f,0xcd,0xcf,0x6d,0x6f,0xed,0xef,
0x10,0x12,0x90,0x92,0x30,0x32,0xb0,0xb2, 0x14,0x16,0x94,0x96,0x34,0x36,0xb4,0xb6,
0x50,0x52,0xd0,0xd2,0x70,0x72,0xf0,0xf2, 0x54,0x56,0xd4,0xd6,0x74,0x76,0xf4,0xf6,
0x11,0x13,0x91,0x93,0x31,0x33,0xb1,0xb3, 0x15,0x17,0x95,0x97,0x35,0x37,0xb5,0xb7,
0x51,0x53,0xd1,0xd3,0x71,0x73,0xf1,0xf3, 0x55,0x57,0xd5,0xd7,0x75,0x77,0xf5,0xf7,
0x18,0x1a,0x98,0x9a,0x38,0x3a,0xb8,0xba, 0x1c,0x1e,0x9c,0x9e,0x3c,0x3e,0xbc,0xbe,
0x58,0x5a,0xd8,0xda,0x78,0x7a,0xf8,0xfa, 0x5c,0x5e,0xdc,0xde,0x7c,0x7e,0xfc,0xfe,
0x19,0x1b,0x99,0x9b,0x39,0x3b,0xb9,0xbb, 0x1d,0x1f,0x9d,0x9f,0x3d,0x3f,0xbd,0xbf,
0x59,0x5b,0xd9,0xdb,0x79,0x7b,0xf9,0xfb, 0x5d,0x5f,0xdd,0xdf,0x7d,0x7f,0xfd,0xff
};

int i,j,k;
int bit[64];
int newbit[64];
int kb[7][8];

// 56 steps
// 56 key bytes kk(55)..kk(0) by key schedule from ck

// kb(6,0) .. kb(6,7) = ck(0) .. ck(7)
if (ecm == 4)
{
kb[6][0] = ecm_perm[ck[0]];
kb[6][1] = ck[1];
kb[6][2] = ck[2];
kb[6][3] = ck[3];
kb[6][4] = ecm_perm[ck[4]];
kb[6][5] = ck[5];
kb[6][6] = ck[6];
kb[6][7] = ck[7];
}
else
{
kb[6][0] = ck[0];
kb[6][1] = ck[1];
kb[6][2] = ck[2];
kb[6][3] = ck[3];
kb[6][4] = ck[4];
kb[6][5] = ck[5];
kb[6][6] = ck[6];
kb[6][7] = ck[7];
}


// calculate kb[5] .. kb[0]
for(i=5; i>=0; i--){
// 64 bit perm on kb
for(j=0; j<8; j++){
for(k=0; k<8; k++){
bit[j*8+k] = (kb[i+1][j] >> (7-k)) & 1;
newbit[key_perm[j*8+k]-1] = bit[j*8+k];
}
}
for(j=0; j<8; j++){
kb[i][j] = 0;
for(k=0; k<8; k++){
kb[i][j] |= newbit[j*8+k] << (7-k);
}
}
}

// xor to give kk
for(i=0; i<7; i++){
for(j=0; j<8; j++){
kk[i*8+j] = kb[i][j] ^ i;
}
}

}

//-----block utils

static inline __attribute__((always_inline)) void trasp_N_8 (unsigned char *in,unsigned char* out,int count){
Expand Down Expand Up @@ -497,7 +395,7 @@ static void block_decypher_group(

roff=GROUP_PARALLELISM*56;

//#define FASTTRASP1
#define FASTTRASP1
#ifndef FASTTRASP1
for(g=0;g<count;g++){
// Init registers
Expand Down Expand Up @@ -578,7 +476,7 @@ static void block_decypher_group(
#endif
}

//#define FASTTRASP2
#define FASTTRASP2
#ifndef FASTTRASP2
for(g=0;g<count;g++){
// Copy results
Expand Down Expand Up @@ -654,34 +552,6 @@ static void schedule_key(struct csa_key_t *key, const unsigned char *pk){
}
}

static void schedule_key_ecm(struct csa_key_t *key, const unsigned char *pk, const unsigned char ecm){
// could be made faster, but is not run often
int bi,by;
int i,j;
// key
memcpy(key->ck,pk,8);
// precalculations for stream
key_schedule_stream(key->ck,key->iA,key->iB);
for(by=0;by<8;by++){
for(bi=0;bi<8;bi++){
key->ck_g[by][bi]=(key->ck[by]&(1<<bi))?FF1():FF0();
}
}
for(by=0;by<8;by++){
for(bi=0;bi<4;bi++){
key->iA_g[by][bi]=(key->iA[by]&(1<<bi))?FF1():FF0();
key->iB_g[by][bi]=(key->iB[by]&(1<<bi))?FF1():FF0();
}
}
// precalculations for block
key_schedule_block_ecm(key->ck,key->kk,ecm);
for(i=0;i<56;i++){
for(j=0;j<BYTES_PER_BATCH;j++){
*(((unsigned char *)&key->kkmulti[i])+j)=key->kk[i];
}
}
}

void set_control_words(void *keys, const unsigned char *ev, const unsigned char *od){
schedule_key(&((struct csa_keys_t *)keys)->even,ev);
schedule_key(&((struct csa_keys_t *)keys)->odd,od);
Expand All @@ -691,18 +561,10 @@ void set_even_control_word(void *keys, const unsigned char *pk){
schedule_key(&((struct csa_keys_t *)keys)->even,pk);
}

void set_even_control_word_ecm(void *keys, const unsigned char *pk, const unsigned char ecm){
schedule_key_ecm(&((struct csa_keys_t *)keys)->even,pk,ecm);
}

void set_odd_control_word(void *keys, const unsigned char *pk){
schedule_key(&((struct csa_keys_t *)keys)->odd,pk);
}

void set_odd_control_word_ecm(void *keys, const unsigned char *pk, const unsigned char ecm){
schedule_key_ecm(&((struct csa_keys_t *)keys)->odd,pk,ecm);
}

//-----get control words

void get_control_words(void *keys, unsigned char *even, unsigned char *odd){
Expand Down
2 changes: 0 additions & 2 deletions ffdecsa/ffdecsa.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,9 @@ void set_control_words(void *keys, const unsigned char *even, const unsigned cha

// -- set even control word, 8 bytes
void set_even_control_word(void *keys, const unsigned char *even);
void set_even_control_word_ecm(void *keys, const unsigned char *even, const unsigned char ecm);

// -- set odd control word, 8 bytes
void set_odd_control_word(void *keys, const unsigned char *odd);
void set_odd_control_word_ecm(void *keys, const unsigned char *odd, const unsigned char ecm);

// -- get control words, 8 bytes each
//void get_control_words(void *keys, unsigned char *even, unsigned char *odd);
Expand Down
Loading

0 comments on commit 99c4631

Please sign in to comment.