1 // license:BSD-3-Clause 2 // copyright-holders:Andreas Naive,David Haywood 3 #ifndef _IGS036CRYPT_H_ 4 #define _IGS036CRYPT_H_ 5 6 7 class igs036_decryptor 8 { 9 public: 10 igs036_decryptor(const uint8_t* game_key); 11 void decrypter_rom(uint16_t* rom, int size, int offset); 12 uint16_t decrypt(uint16_t cipherword, int word_address)const; 13 uint16_t deobfuscate(uint16_t cipherword, int word_address)const; 14 15 private: 16 const uint8_t* key; 17 18 static int (*rot_enabling[16][4])(int); 19 static int (*rot_direction[4][8])(int); 20 static const uint32_t triggers[16][2]; 21 22 int rotation(int address)const; 23 uint16_t rol(uint16_t num, int shift)const; 24 int rot_enabled(int address, const int* group)const ; 25 int rot_group(int address, const int* group)const; 26 }; 27 28 extern const uint8_t m312cn_key[0x100]; 29 extern const uint8_t cjddzsp_key[0x100]; 30 extern const uint8_t cjdh2_key[0x100]; 31 32 #endif 33