Метка времени декодирования, закодированная в ASN.1 (javascript) - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь декодировать временную метку, которую я получаю из моего HTTP-запроса на публикацию, но это действительно сложная задача, у меня даже нет правильного понимания ASN.1 / RFC 3161, так что если кто-то там хочетчтобы выручить меня, меня бы очень порадовали!

Код:

import { Action } from 'kawax-js';
import base64 from 'base-64';
var Ber = require('asn1').Ber;

class Timestamp extends Action {

 static type = 'TIMESTAMP';

 call = async (data) => {
  const authEncoded = base64.encode(username+":"+password);
  const formBody = Object.keys(data).map(key => 
  encodeURIComponent(key) + '=' + 
  encodeURIComponent(data[key])).join('&');
  const response = await 
  fetch("https://sign.test.cryptolog.com/tsa/post/", {
   method: 'POST',
   headers: {
    'Accept': 'application/x-www-form-urlencoded',
    'Content-Type': 'application/x-www-form-urlencoded',
    'Authorization': 'Basic ' + authEncoded,
    'Access-Control-Allow-Origin': '*'
   },
   body: formBody
  });
  const bodyData = await response.arrayBuffer();
  var reader = new Ber.Reader(Buffer.from(bodyData));
  if (reader.peek() === Ber.Boolean)
  console.log("",reader.readBoolean());
  return bodyData;
 }
}

export default Timestamp;

Я пытаюсь использовать пакет asn1 npm (https://www.npmjs.com/package/asn1).

Этоответ, который я получаю, когда запускаю код: enter image description here

И если я изменю свой await response.arrayBuffer() на await response.text(), я получаю это:

enter image description here

Я не знаю, как к этому приблизиться, я пробовал много разных вещей, но, похоже, ничего не помогло, если бы кто-нибудь мог указать мне правильное направление, что было бы здорово!

1 Ответ

0 голосов
/ 26 октября 2018

Похоже, что схема ASN.1 также доступна из RFC (не удивительно, я думаю).Это дано в Приложении C (см. здесь ).

Используя это и компилятор ASN.1, вы можете создать исходный код, который может декодировать ответ.Есть несколько бесплатных компиляторов ASN1, ориентированных на C / C ++, о JavaScript я не знаю.Если вы чувствуете себя смелым, вы можете попробовать этот , который даст вам исходный код на C / C ++, который вы могли бы затем скомпилировать в веб-сборку, которую затем могли бы вызывать из JavaScript.Это кажется грязным, но это может сработать.

Этот пакет из npm выглядит так, как будто у него есть некоторые проблемы, судя по его странице github (ASN.1 довольно сложный).Это может быть просто немного сломано.

Чтобы освоить его, вы можете попробовать ASN.1 Playground .Дайте ему схему, скомпилируйте ее, загрузите некоторые данные, которые вы получите в ответ, расшифруйте их и посмотрите, примерно ли это то, что вы ожидаете.

...