xecrypt 0.1.0

Xbox 360 cryptographic primitives (AES, SHA-1, RSA signature verification)
Documentation
pub(crate) mod devkit {
	pub mod xex {
		/// PIRS/XEX key
		pub const MODULUS: [u64; 32] = [
			0xC91C3577C8BFA06B,
			0x642F4E6C7399ACE5,
			0x84E7AB2EE4DBAE1E,
			0x3E0670624AA2AD99,
			0xE1767061E6BE9327,
			0x6D5D97FD7330763A,
			0xB8705CC0BE8F1B3D,
			0x4C5D8565988C4C6B,
			0xCCBED0C5A743AA6C,
			0x56910FF8E8BD904D,
			0xB8D9A3F13B6E71DB,
			0xB0E0F51A8E8039C2,
			0x4E3A8142C56EB949,
			0x44F48DC58451C81B,
			0x7DBC4559D0E3F297,
			0xEFA039EA1CF94866,
			0x664E8BD022ABDB90,
			0x1EBCD83D91A7897C,
			0x7207DA63AAF33EED,
			0xD587667BF2289CB3,
			0x4054226544102AD2,
			0xB0484CF99E6FA476,
			0x9F18D04DADA56EFC,
			0x9EC2A4CFB3ECC805,
			0xED8C08ED2513CCBB,
			0x16601A8AC74B6893,
			0x7F95271ACC7BAC29,
			0xD4B7419B0A996002,
			0xA6E9A7C278F5C0B8,
			0xBB9D881671648107,
			0x2C5B33E51CFA0002,
			0xD7492F13B1C17FBF,
		];
		pub const PUB_EXPONENT: u64 = 3;

		pub const P: [u64; 16] = [
			0x4D4D1627779E3C97,
			0x2DBE0313CB829E5D,
			0x9FA81C796E409F29,
			0x7646A9B4C9FA6FA4,
			0x5BCD1C497B4ECCB3,
			0xFFC81F0803342D90,
			0x7F3941A3476495D1,
			0x18B77C8D52040FDF,
			0xB403B02465FA7FF3,
			0xEA48B3A5CB30E99F,
			0x7273C43A7AC8AA05,
			0x481DD173EFFFF3E8,
			0xFD504EC5E86E7455,
			0x080BE2E8110A4B01,
			0xE064CE0D6C4B49A0,
			0xF75B981062495F19,
		];
		pub const Q: [u64; 16] = [
			0xEF3AAFB95D35B14D,
			0xDB82E4774DCA8A34,
			0x4B1DCFCF32CE0D9D,
			0x503AA06823D88072,
			0xE3CDB6B6E1D92A26,
			0xCC3CA7179E05D4AA,
			0x6ED5616A64685980,
			0xD21CD08CD8D492BD,
			0x84ADE75492137A9E,
			0x928A8C6EF65D29E4,
			0xB9EB5134B6E50B67,
			0x41434545B85E2573,
			0x6DF3111279CBE69F,
			0x4FA191CA3E9F2DDF,
			0x342F233286B43E10,
			0xDECEBBD886850EF0,
		];

		// pub const DP: [u8; 128] = [
		// 	0xa4, 0xe7, 0xba, 0xb5, 0x96, 0xdb, 0x94, 0xbb, 0xea, 0xed, 0xde, 0xb3, 0x9d, 0x87, 0x86, 0x6a, 0xb0, 0x07,
		// 	0xec, 0x9a, 0xb6, 0x06, 0xdc, 0xab, 0xfe, 0x35, 0x89, 0xd9, 0x45, 0x9e, 0xf8, 0x38, 0xda, 0xbe, 0x8b, 0xa2,
		// 	0x9f, 0xff, 0xf7, 0xf0, 0x4c, 0x4d, 0x2d, 0x7c, 0x51, 0xdb, 0x1c, 0x03, 0xf1, 0x85, 0xcd, 0x19, 0x32, 0x20,
		// 	0x9b, 0xbf, 0xcd, 0x57, 0xca, 0xc2, 0xee, 0xa6, 0xff, 0xf7, 0x65, 0xcf, 0xa8, 0x5e, 0x36, 0xad, 0x5f, 0xea,
		// 	0x54, 0xd0, 0xd6, 0x6c, 0xda, 0x43, 0x0e, 0x8b, 0xff, 0xda, 0xbf, 0x5a, 0xac, 0xcd, 0x73, 0xb5, 0x92, 0x88,
		// 	0xbd, 0x86, 0x52, 0x34, 0x88, 0x77, 0xa4, 0x2f, 0x1b, 0xcd, 0xdb, 0xfc, 0x4a, 0x6d, 0xbf, 0xc5, 0x68, 0x50,
		// 	0xf4, 0x2b, 0x14, 0xc6, 0x1e, 0x7e, 0xac, 0xb7, 0xdd, 0x01, 0xbe, 0xe8, 0xde, 0x33, 0x64, 0x1a, 0x4f, 0xbe,
		// 	0xd3, 0x0f,
		// ];

