ASN1 OBJECT_IDENTIFIER解码
ASN1 OBJECT_IDENTIFIER decoding
我有以下 ASN1 数据
Sequence
Sequence
ObjectIdentifier
Sequence
Sequence
Integer
Integer
Sequence
Integer
Integer
我的目标是获取编码后的整数值。到目前为止我的代码如下
ByteQueue queue(inputLen);
queue.Put2(input, inputLen, 0, false);
BERSequenceDecoder outer(queue);
BERSequenceDecoder discard(outer); // unnecessary sequence with object_identifier
BERSequenceDecoder obj(discard,
CryptoPP::ASNTag::OBJECT_IDENTIFIER | CryptoPP::ASNIdFlag::UNIVERSAL);
BERSequenceDecoder parent(outer); //BER decode error
for(int i = 0; i < 2; i++) {
BERSequenceDecoder dataSequence(parent);
Integer i1, i2;
i1.BERDecode(dataSequence);
i2.BERDecode(dataSequence);
问题是,我不知道如何正确地通过 object_identifier 部分,至少我认为这是问题所在。我在 4. 解码器对象上得到 BER decode error
。
此外,我是否正确初始化了 ByteQueue?这个Put2
方法似乎不是正确的方法,但我没有找到任何其他方法。
ByteQueue queue(inputLen);
queue.Put2(input, inputLen, 0, false);
你也可以这样做:
ArraySource as(input, inputLen, false /*pumpAll*/);
as.TransferTo(queue);
或者,如果您只想复制它们:
as.CopyTo(queue);
Problem is, I don't know how to properly get past the object_identifier part...
我可能会这样做:
byte b = as.Peek();
if(b == /*some tag*/)
as.Skip(n);
或:
byte b = as.Peek();
if(b == /*some tag*/)
{
lword length;
bool definiteLength;
if(!BERLengthDecode(as, length, definiteLength))
throw BadParam();
as.Skip(length);
}
具有上述优点的源文件是asn.h
and asn.cpp
。您可能感兴趣的其他人包括 BERDecodeOctetString
和 BERDecodeBitString
.
我有以下 ASN1 数据
Sequence
Sequence
ObjectIdentifier
Sequence
Sequence
Integer
Integer
Sequence
Integer
Integer
我的目标是获取编码后的整数值。到目前为止我的代码如下
ByteQueue queue(inputLen);
queue.Put2(input, inputLen, 0, false);
BERSequenceDecoder outer(queue);
BERSequenceDecoder discard(outer); // unnecessary sequence with object_identifier
BERSequenceDecoder obj(discard,
CryptoPP::ASNTag::OBJECT_IDENTIFIER | CryptoPP::ASNIdFlag::UNIVERSAL);
BERSequenceDecoder parent(outer); //BER decode error
for(int i = 0; i < 2; i++) {
BERSequenceDecoder dataSequence(parent);
Integer i1, i2;
i1.BERDecode(dataSequence);
i2.BERDecode(dataSequence);
问题是,我不知道如何正确地通过 object_identifier 部分,至少我认为这是问题所在。我在 4. 解码器对象上得到 BER decode error
。
此外,我是否正确初始化了 ByteQueue?这个Put2
方法似乎不是正确的方法,但我没有找到任何其他方法。
ByteQueue queue(inputLen); queue.Put2(input, inputLen, 0, false);
你也可以这样做:
ArraySource as(input, inputLen, false /*pumpAll*/);
as.TransferTo(queue);
或者,如果您只想复制它们:
as.CopyTo(queue);
Problem is, I don't know how to properly get past the object_identifier part...
我可能会这样做:
byte b = as.Peek();
if(b == /*some tag*/)
as.Skip(n);
或:
byte b = as.Peek();
if(b == /*some tag*/)
{
lword length;
bool definiteLength;
if(!BERLengthDecode(as, length, definiteLength))
throw BadParam();
as.Skip(length);
}
具有上述优点的源文件是asn.h
and asn.cpp
。您可能感兴趣的其他人包括 BERDecodeOctetString
和 BERDecodeBitString
.