Vendor dependencies and expose control program binaries via nix build. Uses nixpkgs-unstable for Go 1.26 support. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
133 lines
5.8 KiB
Go
133 lines
5.8 KiB
Go
package webauthn
|
|
|
|
import "github.com/go-webauthn/webauthn/protocol"
|
|
|
|
// WithCredentialParameters adjusts the credential parameters in the registration options.
|
|
//
|
|
// Specification: §5.4. Parameters for Credential Generation (https://www.w3.org/TR/webauthn/#dom-publickeycredentialcreationoptions-pubkeycredparams)
|
|
func WithCredentialParameters(credentialParams []protocol.CredentialParameter) RegistrationOption {
|
|
return func(cco *protocol.PublicKeyCredentialCreationOptions) {
|
|
cco.Parameters = credentialParams
|
|
}
|
|
}
|
|
|
|
// WithExclusions adjusts the non-default parameters regarding credentials to exclude from registration.
|
|
//
|
|
// Specification: §5.4. Parameters for Credential Generation (https://www.w3.org/TR/webauthn/#dom-publickeycredentialcreationoptions-excludecredentials)
|
|
func WithExclusions(excludeList []protocol.CredentialDescriptor) RegistrationOption {
|
|
return func(cco *protocol.PublicKeyCredentialCreationOptions) {
|
|
cco.CredentialExcludeList = excludeList
|
|
}
|
|
}
|
|
|
|
// WithAuthenticatorSelection adjusts the non-default parameters regarding the authenticator to select during
|
|
// registration.
|
|
//
|
|
// Specification: §5.4. Parameters for Credential Generation (https://www.w3.org/TR/webauthn/#dom-publickeycredentialcreationoptions-authenticatorselection)
|
|
//
|
|
// Specification: §5.4.4. Authenticator Selection Criteria (https://www.w3.org/TR/webauthn/#dictdef-authenticatorselectioncriteria)
|
|
func WithAuthenticatorSelection(authenticatorSelection protocol.AuthenticatorSelection) RegistrationOption {
|
|
return func(cco *protocol.PublicKeyCredentialCreationOptions) {
|
|
cco.AuthenticatorSelection = authenticatorSelection
|
|
}
|
|
}
|
|
|
|
// WithResidentKeyRequirement sets both the resident key and require resident key protocol options.
|
|
//
|
|
// Specification: §5.4. Parameters for Credential Generation (https://www.w3.org/TR/webauthn/#dom-publickeycredentialcreationoptions-authenticatorselection)
|
|
//
|
|
// Specification: §5.4.4. Authenticator Selection Criteria (https://www.w3.org/TR/webauthn/#dictdef-authenticatorselectioncriteria)
|
|
func WithResidentKeyRequirement(requirement protocol.ResidentKeyRequirement) RegistrationOption {
|
|
return func(cco *protocol.PublicKeyCredentialCreationOptions) {
|
|
cco.AuthenticatorSelection.ResidentKey = requirement
|
|
|
|
switch requirement {
|
|
case protocol.ResidentKeyRequirementRequired:
|
|
cco.AuthenticatorSelection.RequireResidentKey = protocol.ResidentKeyRequired()
|
|
default:
|
|
cco.AuthenticatorSelection.RequireResidentKey = protocol.ResidentKeyNotRequired()
|
|
}
|
|
}
|
|
}
|
|
|
|
// WithPublicKeyCredentialHints adjusts the non-default hints for credential types to select during registration.
|
|
//
|
|
// WebAuthn Level 3.
|
|
//
|
|
// Specification: §5.4. Parameters for Credential Generation (https://www.w3.org/TR/webauthn-3/#dom-publickeycredentialcreationoptions-hints)
|
|
func WithPublicKeyCredentialHints(hints []protocol.PublicKeyCredentialHints) RegistrationOption {
|
|
return func(cco *protocol.PublicKeyCredentialCreationOptions) {
|
|
cco.Hints = hints
|
|
}
|
|
}
|
|
|
|
// WithConveyancePreference adjusts the non-default parameters regarding whether the authenticator should attest to the
|
|
// credential.
|
|
//
|
|
// Specification: §5.4. Parameters for Credential Generation (https://www.w3.org/TR/webauthn/#dom-publickeycredentialcreationoptions-attestation)
|
|
func WithConveyancePreference(preference protocol.ConveyancePreference) RegistrationOption {
|
|
return func(cco *protocol.PublicKeyCredentialCreationOptions) {
|
|
cco.Attestation = preference
|
|
}
|
|
}
|
|
|
|
// WithAttestationFormats adjusts the non-default formats for credential types to select during registration.
|
|
//
|
|
// WebAuthn Level 3.
|
|
//
|
|
// Specification: §5.4. Parameters for Credential Generation (https://www.w3.org/TR/webauthn-3/#dom-publickeycredentialcreationoptions-attestationformats)
|
|
func WithAttestationFormats(formats []protocol.AttestationFormat) RegistrationOption {
|
|
return func(cco *protocol.PublicKeyCredentialCreationOptions) {
|
|
cco.AttestationFormats = formats
|
|
}
|
|
}
|
|
|
|
// WithExtensions adjusts the extension parameter in the registration options.
|
|
//
|
|
// Specification: §5.4. Parameters for Credential Generation (https://www.w3.org/TR/webauthn-3/#dom-publickeycredentialcreationoptions-extensions)
|
|
//
|
|
// Specification: §9. Extensions (https://www.w3.org/TR/webauthn/#webauthn-extensions)
|
|
func WithExtensions(extension protocol.AuthenticationExtensions) RegistrationOption {
|
|
return func(cco *protocol.PublicKeyCredentialCreationOptions) {
|
|
cco.Extensions = extension
|
|
}
|
|
}
|
|
|
|
// WithAppIdExcludeExtension automatically includes the specified appid if the CredentialExcludeList contains a credential
|
|
// with the type `fido-u2f`.
|
|
//
|
|
// Specification: §5.4. Parameters for Credential Generation (https://www.w3.org/TR/webauthn-3/#dom-publickeycredentialcreationoptions-extensions)
|
|
//
|
|
// Specification: §9. Extensions (https://www.w3.org/TR/webauthn/#webauthn-extensions)
|
|
//
|
|
// Specification: §10.1.2. FIDO AppID Exclusion Extension (https://www.w3.org/TR/webauthn/#sctn-appid-exclude-extension)
|
|
func WithAppIdExcludeExtension(appid string) RegistrationOption {
|
|
return func(cco *protocol.PublicKeyCredentialCreationOptions) {
|
|
for _, credential := range cco.CredentialExcludeList {
|
|
if credential.AttestationType == protocol.CredentialTypeFIDOU2F {
|
|
if cco.Extensions == nil {
|
|
cco.Extensions = map[string]any{}
|
|
}
|
|
|
|
cco.Extensions[protocol.ExtensionAppIDExclude] = appid
|
|
|
|
break
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// WithRegistrationRelyingPartyID sets the relying party id for the registration.
|
|
func WithRegistrationRelyingPartyID(id string) RegistrationOption {
|
|
return func(cco *protocol.PublicKeyCredentialCreationOptions) {
|
|
cco.RelyingParty.ID = id
|
|
}
|
|
}
|
|
|
|
// WithRegistrationRelyingPartyName sets the relying party name for the registration.
|
|
func WithRegistrationRelyingPartyName(name string) RegistrationOption {
|
|
return func(cco *protocol.PublicKeyCredentialCreationOptions) {
|
|
cco.RelyingParty.Name = name
|
|
}
|
|
}
|