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 <bert@biot.com>
 
 Keith Garner <kgarner@kgarner.com> - helped add openldap friendly md5 and sha
+                                   - added openldap friendly smd5 and ssha
 Dave Dribin <dave@dribin.org> - 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, "" }
 };
