Skip to content

Commit efa24cd

Browse files
GetAssertion IDL implementation
1 parent be65793 commit efa24cd

File tree

14 files changed

+373
-131
lines changed

14 files changed

+373
-131
lines changed

libwebauthn/examples/prf_test.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use tracing_subscriber::{self, EnvFilter};
1313

1414
use libwebauthn::ops::webauthn::{
1515
Base64UrlString, GetAssertionHmacOrPrfInput, GetAssertionRequest,
16-
GetAssertionRequestExtensions, PRFValue, UserVerificationRequirement,
16+
GetAssertionRequestExtensions, PRFValue, PrfInput, UserVerificationRequirement,
1717
};
1818
use libwebauthn::pin::PinRequestReason;
1919
use libwebauthn::proto::ctap2::{Ctap2PublicKeyCredentialDescriptor, Ctap2PublicKeyCredentialType};
@@ -125,10 +125,11 @@ pub async fn main() -> Result<(), Box<dyn Error>> {
125125
});
126126

127127
let eval_by_credential = HashMap::new();
128-
let hmac_or_prf = GetAssertionHmacOrPrfInput::Prf {
128+
let hmac_or_prf: GetAssertionHmacOrPrfInput = GetAssertionHmacOrPrfInput::Prf(PrfInput {
129129
eval,
130130
eval_by_credential,
131-
};
131+
});
132+
132133
run_success_test(
133134
&mut channel,
134135
&credential,
@@ -153,10 +154,10 @@ async fn run_success_test(
153154
hash: Vec::from(challenge),
154155
allow: vec![credential.clone()],
155156
user_verification: UserVerificationRequirement::Preferred,
156-
extensions: Some(GetAssertionRequestExtensions {
157-
hmac_or_prf,
157+
extensions: GetAssertionRequestExtensions {
158+
hmac_or_prf: Some(hmac_or_prf),
158159
..Default::default()
159-
}),
160+
},
160161
timeout: TIMEOUT,
161162
};
162163

libwebauthn/examples/webauthn_cable.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ use tokio::time::sleep;
1919
use tracing_subscriber::{self, EnvFilter};
2020

2121
use libwebauthn::ops::webauthn::{
22-
GetAssertionRequest, MakeCredentialRequest, ResidentKeyRequirement, UserVerificationRequirement,
22+
GetAssertionRequest, GetAssertionRequestExtensions, MakeCredentialRequest,
23+
ResidentKeyRequirement, UserVerificationRequirement,
2324
};
2425
use libwebauthn::proto::ctap2::{
2526
Ctap2CredentialType, Ctap2PublicKeyCredentialDescriptor, Ctap2PublicKeyCredentialRpEntity,
@@ -161,7 +162,7 @@ pub async fn main() -> Result<(), Box<dyn Error>> {
161162
hash: Vec::from(challenge),
162163
allow: vec![credential],
163164
user_verification: UserVerificationRequirement::Discouraged,
164-
extensions: None,
165+
extensions: GetAssertionRequestExtensions::default(),
165166
timeout: TIMEOUT,
166167
};
167168

libwebauthn/examples/webauthn_extensions_hid.rs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -147,14 +147,16 @@ pub async fn main() -> Result<(), Box<dyn Error>> {
147147
hash: Vec::from(challenge),
148148
allow: vec![credential],
149149
user_verification: UserVerificationRequirement::Discouraged,
150-
extensions: Some(GetAssertionRequestExtensions {
151-
cred_blob: Some(true),
152-
hmac_or_prf: GetAssertionHmacOrPrfInput::HmacGetSecret(HMACGetSecretInput {
153-
salt1: [1; 32],
154-
salt2: None,
155-
}),
150+
extensions: GetAssertionRequestExtensions {
151+
cred_blob: true,
152+
hmac_or_prf: Some(GetAssertionHmacOrPrfInput::HmacGetSecret(
153+
HMACGetSecretInput {
154+
salt1: [1; 32],
155+
salt2: None,
156+
},
157+
)),
156158
..Default::default()
157-
}),
159+
},
158160
timeout: TIMEOUT,
159161
};
160162

libwebauthn/examples/webauthn_hid.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ use tokio::sync::broadcast::Receiver;
1010
use tracing_subscriber::{self, EnvFilter};
1111

1212
use libwebauthn::ops::webauthn::{
13-
GetAssertionRequest, MakeCredentialRequest, ResidentKeyRequirement, UserVerificationRequirement,
13+
GetAssertionRequest, GetAssertionRequestExtensions, MakeCredentialRequest,
14+
ResidentKeyRequirement, UserVerificationRequirement,
1415
};
1516
use libwebauthn::pin::PinRequestReason;
1617
use libwebauthn::proto::ctap2::{
@@ -128,7 +129,7 @@ pub async fn main() -> Result<(), Box<dyn Error>> {
128129
hash: Vec::from(challenge),
129130
allow: vec![credential],
130131
user_verification: UserVerificationRequirement::Discouraged,
131-
extensions: None,
132+
extensions: GetAssertionRequestExtensions::default(),
132133
timeout: TIMEOUT,
133134
};
134135

libwebauthn/examples/webauthn_json_hid.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ use tokio::sync::broadcast::Receiver;
1010
use tracing_subscriber::{self, EnvFilter};
1111

1212
use libwebauthn::ops::webauthn::{
13-
GetAssertionRequest, MakeCredentialRequest, RelyingPartyId, UserVerificationRequirement,
14-
WebAuthnIDL as _,
13+
GetAssertionRequest, GetAssertionRequestExtensions, MakeCredentialRequest, RelyingPartyId,
14+
UserVerificationRequirement, WebAuthnIDL as _,
1515
};
1616
use libwebauthn::pin::PinRequestReason;
1717
use libwebauthn::proto::ctap2::Ctap2PublicKeyCredentialDescriptor;
@@ -144,7 +144,7 @@ pub async fn main() -> Result<(), Box<dyn Error>> {
144144
hash: Vec::from(challenge),
145145
allow: vec![credential],
146146
user_verification: UserVerificationRequirement::Discouraged,
147-
extensions: None,
147+
extensions: GetAssertionRequestExtensions::default(),
148148
timeout: TIMEOUT,
149149
};
150150

libwebauthn/examples/webauthn_preflight_hid.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ use tokio::sync::broadcast::Receiver;
1111
use tracing_subscriber::{self, EnvFilter};
1212

1313
use libwebauthn::ops::webauthn::{
14-
Base64UrlString, GetAssertionRequest, GetAssertionResponse, MakeCredentialRequest,
15-
ResidentKeyRequirement, UserVerificationRequirement,
14+
Base64UrlString, GetAssertionRequest, GetAssertionRequestExtensions, GetAssertionResponse,
15+
MakeCredentialRequest, ResidentKeyRequirement, UserVerificationRequirement,
1616
};
1717
use libwebauthn::pin::PinRequestReason;
1818
use libwebauthn::proto::ctap2::{
@@ -202,7 +202,7 @@ async fn get_assertion_call(
202202
hash: Vec::from(challenge),
203203
allow: allow_list,
204204
user_verification: UserVerificationRequirement::Discouraged,
205-
extensions: None,
205+
extensions: GetAssertionRequestExtensions::default(),
206206
timeout: TIMEOUT,
207207
};
208208

libwebauthn/examples/webauthn_prf_hid.rs

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use tracing_subscriber::{self, EnvFilter};
1414
use libwebauthn::ops::webauthn::{
1515
GetAssertionHmacOrPrfInput, GetAssertionRequest, GetAssertionRequestExtensions,
1616
MakeCredentialPrfInput, MakeCredentialRequest, MakeCredentialsRequestExtensions, PRFValue,
17-
ResidentKeyRequirement, UserVerificationRequirement,
17+
PrfInput, ResidentKeyRequirement, UserVerificationRequirement,
1818
};
1919
use libwebauthn::pin::PinRequestReason;
2020
use libwebauthn::proto::ctap2::{
@@ -148,10 +148,10 @@ pub async fn main() -> Result<(), Box<dyn Error>> {
148148
second: None,
149149
},
150150
);
151-
let hmac_or_prf = GetAssertionHmacOrPrfInput::Prf {
151+
let hmac_or_prf: GetAssertionHmacOrPrfInput = GetAssertionHmacOrPrfInput::Prf(PrfInput {
152152
eval,
153153
eval_by_credential,
154-
};
154+
});
155155
run_success_test(
156156
&mut channel,
157157
&credential,
@@ -175,10 +175,10 @@ pub async fn main() -> Result<(), Box<dyn Error>> {
175175
second: None,
176176
},
177177
);
178-
let hmac_or_prf = GetAssertionHmacOrPrfInput::Prf {
178+
let hmac_or_prf: GetAssertionHmacOrPrfInput = GetAssertionHmacOrPrfInput::Prf(PrfInput {
179179
eval,
180180
eval_by_credential,
181-
};
181+
});
182182
run_success_test(
183183
&mut channel,
184184
&credential,
@@ -195,10 +195,10 @@ pub async fn main() -> Result<(), Box<dyn Error>> {
195195
});
196196

197197
let eval_by_credential = HashMap::new();
198-
let hmac_or_prf = GetAssertionHmacOrPrfInput::Prf {
198+
let hmac_or_prf: GetAssertionHmacOrPrfInput = GetAssertionHmacOrPrfInput::Prf(PrfInput {
199199
eval,
200200
eval_by_credential,
201-
};
201+
});
202202
run_success_test(
203203
&mut channel,
204204
&credential,
@@ -243,10 +243,10 @@ pub async fn main() -> Result<(), Box<dyn Error>> {
243243
second: None,
244244
},
245245
);
246-
let hmac_or_prf = GetAssertionHmacOrPrfInput::Prf {
246+
let hmac_or_prf: GetAssertionHmacOrPrfInput = GetAssertionHmacOrPrfInput::Prf(PrfInput {
247247
eval,
248248
eval_by_credential,
249-
};
249+
});
250250
run_success_test(
251251
&mut channel,
252252
&credential,
@@ -284,10 +284,10 @@ pub async fn main() -> Result<(), Box<dyn Error>> {
284284
second: Some([8; 32]),
285285
},
286286
);
287-
let hmac_or_prf = GetAssertionHmacOrPrfInput::Prf {
287+
let hmac_or_prf: GetAssertionHmacOrPrfInput = GetAssertionHmacOrPrfInput::Prf(PrfInput {
288288
eval,
289289
eval_by_credential,
290-
};
290+
});
291291
run_success_test(
292292
&mut channel,
293293
&credential,
@@ -322,10 +322,10 @@ pub async fn main() -> Result<(), Box<dyn Error>> {
322322
second: Some([8; 32]),
323323
},
324324
);
325-
let hmac_or_prf = GetAssertionHmacOrPrfInput::Prf {
325+
let hmac_or_prf: GetAssertionHmacOrPrfInput = GetAssertionHmacOrPrfInput::Prf(PrfInput {
326326
eval,
327327
eval_by_credential,
328-
};
328+
});
329329
run_success_test(
330330
&mut channel,
331331
&credential,
@@ -349,10 +349,10 @@ pub async fn main() -> Result<(), Box<dyn Error>> {
349349
second: None,
350350
},
351351
);
352-
let hmac_or_prf = GetAssertionHmacOrPrfInput::Prf {
352+
let hmac_or_prf: GetAssertionHmacOrPrfInput = GetAssertionHmacOrPrfInput::Prf(PrfInput {
353353
eval,
354354
eval_by_credential,
355-
};
355+
});
356356
run_failed_test(
357357
&mut channel,
358358
Some(&credential),
@@ -373,10 +373,10 @@ pub async fn main() -> Result<(), Box<dyn Error>> {
373373
second: None,
374374
},
375375
);
376-
let hmac_or_prf = GetAssertionHmacOrPrfInput::Prf {
376+
let hmac_or_prf: GetAssertionHmacOrPrfInput = GetAssertionHmacOrPrfInput::Prf(PrfInput {
377377
eval,
378378
eval_by_credential,
379-
};
379+
});
380380
run_failed_test(
381381
&mut channel,
382382
Some(&credential),
@@ -397,10 +397,10 @@ pub async fn main() -> Result<(), Box<dyn Error>> {
397397
second: None,
398398
},
399399
);
400-
let hmac_or_prf = GetAssertionHmacOrPrfInput::Prf {
400+
let hmac_or_prf = GetAssertionHmacOrPrfInput::Prf(PrfInput {
401401
eval,
402402
eval_by_credential,
403-
};
403+
});
404404
run_failed_test(
405405
&mut channel,
406406
None,
@@ -426,10 +426,10 @@ async fn run_success_test(
426426
hash: Vec::from(challenge),
427427
allow: vec![credential.clone()],
428428
user_verification: UserVerificationRequirement::Discouraged,
429-
extensions: Some(GetAssertionRequestExtensions {
430-
hmac_or_prf,
429+
extensions: GetAssertionRequestExtensions {
430+
hmac_or_prf: Some(hmac_or_prf),
431431
..Default::default()
432-
}),
432+
},
433433
timeout: TIMEOUT,
434434
};
435435

@@ -468,10 +468,10 @@ async fn run_failed_test(
468468
hash: Vec::from(challenge),
469469
allow: credential.map(|x| vec![x.clone()]).unwrap_or_default(),
470470
user_verification: UserVerificationRequirement::Discouraged,
471-
extensions: Some(GetAssertionRequestExtensions {
472-
hmac_or_prf,
471+
extensions: GetAssertionRequestExtensions {
472+
hmac_or_prf: Some(hmac_or_prf),
473473
..Default::default()
474-
}),
474+
},
475475
timeout: TIMEOUT,
476476
};
477477

libwebauthn/src/ops/u2f.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ use super::webauthn::MakeCredentialRequest;
1010
use crate::fido::{AttestedCredentialData, AuthenticatorData, AuthenticatorDataFlags};
1111
use crate::ops::webauthn::idl::Base64UrlString;
1212
use crate::ops::webauthn::{
13-
GetAssertionRequest, GetAssertionResponse, MakeCredentialResponse, UserVerificationRequirement,
13+
GetAssertionRequest, GetAssertionRequestExtensions, GetAssertionResponse,
14+
MakeCredentialResponse, UserVerificationRequirement,
1415
};
1516
use crate::proto::ctap1::{Ctap1RegisterRequest, Ctap1SignRequest};
1617
use crate::proto::ctap1::{Ctap1RegisterResponse, Ctap1SignResponse};
@@ -207,7 +208,7 @@ impl UpgradableResponse<GetAssertionResponse, SignRequest> for SignResponse {
207208
id: request.key_handle.clone().into(),
208209
transports: None,
209210
}],
210-
extensions: None,
211+
extensions: GetAssertionRequestExtensions::default(),
211212
user_verification: if request.require_user_presence {
212213
UserVerificationRequirement::Required
213214
} else {

libwebauthn/src/ops/webauthn/create.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ pub struct PublicKeyCredentialCreationOptionsJSON {
4040
pub challenge: Base64UrlString,
4141
#[serde(rename = "pubKeyCredParams")]
4242
pub params: Vec<Ctap2CredentialType>,
43-
pub timeout: u32,
43+
pub timeout: Option<u32>,
4444
#[serde(rename = "excludeCredentials")]
4545
pub exclude_credentials: Vec<Ctap2PublicKeyCredentialDescriptor>,
4646
#[serde(rename = "authenticatorSelection")]

0 commit comments

Comments
 (0)