📄 geode_crypto.h
字号:
#ifndef CRYPTO_H_/* The key length is now and forever more 128 bits */#define CRYPTO_KEY_LEN 16#define CRYPTO_SESSION_HWKEY 0x001#define CRYPTO_SESSION_ECB 0x010#define CRYPTO_SESSION_CBC 0x020#define CRYPTO_SESSION_NOCOHERENCY 0x100#define CRYPTO_FLAG_DECRYPT 0x001#define CRYPTO_FLAG_ENCRYPT 0x002/* Size of the user block in the EEPROM */#define EEPROM_SIZE 237#define EEPROM_LOWER_RW 0x01#define EEPROM_UPPER_RW 0x02struct geode_crypt_session { unsigned int flags; unsigned int blocksize; unsigned char key[CRYPTO_KEY_LEN]; int id; };struct geode_crypt_op { int id; unsigned int flags; unsigned int len; void *src; void *dst; void *iv;};struct geode_crypt_key { int id; unsigned char key[CRYPTO_KEY_LEN];};#define CIOCGSESSION _IOWR('c', 101, struct geode_crypt_session *)#define CIOCFSESSION _IOW('c', 102, unsigned int)#define CIOCCRYPT _IOWR('c', 103, struct geode_crypt_op *)#define CIOCSKEY _IOW('c', 103, struct geode_crypt_key *)#define EIOCSKEYOFF _IOW('c', 104, unsigned int)#define EIOCSLOCKUP _IOW('c', 105, unsigned int)#define EIOCSLOCKLW _IOW('c', 106, unsigned int)#define EIOSKEY _IOW('c', 107, unsigned char *)#define EIOGPERMS _IOR('c', 108, int)#ifdef __KERNEL__#define GEODE_CRYPT_MINOR_DEV 155/* Doh - Cimarron is 156 */#define GEODE_EEPROM_MINOR_DEV 157#define AES_CONTROLA_REG 0x0000#define AES_CONTROLB_REG 0x0004/* Ctrl register bits */#define AES_CTRL_START 0x01#define AES_CTRL_DECRYPT 0x00 /* Default - but defined for simplicity */#define AES_CTRL_ENCRYPT 0x02#define AES_CTRL_WRKEY 0x04#define AES_CTRL_DCA 0x08#define AES_CTRL_SCA 0x10#define AES_CTRL_CBCA 0x20#define AES_INTERRUPT_REG 0x0008#define AES_INTR_EEPROM_PENDING 0x40000#define AES_INTR_B_PENDING 0x20000#define AES_INTR_A_PENDING 0x10000#define AES_INTR_PENDING (AES_INTR_A_PENDING | AES_INTR_B_PENDING)#define AES_INTR_EEPROM_MASK 0x00004#define AES_INTR_A_MASK 0x00002#define AES_INTR_B_MASK 0x00001#define AES_SOURCEA_REG 0x0010#define AES_DSTA_REG 0x0014#define AES_LENA_REG 0x0018#define AES_SOURCEB_REG 0x0020#define AES_DSTB_REG 0x0024#define AES_LENB_REG 0x0028#define AES_WRITEKEY0_REG 0x0030#define AES_WRITEKEY1_REG 0x0034#define AES_WRITEKEY2_REG 0x0038#define AES_WRITEKEY3_REG 0x003C#define AES_WRITEIV0_REG 0x0040#define AES_WRITEIV1_REG 0x0044#define AES_WRITEIV2_REG 0x0048#define AES_WRITEIV3_REG 0x004C/* EEPROM definitions */#define EEPROM_CTRL_REG 0x0800#define EEPROM_CTRL_READ 0x00#define EEPROM_CTRL_START 0x01#define EEPROM_CTRL_WRITE 0x02#define EEPROM_CTRL_EXCEPT 0x04#define EEPROM_CTRL_KEYDISABLE 0x20#define EEPROM_ADDR_REG 0x0804#define EEPROM_DATA_REG 0x0808#define EEPROM_SEC_REG 0x080C#define EEPROM_ACCESS_WPL 0x0007#define EEPROM_ACCESS_WPU 0x0070/* Defines for the eeprom space map - only the key offset is used by the driver, everywhere from 18 to 255 is the users space, and he only thinks he has 238 total bytes of space */#define EEPROM_WPL_OFFSET 0x00#define EEPROM_WPE_OFFSET 0x01#define EEPROM_KEY_OFFSET 0x02#define EEPROM_ID_OFFSET 18#define EEPROM_ULOWER_OFFSET 34#define EEPROM_UUPPER_OFFSET 128struct geode_crypt_ksession { u32 flags; u32 blocksize; u8 key[CRYPTO_KEY_LEN]; int id; void *src; void *dest;};struct crypt_slist { int id; struct geode_crypt_ksession session; struct crypt_slist *next;};struct geode_crypt_driver { unsigned char *base; int flags; struct semaphore dev_mutex; struct semaphore engine_mutex; struct semaphore eeprom_mutex; int session_index; struct crypt_slist *session_list;};#endif #endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -