#include #include #include void addkey(uint8_t *title, uint8_t *key, uint8_t *titleend) { uint8_t carry = 0; for(size_t i = 0 ; i < 8 ; i++) { uint8_t input = title + i >= titleend ? 0x00 : title[i]; uint16_t tmp = input + key[i] + carry; carry = tmp > 0xFF ? 1 : 0; title[i] = tmp & 0xFF; } } void print_title(uint8_t *title) { printf("{"); for(size_t i = 0 ; i < 32 ; i++) { printf("0x%02x", title[i]); if(i != 31) printf(", "); } printf("}\n"); } int main() { uint8_t title[] = { 0x50, 0x55, 0x54, 0x20, 0x46, 0x4C, 0x41, 0x47, 0x20, 0x48, 0x45, 0x52, 0x45, 0x20, 0x54, 0x4F, 0x20, 0x50, 0x4C, 0x41, 0x59, 0x20, 0x4D, 0x55, 0x53, 0x49, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00 }; uint8_t key[] = { 0xCF, 0xC6, 0x3C, 0xF7, 0xFF, 0x7F, 0x00, 0x00 }; for(size_t i = 0 ; i < 0x20 ; i += 3) { addkey(title + i, key, title + 0x20); } print_title(title); }