367
368
str = password_generate_md5_crypt(plaintext, password);
368
369
return strcmp(str, password) == 0 ? 1 : 0;
369
370
} else if (password_decode(password, "PLAIN-MD5",
370
&md5_password, &md5_size, &error) < 0) {
371
&md5_password, &md5_size, &error) <= 0) {
371
372
*error_r = "Not a valid MD5-CRYPT or PLAIN-MD5 password";
655
656
cram_md5_generate(const char *plaintext, const char *user ATTR_UNUSED,
656
657
const unsigned char **raw_password_r, size_t *size_r)
658
struct hmac_md5_context ctx;
659
struct hmac_context ctx;
659
660
unsigned char *context_digest;
661
662
context_digest = t_malloc(CRAM_MD5_CONTEXTLEN);
662
hmac_md5_init(&ctx, (const unsigned char *)plaintext,
663
hmac_init(&ctx, (const unsigned char *)plaintext,
664
strlen(plaintext), &hash_method_md5);
664
665
hmac_md5_get_cram_context(&ctx, context_digest);
666
667
*raw_password_r = context_digest;
817
818
{ "SSHA256", PW_ENCODING_BASE64, 0, ssha256_verify, ssha256_generate },
818
819
{ "SSHA512", PW_ENCODING_BASE64, 0, ssha512_verify, ssha512_generate },
819
820
{ "PLAIN", PW_ENCODING_NONE, 0, NULL, plain_generate },
821
{ "CLEAR", PW_ENCODING_NONE, 0, NULL, plain_generate },
820
822
{ "CLEARTEXT", PW_ENCODING_NONE, 0, NULL, plain_generate },
821
823
{ "PLAIN-TRUNC", PW_ENCODING_NONE, 0, plain_trunc_verify, plain_generate },
822
824
{ "CRAM-MD5", PW_ENCODING_HEX, CRAM_MD5_CONTEXTLEN,
823
825
NULL, cram_md5_generate },
826
{ "SCRAM-SHA-1", PW_ENCODING_NONE, 0, scram_sha1_verify,
827
scram_sha1_generate},
824
828
{ "HMAC-MD5", PW_ENCODING_HEX, CRAM_MD5_CONTEXTLEN,
825
829
NULL, cram_md5_generate },
826
830
{ "DIGEST-MD5", PW_ENCODING_HEX, MD5_RESULTLEN,