		// pub const DQ: [u8; 128] = [
		// 	0x94, 0x89, 0xd2, 0x90, 0x59, 0xae, 0x09, 0xf5, 0x78, 0x1f, 0x6c, 0xcc, 0x59, 0xcd, 0x7e, 0xb5, 0x8a, 0x6b,
		// 	0xb6, 0x86, 0xd4, 0x6a, 0x1e, 0x94, 0xf3, 0xf7, 0x60, 0xb6, 0xfb, 0xdd, 0x44, 0x6a, 0x2b, 0x82, 0x2e, 0x2e,
		// 	0x7a, 0xe9, 0x6e, 0x4d, 0x26, 0x9c, 0xe0, 0xcd, 0xcf, 0x43, 0x5c, 0xef, 0xb7, 0x07, 0x08, 0x49, 0xf9, 0x93,
		// 	0x71, 0x43, 0x03, 0x1e, 0x9a, 0x38, 0x61, 0x62, 0x51, 0xbf, 0x36, 0xbd, 0xe0, 0x5d, 0xe5, 0xe3, 0x0c, 0x7e,
		// 	0x49, 0xe3, 0x96, 0x46, 0xed, 0x9a, 0xe6, 0x55, 0xdd, 0x7d, 0xc4, 0xba, 0x69, 0x59, 0x38, 0x71, 0xed, 0x33,
		// 	0xcf, 0x24, 0x96, 0x90, 0xc6, 0xc4, 0x35, 0x7c, 0x6a, 0xf0, 0x17, 0xe5, 0xaa, 0xf6, 0xdc, 0xbe, 0x8a, 0x8a,
		// 	0x21, 0xde, 0xb3, 0xbe, 0x92, 0x57, 0x42, 0xfa, 0x33, 0xdc, 0x5c, 0x23, 0x4a, 0x27, 0x1f, 0xd0, 0xe8, 0xce,
		// 	0x76, 0x33,
		// ];

		// pub const CR: [u8; 128] = [
		// 	0x75, 0x8d, 0x75, 0x1b, 0x93, 0x53, 0xdd, 0xf4, 0x79, 0x21, 0xbb, 0x43, 0xe6, 0xfc, 0xa4, 0xc8, 0x86, 0x92,
		// 	0xd9, 0x57, 0x34, 0x92, 0x15, 0x86, 0x15, 0xa2, 0xb3, 0x61, 0x05, 0xcb, 0xc6, 0xc0, 0x2c, 0xb4, 0x16, 0x16,
		// 	0x3a, 0x6e, 0xba, 0x40, 0xa7, 0x5c, 0x3b, 0x44, 0x78, 0xba, 0x5b, 0x91, 0xb7, 0x9e, 0x00, 0x30, 0x15, 0xfd,
		// 	0xfa, 0x05, 0xab, 0xca, 0x58, 0xbf, 0x24, 0xb5, 0x60, 0xd2, 0x2a, 0x31, 0xb8, 0xda, 0xd6, 0x13, 0xe4, 0xbe,
		// 	0xb3, 0xef, 0x29, 0x41, 0x55, 0x23, 0x0b, 0x2a, 0x3c, 0xcf, 0x62, 0xe3, 0x09, 0xbc, 0x63, 0x9e, 0xd3, 0x03,
		// 	0xbb, 0xa4, 0xa0, 0x51, 0x80, 0x58, 0x2d, 0xa5, 0x8b, 0xcc, 0x4d, 0xaf, 0xdf, 0xfc, 0x8d, 0x79, 0xe3, 0x3d,
		// 	0x35, 0x06, 0x0f, 0x76, 0x39, 0xf7, 0x89, 0x93, 0xbb, 0x6a, 0xa9, 0x3c, 0xc9, 0xa2, 0xb3, 0xae, 0xde, 0x77,
		// 	0x71, 0xfa,
		// ];

		// pub const PRIV_EXPONENT: [u8; 256] = [
		// 	0x8f, 0x86, 0x1f, 0x62, 0x76, 0x80, 0xff, 0xd4, 0xc8, 0x3c, 0xcd, 0x43, 0x68, 0xa6, 0xaa, 0xac, 0x7d, 0x13,
		// 	0xb0, 0x0e, 0xf6, 0x43, 0x00, 0xaf, 0xc4, 0x9b, 0xc5, 0x2c, 0x50, 0xa3, 0xd5, 0xd0, 0x8d, 0xcf, 0x81, 0x12,
		// 	0x07, 0x10, 0xea, 0xac, 0x55, 0x0e, 0x1a, 0x11, 0xdd, 0xa7, 0xc8, 0x1b, 0x64, 0x40, 0x11, 0xb1, 0xda, 0x32,
		// 	0x45, 0xb7, 0xf3, 0xb2, 0xb0, 0x9e, 0x18, 0xb7, 0xdd, 0xd2, 0x69, 0xd7, 0x18, 0x8a, 0x77, 0xf3, 0x30, 0x03,
		// 	0xbf, 0x65, 0xe0, 0x33, 0xc9, 0x18, 0xf4, 0xa8, 0x75, 0x85, 0x88, 0xa6, 0x69, 0x9f, 0xc2, 0xf9, 0x80, 0x38,
		// 	0x16, 0xee, 0x2d, 0x60, 0x1c, 0x8c, 0x8e, 0x5a, 0x44, 0x52, 0xa1, 0x70, 0x68, 0x77, 0xa1, 0x5a, 0x91, 0x97,
		// 	0xc7, 0x4c, 0xd4, 0x9e, 0x14, 0x7d, 0xe5, 0x7e, 0x61, 0x1a, 0x5b, 0xa8, 0x44, 0x34, 0x5d, 0x35, 0x6c, 0x72,
		// 	0x92, 0x5f, 0x66, 0x4e, 0x99, 0x56, 0x22, 0xc7, 0x3c, 0x3d, 0x9b, 0x70, 0x38, 0x11, 0x3e, 0x98, 0x47, 0x44,
		// 	0x9e, 0x2f, 0x66, 0x0c, 0xcd, 0xc5, 0x8a, 0x26, 0x97, 0x4f, 0x6b, 0x9c, 0x42, 0x22, 0xe9, 0x8e, 0x1a, 0x55,
		// 	0x3e, 0xeb, 0x44, 0x16, 0xc0, 0x44, 0x5d, 0xa7, 0x09, 0xac, 0x06, 0x80, 0x7d, 0x9e, 0x91, 0x29, 0x35, 0x42,
		// 	0xc4, 0xca, 0x53, 0x31, 0x0d, 0x5e, 0x26, 0x33, 0x1f, 0x79, 0x1f, 0xe6, 0xeb, 0xb0, 0xd0, 0x32, 0x49, 0x22,
		// 	0x71, 0x34, 0x86, 0xeb, 0xd1, 0x22, 0x0c, 0x81, 0x72, 0x9c, 0x6b, 0x90, 0x8b, 0xe9, 0x36, 0xa4, 0x4d, 0x55,
		// 	0x16, 0x92, 0x68, 0xeb, 0xb1, 0x0f, 0x12, 0xde, 0x4f, 0xae, 0x19, 0x83, 0x93, 0x35, 0x29, 0x01, 0xbc, 0x16,
		// 	0x7f, 0x44, 0x2d, 0x33, 0x56, 0x3a, 0x3c, 0x9e, 0xef, 0x40, 0xe6, 0xdd, 0xad, 0x8d, 0x08, 0x62, 0xf5, 0x0f,
		// 	0x4d, 0x47, 0xcc, 0x5b,
		// ];
	}

