Skip to content

Commit

Permalink
Merge pull request #11 from nikserg/headers
Browse files Browse the repository at this point in the history
improve: В методе proxyCurl параметры $bearer и $contentType объедине…
  • Loading branch information
nikserg authored Sep 22, 2022
2 parents 9a7356d + f3ae55a commit d814c65
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 17 deletions.
46 changes: 31 additions & 15 deletions CryptoProCli.php
Original file line number Diff line number Diff line change
Expand Up @@ -102,13 +102,14 @@ public function signFile(string $file, string|array $thumbprint, string $toFile
*
* @param string $data Строка подписываемых данных
* @param string|array $thumbprint SHA1 hash подписи, либо неассоциативный массив собержащий thumbprint и pin пароль ключевого контейнера
* @return bool|string
* @return string|false
* @throws Cli
*/
public function signData(string $data, string|array $thumbprint): bool|string
public function signData(string $data, string|array $thumbprint): string|false
{
$from = tempnam('/tmp', 'cpsign');
$to = tempnam('/tmp', 'cpsign');

file_put_contents($from, $data);

$this->signFile($from, $thumbprint, $to);
Expand Down Expand Up @@ -148,18 +149,21 @@ public function addSignToFile(string $file, string|array $thumbprint): void
*
*
* @param string $fileContent
* @return string|false|null
* @throws Cli
* @throws SignatureError
*/
public function verifyFileContent(string $fileContent): void
public function verifyFileContent(string $fileContent): string|false|null
{
$file = tempnam(sys_get_temp_dir(), 'cpc');
file_put_contents($file, $fileContent);
try {
$this->verifyFile($file);
$result = $this->verifyFile($file);
} finally {
unlink($file);
}

return $result;
}

/**
Expand Down Expand Up @@ -211,13 +215,19 @@ private static function getDevNull(): string
*
*
* @param string $file
* @return string|false|null
* @throws Cli
* @throws SignatureError
*/
public function verifyFile(string $file): void
public function verifyFile(string $file): string|false|null
{
$shellCommand = 'yes "n" 2> ' . self::getDevNull() . ' | ' . escapeshellarg($this->cryptcpExec) . ' -verify -verall ' . escapeshellarg($file);
$shellCommand = self::getExec($this->cryptcpExec)
. ' -verify -verall'
. ($this->nochain ? ' -nochain' : '')
. ' ' . $file;

$result = shell_exec($shellCommand);

if (!str_contains($result, "[ErrorCode: 0x00000000]") && !str_contains($result, "[ReturnCode: 0]")) {
preg_match('#\[ErrorCode: (.+)]#', $result, $matches);
$code = strtolower($matches[1]);
Expand All @@ -232,6 +242,8 @@ public function verifyFile(string $file): void
}
throw new Cli("Неожиданный результат $shellCommand: \n$result");
}

return $result;
}

/**
Expand Down Expand Up @@ -272,26 +284,30 @@ public function verifyFileDetached(string $fileSign, string $fileToBeSigned, str
* @param string|null $bearer
* @param string|null $contentType
* @param string|null $data
* @return bool|string
* @return string|false|null
*/
public function proxyCurl(
string $url,
string|array $thumbprint,
string $method = 'GET',
string $bearer = null,
string $contentType = null,
string $data = null
): bool|string
?array $headers = null,
?string $data = null
): string|false|null
{
list($hash, $pin) = is_array($thumbprint) ? $thumbprint : [$thumbprint, ''];
$shellCommand = self::getExec($this->curlExec)
. ' -k -s -X ' . $method
. ' ' . $url
. ' --cert-type CERT_SHA1_HASH_PROP_ID:CERT_SYSTEM_STORE_CURRENT_USER:My'
. ' ' . $url;

if ($headers ?? null) {
foreach ($headers as $header) {
$shellCommand .= ' --header "' . $header . '"';
}
}

$shellCommand .= ' --cert-type CERT_SHA1_HASH_PROP_ID:CERT_SYSTEM_STORE_CURRENT_USER:My'
. ' --cert ' . $hash
. ($pin ? ' --pass ' . $pin : '')
. ($bearer ? ' --header "Authorization: Bearer ' . $bearer . '"' : '')
. ($contentType ? ' --header "Content-Type: ' . $contentType . '"' : '')
. ($data ? ' --data \'' . str_replace("'", "'\''", $data) . '\'' : '');

return shell_exec($shellCommand);
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,6 @@
* `signFile(string $file, string $thumbprint, string $toFile = '')` - Подписать ранее неподписанный файл.
* `signData(string $data, string $thumbprint)` - Подписать данные.
* `addSignToFile(string $file, string $thumbprint)` - Добавить подпись в файл, уже содержащий подпись.
* `verifyFile(string $file)` - Проверяет корректность всех подписей, наложенных на файл. В случае ошибки выкидывает исключение, если все хорошо, ничего не происходит.
* `verifyFile(string $file)` - Проверяет корректность всех подписей, наложенных на файл. В случае ошибки выкидывает исключение, если нет ошибок, возвращает результат операции.
* `verifyFileContent(string $file)` - Аналогично verifyFile, но по содержимому.
* `proxyCurl(string $url, string|array $thumbprint, string $method = 'GET', string $bearer = null, string $contentType = null, string $data = null)` - Curl-запросы с использованием гостовых сертификатов
* `proxyCurl(string $url, string|array $thumbprint, string $method = 'GET', ?array $headers = null, ?string $data = null)` - Curl-запросы с использованием гостовых сертификатов

0 comments on commit d814c65

Please sign in to comment.