annotate src/auth/password-scheme-md5crypt.c @ 9008:fc4f65a4ca60 HEAD

virtual: Don't show mailboxes as \Noselect.
author Timo Sirainen <tss@iki.fi>
date Fri, 01 May 2009 14:56:52 -0400
parents 47add4b664af
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1873
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
1 /*
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2 * ----------------------------------------------------------------------------
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 * "THE BEER-WARE LICENSE" (Revision 42):
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4 * <phk@login.dknet.dk> wrote this file. As long as you retain this notice you
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5 * can do whatever you want with this stuff. If we meet some day, and you think
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6 * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7 * ----------------------------------------------------------------------------
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 */
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10 /*
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11 * Ported from FreeBSD to Linux, only minimal changes. --marekm
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12 */
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
13
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
14 /*
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
15 * Adapted from shadow-19990607 by Tudor Bosman, tudorb@jm.nu
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
16 */
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18 #include "lib.h"
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
19 #include "safe-memset.h"
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
20 #include "str.h"
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
21 #include "md5.h"
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
22 #include "password-scheme.h"
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
23
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
24 static unsigned char itoa64[] = /* 0 ... 63 => ascii - 64 */
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
25 "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
26
3099
fdec0a4ca1d1 MD5crypt was broken with 64bit systems.
Timo Sirainen <tss@iki.fi>
parents: 1873
diff changeset
27 static char magic[] = "$1$"; /*
1873
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28 * This string is magic for
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29 * this algorithm. Having
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30 * it this way, we can get
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31 * get better later on
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
32 */
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
33
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
34 static void
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
35 to64(string_t *str, unsigned long v, int n)
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
36 {
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
37 while (--n >= 0) {
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
38 str_append_c(str, itoa64[v&0x3f]);
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
39 v >>= 6;
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
40 }
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
41 }
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
42
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
43 /*
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
44 * UNIX password
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
45 *
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
46 * Use MD5 for what it is best at...
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
47 */
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
48
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
49 const char *password_generate_md5_crypt(const char *pw, const char *salt)
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
50 {
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
51 const char *sp,*ep;
4644
47add4b664af Based on password length detect if it's hex-encoded or sha1-encoded. Also
Timo Sirainen <tss@iki.fi>
parents: 3099
diff changeset
52 unsigned char final[MD5_RESULTLEN];
1873
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
53 int sl,pl,i,j;
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
54 struct md5_context ctx,ctx1;
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
55 unsigned long l;
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
56 string_t *passwd;
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
57 size_t pw_len = strlen(pw);
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
58
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
59 /* Refine the Salt first */
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
60 sp = salt;
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
61
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
62 /* If it starts with the magic string, then skip that */
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
63 if (strncmp(sp, magic, sizeof(magic)-1) == 0)
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
64 sp += sizeof(magic)-1;
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
65
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
66 /* It stops at the first '$', max 8 chars */
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
67 for(ep=sp;*ep && *ep != '$' && ep < (sp+8);ep++)
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
68 continue;
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
69
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
70 /* get the length of the true salt */
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
71 sl = ep - sp;
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
72
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
73 md5_init(&ctx);
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
74
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
75 /* The password first, since that is what is most unknown */
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
76 md5_update(&ctx,pw,pw_len);
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
77
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
78 /* Then our magic string */
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
79 md5_update(&ctx,magic,sizeof(magic)-1);
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
80
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
81 /* Then the raw salt */
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
82 md5_update(&ctx,sp,sl);
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
83
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
84 /* Then just as many characters of the MD5(pw,salt,pw) */
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
85 md5_init(&ctx1);
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
86 md5_update(&ctx1,pw,pw_len);
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
87 md5_update(&ctx1,sp,sl);
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
88 md5_update(&ctx1,pw,pw_len);
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
89 md5_final(&ctx1,final);
4644
47add4b664af Based on password length detect if it's hex-encoded or sha1-encoded. Also
Timo Sirainen <tss@iki.fi>
parents: 3099
diff changeset
90 for(pl = pw_len; pl > 0; pl -= MD5_RESULTLEN)
47add4b664af Based on password length detect if it's hex-encoded or sha1-encoded. Also
Timo Sirainen <tss@iki.fi>
parents: 3099
diff changeset
91 md5_update(&ctx,final,pl>MD5_RESULTLEN ? MD5_RESULTLEN : pl);
1873
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
92
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
93 /* Don't leave anything around in vm they could use. */
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
94 safe_memset(final, 0, sizeof(final));
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
95
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
96 /* Then something really weird... */
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
97 for (j=0,i = pw_len; i ; i >>= 1)
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
98 if(i&1)
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
99 md5_update(&ctx, final+j, 1);
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
100 else
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
101 md5_update(&ctx, pw+j, 1);
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
102
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
103 /* Now make the output string */
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
104 passwd = t_str_new(sl + 64);
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
105 str_append(passwd, magic);
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
106 str_append_n(passwd, sp, sl);
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
107 str_append_c(passwd, '$');
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
108
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
109 md5_final(&ctx,final);
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
110
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
111 /*
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
112 * and now, just to make sure things don't run too fast
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
113 * On a 60 Mhz Pentium this takes 34 msec, so you would
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
114 * need 30 seconds to build a 1000 entry dictionary...
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
115 */
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
116 for(i=0;i<1000;i++) {
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
117 md5_init(&ctx1);
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
118 if(i & 1)
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
119 md5_update(&ctx1,pw,pw_len);
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
120 else
4644
47add4b664af Based on password length detect if it's hex-encoded or sha1-encoded. Also
Timo Sirainen <tss@iki.fi>
parents: 3099
diff changeset
121 md5_update(&ctx1,final,MD5_RESULTLEN);
1873
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
122
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
123 if(i % 3)
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
124 md5_update(&ctx1,sp,sl);
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
125
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
126 if(i % 7)
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
127 md5_update(&ctx1,pw,pw_len);
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
128
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
129 if(i & 1)
4644
47add4b664af Based on password length detect if it's hex-encoded or sha1-encoded. Also
Timo Sirainen <tss@iki.fi>
parents: 3099
diff changeset
130 md5_update(&ctx1,final,MD5_RESULTLEN);
1873
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
131 else
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
132 md5_update(&ctx1,pw,pw_len);
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
133 md5_final(&ctx1,final);
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
134 }
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
135
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
136 l = (final[ 0]<<16) | (final[ 6]<<8) | final[12]; to64(passwd,l,4);
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
137 l = (final[ 1]<<16) | (final[ 7]<<8) | final[13]; to64(passwd,l,4);
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
138 l = (final[ 2]<<16) | (final[ 8]<<8) | final[14]; to64(passwd,l,4);
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
139 l = (final[ 3]<<16) | (final[ 9]<<8) | final[15]; to64(passwd,l,4);
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
140 l = (final[ 4]<<16) | (final[10]<<8) | final[ 5]; to64(passwd,l,4);
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
141 l = final[11] ; to64(passwd,l,2);
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
142
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
143 /* Don't leave anything around in vm they could use. */
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
144 safe_memset(final, 0, sizeof(final));
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
145
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
146 return str_c(passwd);
ed5e808d934f CRAM-MD5 mechanism by Joshua Goodall, plus some cleanups.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
147 }