	pub mod live {
		pub const PUB_EXPONENT: u64 = 0x00000003;

		pub const P: [u64; 16] = [
			0x5B0E3FDF191BED7B,
			0xAE7E049B5A0BBAE2,
			0x03AC6E20DB8E4FE7,
			0xBCECDD1823548349,
			0x47DF1EA77D392F3B,
			0xA651116A2BBF84CA,
			0xCD0CF61E2BCAF42D,
			0x26530E45845CA86C,
			0x4F2F679BB90185B0,
			0x7766FFCCEA1E9D83,
			0x0EFFA81A07229F27,
			0x9E9181D233063A3D,
			0x769A1BD30DE00F09,
			0x4AFC545F7C6C0417,
			0xA99CBB794E38A19C,
			0xEAB7176D3520D7D6,
		];
		pub const Q: [u64; 16] = [
			0x8BEB8DED61B34B5F,
			0x5005C7A5B64FF7CF,
			0x9EA6EAF0B76D00AD,
			0xBCFD3F19AEF2A8C5,
			0xFACF3A188D2FF1A9,
			0xB4FDABF24704E025,
			0x4A0D65B0A69B0D9B,
			0xFD17E6CE29AA2DC0,
			0xF8C7D7E93887CCDF,
			0x39ECC88EE6CBBE4B,
			0x38D906B6B2034CF1,
			0xC8FE5E51AC0DEE47,
			0xFB8926CDB0D25EE7,
			0x169AECFDCBAE23D2,
			0xF350E17B8EFE044C,
			0xC68074FBB5C54B8E,
		];
	}

	pub const MANUFACTURING_PUBLIC_MODULUS: [u8; 256] = [
		0xC7, 0x58, 0xC0, 0xA5, 0xAB, 0x89, 0x00, 0x86, 0x27, 0x3E, 0x2F, 0x92, 0x27, 0xB6, 0x7C, 0x5C, 0x7D, 0xD9,
		0xAF, 0x17, 0xD0, 0x3A, 0xBA, 0x3E, 0xE2, 0xBA, 0xFA, 0x5F, 0x6E, 0x99, 0xFE, 0x7D, 0x6C, 0xFF, 0x81, 0x27,
		0x6A, 0xB6, 0xAD, 0xCC, 0x63, 0x60, 0x6C, 0xC0, 0x10, 0xFE, 0x14, 0x8A, 0x8E, 0xE9, 0x09, 0x12, 0x3F, 0xD8,
		0xC4, 0x6D, 0xB6, 0xA9, 0x45, 0x8A, 0x14, 0xF2, 0xB5, 0x71, 0x7E, 0xC3, 0x72, 0x0F, 0xBD, 0x43, 0x1D, 0x5A,
		0x8E, 0xF1, 0x60, 0x9F, 0x08, 0x54, 0xF4, 0x1B, 0x5D, 0xAF, 0x47, 0x31, 0x58, 0x1A, 0x3B, 0x1E, 0x3D, 0x5B,
		0x35, 0x0D, 0x31, 0x6A, 0x19, 0xE3, 0x2A, 0xE9, 0x88, 0x97, 0x74, 0x33, 0x66, 0x87, 0xCA, 0xA4, 0x02, 0x98,
		0x1A, 0x3F, 0x25, 0x19, 0x16, 0x59, 0x2C, 0x92, 0xC4, 0x21, 0x8C, 0x5C, 0x51, 0x78, 0x5D, 0x57, 0xAA, 0x9E,
		0x3B, 0xE2, 0x57, 0x67, 0xC4, 0xEA, 0x8D, 0xC2, 0xFA, 0x64, 0x7E, 0x3F, 0x72, 0x7B, 0x7C, 0x04, 0xFE, 0x28,
		0xAE, 0x29, 0x7F, 0xAC, 0x16, 0xC4, 0x68, 0x66, 0x84, 0x2A, 0x5A, 0x8D, 0x15, 0x14, 0xF4, 0xC3, 0xD9, 0x90,
		0xCC, 0xAC, 0x83, 0x33, 0xE1, 0x21, 0xD7, 0x13, 0xCB, 0x12, 0xA7, 0xB4, 0x59, 0xD0, 0xFA, 0x12, 0xB9, 0xD6,
		0x95, 0xE7, 0x1E, 0x4B, 0xDB, 0x8C, 0xEC, 0x34, 0x5B, 0x28, 0xEA, 0x20, 0xD5, 0x36, 0x21, 0xB7, 0xC8, 0x5B,
		0x01, 0x5E, 0x24, 0x0E, 0x8F, 0xF1, 0xC0, 0x1B, 0xA4, 0xE2, 0xBC, 0x93, 0xC0, 0xA8, 0x92, 0xAB, 0xFD, 0xC8,
		0xC6, 0xD0, 0x60, 0xBE, 0x8E, 0xB5, 0x55, 0x90, 0xDC, 0x6E, 0x0D, 0x6F, 0x8E, 0x52, 0x76, 0x35, 0x18, 0x9A,
		0x4E, 0x07, 0x72, 0xCE, 0xDF, 0x24, 0x82, 0xAB, 0x58, 0x9D, 0x83, 0x1E, 0xD8, 0xF7, 0xF4, 0x30, 0xE3, 0x52,
		0x4D, 0x53, 0x1C, 0xA1,
	];

