shapito: support password 'md5<hash>' format
@@ -20,20 +20,26 @@ int shapito_password_md5(shapito_password_t *pw,
uint8_t digest_prepare[16];
char digest_prepare_sz[32];
uint8_t digest[16];
-
- /* digest = md5(password, user) */
shapito_md5_t ctx;
+ if (password_len == 35 && memcmp(password, "md5", 3) == 0) {
+ /* digest = md5(digest, salt) */
+ shapito_md5_init(&ctx);
+ shapito_md5_update(&ctx, password + 3, 32);
+ shapito_md5_update(&ctx, salt, 4);
+ shapito_md5_final(&ctx, digest);
+ } else {
+ /* digest = md5(password, user) */
shapito_md5_init(&ctx);
shapito_md5_update(&ctx, password, password_len);
shapito_md5_update(&ctx, user, user_len);
shapito_md5_final(&ctx, digest_prepare);
shapito_md5_tostring(digest_prepare_sz, digest_prepare);
-
/* digest = md5(digest, salt) */
shapito_md5_init(&ctx);
shapito_md5_update(&ctx, digest_prepare_sz, 32);
shapito_md5_update(&ctx, salt, 4);
shapito_md5_final(&ctx, digest);
+ }
/* 'md5' + to_string(digest) */
pw->password_len = 35 + 1;
