secret_source = $secret_source ?? static function ( string $name ): ?string { if ( ! defined( $name ) ) { return null; } $value = constant( $name ); return is_string( $value ) && '' !== $value ? $value : null; }; $this->context_source = $context_source ?? static function () use ( $paths ): string { global $wpdb; $root = '' !== $paths->wordpress_root() ? $paths->wordpress_root() : 'wordpress-root-unavailable'; $prefix = $wpdb instanceof wpdb ? $wpdb->prefix : 'wordpress-prefix-unavailable'; $blog_id = function_exists( 'get_current_blog_id' ) ? (string) get_current_blog_id() : '0'; return $root . "\0" . $prefix . "\0" . $blog_id; }; } public function derive(): string { $material = array(); foreach ( self::SECRET_CONSTANTS as $name ) { try { $value = call_user_func( $this->secret_source, $name ); } catch ( Throwable $exception ) { $value = null; } if ( is_string( $value ) && '' !== $value ) { $material[] = $value; } } try { $context = call_user_func( $this->context_source ); } catch ( Throwable $exception ) { $context = 'wordpress-context-unavailable'; } if ( ! is_string( $context ) || '' === $context ) { $context = 'wordpress-context-unavailable'; } $secret_digest = hash( 'sha256', empty( $material ) ? 'no-defined-wordpress-secret' : implode( "\0", $material ), true ); return hash_hmac( 'sha256', $context, $secret_digest ); } }