Struct x509_parser::public_key::ECPoint
source · pub struct ECPoint<'a> { /* private fields */ }
Expand description
Elliptic Curve point, as defined in RFC5480
Implementations§
source§impl<'a> ECPoint<'a>
impl<'a> ECPoint<'a>
sourcepub fn data(&'a self) -> &'a [u8] ⓘ
pub fn data(&'a self) -> &'a [u8] ⓘ
EC Point content (See Standards for Efficient Cryptography Group (SECG), “SEC1: Elliptic Curve Cryptography”)
Examples found in repository?
examples/print-cert.rs (line 311)
292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362
fn print_x509_ski(public_key: &SubjectPublicKeyInfo) {
println!(" Public Key Algorithm:");
print_x509_digest_algorithm(&public_key.algorithm, 6);
match public_key.parsed() {
Ok(PublicKey::RSA(rsa)) => {
println!(" RSA Public Key: ({} bit)", rsa.key_size());
// print_hex_dump(rsa.modulus, 1024);
for l in format_number_to_hex_with_colon(rsa.modulus, 16) {
println!(" {}", l);
}
if let Ok(e) = rsa.try_exponent() {
println!(" exponent: 0x{:x} ({})", e, e);
} else {
println!(" exponent: <INVALID>:");
print_hex_dump(rsa.exponent, 32);
}
}
Ok(PublicKey::EC(ec)) => {
println!(" EC Public Key: ({} bit)", ec.key_size());
for l in format_number_to_hex_with_colon(ec.data(), 16) {
println!(" {}", l);
}
// // identify curve
// if let Some(params) = &public_key.algorithm.parameters {
// let curve_oid = params.as_oid();
// let curve = curve_oid
// .map(|oid| {
// oid_registry()
// .get(oid)
// .map(|entry| entry.sn())
// .unwrap_or("<UNKNOWN>")
// })
// .unwrap_or("<ERROR: NOT AN OID>");
// println!(" Curve: {}", curve);
// }
}
Ok(PublicKey::DSA(y)) => {
println!(" DSA Public Key: ({} bit)", 8 * y.len());
for l in format_number_to_hex_with_colon(y, 16) {
println!(" {}", l);
}
}
Ok(PublicKey::GostR3410(y)) => {
println!(" GOST R 34.10-94 Public Key: ({} bit)", 8 * y.len());
for l in format_number_to_hex_with_colon(y, 16) {
println!(" {}", l);
}
}
Ok(PublicKey::GostR3410_2012(y)) => {
println!(" GOST R 34.10-2012 Public Key: ({} bit)", 8 * y.len());
for l in format_number_to_hex_with_colon(y, 16) {
println!(" {}", l);
}
}
Ok(PublicKey::Unknown(b)) => {
println!(" Unknown key type");
print_hex_dump(b, 256);
if let Ok((rem, res)) = der_parser::parse_der(b) {
eprintln!("rem: {} bytes", rem.len());
eprintln!("{:?}", res);
} else {
eprintln!(" <Could not parse key as DER>");
}
}
Err(_) => {
println!(" INVALID PUBLIC KEY");
}
}
// dbg!(&public_key);
// todo!();
}
sourcepub fn key_size(&self) -> usize
pub fn key_size(&self) -> usize
Return the key size (in bits) or 0
Examples found in repository?
examples/print-cert.rs (line 310)
292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362
fn print_x509_ski(public_key: &SubjectPublicKeyInfo) {
println!(" Public Key Algorithm:");
print_x509_digest_algorithm(&public_key.algorithm, 6);
match public_key.parsed() {
Ok(PublicKey::RSA(rsa)) => {
println!(" RSA Public Key: ({} bit)", rsa.key_size());
// print_hex_dump(rsa.modulus, 1024);
for l in format_number_to_hex_with_colon(rsa.modulus, 16) {
println!(" {}", l);
}
if let Ok(e) = rsa.try_exponent() {
println!(" exponent: 0x{:x} ({})", e, e);
} else {
println!(" exponent: <INVALID>:");
print_hex_dump(rsa.exponent, 32);
}
}
Ok(PublicKey::EC(ec)) => {
println!(" EC Public Key: ({} bit)", ec.key_size());
for l in format_number_to_hex_with_colon(ec.data(), 16) {
println!(" {}", l);
}
// // identify curve
// if let Some(params) = &public_key.algorithm.parameters {
// let curve_oid = params.as_oid();
// let curve = curve_oid
// .map(|oid| {
// oid_registry()
// .get(oid)
// .map(|entry| entry.sn())
// .unwrap_or("<UNKNOWN>")
// })
// .unwrap_or("<ERROR: NOT AN OID>");
// println!(" Curve: {}", curve);
// }
}
Ok(PublicKey::DSA(y)) => {
println!(" DSA Public Key: ({} bit)", 8 * y.len());
for l in format_number_to_hex_with_colon(y, 16) {
println!(" {}", l);
}
}
Ok(PublicKey::GostR3410(y)) => {
println!(" GOST R 34.10-94 Public Key: ({} bit)", 8 * y.len());
for l in format_number_to_hex_with_colon(y, 16) {
println!(" {}", l);
}
}
Ok(PublicKey::GostR3410_2012(y)) => {
println!(" GOST R 34.10-2012 Public Key: ({} bit)", 8 * y.len());
for l in format_number_to_hex_with_colon(y, 16) {
println!(" {}", l);
}
}
Ok(PublicKey::Unknown(b)) => {
println!(" Unknown key type");
print_hex_dump(b, 256);
if let Ok((rem, res)) = der_parser::parse_der(b) {
eprintln!("rem: {} bytes", rem.len());
eprintln!("{:?}", res);
} else {
eprintln!(" <Could not parse key as DER>");
}
}
Err(_) => {
println!(" INVALID PUBLIC KEY");
}
}
// dbg!(&public_key);
// todo!();
}
Trait Implementations§
source§impl<'a> PartialEq for ECPoint<'a>
impl<'a> PartialEq for ECPoint<'a>
impl<'a> Eq for ECPoint<'a>
impl<'a> StructuralPartialEq for ECPoint<'a>
Auto Trait Implementations§
impl<'a> RefUnwindSafe for ECPoint<'a>
impl<'a> Send for ECPoint<'a>
impl<'a> Sync for ECPoint<'a>
impl<'a> Unpin for ECPoint<'a>
impl<'a> UnwindSafe for ECPoint<'a>
Blanket Implementations§
source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more