• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/web/jwk.php
  • Класс: BitrixMainWebJWK
  • Вызов: JWK::createPemFromModulusAndExponent
static function createPemFromModulusAndExponent($n, $e)
{
	$modulus = JWT::urlsafeB64Decode($n);
	$publicExponent = JWT::urlsafeB64Decode($e);


	$components = array(
		'modulus' => pack('Ca*a*', 2, self::encodeLength(strlen($modulus)), $modulus),
		'publicExponent' => pack('Ca*a*', 2, self::encodeLength(strlen($publicExponent)), $publicExponent)
	);

	$RSAPublicKey = pack(
		'Ca*a*a*',
		48,
		self::encodeLength(strlen($components['modulus']) + strlen($components['publicExponent'])),
		$components['modulus'],
		$components['publicExponent']
	);


	// sequence(oid(1.2.840.113549.1.1.1), null)) = rsaEncryption.
	$rsaOID = pack('H*', '300d06092a864886f70d0101010500'); // hex version of MA0GCSqGSIb3DQEBAQUA
	$RSAPublicKey = chr(0) . $RSAPublicKey;
	$RSAPublicKey = chr(3) . self::encodeLength(strlen($RSAPublicKey)) . $RSAPublicKey;

	$RSAPublicKey = pack(
		'Ca*a*',
		48,
		self::encodeLength(strlen($rsaOID . $RSAPublicKey)),
		$rsaOID . $RSAPublicKey
	);

	$RSAPublicKey = "-----BEGIN PUBLIC KEY-----rn" .
		chunk_split(base64_encode($RSAPublicKey), 64) .
		'-----END PUBLIC KEY-----';

	return $RSAPublicKey;
}