Перейти к содержанию

Формирование подписи

Каждое сообщение в системе подписывается с целью проверки целостности передаваемых данных и верификации абонента, сформировавшего сообщение. Непосредственно данные подписи помещаются в http заголовок сообщения. Для данной цели используются параметр http-заголовка «ap-content-signature», содержащий данные индекса ключа и подписи. Параметр «ap-content-signature» может отсутствовать в ответе, если запрос не содержит подписи или подпись некорректна.

Применяемые алгоритмы:

  • HMAC-SHA256 – по умолчанию;
  • HMAC-SHA512.

Формат подписи – «keyindex».«messageSign», где:

  • keyindex – индекс ключа или пары ключей, используемых для подписи;
  • messageSign – строка содержащая подпись;
  • в качестве разделителя используется символ «.» (точка).

Пример формирования подписи:

<?php
function formSignature(/* array */ $data)
{
    $signature =
        ALGO_KEY //1 - HMAC-SHA256, 2-MAC-SHA512
        . '.'
        . hash_hmac('sha256', $data , ARTPAY_SECRET1);

    return $signature;
}
?>
function formSignature(message)
{
    const signature = '1.' //1 - HMAC-SHA256, 2-MAC-SHA512
      + CryptoJS.HmacSHA256(message, ARTPAY_SECRET1).toString(CryptoJS.enc.Hex);
    return signature;
}

Пример проверки подписи в ответе сервера:

<?php

public function checkSignature($data, $signature) : bool
{
    return ($this->formSignature($data) == $signature);
}

?>