refactor(Sbp)
This commit is contained in:
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user