pub struct ChallengeResponse { /* private fields */ }Expand description
A signed response to an authentication challenge.
Contains a COSE_Sign1 structure with the signature over the challenge bytes, proving possession of the private key corresponding to the claimed identity.
§Examples
Create and verify a challenge response:
use ap_proxy_protocol::{Challenge, IdentityKeyPair};
// Client signs challenge
let keypair = IdentityKeyPair::generate();
let challenge = Challenge::new();
let response = challenge.sign(&keypair);
// Server verifies response
let identity = keypair.identity();
assert!(response.verify(&challenge, &identity));Implementations§
Source§impl ChallengeResponse
impl ChallengeResponse
Sourcepub fn verify(&self, challenge: &Challenge, identity: &Identity) -> bool
pub fn verify(&self, challenge: &Challenge, identity: &Identity) -> bool
Verify this response against the original challenge and claimed identity.
Returns true if the signature is valid and was created by the private key
corresponding to the provided identity. Returns false if:
- The signature is malformed
- The signature verification fails
- The identity public key is invalid
- The algorithm in the signature doesn’t match the identity
§Authentication Process
The server uses this method to authenticate clients:
- Receive
IdentityandChallengeResponsefrom client - Call
response.verify(&original_challenge, &claimed_identity) - If
true, the client possesses the private key (authenticated) - If
false, reject the authentication attempt
§Examples
use ap_proxy_protocol::{Challenge, IdentityKeyPair};
let keypair = IdentityKeyPair::generate();
let challenge = Challenge::new();
let response = challenge.sign(&keypair);
// Valid signature
assert!(response.verify(&challenge, &keypair.identity()));
// Invalid signature (different challenge)
let other_challenge = Challenge::new();
assert!(!response.verify(&other_challenge, &keypair.identity()));
// Invalid signature (different identity)
let other_keypair = IdentityKeyPair::generate();
assert!(!response.verify(&challenge, &other_keypair.identity()));Trait Implementations§
Source§impl Clone for ChallengeResponse
impl Clone for ChallengeResponse
Source§fn clone(&self) -> ChallengeResponse
fn clone(&self) -> ChallengeResponse
Returns a duplicate of the value. Read more
1.0.0 · 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 ChallengeResponse
impl Debug for ChallengeResponse
Source§impl<'de> Deserialize<'de> for ChallengeResponse
impl<'de> Deserialize<'de> for ChallengeResponse
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<ChallengeResponse, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<ChallengeResponse, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl Serialize for ChallengeResponse
impl Serialize for ChallengeResponse
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
Serialize this value into the given Serde serializer. Read more
Auto Trait Implementations§
impl Freeze for ChallengeResponse
impl RefUnwindSafe for ChallengeResponse
impl Send for ChallengeResponse
impl Sync for ChallengeResponse
impl Unpin for ChallengeResponse
impl UnsafeUnpin for ChallengeResponse
impl UnwindSafe for ChallengeResponse
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