int main(int argc, char *argv[]) { unsigned char out[OUT_LEN]; uint32_t m_cost = 1 << LOG_M_COST_DEF; uint32_t t_cost = T_COST_DEF; uint32_t lanes = LANES_DEF; uint32_t threads = THREADS_DEF; char *pwd = NULL; uint8_t salt[SALT_LEN]; const char *type = "i"; int i; if (argc < 3) { usage(argv[0]); return ARGON2_MISSING_ARGS; } /* get password and salt from command line */ pwd = argv[1]; if (strlen(argv[2]) > SALT_LEN) { fatal("salt too long"); } memset(salt, 0x00, SALT_LEN); /* pad with null bytes */ memcpy(salt, argv[2], strlen(argv[2])); /* parse options */ for (i = 3; i < argc; i++) { const char *a = argv[i]; unsigned long input = 0; if (!strcmp(a, "-m")) { if (i < argc - 1) { i++; input = strtoul(argv[i], NULL, 10); if (input == 0 || input == ULONG_MAX || input > ARGON2_MAX_MEMORY_BITS) { fatal("bad numeric input for -m"); } m_cost = ARGON2_MIN(UINT64_C(1) << input, UINT32_C(0xFFFFFFFF)); if (m_cost > ARGON2_MAX_MEMORY) { fatal("m_cost overflow"); } continue; } else { fatal("missing -m argument"); } } else if (!strcmp(a, "-t")) { if (i < argc - 1) { i++; input = strtoul(argv[i], NULL, 10); if (input == 0 || input == ULONG_MAX || input > ARGON2_MAX_TIME) { fatal("bad numeric input for -t"); } t_cost = input; continue; } else { fatal("missing -t argument"); } } else if (!strcmp(a, "-p")) { if (i < argc - 1) { i++; input = strtoul(argv[i], NULL, 10); if (input == 0 || input == ULONG_MAX || input > ARGON2_MAX_THREADS || input > ARGON2_MAX_LANES) { fatal("bad numeric input for -p"); } threads = input; lanes = threads; continue; } else { fatal("missing -p argument"); } } else if (!strcmp(a, "-d")) { type = "d"; } else { fatal("unknown argument"); } } printf("Type:\t\tArgon2%c\n", type[0]); printf("Iterations:\t%" PRIu32 " \n", t_cost); printf("Memory:\t\t%" PRIu32 " KiB\n", m_cost); printf("Parallelism:\t%" PRIu32 " \n", lanes); run(out, pwd, salt, t_cost, m_cost, lanes, threads, type); return ARGON2_OK; }
int main(int argc, char *argv[]) { uint32_t outlen = OUTLEN_DEF; uint32_t m_cost = 1 << LOG_M_COST_DEF; uint32_t t_cost = T_COST_DEF; uint32_t lanes = LANES_DEF; uint32_t threads = THREADS_DEF; argon2_type type = Argon2_i; int encoded_only = 0; int raw_only = 0; int i; size_t n; char pwd[MAX_PASS_LEN], *salt; if (argc < 2) { usage(argv[0]); return ARGON2_MISSING_ARGS; } else if (argc >= 2 && strcmp(argv[1], "-h") == 0) { usage(argv[0]); return 1; } /* get password from stdin */ n = fread(pwd, 1, sizeof pwd - 1, stdin); if(n < 1) { fatal("no password read"); } if(n == MAX_PASS_LEN-1) { fatal("Provided password longer than supported in command line utility"); } pwd[n] = '\0'; if (pwd[n - 1] == '\n') { pwd[n - 1] = '\0'; } salt = argv[1]; /* parse options */ for (i = 2; i < argc; i++) { const char *a = argv[i]; unsigned long input = 0; if (!strcmp(a, "-h")) { usage(argv[0]); return 1; } else if (!strcmp(a, "-m")) { if (i < argc - 1) { i++; input = strtoul(argv[i], NULL, 10); if (input == 0 || input == ULONG_MAX || input > ARGON2_MAX_MEMORY_BITS) { fatal("bad numeric input for -m"); } m_cost = ARGON2_MIN(UINT64_C(1) << input, UINT32_C(0xFFFFFFFF)); if (m_cost > ARGON2_MAX_MEMORY) { fatal("m_cost overflow"); } continue; } else { fatal("missing -m argument"); } } else if (!strcmp(a, "-t")) { if (i < argc - 1) { i++; input = strtoul(argv[i], NULL, 10); if (input == 0 || input == ULONG_MAX || input > ARGON2_MAX_TIME) { fatal("bad numeric input for -t"); } t_cost = input; continue; } else { fatal("missing -t argument"); } } else if (!strcmp(a, "-p")) { if (i < argc - 1) { i++; input = strtoul(argv[i], NULL, 10); if (input == 0 || input == ULONG_MAX || input > ARGON2_MAX_THREADS || input > ARGON2_MAX_LANES) { fatal("bad numeric input for -p"); } threads = input; lanes = threads; continue; } else { fatal("missing -p argument"); } } else if (!strcmp(a, "-l")) { if (i < argc - 1) { i++; input = strtoul(argv[i], NULL, 10); outlen = input; continue; } else { fatal("missing -l argument"); } } else if (!strcmp(a, "-d")) { type = Argon2_d; } else if (!strcmp(a, "-e")) { encoded_only = 1; } else if (!strcmp(a, "-r")) { raw_only = 1; } else { fatal("unknown argument"); } } if(encoded_only && raw_only) fatal("cannot provide both -e and -r"); if(!encoded_only && !raw_only) { if (type == Argon2_i) { printf("Type:\t\tArgon2i\n"); } else { printf("Type:\t\tArgon2d\n"); } printf("Iterations:\t%" PRIu32 " \n", t_cost); printf("Memory:\t\t%" PRIu32 " KiB\n", m_cost); printf("Parallelism:\t%" PRIu32 " \n", lanes); } run(outlen, pwd, salt, t_cost, m_cost, lanes, threads, type, encoded_only, raw_only); return ARGON2_OK; }
int main(int argc, char *argv[]) { uint32_t outlen = OUTLEN_DEF; uint32_t m_cost = 1 << LOG_M_COST_DEF; uint32_t t_cost = T_COST_DEF; uint32_t lanes = LANES_DEF; uint32_t threads = THREADS_DEF; argon2_type type = Argon2_i; int i; size_t n; char pwd[128], *salt; if (argc < 2) { usage(argv[0]); return ARGON2_MISSING_ARGS; } salt = argv[1]; /* get password from stdin */ while ((n = fread(pwd, 1, sizeof pwd - 1, stdin)) > 0) { pwd[n] = '\0'; if (pwd[n - 1] == '\n') pwd[n - 1] = '\0'; } /* parse options */ for (i = 2; i < argc; i++) { const char *a = argv[i]; unsigned long input = 0; if (!strcmp(a, "-m")) { if (i < argc - 1) { i++; input = strtoul(argv[i], NULL, 10); if (input == 0 || input == ULONG_MAX || input > ARGON2_MAX_MEMORY_BITS) { fatal("bad numeric input for -m"); } m_cost = ARGON2_MIN(UINT64_C(1) << input, UINT32_C(0xFFFFFFFF)); if (m_cost > ARGON2_MAX_MEMORY) { fatal("m_cost overflow"); } continue; } else { fatal("missing -m argument"); } } else if (!strcmp(a, "-t")) { if (i < argc - 1) { i++; input = strtoul(argv[i], NULL, 10); if (input == 0 || input == ULONG_MAX || input > ARGON2_MAX_TIME) { fatal("bad numeric input for -t"); } t_cost = input; continue; } else { fatal("missing -t argument"); } } else if (!strcmp(a, "-p")) { if (i < argc - 1) { i++; input = strtoul(argv[i], NULL, 10); if (input == 0 || input == ULONG_MAX || input > ARGON2_MAX_THREADS || input > ARGON2_MAX_LANES) { fatal("bad numeric input for -p"); } threads = input; lanes = threads; continue; } else { fatal("missing -p argument"); } } else if (!strcmp(a, "-h")) { if (i < argc - 1) { i++; input = strtoul(argv[i], NULL, 10); outlen = input; continue; } else { fatal("missing -h argument"); } } else if (!strcmp(a, "-d")) { type = Argon2_d; } else { fatal("unknown argument"); } } if (type == Argon2_i) { printf("Type:\t\tArgon2i\n"); } else { printf("Type:\t\tArgon2d\n"); } printf("Iterations:\t%" PRIu32 " \n", t_cost); printf("Memory:\t\t%" PRIu32 " KiB\n", m_cost); printf("Parallelism:\t%" PRIu32 " \n", lanes); run(outlen, pwd, salt, t_cost, m_cost, lanes, threads, type); return ARGON2_OK; }