	pub const DASHBOARD_PUBLIC_MODULUS: [u8; 256] = [
		0xB2, 0xE1, 0xAF, 0xAC, 0x9C, 0x63, 0x6E, 0x18, 0xE2, 0x84, 0x6C, 0xBE, 0xE9, 0xFF, 0x0E, 0x77, 0xDD, 0x99,
		0x84, 0x53, 0x85, 0x0D, 0xB3, 0xD6, 0x68, 0xFA, 0xFF, 0x79, 0xA2, 0x92, 0xD9, 0x83, 0xE2, 0xC1, 0xE8, 0xF7,
		0xDA, 0xB7, 0xAA, 0xB8, 0x6A, 0x68, 0x22, 0x35, 0x7A, 0xF9, 0x51, 0x08, 0x7F, 0x3D, 0x5F, 0xD8, 0x54, 0x93,
		0xAF, 0x94, 0xA8, 0x33, 0xCF, 0xC6, 0xFC, 0x74, 0xC8, 0xE2, 0xD8, 0x2D, 0x5C, 0x7E, 0x38, 0x01, 0x3F, 0xB0,
		0x8E, 0x44, 0x86, 0x07, 0x50, 0x02, 0x05, 0x0F, 0xA8, 0xF9, 0xE1, 0xF4, 0xCE, 0xBA, 0x62, 0x5F, 0x90, 0x0F,
		0x18, 0x09, 0x70, 0x80, 0xAC, 0xF1, 0x5B, 0xD6, 0xE7, 0xFE, 0xC2, 0x9D, 0xEB, 0xE4, 0xED, 0xC1, 0xFD, 0x3F,
		0x0A, 0x49, 0xF4, 0xB6, 0xF8, 0x4D, 0xBC, 0x27, 0xD9, 0xFD, 0x7F, 0x54, 0xF8, 0xD9, 0x56, 0x7C, 0x42, 0x87,
		0xAF, 0x4F, 0x12, 0x3C, 0xE3, 0x2F, 0x9C, 0x48, 0x9F, 0x27, 0xF4, 0x0D, 0xEF, 0xDB, 0x70, 0x09, 0x33, 0x6D,
		0x4F, 0x30, 0x86, 0xF6, 0x17, 0x9E, 0xC1, 0x83, 0x38, 0x7E, 0x6A, 0x95, 0x61, 0xEF, 0x5F, 0xE3, 0x21, 0xF2,
		0xF9, 0xC2, 0x1C, 0xCE, 0xF9, 0x93, 0xBE, 0x1D, 0xCC, 0x56, 0x96, 0xBE, 0x66, 0xF0, 0x73, 0x0E, 0xCA, 0xB0,
		0xD2, 0x92, 0xF6, 0x2F, 0x35, 0x26, 0x59, 0xE0, 0xAA, 0x44, 0x54, 0x1C, 0x78, 0x7F, 0x9E, 0xE4, 0x65, 0xF8,
		0x7B, 0x1F, 0x72, 0x89, 0x57, 0x02, 0x30, 0xEC, 0x2A, 0x2C, 0xFA, 0x7F, 0x65, 0xBD, 0xC7, 0xC8, 0xA1, 0x3D,
		0xB4, 0x45, 0x5E, 0x98, 0x75, 0x65, 0x1F, 0xA3, 0x6B, 0x85, 0xEC, 0xBE, 0xEC, 0xD5, 0xE6, 0xDD, 0x72, 0x49,
		0x2E, 0xEC, 0x08, 0x26, 0xBE, 0x96, 0xC5, 0xA0, 0xCF, 0x1C, 0xFE, 0x10, 0x73, 0x1F, 0x7E, 0x17, 0xD7, 0x46,
		0xE2, 0x47, 0x38, 0xDB,
	];
}

