Метка времени декодирования, закодированная в ASN.1 (javascript)

Я пытаюсь декодировать временную метку, которую я получаю из своего 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).

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

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

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

1 ответ

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

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

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

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

Другие вопросы по тегам