decode_integer/
decode_integer.rs1use synta::{FromDer, Integer, ToDer};
8
9fn main() {
10 println!("=== ASN.1 Integer Decoding Example ===\n");
11
12 let data1 = vec![0x02, 0x01, 0x2A]; decode_and_display("Small positive (42)", &data1);
15
16 let data2 = vec![0x02, 0x02, 0x03, 0xE8]; decode_and_display("Larger positive (1000)", &data2);
19
20 let data3 = vec![0x02, 0x01, 0xFF]; decode_and_display("Negative (-1)", &data3);
23
24 let data4 = vec![0x02, 0x08, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF];
26 decode_and_display("Large (i64::MAX)", &data4);
27
28 let data5 = vec![0x02, 0x01, 0x00]; decode_and_display("Zero", &data5);
31
32 println!("\n=== Encoding Example ===\n");
33
34 let value = 12345;
36 println!("Encoding integer: {}", value);
37
38 let integer = Integer::from(value);
39 let encoded = integer.to_der().unwrap();
40
41 println!("Encoded bytes: {:02X?}", encoded);
42 println!("Length: {} bytes", encoded.len());
43
44 let decoded = Integer::from_der(&encoded).unwrap();
46 println!("Decoded back: {}", decoded.as_i64().unwrap());
47}
48
49fn decode_and_display(label: &str, data: &[u8]) {
50 println!("{}:", label);
51 println!(" Raw bytes: {:02X?}", data);
52
53 match Integer::from_der(data) {
54 Ok(integer) => {
55 match integer.as_i64() {
56 Ok(value) => println!(" Decoded value: {}", value),
57 Err(_) => println!(" Value too large for i64"),
58 }
59 println!(" Raw bytes: {:02X?}", integer.as_bytes());
60 }
61 Err(e) => println!(" Error: {:?}", e),
62 }
63 println!();
64}