Two big commits in one day I know, but redid password storage to use HMAC-SHA1. Consolidated much AES processing to three core methods in session that should handle everything automagically. Installation works; upgrades should. Rebranded as 1.1.6.
<?php
// Migrate passwords to the new encryption scheme
global $db, $session, $paths, $template, $plugins; // Common objects
require_once(ENANO_ROOT . '/includes/hmac.php');
@set_time_limit(0);
$q = $db->sql_query('UPDATE ' . table_prefix . "users SET old_encryption = 2 WHERE user_id > 1 AND old_encryption = 0;");
if ( !$q )
$db->_die();
$q = $db->sql_query('SELECT user_id, password FROM ' . table_prefix . "users WHERE user_id > 1 AND old_encryption = 2;");
if ( !$q )
$db->_die();
while ( $row = $db->fetchrow($q) )
{
$password = $session->pk_decrypt($row['password']);
if ( empty($password) )
{
global $ui;
echo '<p>1.1.5-1.1.6 migration script: ERROR: bad password returned from $session->pk_decrypt()</p>';
$ui->show_footer();
exit;
}
$hmac_secret = hexencode(AESCrypt::randkey(20), '', '');
$password = hmac_sha1($password, $hmac_secret);
$e = $db->sql_query('UPDATE ' . table_prefix . "users SET password = '{$password}', password_salt = '{$hmac_secret}', old_encryption = 0 WHERE user_id = {$row['user_id']};");
if ( !$e )
$db->_die();
}