static void skey_crypt_all(int count) { int i; skey_set_algorithm(saved_salt.type); keycrunch(saved_key, saved_salt.seed, saved_pass); for (i = 0; i < saved_salt.num; i++) f(saved_key); }
static int skey_crypt_all(int *pcount, struct db_salt *salt) { int count = *pcount; int i; skey_set_algorithm(saved_salt.type); keycrunch(saved_key, saved_salt.seed, saved_pass); for (i = 0; i < saved_salt.num; i++) f(saved_key); return count; }
int main(int argc, char *argv[]) { char data[16], prn[64]; struct regPass *rp; int i = 0; int errors = 0; int j; if (strcmp(skey_get_algorithm(), "md5") != 0) { errors++; printf("default algorithm is not md5\n"); } if (skey_set_algorithm("md4") != NULL) { errors++; printf("accepted unsupported algorithm md4\n"); } for(rp = regPass; rp->passphrase; rp++) { struct regRes *rr; i++; for(rr = rp->res; rr->algo; rr++) { if (skey_set_algorithm(rr->algo) == NULL) { errors++; printf("Set %d: %s algorithm is not supported\n", i, rr->algo); continue; } if (strcmp(skey_get_algorithm(), rr->algo) != 0) { errors++; printf("Set %d: unable to set algorithm to %s\n", i, rr->algo); continue; } keycrunch(data, rp->seed, rp->passphrase); btoa8(prn, data); if(strcasecmp(prn, rr->zero)) { errors++; printf("Set %d, round 0, %s: Expected %s and got %s\n", i, rr->algo, rr->zero, prn); } f(data); btoa8(prn, data); if(strcasecmp(prn, rr->one)) { errors++; printf("Set %d, round 1, %s: Expected %s and got %s\n", i, rr->algo, rr->one, prn); } for(j=1; j<99; j++) f(data); btoa8(prn, data); if(strcasecmp(prn, rr->nine)) { errors++; printf("Set %d, round 99, %s: Expected %s and got %s\n", i, rr->algo, rr->nine, prn); } } } printf("%d errors\n", errors); return(errors ? 1 : 0); }
int main(int argc, char *argv[]) { int n, i, cnt = 1, pass = 0, hexmode = 0; char passwd[SKEY_MAX_PW_LEN+1], key[SKEY_BINKEY_SIZE]; char buf[33], *seed, *slash; /* If we were called as otp-METHOD, set algorithm based on that */ if ((slash = strrchr(argv[0], '/'))) slash++; else slash = argv[0]; if (strncmp(slash, "otp-", 4) == 0) { slash += 4; if (skey_set_algorithm(slash) == NULL) errx(1, "Unknown hash algorithm %s", slash); } for (i = 1; i < argc && argv[i][0] == '-' && strcmp(argv[i], "--");) { if (argv[i][2] == '\0') { /* Single character switch */ switch (argv[i][1]) { case 'n': if (++i == argc) usage(argv[0]); cnt = atoi(argv[i]); break; case 'p': if (++i == argc) usage(argv[0]); if (strlcpy(passwd, argv[i], sizeof(passwd)) >= sizeof(passwd)) errx(1, "Password too long"); pass = 1; break; case 'x': hexmode = 1; break; default: usage(argv[0]); } } else { /* Multi character switches are hash types */ if (skey_set_algorithm(&argv[i][1]) == NULL) { warnx("Unknown hash algorithm %s", &argv[i][1]); usage(argv[0]); } } i++; } if (argc > i + 2) usage(argv[0]); /* Could be in the form <number>/<seed> */ if (argc <= i + 1) { /* look for / in it */ if (argc <= i) usage(argv[0]); slash = strchr(argv[i], '/'); if (slash == NULL) usage(argv[0]); *slash++ = '\0'; seed = slash; if ((n = atoi(argv[i])) < 0) { warnx("%d not positive", n); usage(argv[0]); } else if (n > SKEY_MAX_SEQ) { warnx("%d is larger than max (%d)", n, SKEY_MAX_SEQ); usage(argv[0]); } } else { if ((n = atoi(argv[i])) < 0) { warnx("%d not positive", n); usage(argv[0]); } else if (n > SKEY_MAX_SEQ) { warnx("%d is larger than max (%d)", n, SKEY_MAX_SEQ); usage(argv[0]); } seed = argv[++i]; } /* Get user's secret passphrase */ if (!pass) { fputs("Reminder - Do not use this program while" " logged in via telnet.\n", stderr); (void)fputs("Enter secret passphrase: ", stderr); readpass(passwd, sizeof(passwd)); if (passwd[0] == '\0') exit(1); } /* Crunch seed and passphrase into starting key */ if (keycrunch(key, seed, passwd) != 0) errx(1, "key crunch failed"); if (cnt == 1) { while (n-- != 0) f(key); (void)puts(hexmode ? put8(buf, key) : btoe(buf, key)); } else { for (i = 0; i <= n - cnt; i++) f(key); for (; i <= n; i++) { if (hexmode) (void)printf("%d: %s\n", i, put8(buf, key)); else (void)printf("%d: %-29s\n", i, btoe(buf, key)); f(key); } } exit(0); }