diff options
Diffstat (limited to 'lpass.c')
-rw-r--r-- | lpass.c | 36 |
1 files changed, 19 insertions, 17 deletions
@@ -57,22 +57,25 @@ calc_entropy(const char *site, } unsigned char key[ENTROPY_KEY_LENGTH]; - int status = PKCS5_PBKDF2_HMAC(master_pass, strlen(master_pass), - (const unsigned char *) salt, saltlen, - ENTROPY_ITERATIONS, - EVP_sha256(), - ENTROPY_KEY_LENGTH, - key); + int status = PKCS5_PBKDF2_HMAC( + master_pass, + strlen(master_pass), + (const unsigned char *) salt, + saltlen, + ENTROPY_ITERATIONS, + EVP_sha256(), + ENTROPY_KEY_LENGTH, + key); if (status == 0) { return NULL; } - /* NULL as last arg to allocate a new BIGNUM */ + /* NULL as last arg allocates a new BIGNUM */ return BN_bin2bn(key, ENTROPY_KEY_LENGTH, NULL); } static int -consume_entropy(char *pass, BIGNUM *entropy, const char *charset, size_t maxlen) +consume_entropy(BIGNUM *entropy, const char *charset, char *pass, size_t num_iter) { int retval = 1; BN_CTX *ctx = BN_CTX_new(); @@ -88,7 +91,7 @@ consume_entropy(char *pass, BIGNUM *entropy, const char *charset, size_t maxlen) retval = 0; goto consume_entropy_cleanup; } - while (maxlen-- > 0) { + while (num_iter-- > 0) { BN_div(entropy, bn_remainder, entropy, bn_charsetlen, ctx); /* @@ -113,7 +116,7 @@ consume_entropy_cleanup: } static int -insert_str_pseudo_randomly(char *pass, BIGNUM *entropy, const char *s) +insert_str_pseudo_randomly(BIGNUM *entropy, const char *s, char *pass) { int retval = 1; char buf[MAX_BUF + 1]; @@ -149,7 +152,6 @@ insert_str_pseudo_randomly(char *pass, BIGNUM *entropy, const char *s) * `pass`. 1. Copy the part that would need to be shifted into * `buf`. */ - memset(buf, 0, sizeof(buf)); strncpy(buf, &pass[remainder], passlen - remainder); /* * 2. Add new character, then copy `buf` back into `pass`. @@ -201,7 +203,7 @@ render_pass(BIGNUM *entropy, uint8_t allowed_charsets, char *out, size_t length) { char charset[MAX_BUF + 1]; size_t num_charsets = build_charset(charset, allowed_charsets); - if (consume_entropy(out, entropy, charset, length - num_charsets) == 0) { + if (consume_entropy(entropy, charset, out, length - num_charsets) == 0) { return 0; } @@ -213,22 +215,22 @@ render_pass(BIGNUM *entropy, uint8_t allowed_charsets, char *out, size_t length) memset(str_to_add, 0, sizeof(str_to_add)); size_t count = 0; if (charsets_has_set(allowed_charsets, CHARSET_LOWER) - && consume_entropy(&str_to_add[count++], entropy, CHAR_SUBSET_LOWER, 1) == 0) { + && consume_entropy(entropy, CHAR_SUBSET_LOWER, &str_to_add[count++], 1) == 0) { return 0; } if (charsets_has_set(allowed_charsets, CHARSET_UPPER) - && consume_entropy(&str_to_add[count++], entropy, CHAR_SUBSET_UPPER, 1) == 0) { + && consume_entropy(entropy, CHAR_SUBSET_UPPER, &str_to_add[count++], 1) == 0) { return 0; } if (charsets_has_set(allowed_charsets, CHARSET_DIGITS) - && consume_entropy(&str_to_add[count++], entropy, CHAR_SUBSET_DIGITS, 1) == 0) { + && consume_entropy(entropy, CHAR_SUBSET_DIGITS, &str_to_add[count++], 1) == 0) { return 0; } if (charsets_has_set(allowed_charsets, CHARSET_SYMBOLS) - && consume_entropy(&str_to_add[count++], entropy, CHAR_SUBSET_SYMBOLS, 1) == 0) { + && consume_entropy(entropy, CHAR_SUBSET_SYMBOLS, &str_to_add[count++], 1) == 0) { return 0; } - return insert_str_pseudo_randomly(out, entropy, str_to_add); + return insert_str_pseudo_randomly(entropy, str_to_add, out); } static void |