refactor(Sbp)

This commit is contained in:
Anatoliy Poloz
2026-03-17 12:26:30 +03:00
parent e2adc8d530
commit b7b2a8fd61
25 changed files with 244 additions and 197 deletions

View File

@@ -55,15 +55,17 @@ class OpenSslCmsSigner implements SignerInterface
@unlink($inFile);
@unlink($outFile);
// Извлекаем Base64 тело подписи согласно примеру из документации Альфы
$parts = explode("\n\n", $signedData, 2);
if (isset($parts[1])) {
$signature = trim($parts[1]);
// Удаляем возможные PEM-завершители и переносы строк
$signature = str_replace(["-----BEGIN PKCS7-----", "-----END PKCS7-----", "\n", "\r", " "], '', $signature);
return $signature;
// Надежно извлекаем только Base64 блок подписи из S/MIME или PEM структуры
$parts = explode("\n\n", $signedData);
foreach ($parts as $part) {
// Очищаем часть от пробелов и переносов
$cleaned = str_replace(["\n", "\r", ' '], '', $part);
// Ищем блок, который выглядит как длинный Base64 (больше 128 символов) и не содержит S/MIME заголовков
if (preg_match('/^[a-zA-Z0-9\/+]+=*$/', $cleaned) && strlen($cleaned) > 128) {
return $cleaned;
}
}
throw new SignerException("Failed to extract signature body from CMS container.");
throw new SignerException("Failed to extract signature body from CMS container. Output: " . substr($signedData, 0, 100));
}
}