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