pub(crate) mod retail {

	pub mod pirs {
		pub const MODULUS: [u64; 32] = [
			0xE63B32B28D9E9EE7,
			0x9DFC5C7241945847,
			0xDE0D184072D6E346,
			0x8EBA8EBC1A90AC20,
			0xBA0385B51A3E25F9,
			0xA658EBB6A3C4A3EE,
			0xB2B0AE9769EBFE71,
			0xFC02AB77BAC8E674,
			0xE67C630EAF4CF7E7,
			0x114A802472057A63,
			0xD0F89102A6E77D77,
			0xC5A79B08112EA064,
			0x456046BC36E11771,
			0xBE66492FAE20A476,
			0x9C2751CF4B347A35,
			0xBCA4AA1C474BF497,
			0x224E1324D3C157DF,
			0x4D84B9189799AC00,
			0xB33D032560C87A59,
			0xFE48FF283D10BB9E,
			0x09062A61202CF872,
			0xEB87E6D1FBB366FC,
			0x4A02AED4D837CFA6,
			0x322579360EF4ED19,
			0xA21027962F9FA93D,
			0xA43730115183BDF7,
			0xC7E5CEAAECDE48A0,
			0x84F7B0F64B8EF089,
			0xBD477C90DD881217,
			0x40D24EA6C611041B,
			0x57A868B461F41BC6,
			0x8BE8D920F205E070,
		];

		pub const EXPONENT: u64 = 3;
	}

	pub mod live {
		pub const MODULUS: [u64; 32] = [
			0xF2E53E3F0375C2B3,
			0x20B6AB4190789DA1,
			0x044E586DFCFF161C,
			0x9E011DDA5D167E54,
			0xCB2AF2A70283E8AD,
			0xCDA100F89CC4AD2D,
			0x4CAF2E18019F38B1,
			0x3DFAC9A6CF2AA84E,
			0xE07E172361FBFD36,
			0x2E2217FA7571A074,
			0xF9F710857EEC5C35,
			0xF5B0ACABC10B091D,
			0x9A7ABEB9B791780A,
			0x5DCACBF9984B6815,
			0x75771CB0CCFA04A3,
			0xEC08DD685FEA69AF,
			0x9D98B9BFF372FCC0,
			0x1E5B155B49AA6ADC,
			0x5535393F8CDCC757,
			0xA775214108BB9B74,
			0x6CFBF689C4B3EBD0,
			0x7EAFA7A727254170,
			0x59AC9618160EE96B,
			0x11C7EE355272A4C2,
			0xB31E2005C5C09C5D,
			0xC7CF5B81BEB2B3AF,
			0x8385DE736E7A0EAC,
			0x590D4673FB7B7888,
			0x29875AE67B2E7D86,
			0x8255BE1212D987B3,
			0xBD3D41C8D000F57D,
			0xC97B518EC735DCEF,
		];

		pub const PUB_EXPONENT: u64 = 0x00010001;
	}
}