#include #include #include #include #include void encrypt(uint16_t *v) { uint16_t v0 = v[0], v1 = v[1], sum = 0, i; /* set up */ uint16_t delta = 0x626f; uint16_t k0 = 0x7065; // "pe" uint16_t k1 = 0x7065; // "pe" uint16_t k2 = 0x7275; // "ru" uint16_t k3 = 0x6e73; // "ns" printf("v0: 0x%x, v1: 0x%x\n", v0, v1); for (i = 0; i < 128; i++) { sum += delta; v0 += ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1); v1 += ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3); //printf("Intermediate v0: 0x%x | v1: 0x%x\n", v0, v1); } printf("SUM: 0x%x\n", sum); printf("v0: 0x%x, v1: 0x%x\n", v0, v1); v[0] = v0; v[1] = v1; } int main(int argc, char *argv[]) { uint8_t *buf; uint32_t buflen, i; if (argc != 2) { printf("Usage: %s text_to_encrypt", argv[0]); exit(1); } buflen = strlen(argv[1]); buf = (uint8_t *)malloc(buflen); memcpy(buf, argv[1], buflen); for (i = 0; i < buflen; i++) { printf("----\n"); encrypt((uint16_t *)&buf[i]); } printf("Result:\n"); for (i = 0; i < buflen; i++) { printf("%02x", buf[i]); } printf("\n"); return 0; }