以ASN.1编码的解码时间戳(javascript)

时间:2018-09-27 12:40:15

标签: javascript reactjs decoding asn.1 rfc3161

我正在尝试解码从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 :(得分:0)

看起来ASN.1模式也可以从RFC获得(我想不足为奇)。它在附录C中给出(请参见here)。

使用该代码和ASN.1编译器,您可以生成可以解码响应的源代码。有一些针对C / C ++的免费ASN1编译器,我不了解JavaScript。如果您感觉很勇敢,可以尝试this one,它将为您提供C / C ++源代码,然后您可以将其编译为Web程序集,然后可以从JavaScript调用该程序集。感觉很好,很脏,但这可能会起作用。

从npm那里得到的软件包从其github页面来看似乎有些问题(ASN.1相当复杂)。可能有点破。

要掌握它,您可能想尝试ASN.1 Playground。给它一个架构,进行编译,上传您作为响应获得的一些数据,对其进行解码,看看它是否大致符合您的期望。