HashPassword( $key ); update_option( 'recovery_key', array( 'hashed_key' => $hashed, 'created_at' => time(), ) ); return $key; } /** * Verifies if the recovery mode key is correct. * * @since 5.2.0 * * @param string $key The unhashed key. * @param int $ttl Time in seconds for the key to be valid for. * @return true|WP_Error True on success, error object on failure. */ public function validate_recovery_mode_key( $key, $ttl ) { $record = get_option( 'recovery_key' ); if ( ! $record ) { return new WP_Error( 'no_recovery_key_set', __( 'Recovery Mode not initialized.' ) ); } if ( ! is_array( $record ) || ! isset( $record['hashed_key'], $record['created_at'] ) ) { return new WP_Error( 'invalid_recovery_key_format', __( 'Invalid recovery key format.' ) ); } if ( ! wp_check_password( $key, $record['hashed_key'] ) ) { return new WP_Error( 'hash_mismatch', __( 'Invalid recovery key.' ) ); } if ( time() > $record['created_at'] + $ttl ) { return new WP_Error( 'key_expired', __( 'Recovery key expired.' ) ); } return true; } }