#include #include #include #include "rensa.h" int main(int argc, char **argv) { if (argc == 1) { fprintf(stderr, "No options provided\n"); return 1; } int opt; FILE *input = stdin, *output = stdout, *key = NULL; size_t key_shift = 0; char zeroth_char = 0; int encrypt_mode = 1; char *endptr = NULL; while ((opt = getopt(argc, argv, "hedi:o:k:s:z:")) != -1) { switch (opt) { case 'h': printf( "(c) Masahiko AMANO aka H1K0, 2024-present\n" "(https://github.com/H1K0/rensa)\n\n" "Usage:\n" " rensa [-e/-d] [-i ] [-o ] [-k ] [-s ] [-z ]\n\n" "Options:\n" " -h Print help and exit\n" " -e Encryption mode (default)\n" " -d Decryption mode\n" " -i Input file path (stdio by default)\n" " -o Output file path (stdout by default)\n" " -k Key file path\n" " -s Key shift in bytes (0 by default)\n" " -z Zeroth char (0 by default)\n" ); return 0; case 'd': encrypt_mode = 0; break; case 'i': input = fopen(optarg, "rb"); if (input == NULL) { perror("Failed to open input file"); return errno; } break; case 'o': output = fopen(optarg, "wb"); if (output == NULL) { perror("Failed to open output file"); return errno; } break; case 'k': key = fopen(optarg, "rb"); if (key == NULL) { perror("Failed to open key file"); return errno; } break; case 's': if (key == NULL) { fprintf(stderr, "Key shift is only available if key file specified\n"); return 1; } key_shift = strtoull(optarg, &endptr, 10); if (*endptr != 0) { fprintf(stderr, "Invalid key shift\n"); return 1; } break; case 'z': zeroth_char = (char) strtol(optarg, &endptr, 10); if (*endptr != 0) { fprintf(stderr, "Invalid zeroth char\n"); return 1; } break; case '?': return 1; default: break; } } if (encrypt_mode) { return rensa_fencrypt(input, output, key, key_shift, zeroth_char); } else { return rensa_fdecrypt(input, output, key, key_shift, zeroth_char); } }