From e5a56888addfae1347a833d9c53efbe6188f0ede Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Sat, 30 Mar 2024 21:42:04 +0800 Subject: [PATCH] feat: add asn1-der-test --- __crypto/asn1-der-test/src/bin/test1.rs | 67 +++++++++++++------------ 1 file changed, 36 insertions(+), 31 deletions(-) diff --git a/__crypto/asn1-der-test/src/bin/test1.rs b/__crypto/asn1-der-test/src/bin/test1.rs index f9673e4..8988798 100644 --- a/__crypto/asn1-der-test/src/bin/test1.rs +++ b/__crypto/asn1-der-test/src/bin/test1.rs @@ -40,47 +40,52 @@ const BASE64: GeneralPurpose = base64::engine::general_purpose::STANDARD; // : } // : } // : } + +const PRIVATE_KEY: &str = "749F869FDE0DF3681EBB583FBF5DEF8534E930BEEA0377F6143E1D32E597E806592A1B558636464DDBF778118AAB36B6"; +const PUBLIC_KEY: &str = "0476BE028B8E201D23A978100CB118AC06049EA901D619BCD9418BC5FD90A9428FA6988B99122AA51F00C690017F7ED16\ +3E843A0B2FE0CE26CF3E694F44C6B849D4CA819BEFC399EEC8D5D9414FF037AF4EA73FE10AAC591CA631E734B39E3E3F8"; + fn main() { let ec_public_key = Oid::from_str("1.2.840.10045.2.1").unwrap(); let secp_384_r1 = Oid::from_str("1.3.132.0.34").unwrap(); - let mut v = Vec::new(); - ec_public_key.write_der(&mut v).unwrap(); - secp_384_r1.write_der(&mut v).unwrap(); - let seq = Sequence::new(v.into()); - let hex1 = hex::decode("749F869FDE0DF3681EBB583FBF5DEF8534E930BEEA0377F6143E1D32E597E806592A1B558636464DDBF778118AAB36B6").unwrap(); - let hex2 = hex::decode("0476BE028B8E201D23A978100CB118AC06049EA901D619BCD9418BC5FD90A9428FA6988B99122AA51F00C690017F7ED163E843A0B2FE0CE26CF3E694F44C6B849D4CA819BEFC399EEC8D5D9414FF037AF4EA73FE10AAC591CA631E734B39E3E3F8").unwrap(); - let seq3 = { - let i1 = Integer::from_i8(1); - let oct = OctetString::new(&hex1); + let private_key_oid_seq = { + let mut private_key_oid = Vec::new(); + ec_public_key.write_der(&mut private_key_oid).unwrap(); + secp_384_r1.write_der(&mut private_key_oid).unwrap(); + Sequence::new(private_key_oid.into()) + }; - let bit = BitString::new(0, &hex2); - // let mut vb = Vec::new(); - // bit.write_der(&mut vb).unwrap(); - // let set = Set::new(vb.into()); + let private_body_seq = { + let private_key = hex::decode(PRIVATE_KEY).unwrap(); + let public_key = hex::decode(PUBLIC_KEY).unwrap(); - let mut vv = Vec::new(); - i1.write_der(&mut vv).unwrap(); - oct.write_der(&mut vv).unwrap(); + let integer_1 = Integer::from_i8(1); + let private_key_oct = OctetString::new(&private_key); + + let mut private_body = Vec::new(); + integer_1.write_der(&mut private_body).unwrap(); + private_key_oct.write_der(&mut private_body).unwrap(); type TaggedValueContextSpecific<'a> = TaggedValue, Error, Explicit, { Class::CONTEXT_SPECIFIC }, 1>; - let tag = TaggedValueContextSpecific::explicit(bit); - tag.write_der(&mut vv).unwrap(); + let public_key_bit = BitString::new(0, &public_key); + let public_key_tag = TaggedValueContextSpecific::explicit(public_key_bit); + public_key_tag.write_der(&mut private_body).unwrap(); - Sequence::new(vv.into()) + Sequence::new(private_body.into()) }; - let btss = seq3.to_der_vec().unwrap(); - let bts = OctetString::new(&btss); + let private_body = private_body_seq.to_der_vec().unwrap(); + let private_body_oct = OctetString::new(&private_body); - let mut vp = Vec::new(); - let i0 = Integer::from_i8(0); - i0.write_der(&mut vp).unwrap(); - seq.write_der(&mut vp).unwrap(); - bts.write_der(&mut vp).unwrap(); + let private_key_info_seq = { + let mut private_key_info = Vec::new(); + let integer_0 = Integer::from_i8(0); + integer_0.write_der(&mut private_key_info).unwrap(); + private_key_oid_seq.write_der(&mut private_key_info).unwrap(); + private_body_oct.write_der(&mut private_key_info).unwrap(); + Sequence::new(private_key_info.into()) + }; - let seqlast = Sequence::new(vp.into()); - - - println!("BASED64:\n{}", BASE64.encode(seqlast.to_der_vec().unwrap())); - println!("HEX:\n{}", hex::encode(seqlast.to_der_vec().unwrap())); + println!("BASED64:\n{}", BASE64.encode(private_key_info_seq.to_der_vec().unwrap())); + println!("HEX:\n{}", hex::encode(private_key_info_seq.to_der_vec().unwrap())); }