password-scheme.c revision f937937c966a6633f24f3de3bf7457c9612f3bb2
f2a95ee1bf54c949614a68bf152ea9a8e1d3a172Stéphane Graber/* Copyright (c) 2003-2017 Dovecot authors, see the included COPYING file */
bf3e09c00eab82850782ad6ec74e4403d84ae866KATOH Yasufumistatic const char salt_chars[] =
cb13115193f408eb4de08ea9b6c73c1fe22a0263Stéphane Graber "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
f2a95ee1bf54c949614a68bf152ea9a8e1d3a172Stéphane Graberstatic HASH_TABLE(const char*, const struct password_scheme *) password_schemes;
f2a95ee1bf54c949614a68bf152ea9a8e1d3a172Stéphane Graberstatic const struct password_scheme *
71d3a6590fe665421d7a0026d699b0654ddfc7f6Stéphane Graberpassword_scheme_lookup_name(const char *name)
214a98ef56b487ed9ca5a021f2e44bb7525e82ecSerge Hallyn return hash_table_lookup(password_schemes, name);
static const struct password_scheme *
return NULL;
return NULL;
return scheme;
const char **error_r)
const struct password_scheme *s;
const unsigned char *generated;
int ret;
if (s == NULL) {
error_r);
if (ret == 0)
return ret;
const char *p, *scheme;
return NULL;
if (p != NULL) {
if (p != NULL)
return NULL;
if (p == NULL)
return NULL;
return scheme;
const char **error_r)
const struct password_scheme *s;
bool guessed_encoding;
if (s == NULL) {
switch (encoding) {
case PW_ENCODING_NONE:
case PW_ENCODING_HEX:
if (!guessed_encoding) {
case PW_ENCODING_BASE64:
const char *scheme,
const struct password_scheme *s;
if (s == NULL)
return FALSE;
return TRUE;
const struct password_scheme *s;
const unsigned char *raw_password;
if (s == NULL)
return FALSE;
switch (encoding) {
case PW_ENCODING_NONE:
case PW_ENCODING_BASE64:
case PW_ENCODING_HEX:
return TRUE;
char *salt;
for (i = 0; i < len; i++)
return salt;
return TRUE;
const char *user)
const char *key;
const unsigned char *raw_password;
const char *error;
&error) <= 0)
&error) > 0)
return key;
const char **error_r)
if (size == 0) {
const unsigned char *md5_password;
const char *password;
unsigned char *digest;
unsigned char *digest;
unsigned char *digest;
const char **error_r)
const char **error_r)
const char **error_r)
const char **error_r)
const char **error_r)
for (i = 0; i < size; i++) {
unsigned char *context_digest;
unsigned char *digest;
realm++;
unsigned char *digest;
unsigned char *digest;
unsigned char *digest;
unsigned char *digest;
const char **error_r)
const char *password;
i_unreached();
const char *password;
i_unreached();
unsigned char *digest;
const char *key;
void password_schemes_init(void)
void password_schemes_deinit(void)