PPaste!

Home - All the pastes - Authored by Thooms

Raw version

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

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;
}