diff options
author | Andreas Schneider <mail@cynapses.org> | 2009-04-18 15:15:45 +0000 |
---|---|---|
committer | Andreas Schneider <mail@cynapses.org> | 2009-04-18 15:15:45 +0000 |
commit | 5ef5841f99578206c953dd61e935a83e9d7acfe7 (patch) | |
tree | 8c5501437b220929516542e41871df80b2b379fc /libssh/keyfiles.c | |
parent | 163fbfa44d55f08a8e5db8ffa75d5579d6526c26 (diff) | |
download | libssh-5ef5841f99578206c953dd61e935a83e9d7acfe7.tar.gz libssh-5ef5841f99578206c953dd61e935a83e9d7acfe7.tar.xz libssh-5ef5841f99578206c953dd61e935a83e9d7acfe7.zip |
Some minor improvements to passphrase_to_key().
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@553 7dcaeef0-15fb-0310-b436-a5af3365683c
Diffstat (limited to 'libssh/keyfiles.c')
-rw-r--r-- | libssh/keyfiles.c | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/libssh/keyfiles.c b/libssh/keyfiles.c index 89c5619..160a559 100644 --- a/libssh/keyfiles.c +++ b/libssh/keyfiles.c @@ -190,28 +190,36 @@ static int read_line(char *data, unsigned int len, FILE *fp) { static int passphrase_to_key(char *data, unsigned int datalen, unsigned char *salt, unsigned char *key, unsigned int keylen) { MD5CTX md; - unsigned char digest[MD5_DIGEST_LEN]; + unsigned char digest[MD5_DIGEST_LEN] = {0}; unsigned int i; unsigned int j; unsigned int md_not_empty; - for (j=0,md_not_empty=0;j<keylen;) - { + for (j = 0, md_not_empty = 0; j < keylen; ) { md = md5_init(); - if (!md) + if (md == NULL) { return 0; - if (md_not_empty) - md5_update(md,digest,MD5_DIGEST_LEN); - else - md_not_empty=1; - md5_update(md,data,datalen); - if (salt) + } + + if (md_not_empty) { + md5_update(md, digest, MD5_DIGEST_LEN); + } else { + md_not_empty = 1; + } + + md5_update(md, data, datalen); + if (salt) { md5_update(md, salt, PKCS5_SALT_LEN); - md5_final(digest,md); - for (i = 0; j < keylen && i < MD5_DIGEST_LEN; j++, i++) - if (key) + } + md5_final(digest, md); + + for (i = 0; j < keylen && i < MD5_DIGEST_LEN; j++, i++) { + if (key) { key[j] = digest[i]; + } + } } + return 1; } |