SILENT KILLERPanel

Current Path: > home > transcarter > public_html > wp-content > > plugins > wordfence > > > lib


Operation   : Linux host59.registrar-servers.com 4.18.0-513.18.1.lve.2.el8.x86_64 #1 SMP Sat Mar 30 15:36:11 UTC 2024 x86_64
Software     : Apache
Server IP    : 198.54.126.42 | Your IP: 216.73.216.135
Domains      : 1034 Domain(s)
Permission   : [ 0755 ]

Files and Folders in: /home/transcarter/public_html/wp-content//plugins/wordfence///lib

NameTypeSizeLast ModifiedActions
Diff Directory - -
audit-log Directory - -
dashboard Directory - -
rest-api Directory - -
.htaccess File 354 bytes July 17 2025 21:05:48.
Diff.php File 5762 bytes July 17 2025 21:05:47.
GeoLite2-Country.mmdb File 7825225 bytes July 17 2025 21:05:48.
IPTraf.php File 1195 bytes July 17 2025 21:05:48.
IPTrafList.php File 3054 bytes July 17 2025 21:05:48.
WFLSPHP52Compatability.php File 1303 bytes July 17 2025 21:05:48.
compat.php File 425 bytes July 17 2025 21:05:47.
diffResult.php File 2874 bytes July 17 2025 21:05:47.
email_genericAlert.php File 1422 bytes July 17 2025 21:05:47.
email_newIssues.php File 9035 bytes July 17 2025 21:05:47.
email_unlockRequest.php File 2397 bytes July 17 2025 21:05:47.
email_unsubscribeRequest.php File 1077 bytes July 17 2025 21:05:47.
flags.php File 6779 bytes July 17 2025 21:05:47.
live_activity.php File 580 bytes July 17 2025 21:05:48.
menu_dashboard.php File 28671 bytes July 17 2025 21:05:48.
menu_dashboard_options.php File 15577 bytes July 17 2025 21:05:48.
menu_firewall.php File 2167 bytes July 17 2025 21:05:48.
menu_firewall_blocking.php File 10495 bytes July 17 2025 21:05:48.
menu_firewall_blocking_options.php File 4737 bytes July 17 2025 21:05:48.
menu_firewall_waf.php File 20443 bytes July 17 2025 21:05:48.
menu_firewall_waf_options.php File 11357 bytes July 17 2025 21:05:48.
menu_install.php File 1767 bytes July 17 2025 21:05:48.
menu_options.php File 25291 bytes July 17 2025 21:05:48.
menu_scanner.php File 22047 bytes July 17 2025 21:05:48.
menu_scanner_credentials.php File 2838 bytes July 17 2025 21:05:48.
menu_scanner_options.php File 8615 bytes July 17 2025 21:05:48.
menu_support.php File 18243 bytes July 17 2025 21:05:48.
menu_tools.php File 1528 bytes July 17 2025 21:05:48.
menu_tools_auditlog.php File 16829 bytes July 17 2025 21:05:48.
menu_tools_diagnostic.php File 50536 bytes July 17 2025 21:05:48.
menu_tools_importExport.php File 1310 bytes July 17 2025 21:05:48.
menu_tools_livetraffic.php File 40381 bytes July 17 2025 21:05:48.
menu_tools_twoFactor.php File 20070 bytes July 17 2025 21:05:48.
menu_tools_whois.php File 4722 bytes July 17 2025 21:05:48.
menu_wordfence_central.php File 9889 bytes July 17 2025 21:05:48.
noc1.key File 1683 bytes July 17 2025 21:05:48.
sodium_compat_fast.php File 185 bytes July 17 2025 21:05:48.
sysinfo.php File 1501 bytes July 17 2025 21:05:48.
viewFullActivityLog.php File 1501 bytes July 17 2025 21:05:48.
wf503.php File 9860 bytes July 17 2025 21:05:48.
wfAPI.php File 10338 bytes July 17 2025 21:05:48.
wfActivityReport.php File 20945 bytes July 17 2025 21:05:48.
wfAdminNoticeQueue.php File 5323 bytes July 17 2025 21:05:48.
wfAlerts.php File 7549 bytes July 17 2025 21:05:48.
wfArray.php File 1816 bytes July 17 2025 21:05:48.
wfAuditLog.php File 48265 bytes July 17 2025 21:05:48.
wfBrowscap.php File 3996 bytes July 17 2025 21:05:48.
wfBrowscapCache.php File 262994 bytes July 17 2025 21:05:48.
wfBulkCountries.php File 10002 bytes July 17 2025 21:05:48.
wfCache.php File 6166 bytes July 17 2025 21:05:48.
wfCentralAPI.php File 26419 bytes July 17 2025 21:05:48.
wfConfig.php File 125427 bytes July 17 2025 21:05:48.
wfCrawl.php File 6722 bytes July 17 2025 21:05:48.
wfCredentialsController.php File 5284 bytes July 17 2025 21:05:48.
wfCrypt.php File 4146 bytes July 17 2025 21:05:48.
wfCurlInterceptor.php File 1047 bytes July 17 2025 21:05:48.
wfDB.php File 11764 bytes July 17 2025 21:05:48.
wfDashboard.php File 8399 bytes July 17 2025 21:05:48.
wfDateLocalization.php File 360582 bytes July 17 2025 21:05:48.
wfDeactivationOption.php File 2184 bytes July 17 2025 21:05:48.
wfDiagnostic.php File 68476 bytes July 17 2025 21:05:48.
wfDict.php File 738 bytes July 17 2025 21:05:48.
wfDirectoryIterator.php File 1937 bytes July 17 2025 21:05:48.
wfFileUtils.php File 2784 bytes July 17 2025 21:05:48.
wfHelperBin.php File 2015 bytes July 17 2025 21:05:48.
wfHelperString.php File 2180 bytes July 17 2025 21:05:48.
wfIPWhitelist.php File 1596 bytes July 17 2025 21:05:48.
wfImportExportController.php File 3306 bytes July 17 2025 21:05:48.
wfInaccessibleDirectoryException.php File 303 bytes July 17 2025 21:05:48.
wfInvalidPathException.php File 266 bytes July 17 2025 21:05:48.
wfIpLocation.php File 1768 bytes July 17 2025 21:05:48.
wfIpLocator.php File 2810 bytes July 17 2025 21:05:48.
wfIssues.php File 28582 bytes July 17 2025 21:05:48.
wfJWT.php File 5455 bytes July 17 2025 21:05:48.
wfLicense.php File 10682 bytes July 17 2025 21:05:48.
wfLockedOut.php File 9959 bytes July 17 2025 21:05:48.
wfLog.php File 58480 bytes July 17 2025 21:05:48.
wfMD5BloomFilter.php File 5327 bytes July 17 2025 21:05:48.
wfModuleController.php File 754 bytes July 17 2025 21:05:48.
wfNotification.php File 6564 bytes July 17 2025 21:05:48.
wfOnboardingController.php File 9443 bytes July 17 2025 21:05:48.
wfPersistenceController.php File 819 bytes July 17 2025 21:05:48.
wfRESTAPI.php File 377 bytes July 17 2025 21:05:48.
wfScan.php File 16300 bytes July 17 2025 21:05:48.
wfScanEngine.php File 136810 bytes July 17 2025 21:05:48.
wfScanEntrypoint.php File 1070 bytes July 17 2025 21:05:48.
wfScanFile.php File 1037 bytes July 17 2025 21:05:48.
wfScanFileLink.php File 403 bytes July 17 2025 21:05:48.
wfScanFileListItem.php File 408 bytes July 17 2025 21:05:48.
wfScanFileProperties.php File 1095 bytes July 17 2025 21:05:48.
wfScanMonitor.php File 4152 bytes July 17 2025 21:05:48.
wfScanPath.php File 1817 bytes July 17 2025 21:05:48.
wfSchema.php File 11175 bytes July 17 2025 21:05:48.
wfStyle.php File 1244 bytes July 17 2025 21:05:48.
wfSupportController.php File 24758 bytes July 17 2025 21:05:48.
wfUnlockMsg.php File 1163 bytes July 17 2025 21:05:48.
wfUpdateCheck.php File 27888 bytes July 17 2025 21:05:48.
wfUtils.php File 127089 bytes July 17 2025 21:05:48.
wfVersionCheckController.php File 19729 bytes July 17 2025 21:05:48.
wfVersionSupport.php File 535 bytes July 17 2025 21:05:48.
wfView.php File 2269 bytes July 17 2025 21:05:48.
wfViewResult.php File 1455 bytes July 17 2025 21:05:48.
wfWebsite.php File 1792 bytes July 17 2025 21:05:48.
wordfenceClass.php File 447131 bytes July 17 2025 21:05:48.
wordfenceConstants.php File 3650 bytes July 17 2025 21:05:48.
wordfenceHash.php File 43726 bytes July 17 2025 21:05:48.
wordfenceScanner.php File 31200 bytes July 17 2025 21:05:48.
wordfenceURLHoover.php File 18804 bytes July 17 2025 21:05:48.

