use std::str::FromStr;
use synta::{FromDer, ObjectIdentifier, ToDer};
fn main() {
println!("=== ASN.1 Object Identifier (OID) Example ===\n");
common_oids();
encode_decode_example();
oid_components();
}
fn common_oids() {
println!("Common OIDs in Cryptography:");
println!("-----------------------------");
let oids = vec![
("RSA Encryption", vec![1, 2, 840, 113549, 1, 1, 1]),
("SHA-256", vec![2, 16, 840, 1, 101, 3, 4, 2, 1]),
("ECDSA with SHA-256", vec![1, 2, 840, 10045, 4, 3, 2]),
("Common Name (CN)", vec![2, 5, 4, 3]),
("Country (C)", vec![2, 5, 4, 6]),
("Organization (O)", vec![2, 5, 4, 10]),
];
for (name, components) in oids {
let oid = ObjectIdentifier::new(&components).unwrap();
println!(" {}: {}", name, oid);
}
println!();
}
fn encode_decode_example() {
println!("Encoding and Decoding Example:");
println!("------------------------------");
let components = vec![1, 2, 840, 113549, 1, 1, 1];
let oid = ObjectIdentifier::new(&components).unwrap();
println!("Created OID: {}", oid);
let encoded = oid.to_der().unwrap();
println!("Encoded: {} bytes", encoded.len());
println!("Bytes: {:02X?}", encoded);
let decoded = ObjectIdentifier::from_der(&encoded).unwrap();
println!("Decoded: {}", decoded);
println!("Match: {}", oid == decoded);
println!();
}
fn oid_components() {
println!("Working with OID Components:");
println!("----------------------------");
let oid_str = "2.5.29.19"; let oid = ObjectIdentifier::from_str(oid_str).unwrap();
println!("OID: {}", oid);
println!("Components: {:?}", oid.components());
println!("Number of components: {}", oid.components().len());
let components = oid.components();
for (i, component) in components.iter().enumerate() {
println!(" Component {}: {}", i, component);
}
println!();
println!("Common X.509 Extension OIDs:");
let extensions = vec![
("Subject Alternative Name", "2.5.29.17"),
("Basic Constraints", "2.5.29.19"),
("Key Usage", "2.5.29.15"),
("Extended Key Usage", "2.5.29.37"),
("CRL Distribution Points", "2.5.29.31"),
("Authority Key Identifier", "2.5.29.35"),
];
for (name, oid_str) in extensions {
let oid = ObjectIdentifier::from_str(oid_str).unwrap();
println!(" {}: {}", name, oid);
}
}