diff options
author | Andi Shyti <andi@etezian.org> | 2012-09-05 18:17:48 +0200 |
---|---|---|
committer | Andi Shyti <andi@etezian.org> | 2012-09-05 18:17:48 +0200 |
commit | 1115280b39148ceb8732e59bf10dd6eaef97f58d (patch) | |
tree | cd47f0e2713842755aed10f9cfb392358029716e /src | |
parent | d45a9d3d0e39b929c48153141377a8cc03ebabac (diff) |
crypt_sha256: some sparse fixes
Signed-off-by: Andi Shyti <andi@etezian.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/crypt_sha256.c | 29 |
1 files changed, 14 insertions, 15 deletions
diff --git a/src/crypt_sha256.c b/src/crypt_sha256.c index 6484ea4..9410990 100644 --- a/src/crypt_sha256.c +++ b/src/crypt_sha256.c @@ -6,16 +6,15 @@ #include <openssl/evp.h> #define RAND_FILE "/dev/random" -#define SHA_STR "{SHA256}" +#define SHA_STR "{SSHA256}" /* string length */ #define LEN_PASSWD_MIN 8 #define LEN_PASSWD_MAX 64 -#define LEN_RAND_STR 16 -#define LEN_BUFFER LEN_PASSWD_MAX + LEN_RAND_STR + \ - SHA256_DIGEST_LENGTH +#define LEN_SALT 16 +#define LEN_BUFFER LEN_SALT + SHA256_DIGEST_LENGTH #define LEN_ENC64 64 -#define LEN_SHA_STR 8 +#define LEN_SHA_STR 9 #define LEN_FINAL_PASSWD LEN_ENC64 + LEN_SHA_STR @@ -29,40 +28,40 @@ char* get_crypt_sha256(const char *p) int rand_fd; ssize_t size; size_t len = strlen(p); - unsigned char rand_str[LEN_RAND_STR]; + unsigned char *salt; unsigned char passwd_buff[LEN_BUFFER]; unsigned char sha_pwd[SHA256_DIGEST_LENGTH]; unsigned char enc64_pwd[LEN_ENC64]; char *final_pwd; + salt = (unsigned char*) malloc(len + LEN_SALT); rand_fd = open(RAND_FILE, O_RDONLY); if (rand_fd < 0) { fprintf(stderr, "impossible to open " RAND_FILE "\n"); exit(EXIT_FAILURE); } - size = read(rand_fd, rand_str, LEN_RAND_STR); + size = read(rand_fd, salt+len, LEN_SALT); close(rand_fd); - if (size != LEN_RAND_STR) { + if (size != LEN_SALT) { fprintf(stderr, "failed to read from " RAND_FILE "\n"); exit(EXIT_FAILURE); } - memcpy(passwd_buff + SHA256_DIGEST_LENGTH, p, len); - memcpy(passwd_buff + SHA256_DIGEST_LENGTH + len, - rand_str, LEN_RAND_STR); + memcpy(salt, p, len); - SHA256(passwd_buff + SHA256_DIGEST_LENGTH, len + LEN_RAND_STR, sha_pwd); + SHA256(salt, len + LEN_SALT, sha_pwd); memcpy(passwd_buff, sha_pwd, SHA256_DIGEST_LENGTH); + memcpy(passwd_buff + SHA256_DIGEST_LENGTH, salt, LEN_SALT); - EVP_EncodeBlock(enc64_pwd, sha_pwd, - SHA256_DIGEST_LENGTH + len + LEN_RAND_STR); + EVP_EncodeBlock(enc64_pwd, passwd_buff, + SHA256_DIGEST_LENGTH + LEN_SALT); final_pwd = (char*) malloc (LEN_FINAL_PASSWD + 1); memcpy(final_pwd, SHA_STR, LEN_SHA_STR); - memcpy(final_pwd+8, enc64_pwd, LEN_ENC64); + memcpy(final_pwd+LEN_SHA_STR, enc64_pwd, LEN_ENC64); final_pwd[LEN_FINAL_PASSWD] = '\0'; return final_pwd; |