如何使用Haskell解析ASN.1?

5

我该如何使用Haskell解析ASN.1输入?

是否有一个生成代数数据类型声明和解析器代码的生成器,可以根据给定的ASN.1描述文件生成代码?

(例如像生成C代码的asn1c ...)

ASN.1是什么:

ASN.1类似于Google Protocol Buffers,但它早期开发并实际上是一种标准。基本上,ASN.1定义了用于序列化分层结构数据的几种方法以及描述结构的语法。这样的语法可以用于自动生成解析器和用于构建语法树的数据结构。

2个回答

3
您可以使用asn1-encoding包来解码二进制ASN.1,您可以通过手动模式匹配或asn1-parse包来解析它。

例如,以下辅助函数将把一个BER二进制文件解码为ASN1列表:

import Data.ASN1.Encoding
import Data.ASN1.BinaryEncoding
import Data.ASN1.Types
import qualified Data.ByteString as B

decodeASN1File file = decodeASN1' BER `fmap` B.readFile file

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接