From 8be433c9b65fe5f214151651055700d1fea02a56 Mon Sep 17 00:00:00 2001 From: default Date: Mon, 19 Sep 2022 22:58:27 +0200 Subject: New function hash_password() and check_password(). --- snac.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'snac.c') diff --git a/snac.c b/snac.c index 0238b7a..dd76e06 100644 --- a/snac.c +++ b/snac.c @@ -90,3 +90,36 @@ void snac_debug(snac *snac, int level, d_char *str) fprintf(stderr, "%s [%s] %s\n", tm, snac->uid, msg); } } + + +d_char *hash_password(char *uid, char *passwd, char *nonce) +/* hashes a password */ +{ + xs *d_nonce = NULL; + xs *combi; + xs *hash; + + if (nonce == NULL) + nonce = d_nonce = xs_fmt("%08x", random()); + + combi = xs_fmt("%s:%s:%s", nonce, uid, passwd); + hash = xs_sha1_hex(combi, strlen(combi)); + + return xs_fmt("%s:%s", nonce, hash); +} + + +int check_password(char *uid, char *passwd, char *hash) +/* checks a password */ +{ + int ret = 0; + xs *spl = xs_splitn(hash, ":", 1); + + if (xs_list_len(spl) == 2) { + xs *n_hash = hash_password(uid, passwd, xs_list_get(spl, 0)); + + ret = (strcmp(hash, n_hash) == 0); + } + + return ret; +} -- cgit v1.2.3