Узел Семена HmacSHA1 - PullRequest
       30

Узел Семена HmacSHA1

0 голосов
/ 07 марта 2019

Я пытаюсь отправить SOAP-запрос через узел, разговаривая с сервисом, защищенным с помощью WSS.

Мне нужно подписать ответ XML с помощью элемента SignedInfo, который требует от меня объединения одноразового номераДвоичный секрет, сгенерированный мной, с двоичным секретом Nonce, возвращенным из исходного запроса токена - формат PSHA1.

Мне удалось проверить это с помощью Java, используя следующий класс (где секрет - мой одноразовый номер клиентаи семя - это одноразовый номер сервера):

https://github.com/apache/wss4j/blob/trunk/ws-security-common/src/main/java/org/apache/wss4j/common/derivedKey/P_SHA1.java#L57

Со следующим кодом Java:

Mac mac = Mac.getInstance("HmacSHA1");
SecretKeySpec key = new SecretKeySpec(getSharedKey(), "HmacSHA1");
mac.init(key);

String bytesToSign = "<XML_TO_SIGN_GOES_HERE>";

String signature = Base64.encodeBytes(mac.doFinal(bytesToSign.getBytes())); 

Мне нужно сделать это в проекте Node,Я посмотрел на Crypto API и многочисленные плагины, но не могу сгенерировать одну и ту же сигнатуру.

Как указать начальное число для узла HmacSHA1, использующего узел?

1 Ответ

0 голосов
/ 08 марта 2019

Мне удалось добраться до конца, есть модуль NPM с именем psha1 (https://www.npmjs.com/package/psha1).

. Используя эту библиотеку, я создал следующий модуль generateSignature, который выглядит следующим образом:

const crypto = require('crypto');
const psha1 = require('psha1');

export const generateSignatureValue = ({
  clientSecret,
  serverSecret,
  messageToSign,
}) => {

  const secretKey =
    psha1(clientSecret, serverSecret, 256);

  const hash =
    crypto
      .createHmac('sha1', Buffer.from(secretKey, 'base64'))
      .update(messageToSign)
      .digest('binary');

  return Buffer
    .from(hash, 'binary')
    .toString('base64');
};

export default generateSignatureValue;

Это дает мне желаемый результат:)

...