Reading File: /home/transcarter/public_html/wp-content//plugins/wordfence///lib/wfVersionCheckController.php

<?php

class wfVersionCheckController {
	const VERSION_COMPATIBLE = 'compatible';
	const VERSION_DEPRECATED = 'deprecated';
	const VERSION_UNSUPPORTED = 'unsupported';
	
	const OPENSSL_DEV = 0;
	//Betas are 1-14
	const OPENSSL_RELEASE = 15;
	
	public static function shared() {
		static $_shared = false;
		if ($_shared === false) {
			$_shared = new wfVersionCheckController();
		}
		return $_shared;
	}
	
	/**
	 * Returns whether or not all version checks are successful. If any check returns a value other than VERSION_COMPATIBLE, this returns false.
	 * 
	 * @return bool
	 */
	public function checkVersions() {
		return ($this->checkPHPVersion() == self::VERSION_COMPATIBLE) && ($this->checkOpenSSLVersion() == self::VERSION_COMPATIBLE) && ($this->checkWordPressVersion() == self::VERSION_COMPATIBLE);
	}
	
	/**
	 * Does the same thing as checkVersions but also triggers display of the corresponding warnings.
	 * 
	 * @return bool
	 */
	public function checkVersionsAndWarn() {
		require(dirname(__FILE__) . '/wfVersionSupport.php');
		/**
		 * @var string $wfPHPDeprecatingVersion
		 * @var string $wfPHPMinimumVersion
		 * @var string $wfOpenSSLDeprecatingVersion
		 * @var string $wfOpenSSLMinimumVersion
		 * @var string $wfWordPressDeprecatingVersion
		 * @var string $wfWordPressMinimumVersion
		 */
		
		//PHP
		$php = $this->checkPHPVersion();
		if ($php == self::VERSION_DEPRECATED) {
			$this->_alertEmail(
				'phpVersionCheckDeprecationEmail_' . $wfPHPDeprecatingVersion,
				__('PHP version too old', 'wordfence'),
				sprintf(
					/* translators: 1. PHP version. 2. PHP version. */
					__('Your site is using a PHP version (%1$s) that will no longer be supported by Wordfence in an upcoming release and needs to be updated. We recommend using the newest version of PHP available but will currently support PHP versions as old as %2$s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'),
					phpversion(),
					$wfPHPDeprecatingVersion
				)
				. ' ' .
				sprintf(__('Learn More: %s', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_PHP))
			);
			
			$this->_adminNotice(
				'phpVersionCheckDeprecationNotice_' . $wfPHPDeprecatingVersion,
				'phpVersionCheck',
				wp_kses(sprintf(
					/* translators: 1. PHP version. 2. PHP version. */
					__('<strong>WARNING: </strong> Your site is using a PHP version (%1$s) that will no longer be supported by Wordfence in an upcoming release and needs to be updated. We recommend using the newest version of PHP available but will currently support PHP versions as old as %2$s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'),
					phpversion(),
					$wfPHPDeprecatingVersion
				), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()))) . ' <a href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_PHP) . '" target="_blank" rel="noopener noreferrer">' . esc_html__('Learn More', 'wordfence') . '<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>'
			);
		}
		else if ($php == self::VERSION_UNSUPPORTED) {
			$this->_alertEmail(
				'phpVersionCheckUnsupportedEmail_' . $wfPHPMinimumVersion,
				__('PHP version too old', 'wordfence'),
				sprintf(
					/* translators: 1. PHP version. 2. PHP version. */
					__('Your site is using a PHP version (%1$s) that is no longer supported by Wordfence and needs to be updated. We recommend using the newest version of PHP available but will currently support PHP versions as old as %2$s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'),
					phpversion(),
					$wfPHPDeprecatingVersion
				) . ' ' . sprintf(/* translators: Support URL. */ __('Learn More: %s', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_PHP))
			);
			
			$this->_adminNotice(
				'phpVersionCheckUnsupportedNotice_' . $wfPHPMinimumVersion,
				'phpVersionCheck',
				wp_kses(sprintf(
					/* translators: 1. PHP version. 2. PHP version. */
					__('<strong>WARNING: </strong> Your site is using a PHP version (%1$s) that is no longer supported by Wordfence and needs to be updated. We recommend using the newest version of PHP available but will currently support PHP versions as old as %2$s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'),
					phpversion(),
					$wfPHPDeprecatingVersion
				), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()))) . ' <a href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_PHP) . '" target="_blank" rel="noopener noreferrer">' . esc_html__('Learn More', 'wordfence') . '<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>'
			);
		}
		else {
			wfAdminNoticeQueue::removeAdminNotice(false, 'phpVersionCheck');
		}
		
		if (wfAdminNoticeQueue::hasNotice('phpVersionCheck')) {
			return false;
		}
		
		//OpenSSL
		wfAdminNoticeQueue::removeAdminNotice(false, 'opensslVersionCheck');
		/*$openssl = $this->checkOpenSSLVersion();
		if ($openssl == self::VERSION_DEPRECATED) {
			$this->_alertEmail(
				'opensslVersionCheckDeprecationEmail_' . $wfOpenSSLDeprecatingVersion,
				__('OpenSSL version too old', 'wordfence'),
				sprintf(__('Your site is using an OpenSSL version (%s) that will no longer be supported by Wordfence in an upcoming release and needs to be updated. We recommend using the newest version of OpenSSL but will currently support OpenSSL versions as old as %s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'), self::openssl_make_text_version(), $wfOpenSSLDeprecatingVersion) . ' ' . sprintf(__('Learn More: %s', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_OPENSSL))
			);
			
			$this->_adminNotice(
				'opensslVersionCheckDeprecationNotice_' . $wfOpenSSLDeprecatingVersion,
				'opensslVersionCheck',
				sprintf(__('<strong>WARNING: </strong> Your site is using an OpenSSL version (%s) that will no longer be supported by Wordfence in an upcoming release and needs to be updated. We recommend using the newest version of OpenSSL but will currently support OpenSSL versions as old as %s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'), self::openssl_make_text_version(), $wfOpenSSLDeprecatingVersion) . ' <a href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_OPENSSL) . '" target="_blank" rel="noopener noreferrer">' . __('Learn More', 'wordfence') . '<span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a>'
			);
			
			return false;
		}
		else if ($openssl == self::VERSION_UNSUPPORTED) {
			$this->_alertEmail(
				'opensslVersionCheckUnsupportedEmail_' . $wfOpenSSLMinimumVersion,
				__('OpenSSL version too old', 'wordfence'),
				sprintf(__('Your site is using an OpenSSL version (%s) that is no longer supported by Wordfence and needs to be updated. We recommend using the newest version of OpenSSL but will currently support OpenSSL versions as old as %s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'), self::openssl_make_text_version(), $wfOpenSSLDeprecatingVersion) . ' ' . sprintf(__('Learn More: %s', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_OPENSSL))
			);
			
			$this->_adminNotice(
				'opensslVersionCheckUnsupportedNotice_' . $wfOpenSSLMinimumVersion,
				'opensslVersionCheck',
				sprintf(__('<strong>WARNING: </strong> Your site is using an OpenSSL version (%s) that is no longer supported by Wordfence and needs to be updated. We recommend using the newest version of OpenSSL but will currently support OpenSSL versions as old as %s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'), self::openssl_make_text_version(), $wfOpenSSLDeprecatingVersion) . ' <a href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_OPENSSL) . '" target="_blank" rel="noopener noreferrer">' . __('Learn More', 'wordfence') . '<span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a>'
			);
			
			return false;
		}
		else {
			wfAdminNoticeQueue::removeAdminNotice(false, 'opensslVersionCheck');
		}
		
		if (wfAdminNoticeQueue::hasNotice('opensslVersionCheck')) {
			return false;
		}*/
		
		//WordPress
		$wordpress = $this->checkWordPressVersion();
		if ($wordpress == self::VERSION_DEPRECATED) {
			require(ABSPATH . 'wp-includes/version.php'); /** @var string $wp_version */
			
			$this->_alertEmail(
				'wordpressVersionCheckDeprecationEmail_' . $wfWordPressDeprecatingVersion,
				__('WordPress version too old', 'wordfence'),
				sprintf(
					/* translators: 1. WordPress version. 2. WordPress version. */
					__('Your site is using a WordPress version (%1$s) that will no longer be supported by Wordfence in an upcoming release and needs to be updated. We recommend using the newest version of WordPress but will currently support WordPress versions as old as %2$s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'),
					$wp_version,
					$wfWordPressDeprecatingVersion
				) . ' ' . sprintf(__('Learn More: %s', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_WORDPRESS))
			);
			
			$this->_adminNotice(
				'wordpressVersionCheckDeprecationNotice_' . $wfWordPressDeprecatingVersion,
				'wordpressVersionCheck',
				wp_kses(sprintf(
					/* translators: 1. WordPress version. 2. WordPress version. */
					__('<strong>WARNING: </strong> Your site is using a WordPress version (%1$s) that will no longer be supported by Wordfence in an upcoming release and needs to be updated. We recommend using the newest version of WordPress but will currently support WordPress versions as old as %2$s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'),
					$wp_version,
					$wfWordPressDeprecatingVersion
				), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()))) . ' <a href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_WORDPRESS) . '" target="_blank" rel="noopener noreferrer">' . esc_html__('Learn More', 'wordfence') . '<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>'
			);
		}
		else if ($wordpress == self::VERSION_UNSUPPORTED) {
			require(ABSPATH . 'wp-includes/version.php'); /** @var string $wp_version */
			
			$this->_alertEmail(
				'wordpressVersionCheckUnsupportedEmail_' . $wfWordPressMinimumVersion,
				__('WordPress version too old', 'wordfence'),
				sprintf(
					/* translators: 1. WordPress version. 2. WordPress version. */
					__('Your site is using a WordPress version (%1$s) that is no longer supported by Wordfence and needs to be updated. We recommend using the newest version of WordPress but will currently support WordPress versions as old as %2$s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'), $wp_version, $wfWordPressDeprecatingVersion) . ' ' . sprintf(__('Learn More: %s', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_WORDPRESS))
			);
			
			$this->_adminNotice(
				'wordpressVersionCheckUnsupportedNotice_' . $wfWordPressMinimumVersion,
				'wordpressVersionCheck',
				wp_kses(sprintf(
					/* translators: 1. WordPress version. 2. WordPress version. */
					__('<strong>WARNING: </strong> Your site is using a WordPress version (%1$s) that is no longer supported by Wordfence and needs to be updated. We recommend using the newest version of WordPress but will currently support WordPress versions as old as %2$s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'), $wp_version, $wfWordPressDeprecatingVersion), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()))) . ' <a href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_WORDPRESS) . '" target="_blank" rel="noopener noreferrer">' . esc_html__('Learn More', 'wordfence') . '<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>'
			);
		}
		else {
			wfAdminNoticeQueue::removeAdminNotice(false, 'wordpressVersionCheck');
		}
		
		if (wfAdminNoticeQueue::hasNotice('wordpressVersionCheck')) {
			return false;
		}
		
		return true;
	}
	
	private function _alertEmail($checkKey, $title, $body) {
		if (!wfConfig::get($checkKey)) {
			wordfence::alert($title, $body, wfUtils::getIP());
			wfConfig::set($checkKey, true);
		}
	}
	
	private function _adminNotice($checkKey, $noticeKey, $message) {
		if (!wfConfig::get($checkKey)) {
			wfAdminNoticeQueue::addAdminNotice(wfAdminNotice::SEVERITY_CRITICAL, $message, $noticeKey);
			wfConfig::set($checkKey, true);
		}
	}
	
	/**
	 * Returns whether or not the PHP version meets our minimum requirement or is a version being deprecated.
	 * 
	 * @return string One of the VERSION_ constants.
	 */
	public function checkPHPVersion() {
		require(dirname(__FILE__) . '/wfVersionSupport.php');
		/**
		 * @var string $wfPHPDeprecatingVersion
		 * @var string $wfPHPMinimumVersion
		 */
		
		if (version_compare(phpversion(), $wfPHPDeprecatingVersion, '>=')) {
			return self::VERSION_COMPATIBLE;
		}
		
		if ($wfPHPDeprecatingVersion != $wfPHPMinimumVersion && version_compare(phpversion(), $wfPHPMinimumVersion, '>=')) {
			return self::VERSION_DEPRECATED;
		}
		
		return self::VERSION_UNSUPPORTED;
	}
	
	/**
	 * Returns whether or not the OpenSSL version meets our minimum requirement or is a version being deprecated.
	 *
	 * @return string One of the VERSION_ constants.
	 */
	public function checkOpenSSLVersion() {
		require(dirname(__FILE__) . '/wfVersionSupport.php');
		/**
		 * @var string $wfOpenSSLDeprecatingVersion
		 * @var string $wfOpenSSLMinimumVersion
		 */
		
		if (self::openssl_version_compare($wfOpenSSLDeprecatingVersion) <= 0) {
			return self::VERSION_COMPATIBLE;
		}
		
		if ($wfOpenSSLDeprecatingVersion != $wfOpenSSLMinimumVersion && self::openssl_version_compare($wfOpenSSLMinimumVersion) <= 0) {
			return self::VERSION_DEPRECATED;
		}
		
		return self::VERSION_UNSUPPORTED;
	}
	
	/**
	 * Returns whether or not the WordPress version meets our minimum requirement or is a version being deprecated.
	 *
	 * @return string One of the VERSION_ constants.
	 */
	public function checkWordPressVersion() {
		require(ABSPATH . 'wp-includes/version.php'); /** @var string $wp_version */
		
		require(dirname(__FILE__) . '/wfVersionSupport.php');
		/**
		 * @var string $wfWordPressDeprecatingVersion
		 * @var string $wfWordPressMinimumVersion
		 */
		
		if (version_compare($wp_version, $wfWordPressDeprecatingVersion, '>=')) {
			return self::VERSION_COMPATIBLE;
		}
		
		if ($wfWordPressDeprecatingVersion != $wfWordPressMinimumVersion && version_compare($wp_version, $wfWordPressMinimumVersion, '>=')) {
			return self::VERSION_DEPRECATED;
		}
		
		return self::VERSION_UNSUPPORTED;
	}
	
	/**
	 * Utility Functions
	 */
	
	/**
	 * Returns whether or not the OpenSSL version is before, after, or equal to the equivalent text version string.
	 *
	 * @param string $compareVersion
	 * @param int $openSSLVersion A version number in the format OpenSSL uses.
	 * @param bool $allowDevBeta If true, dev and beta versions of $compareVersion are treated as equivalent to release versions despite having a lower version number.
	 * @return bool|int Returns -1 if $compareVersion is earlier, 0 if equal, 1 if later, and false if not a valid version string.
	 */
	public static function openssl_version_compare($compareVersion, $openSSLVersion = OPENSSL_VERSION_NUMBER, $allowDevBeta = true) {
		if (preg_match('/^(\d+)\.(\d+)\.(\d+)([a-z]*)((?:-dev|-beta\d\d?)?)/i', $compareVersion, $matches)) {
			$primary = 0; $major = 0; $minor = 0; $fixLetterIndexes = 0; $patch = self::OPENSSL_RELEASE;
			if (isset($matches[1])) { $primary = (int) $matches[1]; }
			if (isset($matches[2])) { $major = (int) $matches[2]; }
			if (isset($matches[3])) { $minor = (int) $matches[3]; }
			if (isset($matches[4]) && !empty($matches[4])) {
				$letters = str_split($matches[4]);
				foreach ($letters as $l) {
					$fixLetterIndexes += strpos('abcdefghijklmnopqrstuvwxyz', strtolower($l)) + 1;
				}
			}
			if (isset($matches[5]) && !empty($matches[5])) {
				if (preg_match('/^-beta(\d+)$/i', $matches[5], $betaMatches)) {
					$patch = (int) $betaMatches[1];
				}
				else {
					$patch = self::OPENSSL_DEV;
				}
			}
			
			$compareOpenSSLVersion = self::openssl_make_number_version($primary, $major, $minor, $fixLetterIndexes, $patch);
			if ($allowDevBeta) {
				$compareOpenSSLVersion = $compareOpenSSLVersion >> 4;
				$openSSLVersion = $openSSLVersion >> 4;
			}
			
			if ($compareOpenSSLVersion < $openSSLVersion) { return -1; }
			else if ($compareOpenSSLVersion == $openSSLVersion) { return 0; }
			return 1;
		}
		
		return false;
	}
	
	/**
	 * Builds a number that can be compared to OPENSSL_VERSION_NUMBER from the parameters given. This is a modified
	 * version of the macro in the OpenSSL source.
	 *
	 * @param int $primary The '1' in 1.0.2g.
	 * @param int $major The '0' in 1.0.2g.
	 * @param int $minor The '2' in 1.0.2g.
	 * @param int $fixLetterIndexes The 'g' in 1.0.2g. This can potentially be multiple letters, in which case, all of the indexes are added.
	 * @param int $patch
	 * @return int
	 */
	public static function openssl_make_number_version($primary, $major, $minor, $fixLetterIndexes = 0, $patch = 0) {
		return ((($primary & 0xff) << 28) + (($major & 0xff) << 20) + (($minor & 0xff) << 12) + (($fixLetterIndexes & 0xff) << 4) + $patch);
	}
	
	/**
	 * Builds a text version of the OpenSSL version from a number-formatted one.
	 * 
	 * @param int $number
	 * @return string
	 */
	public static function openssl_make_text_version($number = OPENSSL_VERSION_NUMBER) {
		$primary = (($number >> 28) & 0xff);
		$major = (($number >> 20) & 0xff);
		$minor = (($number >> 12) & 0xff);
		$fix = (($number >> 4) & 0xff);
		$patch = ($number & 0xf); //0 is dev, 1-14 are betas, 15 is release
		
		$alphabet = str_split('abcdefghijklmnopqrstuvwxyz');
		$fixLetters = '';
		while ($fix > 26) {
			$fixLetters .= 'z';
			$fix -= 26;
		}
		if (array_key_exists($fix - 1, $alphabet)) {
			$fixLetters .= $alphabet[$fix - 1];
		}
		
		$version = "{$primary}.{$major}.{$minor}{$fixLetters}";
		
		if ($patch == self::OPENSSL_DEV) {
			$version .= '-dev';
		}
		else if ($patch == self::OPENSSL_RELEASE) {
			//Do nothing
		}
		else {
			$version .= '-beta' . $patch;
		}
		
		return $version;
	}
}

SILENT KILLER Tool