diff -ur gq-0.5.0/AUTHORS gq-0.5.0-ktg/AUTHORS --- gq-0.5.0/AUTHORS Mon Apr 15 11:21:15 2002 +++ gq-0.5.0-ktg/AUTHORS Mon Apr 15 11:17:34 2002 @@ -1,4 +1,5 @@ Bert Vermeulen Keith Garner - helped add openldap friendly md5 and sha + - added openldap friendly smd5 and ssha Dave Dribin - helped add openldap friendly md5 and sha diff -ur gq-0.5.0/src/encode.c gq-0.5.0-ktg/src/encode.c --- gq-0.5.0/src/encode.c Mon Apr 15 11:21:15 2002 +++ gq-0.5.0-ktg/src/encode.c Mon Apr 15 11:17:34 2002 @@ -91,6 +91,12 @@ case FLAG_ENCODE_SHA: encode_password_sha1(form); break; + case FLAG_ENCODE_SMD5: + encode_password_smd5(form); + break; + case FLAG_ENCODE_SSHA: + encode_password_ssha(form); + break; default: /* * Something's very wrong! This should complain @@ -162,6 +168,60 @@ } +void encode_password_ssha(struct formfill *form) +{ + unsigned char *password, salt[4], + password_out[64], + tmp_pout[64], + ssha_out[SHA_DIGEST_LENGTH+4]; + SHA_CTX SHAcontext; + + password = form->values->data; + + RAND_bytes(salt, 4); + SHA1_Init(&SHAcontext); + SHA1_Update(&SHAcontext, password, strlen(password)); + SHA1_Update(&SHAcontext, salt, 4); + SHA1_Final(ssha_out, &SHAcontext); + + memcpy(ssha_out + SHA_DIGEST_LENGTH, salt, 4); + + base64_encode(tmp_pout, sizeof(tmp_pout), ssha_out, SHA_DIGEST_LENGTH+4); + + strcpy(password_out, "{SSHA}"); + strncat(password_out, tmp_pout, 64 - 6); + + g_free(form->values->data); + form->values->data = g_strdup(password_out); +} + +void encode_password_smd5(struct formfill *form) +{ + unsigned char *password, salt[4], + password_out[64], + tmp_pout[64], + smd5_out[MD5_DIGEST_LENGTH+4]; + MD5_CTX MD5context; + + password = form->values->data; + + RAND_bytes(salt, 4); + MD5_Init(&MD5context); + MD5_Update(&MD5context, password, strlen(password)); + MD5_Update(&MD5context, salt, 4); + MD5_Final(smd5_out, &MD5context); + + memcpy(smd5_out + MD5_DIGEST_LENGTH, salt, 4); + + base64_encode(tmp_pout, 64, smd5_out, MD5_DIGEST_LENGTH+4); + + strcpy(password_out, "{SMD5}"); + strncat(password_out, tmp_pout, 64 - 6); + + g_free(form->values->data); + form->values->data = g_strdup(password_out); +} + static void base64_encode(char *dest, int dest_max_length, const char *src, int src_length) { diff -ur gq-0.5.0/src/encode.h gq-0.5.0-ktg/src/encode.h --- gq-0.5.0/src/encode.h Mon Apr 15 11:24:35 2002 +++ gq-0.5.0-ktg/src/encode.h Mon Apr 15 11:24:36 2002 @@ -26,7 +26,9 @@ void encode_password(GHashTable *hash); void encode_password_crypt(struct formfill *form); void encode_password_md5(struct formfill *form); +void encode_password_smd5(struct formfill *form); void encode_password_sha1(struct formfill *form); +void encode_password_ssha(struct formfill *form); const gchar *decode_string(gchar *native_string, const gchar *ldap_string); const gchar *encode_string(gchar *ldap_string, const gchar *native_string); gchar *decoded_string(const gchar *string); diff -ur gq-0.5.0/src/formfill.h gq-0.5.0-ktg/src/formfill.h --- gq-0.5.0/src/formfill.h Mon Feb 19 19:22:46 2001 +++ gq-0.5.0-ktg/src/formfill.h Mon Apr 15 11:17:34 2002 @@ -31,8 +31,10 @@ #define FLAG_ENCODE_CRYPT 0x10 #define FLAG_ENCODE_MD5 0x20 #define FLAG_ENCODE_SHA 0x40 +#define FLAG_ENCODE_SMD5 0x80 +#define FLAG_ENCODE_SSHA 0x100 -#define ENCODING_MASK ( FLAG_ENCODE_CRYPT | FLAG_ENCODE_MD5 | FLAG_ENCODE_SHA ) +#define ENCODING_MASK ( FLAG_ENCODE_CRYPT | FLAG_ENCODE_MD5 | FLAG_ENCODE_SHA | FLAG_ENCODE_SMD5 | FLAG_ENCODE_SSHA ) struct formfill { diff -ur gq-0.5.0/src/input.c gq-0.5.0-ktg/src/input.c --- gq-0.5.0/src/input.c Tue Feb 19 17:32:19 2002 +++ gq-0.5.0-ktg/src/input.c Mon Apr 15 11:17:34 2002 @@ -49,6 +49,8 @@ { FLAG_ENCODE_CRYPT, "Crypt" }, { FLAG_ENCODE_MD5, "MD5" }, { FLAG_ENCODE_SHA, "SHA" }, + { FLAG_ENCODE_SMD5, "SMD5" }, + { FLAG_ENCODE_SSHA, "SSHA" }, #endif { 0, "" } };