Skip to content

Commit 2f537cb

Browse files
committed
Add SPC tests
1 parent f4d1ec9 commit 2f537cb

File tree

3 files changed

+90
-0
lines changed

3 files changed

+90
-0
lines changed

webauthn-server-core/src/test/scala/com/yubico/webauthn/RelyingPartyAssertionSpec.scala

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,10 @@ import com.yubico.webauthn.data.CollectedClientData
4242
import com.yubico.webauthn.data.Extensions.LargeBlob.LargeBlobAuthenticationInput
4343
import com.yubico.webauthn.data.Extensions.LargeBlob.LargeBlobAuthenticationOutput
4444
import com.yubico.webauthn.data.Extensions.Prf.PrfAuthenticationOutput
45+
import com.yubico.webauthn.data.Extensions.Spc.SpcAuthenticationOutput
4546
import com.yubico.webauthn.data.Extensions.Uvm.UvmEntry
4647
import com.yubico.webauthn.data.Generators.Extensions.Prf.arbitraryPrfAuthenticationOutput
48+
import com.yubico.webauthn.data.Generators.Extensions.Spc.arbitrarySpcAuthenticationOutput
4749
import com.yubico.webauthn.data.Generators._
4850
import com.yubico.webauthn.data.PublicKeyCredential
4951
import com.yubico.webauthn.data.PublicKeyCredentialCreationOptions
@@ -2608,6 +2610,33 @@ class RelyingPartyAssertionSpec
26082610
}
26092611
}
26102612

2613+
it("pass through spc extension outputs when present.") {
2614+
forAll(minSuccessful(3)) { spcOutput: SpcAuthenticationOutput =>
2615+
val result = rp.finishAssertion(
2616+
FinishAssertionOptions
2617+
.builder()
2618+
.request(
2619+
testDataBase.assertion.get.request
2620+
)
2621+
.response(
2622+
testDataBase.assertion.get.response.toBuilder
2623+
.clientExtensionResults(
2624+
ClientAssertionExtensionOutputs
2625+
.builder()
2626+
.spc(spcOutput)
2627+
.build()
2628+
)
2629+
.build()
2630+
)
2631+
.build()
2632+
)
2633+
2634+
result.getClientExtensionOutputs.get().getSpc.toScala should equal(
2635+
Some(spcOutput)
2636+
)
2637+
}
2638+
}
2639+
26112640
describe("support the uvm extension") {
26122641
it("at authentication time.") {
26132642

webauthn-server-core/src/test/scala/com/yubico/webauthn/RelyingPartyRegistrationSpec.scala

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,10 @@ import com.yubico.webauthn.data.Extensions.CredentialProtection.CredentialProtec
5858
import com.yubico.webauthn.data.Extensions.LargeBlob.LargeBlobRegistrationInput.LargeBlobSupport
5959
import com.yubico.webauthn.data.Extensions.LargeBlob.LargeBlobRegistrationOutput
6060
import com.yubico.webauthn.data.Extensions.Prf.PrfRegistrationOutput
61+
import com.yubico.webauthn.data.Extensions.Spc.SpcRegistrationOutput
6162
import com.yubico.webauthn.data.Extensions.Uvm.UvmEntry
6263
import com.yubico.webauthn.data.Generators.Extensions.Prf.arbitraryPrfRegistrationOutput
64+
import com.yubico.webauthn.data.Generators.Extensions.Spc.arbitrarySpcRegistrationOutput
6365
import com.yubico.webauthn.data.Generators._
6466
import com.yubico.webauthn.data.PublicKeyCredential
6567
import com.yubico.webauthn.data.PublicKeyCredentialCreationOptions
@@ -4625,6 +4627,31 @@ class RelyingPartyRegistrationSpec
46254627
}
46264628
}
46274629

4630+
it("pass through spc extension outputs when present.") {
4631+
forAll(minSuccessful(3)) { spcOutput: SpcRegistrationOutput =>
4632+
val testData = RegistrationTestData.Packed.BasicAttestation
4633+
val result = rp.finishRegistration(
4634+
FinishRegistrationOptions
4635+
.builder()
4636+
.request(testData.request)
4637+
.response(
4638+
testData.response.toBuilder
4639+
.clientExtensionResults(
4640+
ClientRegistrationExtensionOutputs
4641+
.builder()
4642+
.spc(spcOutput)
4643+
.build()
4644+
)
4645+
.build()
4646+
)
4647+
.build()
4648+
)
4649+
result.getClientExtensionOutputs.get().getSpc.toScala should equal(
4650+
Some(spcOutput)
4651+
)
4652+
}
4653+
}
4654+
46284655
describe("support the uvm extension") {
46294656
it("at registration time.") {
46304657

webauthn-server-core/src/test/scala/com/yubico/webauthn/RelyingPartyStartOperationSpec.scala

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,10 @@ import com.yubico.webauthn.data.Extensions.CredentialProtection.CredentialProtec
3636
import com.yubico.webauthn.data.Extensions.CredentialProtection.CredentialProtectionPolicy
3737
import com.yubico.webauthn.data.Extensions.Prf.PrfAuthenticationInput
3838
import com.yubico.webauthn.data.Extensions.Prf.PrfRegistrationInput
39+
import com.yubico.webauthn.data.Extensions.Spc.SpcRegistrationInput
3940
import com.yubico.webauthn.data.Generators.Extensions.Prf.arbitraryPrfAuthenticationInput
4041
import com.yubico.webauthn.data.Generators.Extensions.Prf.arbitraryPrfRegistrationInput
42+
import com.yubico.webauthn.data.Generators.Extensions.Spc.arbitrarySpcRegistrationInput
4143
import com.yubico.webauthn.data.Generators.Extensions.registrationExtensionInputs
4244
import com.yubico.webauthn.data.Generators._
4345
import com.yubico.webauthn.data.PublicKeyCredentialCreationOptions
@@ -616,6 +618,38 @@ class RelyingPartyStartOperationSpec
616618
}
617619
}
618620

621+
it("by default does not set the spc extension.") {
622+
val rp = relyingParty(userId = userId)
623+
val result = rp.startRegistration(
624+
StartRegistrationOptions
625+
.builder()
626+
.user(userId)
627+
.build()
628+
)
629+
result.getExtensions.getSpc.toScala should be(None)
630+
}
631+
632+
it("sets the spc extension if enabled in StartRegistrationOptions.") {
633+
forAll {
634+
(
635+
extensions: RegistrationExtensionInputs,
636+
spc: SpcRegistrationInput,
637+
) =>
638+
val rp = relyingParty(userId = userId)
639+
val result = rp.startRegistration(
640+
StartRegistrationOptions
641+
.builder()
642+
.user(userId)
643+
.extensions(extensions.toBuilder.spc(spc).build())
644+
.build()
645+
)
646+
647+
result.getExtensions.getSpc.toScala should equal(
648+
Some(spc)
649+
)
650+
}
651+
}
652+
619653
it("respects the residentKey setting.") {
620654
val rp = relyingParty(userId = userId)
621655

0 commit comments

Comments
 (0)