9 releases
new 0.1.20 | Feb 8, 2025 |
---|---|
0.1.16 | Jan 23, 2025 |
0.1.6 | Sep 28, 2023 |
0.1.0 | May 22, 2023 |
#1632 in Encoding
527 downloads per month
Used in ecsimple
275KB
7K
SLoC
asn1obj
rust parse ASN.1 format code
Release History
- Feb 8th 2025 to release 0.1.20 version as the Asn1Set Asn1ImpSet Asn1Seq with 1 element object json encode and decode
- Feb 6th 2025 to check every totallen in complex and base object for 0.1.18 version
- Jan 21th 2025 to make Asn1ImpA0 to Asn1Exp
- Jan 20th 2025 to make Asn1BMPString set for 0.1.16 version
- Jan 17th 2025 to make Asn1ImpA0 with 0xa0 mask set for 0.1.14 version
- Jan 14th 2025 to make Asn1Time with set_value_time_local and set_value_time for 0.1.12 version
- Jan 14th 2025 to make Asn1Time to ASN1_UTCTIME_FLAG for 0.1.10 version
- Jan 8th 2025 to add equal_asn1 for functions and make 0.1.8 version
- Sep 28th 2023 to add error check for Asn1BitData and Asn1BitString in 0.1.6
- Sep 27th 2023 to add Asn1BitDataFlag in 0.1.4
lib.rs
:
package to use for ASN.1 pack and unpack rust library we define basic struct Asn1Any Asn1Integer Asn1Boolean Asn1BitString Asn1BitData Asn1OctString Asn1OctData Asn1Null Asn1Object Asn1Enumerated Asn1String Asn1PrintableString Asn1IA5String Asn1Time Asn1BigNum and complex struct Asn1Opt Asn1ImpSet Asn1Seq Asn1Set Asn1Imp Asn1Ndef Asn1SeqSelector Asn1BitSeq and in every valid struct except for asn1_int_choice macro defined, all are encoded and decoded in sequence give examples
use asn1obj_codegen::{asn1_sequence};
use asn1obj::{asn1obj_error_class,asn1obj_new_error};
use asn1obj::base::*;
use asn1obj::complex::*;
use asn1obj::asn1impl::Asn1Op;
use asn1obj::strop::asn1_format_line;
use num_bigint::{BigUint};
use hex::FromHex;
use std::error::Error;
use std::io::Write;
use serde_json;
#[asn1_sequence()]
#[derive(Clone)]
pub struct Asn1RsaPubkeyElem {
pub n :Asn1BigNum,
pub e :Asn1BigNum,
}
#[asn1_sequence()]
#[derive(Clone)]
pub struct Asn1RsaPubkey {
pub elem :Asn1Seq<Asn1RsaPubkeyElem>,
}
fn format_vecs(buf :&[u8], tab :i32) -> String {
let mut outs :String = "".to_string();
let mut lasti : usize = 0;
let mut ki :usize;
for i in 0..buf.len() {
if (i%16) == 0 {
if i > 0 {
outs.push_str(" ");
while lasti != i {
if buf[lasti] >= 0x20 && buf[lasti] <= 0x7e {
outs.push(buf[lasti] as char);
} else {
outs.push_str(".");
}
lasti += 1;
}
outs.push_str("\n");
}
for _j in 0..tab {
outs.push_str(" ");
}
}
if (i % 16) == 0 {
outs.push_str(&format!("{:02x}", buf[i]));
} else {
outs.push_str(&format!(":{:02x}", buf[i]));
}
}
if lasti != buf.len() {
ki = buf.len();
while (ki % 16) != 0 {
outs.push_str(" ");
ki += 1;
}
outs.push_str(" ");
while lasti != buf.len() {
if buf[lasti] >= 0x20 && buf[lasti] <= 0x7e {
outs.push(buf[lasti] as char);
} else {
outs.push_str(".");
}
lasti += 1;
}
}
outs.push_str("\n");
return outs;
}
fn main() -> Result<(),Box<dyn Error>> {
let mut pubkey :Asn1RsaPubkey = Asn1RsaPubkey::init_asn1();
let mut pubkeyelem :Asn1RsaPubkeyElem = Asn1RsaPubkeyElem::init_asn1();
let nv :Vec<u8> = Vec::from_hex("df45f6d9925fe470dcb55c26afe0dfd6a0307cf9287342749b7341b342f87fa2b5238245ac73788b0016015834c59fd0481cb9cb97f575f13abd600799b3a2113ec2e4c22385fd45674326ffc55fa84ab2088063f48e8efeb7dd473194a079fabd96d4f59f70ccc0bb78628bc89725519cd57a180e54fd6608ef2d401124ed5e23598329eb13e2dd0ebdd7692bff9a07ce57ec50b1b3bc6d585d2585f96fc9276ed2d36b834420bd1b96f7a4e2b913795fe8744a2046ba537b18104ee98a8b7b959e009742091814211b15c6a5992f46c5a74b9398a47b01d20fc35228f174c617ca3ab2e89944147150c24c7619db1666bf0d447630683dea078274d8d3069d")?;
let ne :Vec<u8> = Vec::from_hex("010001")?;
pubkeyelem.n.val = BigUint::from_bytes_be(&nv);
pubkeyelem.e.val = BigUint::from_bytes_be(&ne);
pubkey.elem.val.push(pubkeyelem);
let outd = pubkey.encode_asn1()?;
let s = format_vecs(&outd,1);
let mut outs :String = "".to_string();
let mut outf = std::io::stdout();
outs.push_str("outs\n");
outs.push_str(&s);
std::io::stdout().write(outs.as_bytes())?;
pubkey.print_asn1("Rsa Public Key",0,&mut outf)?;
Ok(())
}
/*
output:
outs
30:82:01:0a:02:82:01:01:00:df:45:f6:d9:92:5f:e4 0.........E..._.
70:dc:b5:5c:26:af:e0:df:d6:a0:30:7c:f9:28:73:42 p..\&.....0|.(sB
74:9b:73:41:b3:42:f8:7f:a2:b5:23:82:45:ac:73:78 t.sA.B....#.E.sx
8b:00:16:01:58:34:c5:9f:d0:48:1c:b9:cb:97:f5:75 ....X4...H.....u
f1:3a:bd:60:07:99:b3:a2:11:3e:c2:e4:c2:23:85:fd .:.`.....>...#..
45:67:43:26:ff:c5:5f:a8:4a:b2:08:80:63:f4:8e:8e EgC&.._.J...c...
fe:b7:dd:47:31:94:a0:79:fa:bd:96:d4:f5:9f:70:cc ...G1..y......p.
c0:bb:78:62:8b:c8:97:25:51:9c:d5:7a:18:0e:54:fd ..xb...%Q..z..T.
66:08:ef:2d:40:11:24:ed:5e:23:59:83:29:eb:13:e2 f..-@.$.^#Y.)...
dd:0e:bd:d7:69:2b:ff:9a:07:ce:57:ec:50:b1:b3:bc ....i+....W.P...
6d:58:5d:25:85:f9:6f:c9:27:6e:d2:d3:6b:83:44:20 mX]%..o.'n..k.D
bd:1b:96:f7:a4:e2:b9:13:79:5f:e8:74:4a:20:46:ba ........y_.tJ F.
53:7b:18:10:4e:e9:8a:8b:7b:95:9e:00:97:42:09:18 S{..N...{....B..
14:21:1b:15:c6:a5:99:2f:46:c5:a7:4b:93:98:a4:7b .!...../F..K...{
01:d2:0f:c3:52:28:f1:74:c6:17:ca:3a:b2:e8:99:44 ....R(.t...:...D
14:71:50:c2:4c:76:19:db:16:66:bf:0d:44:76:30:68 .qP.Lv...f..Dv0h
3d:ea:07:82:74:d8:d3:06:9d:02:03:01:00:01 =...t.........
Rsa Public Key[0] Asn1RsaPubkeyElem
n: ASN1_BIGNUM
df:45:f6:d9:92:5f:e4:70:dc:b5:5c:26:af:e0:df:d6 .E..._.p..\&....
a0:30:7c:f9:28:73:42:74:9b:73:41:b3:42:f8:7f:a2 .0|.(sBt.sA.B...
b5:23:82:45:ac:73:78:8b:00:16:01:58:34:c5:9f:d0 .#.E.sx....X4...
48:1c:b9:cb:97:f5:75:f1:3a:bd:60:07:99:b3:a2:11 H.....u.:.`.....
3e:c2:e4:c2:23:85:fd:45:67:43:26:ff:c5:5f:a8:4a >...#..EgC&.._.J
b2:08:80:63:f4:8e:8e:fe:b7:dd:47:31:94:a0:79:fa ...c......G1..y.
bd:96:d4:f5:9f:70:cc:c0:bb:78:62:8b:c8:97:25:51 .....p...xb...%Q
9c:d5:7a:18:0e:54:fd:66:08:ef:2d:40:11:24:ed:5e ..z..T.f..-@.$.^
23:59:83:29:eb:13:e2:dd:0e:bd:d7:69:2b:ff:9a:07 #Y.).......i+...
ce:57:ec:50:b1:b3:bc:6d:58:5d:25:85:f9:6f:c9:27 .W.P...mX]%..o.'
6e:d2:d3:6b:83:44:20:bd:1b:96:f7:a4:e2:b9:13:79 n..k.D ........y
5f:e8:74:4a:20:46:ba:53:7b:18:10:4e:e9:8a:8b:7b _.tJ F.S{..N...{
95:9e:00:97:42:09:18:14:21:1b:15:c6:a5:99:2f:46 ....B...!...../F
c5:a7:4b:93:98:a4:7b:01:d2:0f:c3:52:28:f1:74:c6 ..K...{....R(.t.
17:ca:3a:b2:e8:99:44:14:71:50:c2:4c:76:19:db:16 ..:...D.qP.Lv...
66:bf:0d:44:76:30:68:3d:ea:07:82:74:d8:d3:06:9d f..Dv0h=...t....
e: ASN1_BIGNUM 0x00010001
*/
Dependencies
~5.5–7.5MB
~144K SLoC