#include #include #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(int argc, char *argv[]) { if(argc != 2) { fprintf(stderr, "Usage: %s string\n", argv[0]); return EXIT_FAILURE; } if(strlen(argv[1]) > 32) { fprintf(stderr, "Error: the size of string to encrypt must be at most 32 bytes long\n"); return EXIT_FAILURE; } uint8_t title[32] = {0}; uint8_t key[] = {0x5F, 0x38, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00}; memcpy(title, argv[1], strlen(argv[1])); print_title(title); for(size_t k = 0 ; k < 0x20 ; k += 3) { addkey(title + k, key, title + 0x20); } print_title(title); return EXIT_SUCCESS; }