pub enum PublicKeyMaterial {
Secp256k1(VerifyingKey),
Secp256r1(VerifyingKey),
Ed25519(VerifyingKey),
X25519([u8; 32]),
}Variants§
Implementations§
Source§impl PublicKeyMaterial
impl PublicKeyMaterial
Sourcepub fn verify_message(
&self,
message: &[u8],
signature_bytes: &[u8],
) -> Result<(), KeyMaterialError>
pub fn verify_message( &self, message: &[u8], signature_bytes: &[u8], ) -> Result<(), KeyMaterialError>
Examples found in repository?
examples/interop_cli.rs (line 80)
45fn run_verify_key_fixture(args: &[String]) {
46 let fixture_path = read_option(args, "--fixture").expect("--fixture is required");
47 let content = std::fs::read_to_string(&fixture_path).expect("fixture should be readable");
48 let fixture: serde_json::Value =
49 serde_json::from_str(&content).expect("fixture should be valid JSON");
50 let keys = fixture["keys"]
51 .as_object()
52 .expect("keys should be an object");
53 for (fragment, key_pair) in keys {
54 let private_pem = key_pair["private_key_pem"]
55 .as_str()
56 .expect("private_key_pem should be a string");
57 let public_pem = key_pair["public_key_pem"]
58 .as_str()
59 .expect("public_key_pem should be a string");
60 assert!(
61 private_pem.starts_with("-----BEGIN PRIVATE KEY-----"),
62 "{fragment} private key must be PKCS#8 PEM"
63 );
64 assert!(
65 public_pem.starts_with("-----BEGIN PUBLIC KEY-----"),
66 "{fragment} public key must be SPKI PEM"
67 );
68 assert!(!private_pem.contains("ANP "));
69 assert!(!public_pem.contains("ANP "));
70
71 let private_key = PrivateKeyMaterial::from_pem(private_pem)
72 .expect("private key should parse as standard PEM");
73 let public_key =
74 PublicKeyMaterial::from_pem(public_pem).expect("public key should parse as SPKI PEM");
75 if !matches!(public_key, PublicKeyMaterial::X25519(_)) {
76 let signature = private_key
77 .sign_message(b"cross-language standard pem")
78 .expect("signature should be created");
79 public_key
80 .verify_message(b"cross-language standard pem", &signature)
81 .expect("signature should verify");
82 }
83 }
84 println!(
85 "{}",
86 serde_json::to_string(&json!({"verified": true, "key_count": keys.len()}))
87 .expect("result should serialize")
88 );
89}pub fn to_pem(&self) -> String
Sourcepub fn from_pem(input: &str) -> Result<Self, KeyMaterialError>
pub fn from_pem(input: &str) -> Result<Self, KeyMaterialError>
Examples found in repository?
examples/interop_cli.rs (line 74)
45fn run_verify_key_fixture(args: &[String]) {
46 let fixture_path = read_option(args, "--fixture").expect("--fixture is required");
47 let content = std::fs::read_to_string(&fixture_path).expect("fixture should be readable");
48 let fixture: serde_json::Value =
49 serde_json::from_str(&content).expect("fixture should be valid JSON");
50 let keys = fixture["keys"]
51 .as_object()
52 .expect("keys should be an object");
53 for (fragment, key_pair) in keys {
54 let private_pem = key_pair["private_key_pem"]
55 .as_str()
56 .expect("private_key_pem should be a string");
57 let public_pem = key_pair["public_key_pem"]
58 .as_str()
59 .expect("public_key_pem should be a string");
60 assert!(
61 private_pem.starts_with("-----BEGIN PRIVATE KEY-----"),
62 "{fragment} private key must be PKCS#8 PEM"
63 );
64 assert!(
65 public_pem.starts_with("-----BEGIN PUBLIC KEY-----"),
66 "{fragment} public key must be SPKI PEM"
67 );
68 assert!(!private_pem.contains("ANP "));
69 assert!(!public_pem.contains("ANP "));
70
71 let private_key = PrivateKeyMaterial::from_pem(private_pem)
72 .expect("private key should parse as standard PEM");
73 let public_key =
74 PublicKeyMaterial::from_pem(public_pem).expect("public key should parse as SPKI PEM");
75 if !matches!(public_key, PublicKeyMaterial::X25519(_)) {
76 let signature = private_key
77 .sign_message(b"cross-language standard pem")
78 .expect("signature should be created");
79 public_key
80 .verify_message(b"cross-language standard pem", &signature)
81 .expect("signature should verify");
82 }
83 }
84 println!(
85 "{}",
86 serde_json::to_string(&json!({"verified": true, "key_count": keys.len()}))
87 .expect("result should serialize")
88 );
89}Trait Implementations§
Source§impl Clone for PublicKeyMaterial
impl Clone for PublicKeyMaterial
Source§fn clone(&self) -> PublicKeyMaterial
fn clone(&self) -> PublicKeyMaterial
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for PublicKeyMaterial
impl Debug for PublicKeyMaterial
Auto Trait Implementations§
impl Freeze for PublicKeyMaterial
impl RefUnwindSafe for PublicKeyMaterial
impl Send for PublicKeyMaterial
impl Sync for PublicKeyMaterial
impl Unpin for PublicKeyMaterial
impl UnsafeUnpin for PublicKeyMaterial
impl UnwindSafe for PublicKeyMaterial
Blanket Implementations§
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Declassify for T
impl<T> Declassify for T
type Declassified = T
fn declassify(self) -> T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more