In the below script, the function test_encode prints:
a: [Explicit(ContextSpecific, 0, BigUint { data: [] }, Unknown(ContextSpecific, false, 2, BigUint { data: [] }, [0]))]
b: [Unknown(ContextSpecific, true, 0, BigUint { data: [] }, [128, 1, 0, 129, 1, 1])]
This is unexpected as the structure is the same in both occasions, and it appears to relate to this. I would expect the output to be as it is in b both times. I'm not exactly sure if the encoding is being done in the best way, but it conforms to the ASN model I am working with so I can't change it. For reference, the Haskell library asn1-encoding produces the following:
[Start (Container Context 0),Other Context 0 "\NUL",End (Container Context 0)]
[Start (Container Context 0),Other Context 0 "\NUL",Other Context 1 "\SOH",End (Container Context 0)]
Test script:
use num_traits::cast::{FromPrimitive};
use num_bigint::{BigInt, BigUint};
use simple_asn1::*;
#[test]
fn test_encode() {
let a = encode_structure(0, &vec![vec![0]]);
let b = encode_structure(0, &vec![vec![0], vec![1]]);
println!("a: {:?}\nb: {:?}", from_der(&a).unwrap(), from_der(&b).unwrap());
}
fn encode_structure(type_id: u8, bufs: &[Vec<u8>]) -> Vec<u8> {
let mut body = Vec::new();
for (i, buf) in bufs.iter().enumerate() {
let mut der = to_der(&ASN1Block::Unknown(ASN1Class::ContextSpecific, false, 0, BigUint::from_usize(i).unwrap(), buf.to_vec())).unwrap();
body.append(&mut der);
}
to_der(&ASN1Block::Unknown(ASN1Class::ContextSpecific, true, 0, BigUint::from_u8(type_id).unwrap(), body)).unwrap()
}
In the below script, the function
test_encodeprints:This is unexpected as the structure is the same in both occasions, and it appears to relate to this. I would expect the output to be as it is in
bboth times. I'm not exactly sure if the encoding is being done in the best way, but it conforms to the ASN model I am working with so I can't change it. For reference, the Haskell libraryasn1-encodingproduces the following:Test script: