• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/rsaopenssl.php
  • Класс: CRsaOpensslProvider
  • Вызов: CRsaOpensslProvider::get_openssl_key_details
static function get_openssl_key_details($key)
{
	//PEM to DER
	$lines = explode("n", trim($key));
	unset($lines[count($lines)-1]);
	unset($lines[0]);
	$der = implode('', $lines);
	$der = base64_decode($der);

	//DER is in ASN.1 notation
	$body = new CASNReader();
	$body->Read($der);
	$bodyItems = $body->GetSequence();

	if(!empty($bodyItems))
	{
		if(is_object($bodyItems[1]) && is_object($bodyItems[2]) && is_object($bodyItems[3]))
		{
			$n = $bodyItems[1]->GetValue();
			$e = $bodyItems[2]->GetValue();
			$d = $bodyItems[3]->GetValue();
		
			return array("n"=>$n, "e"=>$e, "d"=>$d);
		}
		elseif(is_object($bodyItems[2]))
		{
			$body = new CASNReader();
			$body->Read($bodyItems[2]->GetValue());
			$bodyItems = $body->GetSequence();
			
			if(is_object($bodyItems[1]) && is_object($bodyItems[2]) && is_object($bodyItems[3]))
			{
				$n = $bodyItems[1]->GetValue();
				$e = $bodyItems[2]->GetValue();
				$d = $bodyItems[3]->GetValue();

				return array("n"=>$n, "e"=>$e, "d"=>$d);
			}
		}
	}
	return false;
}