Пример #1
0
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);
}
Пример #2
0
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;
}
Пример #3
0
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);
}
Пример #4
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);
}