#include #include int main(int argc, char *argv[]) { long offset; int i; unsigned char c1, c2; FILE *fp; if (argc != 3) { fprintf(stderr, "Usage: otp keyfile offset\n"); exit(1); } if (!(fp = fopen(argv[1], "r"))) { perror(argv[1]); exit(1); } offset = strtol(argv[2], NULL, 10); if (fseek(fp, offset, SEEK_SET) == -1) { fprintf(stderr, "key too short\n"); exit(2); } while ((i = getchar()) != EOF) { c1 = (unsigned char) i; if ((i = fgetc(fp)) == EOF) { fprintf(stderr, "key too short\n"); exit(2); } c2 = (unsigned char) i; putchar(c1 ^ c2); } fprintf(stderr, "%ld\n", ftell(fp)); return 0; }