diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c07f369e..e7a4facf 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -26,7 +26,7 @@ env: DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true DOTNET_NOLOGO: true DOTNET_CLI_TELEMETRY_OPTOUT: true - + jobs: # Determine version version: @@ -43,7 +43,7 @@ jobs: echo "Invalid version: ${{ github.event.release.tag_name }}" exit 1 fi - + echo "version=${{ github.event.release.tag_name }}" >> $GITHUB_OUTPUT - name: Determine prerelease version @@ -94,7 +94,7 @@ jobs: - name: Install .NET uses: actions/setup-dotnet@607fce577a46308457984d59e4954e075820f10a # v3.0.3 with: - dotnet-version: | + dotnet-version: | 6.0.x 8.0.x @@ -133,7 +133,7 @@ jobs: - name: Install .NET uses: actions/setup-dotnet@607fce577a46308457984d59e4954e075820f10a # v3.0.3 with: - dotnet-version: | + dotnet-version: | 6.0.x 8.0.x @@ -147,7 +147,7 @@ jobs: --configuration Release -p:ContinuousIntegrationBuild=true -p:Version=${{ needs.version.outputs.version }} - + - name: Run pack run: > dotnet pack @@ -186,7 +186,7 @@ jobs: - name: Install .NET uses: actions/setup-dotnet@607fce577a46308457984d59e4954e075820f10a # v3.0.3 with: - dotnet-version: | + dotnet-version: | 6.0.x 8.0.x diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index 441b4102..2c30bcdb 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -13,4 +13,4 @@ jobs: # Drafts your next Release notes as Pull Requests are merged into "master" - uses: release-drafter/release-drafter@v5 env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/BlazorWasmDemo/Client/wwwroot/css/open-iconic/README.md b/BlazorWasmDemo/Client/wwwroot/css/open-iconic/README.md index 5ac0c170..e34bd86a 100644 --- a/BlazorWasmDemo/Client/wwwroot/css/open-iconic/README.md +++ b/BlazorWasmDemo/Client/wwwroot/css/open-iconic/README.md @@ -8,7 +8,7 @@ ## What's in Open Iconic? * 223 icons designed to be legible down to 8 pixels -* Super-light SVG files - 61.8 for the entire set +* Super-light SVG files - 61.8 for the entire set * SVG sprite—the modern replacement for icon fonts * Webfont (EOT, OTF, SVG, TTF, WOFF), PNG and WebP formats * Webfont stylesheets (including versions for Bootstrap and Foundation) in CSS, LESS, SCSS and Stylus formats @@ -33,7 +33,7 @@ We like SVGs and we think they're the way to display icons on the web. Since Ope Open Iconic also comes in a SVG sprite which allows you to display all the icons in the set with a single request. It's like an icon font, without being a hack. -Adding an icon from an SVG sprite is a little different than what you're used to, but it's still a piece of cake. *Tip: To make your icons easily style able, we suggest adding a general class to the* `` *tag and a unique class name for each different icon in the* `` *tag.* +Adding an icon from an SVG sprite is a little different than what you're used to, but it's still a piece of cake. *Tip: To make your icons easily style able, we suggest adding a general class to the* `` *tag and a unique class name for each different icon in the* `` *tag.* ``` diff --git a/BlazorWasmDemo/Server/Properties/launchSettings.json b/BlazorWasmDemo/Server/Properties/launchSettings.json index 714fb630..c4962824 100644 --- a/BlazorWasmDemo/Server/Properties/launchSettings.json +++ b/BlazorWasmDemo/Server/Properties/launchSettings.json @@ -34,4 +34,4 @@ "sslPort": 44312 } } -} \ No newline at end of file +} diff --git a/CHANGELOG.md b/CHANGELOG.md index 57da1a5e..ad7db926 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # FIDO2 .NET library (WebAuthn) -[Readme](https://github.com/passwordless-lib/fido2-net-lib/blob/master/README.md) +[Readme](https://github.com/passwordless-lib/fido2-net-lib/blob/master/README.md) 2020-03-24 1.1.0 - Refactored FIDO2 model @@ -11,4 +11,4 @@ - Conformance tool recently changed the way EdDSA signatures are verified. This fix passes the test in v1.1.6. 2019-07-31 1.0.1 -- initial release FIDO2 .NET library (WebAuthn) \ No newline at end of file +- initial release FIDO2 .NET library (WebAuthn) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bc097559..1193fcb4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -51,7 +51,7 @@ OS's use different variable names to represent similar settings. Code should con For example, when looking for the user's home directory, on Windows the variable is `USERPROFILE` but on most Linux systems it is `HOME`. ```cs -var homeDir = Environment.GetEnvironmentVariable("USERPROFILE") +var homeDir = Environment.GetEnvironmentVariable("USERPROFILE") ?? Environment.GetEnvironmentVariable("HOME"); ``` diff --git a/Demo/.config/dotnet-tools.json b/Demo/.config/dotnet-tools.json index a8f46390..29a57f5b 100644 --- a/Demo/.config/dotnet-tools.json +++ b/Demo/.config/dotnet-tools.json @@ -9,4 +9,4 @@ ] } } -} \ No newline at end of file +} diff --git a/Demo/Demo.csproj b/Demo/Demo.csproj index 60e02890..026b0ecb 100644 --- a/Demo/Demo.csproj +++ b/Demo/Demo.csproj @@ -1,4 +1,4 @@ - + net8.0 diff --git a/Demo/Properties/launchSettings.json b/Demo/Properties/launchSettings.json index 49e144f8..53d314d8 100644 --- a/Demo/Properties/launchSettings.json +++ b/Demo/Properties/launchSettings.json @@ -23,4 +23,4 @@ "applicationUrl": "http://localhost:4729/;https://localhost:44329/" } } -} \ No newline at end of file +} diff --git a/Demo/appsettings.Development.json b/Demo/appsettings.Development.json index fa8ce71a..723c096a 100644 --- a/Demo/appsettings.Development.json +++ b/Demo/appsettings.Development.json @@ -1,4 +1,4 @@ -{ +{ "Logging": { "IncludeScopes": false, "LogLevel": { diff --git a/Demo/appsettings.json b/Demo/appsettings.json index 37c5f6e5..412d460a 100644 --- a/Demo/appsettings.json +++ b/Demo/appsettings.json @@ -1,11 +1,11 @@ -{ +{ "fido2": { "serverDomain": "localhost", "origins": [ "https://localhost:44329" ], "timestampDriftTolerance": 300000, "backupEligibleCredentialPolicy": "allowed", "backedUpCredentialPolicy": "allowed" - }, + }, "Logging": { "IncludeScopes": false, "LogLevel": { diff --git a/Demo/bundleconfig.json b/Demo/bundleconfig.json index 6d3f9a57..5cf2c0b9 100644 --- a/Demo/bundleconfig.json +++ b/Demo/bundleconfig.json @@ -1,4 +1,4 @@ -// Configure bundling and minification for the project. +// Configure bundling and minification for the project. // More info at https://go.microsoft.com/fwlink/?LinkId=808241 [ { diff --git a/Demo/launchSettings.json b/Demo/launchSettings.json index 37f8f222..fff54e1b 100644 --- a/Demo/launchSettings.json +++ b/Demo/launchSettings.json @@ -7,4 +7,4 @@ "sslPort": 44329 } } -} \ No newline at end of file +} diff --git a/Demo/wwwroot/js/.eslintrc.json b/Demo/wwwroot/js/.eslintrc.json index 5faacd38..6ee1621e 100644 --- a/Demo/wwwroot/js/.eslintrc.json +++ b/Demo/wwwroot/js/.eslintrc.json @@ -1,3 +1,3 @@ -{ +{ "env": {"es6": true} -} \ No newline at end of file +} diff --git a/Documentation/NET46X.md b/Documentation/NET46X.md index a9d37264..3a1d9d0d 100644 --- a/Documentation/NET46X.md +++ b/Documentation/NET46X.md @@ -19,4 +19,4 @@ TypeLoadExceptions for types like "ECPoint" - essentially breaking the functiona ## FI0404 Because NuGet doesn't give us the ability to reduce these frameworks from the .NET Standard restore graphs, -we have to fall back to MSBuild errors preventing you to even build a project with the offending configurations. \ No newline at end of file +we have to fall back to MSBuild errors preventing you to even build a project with the offending configurations. diff --git a/README.md b/README.md index 88533016..8bee34a8 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # FIDO2 .NET Library (WebAuthn) -A working implementation library + demo for [FIDO2](https://fidoalliance.org/fido2/) and [WebAuthn](https://www.w3.org/TR/webauthn/) using [.NET](https://dotnet.microsoft.com/) +A working implementation library + demo for [FIDO2](https://fidoalliance.org/fido2/) and [WebAuthn](https://www.w3.org/TR/webauthn/) using [.NET](https://dotnet.microsoft.com/) [![Build Status](https://dev.azure.com/anders/Fido2/_apis/build/status/abergs.fido2-net-lib?branchName=master)](https://dev.azure.com/anders/Fido2/_build/latest?definitionId=10&branchName=master) [![codecov](https://codecov.io/gh/passwordless-lib/fido2-net-lib/branch/master/graph/badge.svg)](https://codecov.io/gh/passwordless-lib/fido2-net-lib) [![Financial Contributors on Open Collective](https://opencollective.com/passwordless/all/badge.svg?label=financial+contributors)](https://opencollective.com/passwordless) @@ -23,7 +23,7 @@ This project is part of the [.NET foundation](https://dotnetfoundation.org) ```Install-Package Fido2``` -To use the asp.net helpers, install the asp.net-package. +To use the asp.net helpers, install the asp.net-package. ```Install-Package Fido2.AspNet``` @@ -33,28 +33,28 @@ To use the asp.net helpers, install the asp.net-package. * [Code examples](#examples) ## What is FIDO2? -**The passwordless web is coming.** +**The passwordless web is coming.** [FIDO2](https://fidoalliance.org/fido2/) / [WebAuthn](https://www.w3.org/TR/webauthn/) is a new open authentication standard, supported by [browsers](https://www.w3.org/Consortium/Member/List) and [many large tech companies](https://fidoalliance.org/members/) such as Microsoft, Google etc. The main driver is to allow a user to login without passwords, creating *passwordless flows* or strong MFA for user signup/login on websites. The standard is not limited to web applications with support coming to Active Directory and native apps. The technology builds on public/private keys, allowing authentication to happen without sharing a secret between the user & platform. This brings many benefits, such as easier and safer logins and makes phishing attempts extremely hard. -Read more: +Read more: - [Why it's exciting](http://ideasof.andersaberg.com/development/the-passwordless-web) - [Medium](https://blog.tokenize.com/fido-2-0-what-is-it-and-why-are-we-excited-31a66df6e113) - [FIDO Alliance](https://fidoalliance.org/fido2/) - [Yubico](https://www.yubico.com/2018/08/10-things-youve-been-wondering-about-fido2-webauthn-and-a-passwordless-world/) - [WebAuthn.Guide](https://webauthn.guide/) from Duo Security -- [WebAuthn.io](https://webauthn.io/) +- [WebAuthn.io](https://webauthn.io/) - [WebAuthn Awesome](https://github.com/herrjemand/WebauthnAwesome) ## Supported features -- ✅ Attestation API & verification (Register and verify credentials/authenticators) +- ✅ Attestation API & verification (Register and verify credentials/authenticators) - ✅ Assertion API & verification (Authenticate users) - ✅ 100% pass rate in [conformance testing](#conformance-testing-tool) ([results](https://github.com/passwordless-lib/fido2-net-lib/issues/13#issuecomment-457318859)) - ✅ FIDO2 security keys aka roaming authenticators ([spec](https://www.w3.org/TR/webauthn/#roaming-authenticators)), like SoloKeys [Solo](https://github.com/solokeys/solo/blob/master/README.md), Yubico [YubiKey](https://www.yubico.com/products/yubikey-hardware/), and Feitian [BioPass FIDO2](https://www.ftsafe.com/Products/FIDO2)) - ✅ Device embedded authenticators aka platform authenticators ([spec](https://www.w3.org/TR/webauthn/#platform-authenticators)), like [Android Key](https://source.android.com/security/keystore/attestation) and [TPM](https://trustedcomputinggroup.org/resource/trusted-platform-module-2-0-a-brief-introduction/)) - ✅ Backwards compatibility with FIDO U2F authenticators ([spec](https://www.w3.org/TR/#conforming-authenticators-u2f)) -- ✅ [Windows Hello](https://docs.microsoft.com/en-us/microsoft-edge/dev-guide/windows-integration/web-authentication) -- ✅ [Face ID and Touch ID for the Web](https://webkit.org/blog/11312/meet-face-id-and-touch-id-for-the-web/) (aka "Apple Hello") +- ✅ [Windows Hello](https://docs.microsoft.com/en-us/microsoft-edge/dev-guide/windows-integration/web-authentication) +- ✅ [Face ID and Touch ID for the Web](https://webkit.org/blog/11312/meet-face-id-and-touch-id-for-the-web/) (aka "Apple Hello") - ✅ All currently referenced cryptographic algorithms for FIDO2 Server ([spec](https://fidoalliance.org/specs/fido-v2.0-rd-20180702/fido-server-v2.0-rd-20180702.html#other)) - ✅ All current attestation formats: "packed", "tpm", "android-key", "android-safetynet", "fido-u2f", "apple", "apple-appattest", and "none" ([spec](https://www.iana.org/assignments/webauthn/webauthn.xhtml)) - ✅ FIDO2 Server attestation validation via FIDO Metadata Service V3 ([spec](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html)) @@ -209,7 +209,7 @@ https://www.nuget.org/packages/Fido2/ and https://www.nuget.org/packages/Fido2.M See [Contributing](CONTRIBUTING.md) for information about contributing to the project. This project has adopted the code of conduct defined by the Contributor Covenant to clarify expected behavior in our community. -For more information see the [.NET Foundation Code of Conduct](https://dotnetfoundation.org/code-of-conduct). +For more information see the [.NET Foundation Code of Conduct](https://dotnetfoundation.org/code-of-conduct). For security and penetration testing, please see our [Vulnerability Disclosure Program](./VDP.md) diff --git a/SPONSORS.md b/SPONSORS.md index a70813ec..b9a4fb14 100644 --- a/SPONSORS.md +++ b/SPONSORS.md @@ -2,4 +2,4 @@ Backer / Plaintext * Veikko Eeva Donated -* Jure Purgar +* Jure Purgar diff --git a/Src/Fido2.AspNet/DistributedCacheMetadataService.cs b/Src/Fido2.AspNet/DistributedCacheMetadataService.cs index f2072014..fe68620d 100644 --- a/Src/Fido2.AspNet/DistributedCacheMetadataService.cs +++ b/Src/Fido2.AspNet/DistributedCacheMetadataService.cs @@ -69,7 +69,7 @@ protected virtual DateTimeOffset GetMemoryCacheAbsoluteExpiryTime(DateTimeOffset var expiryTime = _systemClock.UtcNow.GetNextIncrement(_defaultMemoryCacheInterval); //Ensure that memory cache expiry time never exceeds the next update time from the service - if (nextUpdateTime.HasValue && expiryTime > nextUpdateTime.Value) + if (nextUpdateTime.HasValue && expiryTime > nextUpdateTime.Value) expiryTime = nextUpdateTime.Value; return expiryTime; @@ -107,7 +107,7 @@ await _distributedCache.SetStringAsync( new DistributedCacheEntryOptions() { AbsoluteExpiration = GetDistributedCacheAbsoluteExpiryTime(GetNextUpdateTimeFromPayload(payload)) - }, + }, cancellationToken); } diff --git a/Src/Fido2.AspNet/Fido2.AspNet.csproj b/Src/Fido2.AspNet/Fido2.AspNet.csproj index 3f1af908..9002ff12 100644 --- a/Src/Fido2.AspNet/Fido2.AspNet.csproj +++ b/Src/Fido2.AspNet/Fido2.AspNet.csproj @@ -1,4 +1,4 @@ - + $(SupportedTargetFrameworks) diff --git a/Src/Fido2.BlazorWebAssembly/Fido2.BlazorWebAssembly.csproj b/Src/Fido2.BlazorWebAssembly/Fido2.BlazorWebAssembly.csproj index f39bc6cb..f897fe57 100644 --- a/Src/Fido2.BlazorWebAssembly/Fido2.BlazorWebAssembly.csproj +++ b/Src/Fido2.BlazorWebAssembly/Fido2.BlazorWebAssembly.csproj @@ -1,4 +1,4 @@ - + $(SupportedTargetFrameworks) diff --git a/Src/Fido2.BlazorWebAssembly/tsconfig.json b/Src/Fido2.BlazorWebAssembly/tsconfig.json index fe7f40ec..38d761a2 100644 --- a/Src/Fido2.BlazorWebAssembly/tsconfig.json +++ b/Src/Fido2.BlazorWebAssembly/tsconfig.json @@ -1,4 +1,4 @@ -{ +{ "compileOnSave": true, "compilerOptions": { "noImplicitAny": true, diff --git a/Src/Fido2.Ctap2/Commands/AuthenticatorMakeCredentialCommand.cs b/Src/Fido2.Ctap2/Commands/AuthenticatorMakeCredentialCommand.cs index ebb446b0..d31c627c 100644 --- a/Src/Fido2.Ctap2/Commands/AuthenticatorMakeCredentialCommand.cs +++ b/Src/Fido2.Ctap2/Commands/AuthenticatorMakeCredentialCommand.cs @@ -30,8 +30,8 @@ public AuthenticatorMakeCredentialCommand( public byte[] ClientDataHash { get; } /// - /// This PublicKeyCredentialRpEntity data structure describes a Relying Party with which the new public key credential will be associated. - /// It contains the Relying party identifier of type text string, (optionally) a human-friendly RP name of type text string, and (optionally) a URL of type text string, referencing a RP icon image. + /// This PublicKeyCredentialRpEntity data structure describes a Relying Party with which the new public key credential will be associated. + /// It contains the Relying party identifier of type text string, (optionally) a human-friendly RP name of type text string, and (optionally) a URL of type text string, referencing a RP icon image. /// [CborMember(0x02)] public PublicKeyCredentialRpEntity Rp { get; } @@ -46,7 +46,7 @@ public AuthenticatorMakeCredentialCommand( public PubKeyCredParam[] PubKeyCredParams { get; } /// - /// The authenticator returns an error if the authenticator already contains one of the credentials enumerated in this sequence. + /// The authenticator returns an error if the authenticator already contains one of the credentials enumerated in this sequence. /// This allows RPs to limit the creation of multiple credentials for the same account on a single authenticator. /// [CborMember(0x05)] @@ -104,7 +104,7 @@ public AuthenticatorMakeCredentialCommand( if (Options is AuthenticatorMakeCredentialOptions options) { - // 0x07 : options + // 0x07 : options cbor.Add(0x07, options.ToCborObject()); } diff --git a/Src/Fido2.Ctap2/Fido2.Ctap2.csproj b/Src/Fido2.Ctap2/Fido2.Ctap2.csproj index d109cd20..ce9d80a1 100644 --- a/Src/Fido2.Ctap2/Fido2.Ctap2.csproj +++ b/Src/Fido2.Ctap2/Fido2.Ctap2.csproj @@ -1,4 +1,4 @@ - + $(SupportedTargetFrameworks) diff --git a/Src/Fido2.Ctap2/Responses/AuthenticatorClientPinResponse.cs b/Src/Fido2.Ctap2/Responses/AuthenticatorClientPinResponse.cs index 4c46e267..20a12a19 100644 --- a/Src/Fido2.Ctap2/Responses/AuthenticatorClientPinResponse.cs +++ b/Src/Fido2.Ctap2/Responses/AuthenticatorClientPinResponse.cs @@ -7,7 +7,7 @@ public sealed class AuthenticatorClientPinResponse { /// /// Authenticator key agreement public key in COSE_Key format. - /// This will be used to establish a sharedSecret between platform and the authenticator. + /// This will be used to establish a sharedSecret between platform and the authenticator. /// The COSE_Key-encoded public key MUST contain the optional "alg" parameter and MUST NOT contain any other optional parameters. /// The "alg" parameter MUST contain a COSEAlgorithmIdentifier value. /// diff --git a/Src/Fido2.Ctap2/Responses/AuthenticatorGetAssertionResponse.cs b/Src/Fido2.Ctap2/Responses/AuthenticatorGetAssertionResponse.cs index 1da125b4..3d81c958 100644 --- a/Src/Fido2.Ctap2/Responses/AuthenticatorGetAssertionResponse.cs +++ b/Src/Fido2.Ctap2/Responses/AuthenticatorGetAssertionResponse.cs @@ -40,14 +40,14 @@ public sealed class AuthenticatorGetAssertionResponse public PublicKeyCredentialUserEntity? User { get; set; } /// - /// Total number of account credentials for the RP.This member is required when more than one account for the RP and the authenticator does not have a display. + /// Total number of account credentials for the RP.This member is required when more than one account for the RP and the authenticator does not have a display. /// Omitted when returned for the authenticatorGetNextAssertion method. /// [CborMember(0x05)] public int? NumberOfCredentials { get; set; } /// - /// Indicates that a credential was selected by the user via interaction directly with the authenticator, and thus the platform does not need to confirm the credential. + /// Indicates that a credential was selected by the user via interaction directly with the authenticator, and thus the platform does not need to confirm the credential. /// MUST NOT be present in response to a request where an allowList was given, where numberOfCredentials is greater than one, nor in response to an authenticatorGetNextAssertion request. /// [CborMember(0x06)] diff --git a/Src/Fido2.Ctap2/Responses/AuthenticatorGetInfoResponse.cs b/Src/Fido2.Ctap2/Responses/AuthenticatorGetInfoResponse.cs index e830b7c9..4a7e40b7 100644 --- a/Src/Fido2.Ctap2/Responses/AuthenticatorGetInfoResponse.cs +++ b/Src/Fido2.Ctap2/Responses/AuthenticatorGetInfoResponse.cs @@ -19,7 +19,7 @@ public sealed class AuthenticatorGetInfoResponse public string[] Extensions { get; set; } /// - /// The claimed AAGUID. + /// The claimed AAGUID. /// 16 bytes in length and encoded the same as MakeCredential AuthenticatorData, as specified in [WebAuthn]. /// [CborMember(0x03)] diff --git a/Src/Fido2.Ctap2/Responses/AuthenticatorMakeCredentialResponse.cs b/Src/Fido2.Ctap2/Responses/AuthenticatorMakeCredentialResponse.cs index f7801ffd..ec5afd50 100644 --- a/Src/Fido2.Ctap2/Responses/AuthenticatorMakeCredentialResponse.cs +++ b/Src/Fido2.Ctap2/Responses/AuthenticatorMakeCredentialResponse.cs @@ -46,7 +46,7 @@ public static AuthenticatorMakeCredentialResponse FromCborObject(CborObject cbor { switch ((int)key) { - #pragma warning disable format + #pragma warning disable format case 0x01: result.Fmt = (string)value; break; case 0x02: result.AuthData = (byte[])value; break; case 0x03: result.AttStmt = (CborMap)value; break; diff --git a/Src/Fido2.Development/Fido2.Development.csproj b/Src/Fido2.Development/Fido2.Development.csproj index acdff524..06919e75 100644 --- a/Src/Fido2.Development/Fido2.Development.csproj +++ b/Src/Fido2.Development/Fido2.Development.csproj @@ -1,4 +1,4 @@ - + $(SupportedTargetFrameworks) diff --git a/Src/Fido2.Development/StoredCredential.cs b/Src/Fido2.Development/StoredCredential.cs index ac809e76..7d0e048f 100644 --- a/Src/Fido2.Development/StoredCredential.cs +++ b/Src/Fido2.Development/StoredCredential.cs @@ -37,13 +37,13 @@ public class StoredCredential public bool IsBackedUp { get; set; } /// - /// The value of the attestationObject attribute when the public key credential source was registered. + /// The value of the attestationObject attribute when the public key credential source was registered. /// Storing this enables the Relying Party to reference the credential's attestation statement at a later time. /// public byte[] AttestationObject { get; set; } /// - /// The value of the clientDataJSON attribute when the public key credential source was registered. + /// The value of the clientDataJSON attribute when the public key credential source was registered. /// Storing this in combination with the above attestationObject item enables the Relying Party to re-verify the attestation signature at a later time. /// public byte[] AttestationClientDataJson { get; set; } diff --git a/Src/Fido2.Models/Base64Url.cs b/Src/Fido2.Models/Base64Url.cs index 0d58b343..2431d0eb 100644 --- a/Src/Fido2.Models/Base64Url.cs +++ b/Src/Fido2.Models/Base64Url.cs @@ -27,11 +27,11 @@ public static string Encode(ReadOnlySpan arg) switch (c) { - case '+': - c = '-'; + case '+': + c = '-'; break; - case '/': - c = '_'; + case '/': + c = '_'; break; } } @@ -74,11 +74,11 @@ public static byte[] Decode(ReadOnlySpan text) switch (c) { - case '-': - c = '+'; + case '-': + c = '+'; break; - case '_': - c = '/'; + case '_': + c = '/'; break; } } @@ -125,11 +125,11 @@ public static byte[] DecodeUtf8(ReadOnlySpan text) switch ((char)c) { - case '-': - c = (byte)'+'; + case '-': + c = (byte)'+'; break; - case '_': - c = (byte)'/'; + case '_': + c = (byte)'/'; break; } } diff --git a/Src/Fido2.Models/COSETypes.cs b/Src/Fido2.Models/COSETypes.cs index b63b933e..f63a1d27 100644 --- a/Src/Fido2.Models/COSETypes.cs +++ b/Src/Fido2.Models/COSETypes.cs @@ -10,47 +10,47 @@ public static class COSE /// public enum Algorithm { - /// + /// /// RSASSA-PKCS1-v1_5 w/ SHA-1 /// RS1 = -65535, - /// + /// /// RSASSA-PKCS1-v1_5 w/ SHA-512 /// RS512 = -259, - /// + /// /// RSASSA-PKCS1-v1_5 w/ SHA-384 /// RS384 = -258, - /// + /// /// RSASSA-PKCS1-v1_5 w/ SHA-256 /// RS256 = -257, - /// + /// /// RSASSA-PSS w/ SHA-512 /// PS512 = -39, - /// + /// /// RSASSA-PSS w/ SHA-384 /// PS384 = -38, - /// + /// /// RSASSA-PSS w/ SHA-256 /// PS256 = -37, - /// + /// /// ECDSA w/ SHA-512 /// ES512 = -36, - /// + /// /// ECDSA w/ SHA-384 /// ES384 = -35, - /// + /// /// EdDSA /// EdDSA = -8, - /// + /// /// ECDSA w/ SHA-256 /// ES256 = -7, @@ -64,28 +64,28 @@ public enum Algorithm /// public enum KeyCommonParameter { - /// + /// /// This value is reserved /// Reserved = 0, - /// - /// Identification of the key type + /// + /// Identification of the key type /// KeyType = 1, - /// - /// Key identification value - match to kid in message + /// + /// Key identification value - match to kid in message /// KeyId = 2, - /// - /// Key usage restriction to this algorithm + /// + /// Key usage restriction to this algorithm /// Alg = 3, - /// - /// Restrict set of permissible operations + /// + /// Restrict set of permissible operations /// KeyOps = 4, - /// - /// Base IV to be XORed with Partial IVs + /// + /// Base IV to be XORed with Partial IVs /// BaseIV = 5 } @@ -94,28 +94,28 @@ public enum KeyCommonParameter /// public enum KeyTypeParameter { - /// + /// /// EC identifier /// Crv = -1, - /// - /// Key Value + /// + /// Key Value /// K = -1, - /// - /// x-coordinate + /// + /// x-coordinate /// X = -2, - /// - /// y-coordinate + /// + /// y-coordinate /// Y = -3, - /// - /// the RSA modulus n + /// + /// the RSA modulus n /// N = -1, - /// - /// the RSA public exponent e + /// + /// the RSA public exponent e /// E = -2 } @@ -124,23 +124,23 @@ public enum KeyTypeParameter /// public enum KeyType { - /// + /// /// This value is reserved /// Reserved = 0, - /// + /// /// Octet Key Pair /// OKP = 1, - /// + /// /// Elliptic Curve Keys w/ x- and y-coordinate pair /// EC2 = 2, - /// + /// /// RSA Key /// RSA = 3, - /// + /// /// Symmetric Keys /// Symmetric = 4 @@ -151,39 +151,39 @@ public enum KeyType /// public enum EllipticCurve { - /// + /// /// This value is reserved /// Reserved = 0, - /// + /// /// NIST P-256 also known as secp256r1 /// P256 = 1, - /// + /// /// NIST P-384 also known as secp384r1 /// P384 = 2, - /// + /// /// NIST P-521 also known as secp521r1 /// P521 = 3, - /// + /// /// X25519 for use w/ ECDH only /// X25519 = 4, - /// + /// /// X448 for use w/ ECDH only /// X448 = 5, - /// + /// /// Ed25519 for use w/ EdDSA only /// Ed25519 = 6, - /// + /// /// Ed448 for use w/ EdDSA only /// Ed448 = 7, - /// + /// /// secp256k1 /// P256K = 8 diff --git a/Src/Fido2.Models/CredentialCreateOptions.cs b/Src/Fido2.Models/CredentialCreateOptions.cs index 43de046b..0bd5db4d 100644 --- a/Src/Fido2.Models/CredentialCreateOptions.cs +++ b/Src/Fido2.Models/CredentialCreateOptions.cs @@ -9,7 +9,7 @@ namespace Fido2NetLib; public sealed class CredentialCreateOptions { /// - /// + /// /// This member contains data about the Relying Party responsible for the request. /// Its value’s name member is required. /// Its value’s id member specifies the relying party identifier with which the credential should be associated.If omitted, its value will be the CredentialsContainer object’s relevant settings object's origin's effective domain. @@ -18,7 +18,7 @@ public sealed class CredentialCreateOptions public PublicKeyCredentialRpEntity Rp { get; set; } /// - /// This member contains data about the user account for which the Relying Party is requesting attestation. + /// This member contains data about the user account for which the Relying Party is requesting attestation. /// Its value’s name, displayName and id members are required. /// [JsonPropertyName("user")] @@ -190,7 +190,7 @@ public sealed class PubKeyCredParam( } /// -/// PublicKeyCredentialRpEntity +/// PublicKeyCredentialRpEntity /// public sealed class PublicKeyCredentialRpEntity( string id, @@ -233,9 +233,9 @@ public class AuthenticatorSelection /// /// Specifies the extent to which the Relying Party desires to create a client-side discoverable credential. - /// For historical reasons the naming retains the deprecated “resident” terminology. - /// The value SHOULD be a member of ResidentKeyRequirement but client platforms MUST ignore unknown values, - /// treating an unknown value as if the member does not exist. + /// For historical reasons the naming retains the deprecated “resident” terminology. + /// The value SHOULD be a member of ResidentKeyRequirement but client platforms MUST ignore unknown values, + /// treating an unknown value as if the member does not exist. /// If no value is given then the effective value is required if requireResidentKey is true or discouraged if it is false or absent. /// [JsonPropertyName("residentKey")] @@ -288,8 +288,8 @@ public bool RequireResidentKey public class Fido2User { /// - /// Required. A human-friendly identifier for a user account. - /// It is intended only for display, i.e., aiding the user in determining the difference between user accounts with similar displayNames. + /// Required. A human-friendly identifier for a user account. + /// It is intended only for display, i.e., aiding the user in determining the difference between user accounts with similar displayNames. /// For example, "alexm", "alex.p.mueller@example.com" or "+14255551234". https://w3c.github.io/webauthn/#dictdef-publickeycredentialentity /// [JsonPropertyName("name")] diff --git a/Src/Fido2.Models/Fido2.Models.csproj b/Src/Fido2.Models/Fido2.Models.csproj index b4a6a025..aff00326 100644 --- a/Src/Fido2.Models/Fido2.Models.csproj +++ b/Src/Fido2.Models/Fido2.Models.csproj @@ -1,4 +1,4 @@ - + $(SupportedTargetFrameworks) diff --git a/Src/Fido2.Models/Fido2Configuration.cs b/Src/Fido2.Models/Fido2Configuration.cs index b69ec978..15c8a02a 100644 --- a/Src/Fido2.Models/Fido2Configuration.cs +++ b/Src/Fido2.Models/Fido2Configuration.cs @@ -15,7 +15,7 @@ public Fido2Configuration() } /// - /// This member specifies a time, in milliseconds, that the caller is willing to wait for the call to complete. + /// This member specifies a time, in milliseconds, that the caller is willing to wait for the call to complete. /// This is treated as a hint, and MAY be overridden by the client. /// public uint Timeout { get; set; } = 60000; diff --git a/Src/Fido2.Models/Metadata/AuthenticatorStatus.cs b/Src/Fido2.Models/Metadata/AuthenticatorStatus.cs index 304d2ce8..c7e2179f 100644 --- a/Src/Fido2.Models/Metadata/AuthenticatorStatus.cs +++ b/Src/Fido2.Models/Metadata/AuthenticatorStatus.cs @@ -12,18 +12,18 @@ namespace Fido2NetLib; public enum AuthenticatorStatus { /// - /// This authenticator is not FIDO certified. + /// This authenticator is not FIDO certified. /// NOT_FIDO_CERTIFIED, /// - /// This authenticator has passed FIDO functional certification. + /// This authenticator has passed FIDO functional certification. /// /// This certification scheme is phased out and will be replaced by FIDO_CERTIFIED_L1. - /// + /// /// FIDO_CERTIFIED, /// - /// Indicates that malware is able to bypass the user verification. + /// Indicates that malware is able to bypass the user verification. /// This means that the authenticator could be used without the user's consent and potentially even without the user's knowledge. /// USER_VERIFICATION_BYPASS, @@ -35,7 +35,7 @@ public enum AuthenticatorStatus /// ATTESTATION_KEY_COMPROMISE, /// - /// This authenticator has identified weaknesses that allow registered keys to be compromised and should not be trusted. + /// This authenticator has identified weaknesses that allow registered keys to be compromised and should not be trusted. /// This would include both, e.g. weak entropy that causes predictable keys to be generated or side channels that allow keys or signatures to be forged, guessed or extracted. /// USER_KEY_REMOTE_COMPROMISE, @@ -55,10 +55,10 @@ public enum AuthenticatorStatus /// REVOKED, /// - /// The authenticator vendor has completed and submitted the self-certification checklist to the FIDO Alliance. + /// The authenticator vendor has completed and submitted the self-certification checklist to the FIDO Alliance. /// /// - /// If this completed checklist is publicly available, the URL will be specified in . + /// If this completed checklist is publicly available, the URL will be specified in . /// SELF_ASSERTION_SUBMITTED, /// diff --git a/Src/Fido2.Models/Metadata/BiometricAccuracyDescriptor.cs b/Src/Fido2.Models/Metadata/BiometricAccuracyDescriptor.cs index e55f2850..1d25bc31 100644 --- a/Src/Fido2.Models/Metadata/BiometricAccuracyDescriptor.cs +++ b/Src/Fido2.Models/Metadata/BiometricAccuracyDescriptor.cs @@ -15,7 +15,7 @@ public sealed class BiometricAccuracyDescriptor /// For example a FRR of 10% would be encoded as 0.1. /// /// - /// [ISO19795-1] for a single template, i.e. the percentage of verification transactions with truthful claims of identity that are incorrectly denied. + /// [ISO19795-1] for a single template, i.e. the percentage of verification transactions with truthful claims of identity that are incorrectly denied. /// [JsonPropertyName("selfAttestedFRR")] public double SelfAttestedFRR { get; set; } @@ -32,7 +32,7 @@ public sealed class BiometricAccuracyDescriptor /// /// /// For other modalities, multiple parts of the body that can be used interchangeably. - /// For example: 3 if the user is allowed to enroll up to 3 different fingers to a fingerprint based authenticator. + /// For example: 3 if the user is allowed to enroll up to 3 different fingers to a fingerprint based authenticator. /// [JsonPropertyName("maxTemplates")] public ushort MaxTemplates { get; set; } diff --git a/Src/Fido2.Models/Metadata/BiometricStatusReport.cs b/Src/Fido2.Models/Metadata/BiometricStatusReport.cs index d557b9c3..5fa85be9 100644 --- a/Src/Fido2.Models/Metadata/BiometricStatusReport.cs +++ b/Src/Fido2.Models/Metadata/BiometricStatusReport.cs @@ -21,14 +21,14 @@ public class BiometricStatusReport /// Gets or sets a single USER_VERIFY constant indicating the modality of the biometric component. /// /// - /// This is not a bit flag combination. + /// This is not a bit flag combination. /// This value MUST be non-zero and this value MUST correspond to one or more entries in field userVerificationDetails in the related Metadata Statement. /// [JsonPropertyName("modality")] public required ulong Modality { get; set; } /// - /// Gets or sets a ISO-8601 formatted date since when the certLevel achieved, if applicable. + /// Gets or sets a ISO-8601 formatted date since when the certLevel achieved, if applicable. /// If no date is given, the status is assumed to be effective while present. /// [JsonPropertyName("effectiveDate")] diff --git a/Src/Fido2.Models/Metadata/CodeAccuracyDescriptor.cs b/Src/Fido2.Models/Metadata/CodeAccuracyDescriptor.cs index bec65a15..6dba369d 100644 --- a/Src/Fido2.Models/Metadata/CodeAccuracyDescriptor.cs +++ b/Src/Fido2.Models/Metadata/CodeAccuracyDescriptor.cs @@ -11,7 +11,7 @@ namespace Fido2NetLib; public sealed class CodeAccuracyDescriptor { /// - /// Gets or sets the numeric system base (radix) of the code, e.g. 10 in the case of decimal digits. + /// Gets or sets the numeric system base (radix) of the code, e.g. 10 in the case of decimal digits. /// [JsonPropertyName("base")] public required ushort Base { get; set; } @@ -30,8 +30,8 @@ public sealed class CodeAccuracyDescriptor public ushort MaxRetries { get; set; } /// - /// Gets or sets the enforced minimum number of seconds wait time after blocking (e.g. due to forced reboot or similar). - /// Zero (0) means this user verification method will be blocked, either permanently or until an alternative user verification method method succeeded. + /// Gets or sets the enforced minimum number of seconds wait time after blocking (e.g. due to forced reboot or similar). + /// Zero (0) means this user verification method will be blocked, either permanently or until an alternative user verification method method succeeded. /// /// /// All alternative user verification methods MUST be specified appropriately in the Metadata in . diff --git a/Src/Fido2.Models/Metadata/ExtensionDescriptor.cs b/Src/Fido2.Models/Metadata/ExtensionDescriptor.cs index 45967357..5e5c07f5 100644 --- a/Src/Fido2.Models/Metadata/ExtensionDescriptor.cs +++ b/Src/Fido2.Models/Metadata/ExtensionDescriptor.cs @@ -6,7 +6,7 @@ namespace Fido2NetLib; /// -/// This descriptor contains an extension supported by the authenticator. +/// This descriptor contains an extension supported by the authenticator. /// /// /// @@ -24,13 +24,13 @@ public class ExtensionDescriptor /// This field may be empty. /// /// - /// The TAG of the extension if this was assigned. TAGs are assigned to extensions if they could appear in an assertion. + /// The TAG of the extension if this was assigned. TAGs are assigned to extensions if they could appear in an assertion. /// [JsonPropertyName("tag")] public ushort Tag { get; set; } /// - /// Gets or sets arbitrary data further describing the extension and/or data needed to correctly process the extension. + /// Gets or sets arbitrary data further describing the extension and/or data needed to correctly process the extension. /// This field may be empty. /// /// @@ -40,7 +40,7 @@ public class ExtensionDescriptor public string? Data { get; set; } /// - /// Gets or sets a value indication whether an unknown extensions must be ignored (false) or must lead to an error (true) when the extension is to be processed by the FIDO Server, FIDO Client, ASM, or FIDO Authenticator. + /// Gets or sets a value indication whether an unknown extensions must be ignored (false) or must lead to an error (true) when the extension is to be processed by the FIDO Server, FIDO Client, ASM, or FIDO Authenticator. /// /// /// diff --git a/Src/Fido2.Models/Metadata/MetadataBLOBPayload.cs b/Src/Fido2.Models/Metadata/MetadataBLOBPayload.cs index 32da3307..e90dc230 100644 --- a/Src/Fido2.Models/Metadata/MetadataBLOBPayload.cs +++ b/Src/Fido2.Models/Metadata/MetadataBLOBPayload.cs @@ -15,13 +15,13 @@ public sealed class MetadataBLOBPayload /// Gets or sets the legalHeader, if present, contains a legal guide for accessing and using metadata. /// /// - /// This value MAY contain URL(s) pointing to further information, such as a full Terms and Conditions statement. + /// This value MAY contain URL(s) pointing to further information, such as a full Terms and Conditions statement. /// [JsonPropertyName("legalHeader")] public string LegalHeader { get; set; } - /// - /// Gets or sets the serial number of this UAF Metadata BLOB Payload. + /// + /// Gets or sets the serial number of this UAF Metadata BLOB Payload. /// /// /// Serial numbers MUST be consecutive and strictly monotonic, i.e. the successor BLOB will have a no value exactly incremented by one. diff --git a/Src/Fido2.Models/Metadata/MetadataBLOBPayloadEntry.cs b/Src/Fido2.Models/Metadata/MetadataBLOBPayloadEntry.cs index 7f355e9c..64131d7b 100644 --- a/Src/Fido2.Models/Metadata/MetadataBLOBPayloadEntry.cs +++ b/Src/Fido2.Models/Metadata/MetadataBLOBPayloadEntry.cs @@ -59,13 +59,13 @@ public sealed class MetadataBLOBPayloadEntry public StatusReport[] StatusReports { get; set; } /// - /// Gets or sets ISO-8601 formatted date since when the status report array was set to the current value. + /// Gets or sets ISO-8601 formatted date since when the status report array was set to the current value. /// [JsonPropertyName("timeOfLastStatusChange")] public string TimeOfLastStatusChange { get; set; } /// - /// Gets or sets an URL of a list of rogue (i.e. untrusted) individual authenticators. + /// Gets or sets an URL of a list of rogue (i.e. untrusted) individual authenticators. /// [JsonPropertyName("rogueListURL")] public string RogueListURL { get; set; } diff --git a/Src/Fido2.Models/Metadata/MetadataStatement.cs b/Src/Fido2.Models/Metadata/MetadataStatement.cs index e838136a..38af1679 100644 --- a/Src/Fido2.Models/Metadata/MetadataStatement.cs +++ b/Src/Fido2.Models/Metadata/MetadataStatement.cs @@ -12,7 +12,7 @@ namespace Fido2NetLib; public class MetadataStatement { /// - /// Gets or sets the legalHeader, if present, contains a legal guide for accessing and using metadata, which itself MAY contain URL(s) pointing to further information, such as a full Terms and Conditions statement. + /// Gets or sets the legalHeader, if present, contains a legal guide for accessing and using metadata, which itself MAY contain URL(s) pointing to further information, such as a full Terms and Conditions statement. /// [JsonPropertyName("legalHeader")] public string LegalHeader { get; set; } @@ -27,10 +27,10 @@ public class MetadataStatement public string Aaid { get; set; } /// - /// Gets or sets the Authenticator Attestation GUID. + /// Gets or sets the Authenticator Attestation GUID. /// /// - /// This field MUST be set if the authenticator implements FIDO 2. + /// This field MUST be set if the authenticator implements FIDO 2. /// Note: FIDO 2 Authenticators support AAGUID, but they don't support AAID. /// [JsonPropertyName("aaguid")] @@ -43,13 +43,13 @@ public class MetadataStatement public string[] AttestationCertificateKeyIdentifiers { get; set; } /// - /// Gets or sets a human-readable, short description of the authenticator, in English. + /// Gets or sets a human-readable, short description of the authenticator, in English. /// [JsonPropertyName("description"), Required] public string Description { get; set; } /// - /// Gets or sets a human-readable, short description of the authenticator, in alternative languages. + /// Gets or sets a human-readable, short description of the authenticator, in alternative languages. /// /// A dictionary where keys are IETF language codes (e.g. "de-AT" for Austrian-German) and values are human-readable descriptions. [JsonPropertyName("friendlyNames")] @@ -63,7 +63,7 @@ public class MetadataStatement public IDictionary AlternativeDescriptions { get; set; } /// - /// Gets or set earliest (i.e. lowest) trustworthy authenticatorVersion meeting the requirements specified in this metadata statement. + /// Gets or set earliest (i.e. lowest) trustworthy authenticatorVersion meeting the requirements specified in this metadata statement. /// [JsonPropertyName("authenticatorVersion"), Required] public ulong AuthenticatorVersion { get; set; } @@ -89,7 +89,7 @@ public class MetadataStatement public UafVersion[] Upv { get; set; } /// - /// Gets or sets the list of authentication algorithms supported by the authenticator. + /// Gets or sets the list of authentication algorithms supported by the authenticator. /// [JsonPropertyName("authenticationAlgorithms"), Required] public string[] AuthenticationAlgorithms { get; set; } @@ -103,7 +103,7 @@ public class MetadataStatement /// Gets or sets the supported attestation type(s). /// /// - /// For example: TAG_ATTESTATION_BASIC_FULL(0x3E07), TAG_ATTESTATION_BASIC_SURROGATE(0x3E08). + /// For example: TAG_ATTESTATION_BASIC_FULL(0x3E07), TAG_ATTESTATION_BASIC_SURROGATE(0x3E08). /// [JsonPropertyName("attestationTypes"), Required] public string[] AttestationTypes { get; set; } @@ -165,7 +165,7 @@ public class MetadataStatement public string[] TcDisplay { get; set; } /// - /// Gets or sets the supported MIME content type [RFC2049] for the transaction confirmation display, such as text/plain or image/png. + /// Gets or sets the supported MIME content type [RFC2049] for the transaction confirmation display, such as text/plain or image/png. /// [JsonPropertyName("tcDisplayContentType")] public string TcDisplayContentType { get; set; } @@ -183,7 +183,7 @@ public class MetadataStatement public string[] AttestationRootCertificates { get; set; } /// - /// Gets or set a list of trust anchors used for ECDAA attestation. + /// Gets or set a list of trust anchors used for ECDAA attestation. /// [JsonPropertyName("ecdaaTrustAnchors")] public EcdaaTrustAnchor[] EcdaaTrustAnchors { get; set; } @@ -195,7 +195,7 @@ public class MetadataStatement public string Icon { get; set; } /// - /// Gets or sets a list of extensions supported by the authenticator. + /// Gets or sets a list of extensions supported by the authenticator. /// [JsonPropertyName("supportedExtensions")] public ExtensionDescriptor[] SupportedExtensions { get; set; } diff --git a/Src/Fido2.Models/Metadata/PatternAccuracyDescriptor.cs b/Src/Fido2.Models/Metadata/PatternAccuracyDescriptor.cs index 1356f722..71640adf 100644 --- a/Src/Fido2.Models/Metadata/PatternAccuracyDescriptor.cs +++ b/Src/Fido2.Models/Metadata/PatternAccuracyDescriptor.cs @@ -17,7 +17,7 @@ public sealed class PatternAccuracyDescriptor public required ulong MinComplexity { get; set; } /// - /// Gets or sets maximum number of false attempts before the authenticator will block authentication using this method (at least temporarily). + /// Gets or sets maximum number of false attempts before the authenticator will block authentication using this method (at least temporarily). /// Zero (0) means it will never block. /// [JsonPropertyName("maxRetries")] diff --git a/Src/Fido2.Models/Metadata/StatusReport.cs b/Src/Fido2.Models/Metadata/StatusReport.cs index f2b860d9..01abf6ac 100644 --- a/Src/Fido2.Models/Metadata/StatusReport.cs +++ b/Src/Fido2.Models/Metadata/StatusReport.cs @@ -44,7 +44,7 @@ public sealed class StatusReport public string Url { get; set; } /// - /// Gets or sets a description of the externally visible aspects of the Authenticator Certification evaluation. + /// Gets or sets a description of the externally visible aspects of the Authenticator Certification evaluation. /// [JsonPropertyName("certificationDescriptor")] public string CertificationDescriptor { get; set; } @@ -56,7 +56,7 @@ public sealed class StatusReport public string CertificateNumber { get; set; } /// - /// Gets or set the version of the Authenticator Certification Policy the implementation is Certified to. + /// Gets or set the version of the Authenticator Certification Policy the implementation is Certified to. /// [JsonPropertyName("certificationPolicyVersion")] public string CertificationPolicyVersion { get; set; } diff --git a/Src/Fido2.Models/Metadata/VerificationMethodDescriptor.cs b/Src/Fido2.Models/Metadata/VerificationMethodDescriptor.cs index cdc3670c..98569196 100644 --- a/Src/Fido2.Models/Metadata/VerificationMethodDescriptor.cs +++ b/Src/Fido2.Models/Metadata/VerificationMethodDescriptor.cs @@ -11,7 +11,7 @@ namespace Fido2NetLib; public class VerificationMethodDescriptor { /// - /// Gets or sets a single USER_VERIFY constant, not a bit flag combination. + /// Gets or sets a single USER_VERIFY constant, not a bit flag combination. /// /// /// This value MUST be non-zero. diff --git a/Src/Fido2.Models/Objects/AuthenticationExtensionsLargeBlobInputs.cs b/Src/Fido2.Models/Objects/AuthenticationExtensionsLargeBlobInputs.cs index a36397d8..fc18c36f 100644 --- a/Src/Fido2.Models/Objects/AuthenticationExtensionsLargeBlobInputs.cs +++ b/Src/Fido2.Models/Objects/AuthenticationExtensionsLargeBlobInputs.cs @@ -9,7 +9,7 @@ namespace Fido2NetLib.Objects; /// Note: If a value is specified for , and the assertion is intended to be invoked on a web browser, /// additional transformation must be performed on the client side before calling navigator.credentials.get(). /// Specifically, the value must be converted from a base64url-encoded string to a Uint8Array. -/// +/// /// https://w3c.github.io/webauthn/#dictdef-authenticationextensionslargeblobinputs /// public sealed class AuthenticationExtensionsLargeBlobInputs @@ -21,7 +21,7 @@ public sealed class AuthenticationExtensionsLargeBlobInputs /// A value of Preferred will allow credential creation to succeed even if largeBlob support is not available. /// /// Valid only during registration. - /// + /// /// https://w3c.github.io/webauthn/#dom-authenticationextensionslargeblobinputs-support /// [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] @@ -32,7 +32,7 @@ public sealed class AuthenticationExtensionsLargeBlobInputs /// Whether or not to read from the blob. /// /// Cannot be used in combination with . - /// + /// /// Valid only during assertion. /// /// https://w3c.github.io/webauthn/#dom-authenticationextensionslargeblobinputs-read diff --git a/Src/Fido2.Models/Objects/AuthenticationExtensionsLargeBlobOutputs.cs b/Src/Fido2.Models/Objects/AuthenticationExtensionsLargeBlobOutputs.cs index b67befc9..f9a7c4c5 100644 --- a/Src/Fido2.Models/Objects/AuthenticationExtensionsLargeBlobOutputs.cs +++ b/Src/Fido2.Models/Objects/AuthenticationExtensionsLargeBlobOutputs.cs @@ -9,7 +9,7 @@ namespace Fido2NetLib.Objects; /// Note: If the assertion is intended to be run on a web browser, additional transformation must be performed /// on the client extension output on the browser side after calling navigator.credentials.get(). Specifically, /// the value of largeBlob.blob must be converted from a Uint8Array to a base64url-encoded string. -/// +/// /// https://w3c.github.io/webauthn/#dictdef-authenticationextensionslargebloboutputs /// public sealed class AuthenticationExtensionsLargeBlobOutputs diff --git a/Src/Fido2.Models/Objects/AuthenticatorTransport.cs b/Src/Fido2.Models/Objects/AuthenticatorTransport.cs index 4c272937..03200a62 100644 --- a/Src/Fido2.Models/Objects/AuthenticatorTransport.cs +++ b/Src/Fido2.Models/Objects/AuthenticatorTransport.cs @@ -7,7 +7,7 @@ namespace Fido2NetLib.Objects; /// Authenticators may implement various transports for communicating with clients. /// This enumeration defines hints as to how clients might communicate with a particular /// authenticator in order to obtain an assertion for a specific credential. -/// Note that these hints represent the WebAuthn Relying Party's best belief as to how an authenticator may be reached. +/// Note that these hints represent the WebAuthn Relying Party's best belief as to how an authenticator may be reached. /// A Relying Party will typically learn of the supported transports for a public key credential via getTransports(). /// https://www.w3.org/TR/webauthn-2/#enum-transport /// @@ -46,7 +46,7 @@ public enum AuthenticatorTransport Hybrid, /// - /// Indicates the respective authenticator is contacted using a client device-specific transport, i.e., it is a platform authenticator. + /// Indicates the respective authenticator is contacted using a client device-specific transport, i.e., it is a platform authenticator. /// These authenticators are not removable from the client device. /// [EnumMember(Value = "internal")] diff --git a/Src/Fido2.Models/Objects/LargeBlobSupport.cs b/Src/Fido2.Models/Objects/LargeBlobSupport.cs index 0b70221c..d8110d4f 100644 --- a/Src/Fido2.Models/Objects/LargeBlobSupport.cs +++ b/Src/Fido2.Models/Objects/LargeBlobSupport.cs @@ -5,7 +5,7 @@ namespace Fido2NetLib.Objects; /// /// The possible values for requesting the largeBlob extension during credential registration. -/// +/// /// https://w3c.github.io/webauthn/#sctn-large-blob-extension /// [JsonConverter(typeof(FidoEnumConverter))] diff --git a/Src/Fido2.Models/Objects/RegisteredPublicKeyCredential.cs b/Src/Fido2.Models/Objects/RegisteredPublicKeyCredential.cs index 3ada5ade..c7865597 100644 --- a/Src/Fido2.Models/Objects/RegisteredPublicKeyCredential.cs +++ b/Src/Fido2.Models/Objects/RegisteredPublicKeyCredential.cs @@ -55,13 +55,13 @@ public class RegisteredPublicKeyCredential public string AttestationFormat { get; init; } /// - /// The value of the attestationObject attribute when the public key credential source was registered. + /// The value of the attestationObject attribute when the public key credential source was registered. /// Storing this enables the Relying Party to reference the credential's attestation statement at a later time. /// public byte[] AttestationObject { get; init; } /// - /// The value of the clientDataJSON attribute when the public key credential source was registered. + /// The value of the clientDataJSON attribute when the public key credential source was registered. /// Storing this in combination with the above attestationObject item enables the Relying Party to re-verify the attestation signature at a later time. /// public byte[] AttestationClientDataJson { get; init; } diff --git a/Src/Fido2.Models/Objects/UserVerificationRequirement.cs b/Src/Fido2.Models/Objects/UserVerificationRequirement.cs index e8732e67..dde8ce4d 100644 --- a/Src/Fido2.Models/Objects/UserVerificationRequirement.cs +++ b/Src/Fido2.Models/Objects/UserVerificationRequirement.cs @@ -4,7 +4,7 @@ namespace Fido2NetLib.Objects; /// -/// A WebAuthn Relying Party may require user verification for some of its operations but not for others, +/// A WebAuthn Relying Party may require user verification for some of its operations but not for others, /// and may use this type to express its needs. /// https://www.w3.org/TR/webauthn-2/#enumdef-userverificationrequirement /// @@ -12,21 +12,21 @@ namespace Fido2NetLib.Objects; public enum UserVerificationRequirement { /// - /// This value indicates that the Relying Party requires user verification for the operation + /// This value indicates that the Relying Party requires user verification for the operation /// and will fail the operation if the response does not have the UV flag set. /// [EnumMember(Value = "required")] Required, /// - /// This value indicates that the Relying Party prefers user verification for the operation if possible, + /// This value indicates that the Relying Party prefers user verification for the operation if possible, /// but will not fail the operation if the response does not have the UV flag set. /// [EnumMember(Value = "preferred")] Preferred, /// - /// This value indicates that the Relying Party does not want user verification employed during the operation + /// This value indicates that the Relying Party does not want user verification employed during the operation /// (e.g., in the interest of minimizing disruption to the user interaction flow). /// [EnumMember(Value = "discouraged")] diff --git a/Src/Fido2/AttestationFormat/AndroidKey.cs b/Src/Fido2/AttestationFormat/AndroidKey.cs index 2928b40c..53b5194c 100644 --- a/Src/Fido2/AttestationFormat/AndroidKey.cs +++ b/Src/Fido2/AttestationFormat/AndroidKey.cs @@ -142,7 +142,7 @@ public override ValueTask VerifyAsync(VerifyAttestation if (!request.TryGetSig(out byte[]? sig)) throw new Fido2VerificationException(Fido2ErrorCode.InvalidAttestation, Fido2ErrorMessages.InvalidAndroidKeyAttestationSignature); - // 2. Verify that sig is a valid signature over the concatenation of authenticatorData and clientDataHash + // 2. Verify that sig is a valid signature over the concatenation of authenticatorData and clientDataHash // using the attestation public key in attestnCert with the algorithm specified in alg if (!(request.X5c is CborArray { Length: > 0 } x5cArray)) throw new Fido2VerificationException(Fido2ErrorCode.InvalidAttestation, Fido2ErrorMessages.MalformedX5c_AndroidKeyAttestation); diff --git a/Src/Fido2/AttestationFormat/AndroidSafetyNet.cs b/Src/Fido2/AttestationFormat/AndroidSafetyNet.cs index ba51948e..c4d261e7 100644 --- a/Src/Fido2/AttestationFormat/AndroidSafetyNet.cs +++ b/Src/Fido2/AttestationFormat/AndroidSafetyNet.cs @@ -22,7 +22,7 @@ internal sealed class AndroidSafetyNet : AttestationVerifier public override async ValueTask VerifyAsync(VerifyAttestationRequest request) { - // 1. Verify that attStmt is valid CBOR conforming to the syntax defined above and perform + // 1. Verify that attStmt is valid CBOR conforming to the syntax defined above and perform // CBOR decoding on it to extract the contained fields // (handled in base class) diff --git a/Src/Fido2/AttestationFormat/AppleAppAttest.cs b/Src/Fido2/AttestationFormat/AppleAppAttest.cs index 01fb057c..972efb4e 100644 --- a/Src/Fido2/AttestationFormat/AppleAppAttest.cs +++ b/Src/Fido2/AttestationFormat/AppleAppAttest.cs @@ -24,7 +24,7 @@ public static byte[] GetAppleAppIdFromCredCertExtValue(X509ExtensionCollection e { if (s.TagValue is 1204) { - // App ID is the concatenation of your 10-digit team identifier, a period, and your app's CFBundleIdentifier value + // App ID is the concatenation of your 10-digit team identifier, a period, and your app's CFBundleIdentifier value s.CheckExactSequenceLength(1); s[0].CheckTag(Asn1Tag.PrimitiveOctetString); return s[0].GetOctetString(); diff --git a/Src/Fido2/AttestationFormat/AttestationVerifier.cs b/Src/Fido2/AttestationFormat/AttestationVerifier.cs index 1253b5f2..7ebf1946 100644 --- a/Src/Fido2/AttestationFormat/AttestationVerifier.cs +++ b/Src/Fido2/AttestationFormat/AttestationVerifier.cs @@ -30,7 +30,7 @@ public static AttestationVerifier Create(string formatIdentifier) "fido-u2f" => new FidoU2f(), // https://www.w3.org/TR/webauthn-2/#sctn-fido-u2f-attestation "packed" => new Packed(), // https://www.w3.org/TR/webauthn-2/#sctn-packed-attestation "apple" => new Apple(), // https://www.w3.org/TR/webauthn-2/#sctn-apple-anonymous-attestation - "apple-appattest" => new AppleAppAttest(), // https://developer.apple.com/documentation/devicecheck/validating_apps_that_connect_to_your_server + "apple-appattest" => new AppleAppAttest(), // https://developer.apple.com/documentation/devicecheck/validating_apps_that_connect_to_your_server _ => throw new Fido2VerificationException(Fido2ErrorCode.UnknownAttestationType, $"Unknown attestation type. Was '{formatIdentifier}'") }; #pragma warning restore format @@ -68,7 +68,7 @@ internal static bool IsAttnCertCACert(X509ExtensionCollection exts) internal static byte U2FTransportsFromAttnCert(X509ExtensionCollection exts) { byte u2fTransports = 0; - var ext = exts.FirstOrDefault(e => e.Oid?.Value is "1.3.6.1.4.1.45724.2.1.1"); // id-fido-u2f-ce-transports + var ext = exts.FirstOrDefault(e => e.Oid?.Value is "1.3.6.1.4.1.45724.2.1.1"); // id-fido-u2f-ce-transports if (ext != null) { var decodedU2fTransports = Asn1Element.Decode(ext.RawData); diff --git a/Src/Fido2/AttestationFormat/MetadataAttestationType.cs b/Src/Fido2/AttestationFormat/MetadataAttestationType.cs index d160d6be..90bab13f 100644 --- a/Src/Fido2/AttestationFormat/MetadataAttestationType.cs +++ b/Src/Fido2/AttestationFormat/MetadataAttestationType.cs @@ -7,9 +7,9 @@ namespace Fido2NetLib; internal enum MetadataAttestationType { /// - /// Indicates full basic attestation, based on an attestation private key shared among a class of authenticators (e.g. same model). - /// Authenticators must provide its attestation signature during the registration process for the same reason. - /// The attestation trust anchor is shared with FIDO Servers out of band (as part of the Metadata). + /// Indicates full basic attestation, based on an attestation private key shared among a class of authenticators (e.g. same model). + /// Authenticators must provide its attestation signature during the registration process for the same reason. + /// The attestation trust anchor is shared with FIDO Servers out of band (as part of the Metadata). /// This sharing process shouldt be done according to [UAFMetadataService]. /// [EnumMember(Value = "basic_full")] @@ -17,8 +17,8 @@ internal enum MetadataAttestationType /// /// Just syntactically a Basic Attestation. - /// The attestation object self-signed, i.e. it is signed using the UAuth.priv key, i.e. the key corresponding to the UAuth.pub key included in the attestation object. - /// As a consequence it does not provide a cryptographic proof of the security characteristics. + /// The attestation object self-signed, i.e. it is signed using the UAuth.priv key, i.e. the key corresponding to the UAuth.pub key included in the attestation object. + /// As a consequence it does not provide a cryptographic proof of the security characteristics. /// But it is the best thing we can do if the authenticator is not able to have an attestation private key. /// [EnumMember(Value = "basic_surrogate")] @@ -32,7 +32,7 @@ internal enum MetadataAttestationType ATTESTATION_ECDAA = 0x3e09, /// - /// Indicates PrivacyCA attestation as defined in [TCG-CMCProfile-AIKCertEnroll]. + /// Indicates PrivacyCA attestation as defined in [TCG-CMCProfile-AIKCertEnroll]. /// [EnumMember(Value = "attca")] [Fido2Standard(Optional = true)] diff --git a/Src/Fido2/AttestationFormat/Packed.cs b/Src/Fido2/AttestationFormat/Packed.cs index 29929f65..6a789be7 100644 --- a/Src/Fido2/AttestationFormat/Packed.cs +++ b/Src/Fido2/AttestationFormat/Packed.cs @@ -39,7 +39,7 @@ public static bool IsValidPackedAttnCertSubject(string attnCertSubj) public override ValueTask VerifyAsync(VerifyAttestationRequest request) { - // 1. Verify that attStmt is valid CBOR conforming to the syntax defined above and + // 1. Verify that attStmt is valid CBOR conforming to the syntax defined above and // perform CBOR decoding on it to extract the contained fields. if (request.AttStmt.Count is 0) throw new Fido2VerificationException(Fido2ErrorCode.InvalidAttestation, Fido2ErrorMessages.MissingPackedAttestationStatement); @@ -80,7 +80,7 @@ public override ValueTask VerifyAsync(VerifyAttestation // The attestation certificate attestnCert MUST be the first element in the array. X509Certificate2 attestnCert = trustPath[0]; - // 2a. Verify that sig is a valid signature over the concatenation of authenticatorData and clientDataHash + // 2a. Verify that sig is a valid signature over the concatenation of authenticatorData and clientDataHash // using the attestation public key in attestnCert with the algorithm specified in alg var cpk = new CredentialPublicKey(attestnCert, alg); @@ -97,7 +97,7 @@ public override ValueTask VerifyAsync(VerifyAttestation if (!IsValidPackedAttnCertSubject(attestnCert.Subject)) throw new Fido2VerificationException(Fido2ErrorCode.InvalidAttestation, Fido2ErrorMessages.InvalidAttestationCertSubject); - // 2biii. If the related attestation root certificate is used for multiple authenticator models, + // 2biii. If the related attestation root certificate is used for multiple authenticator models, // the Extension OID 1.3.6.1.4.1.45724.1.1.4 (id-fido-gen-ce-aaguid) MUST be present, containing the AAGUID as a 16-byte OCTET STRING // verify that the value of this extension matches the aaguid in authenticatorData var aaguid = AaguidFromAttnCertExts(attestnCert.Extensions); @@ -113,7 +113,7 @@ public override ValueTask VerifyAsync(VerifyAttestation throw new Fido2VerificationException(Fido2ErrorCode.InvalidAttestation, "aaguid present in packed attestation cert exts but does not match aaguid from authData"); } - // id-fido-u2f-ce-transports + // id-fido-u2f-ce-transports byte u2fTransports = U2FTransportsFromAttnCert(attestnCert.Extensions); // 2d. Optionally, inspect x5c and consult externally provided knowledge to determine whether attStmt conveys a Basic or AttCA attestation @@ -141,7 +141,7 @@ public override ValueTask VerifyAsync(VerifyAttestation if (!request.AuthData.AttestedCredentialData!.CredentialPublicKey.IsSameAlg(alg)) throw new Fido2VerificationException(Fido2ErrorCode.InvalidAttestation, "Algorithm mismatch between credential public key and authenticator data in self attestation statement"); - // 4b. Verify that sig is a valid signature over the concatenation of authenticatorData and + // 4b. Verify that sig is a valid signature over the concatenation of authenticatorData and // clientDataHash using the credential public key with alg if (!request.AuthData.AttestedCredentialData.CredentialPublicKey.Verify(request.Data, sig)) throw new Fido2VerificationException(Fido2ErrorCode.InvalidAttestation, "Failed to validate signature"); diff --git a/Src/Fido2/AttestationFormat/Tpm.cs b/Src/Fido2/AttestationFormat/Tpm.cs index d4ea8d86..bcfec693 100644 --- a/Src/Fido2/AttestationFormat/Tpm.cs +++ b/Src/Fido2/AttestationFormat/Tpm.cs @@ -31,7 +31,7 @@ internal sealed class Tpm : AttestationVerifier "id:4C454E00", // 'LEN' Lenovo "id:4D534654", // 'MSFT' Microsoft "id:4E534D20", // 'NSM' National Semiconductor - "id:4E545A00", // 'NTZ' Nationz + "id:4E545A00", // 'NTZ' Nationz "id:4E544300", // 'NTC' Nuvoton Technology "id:51434F4D", // 'QCOM' Qualcomm "id:534D5343", // 'SMSC' SMSC @@ -68,7 +68,7 @@ public override ValueTask VerifyAsync(VerifyAttestation int coseKty = (int)request.CredentialPublicKey[COSE.KeyCommonParameter.KeyType]; if (coseKty is 3) // RSA { - ReadOnlySpan coseMod = (byte[])request.CredentialPublicKey[COSE.KeyTypeParameter.N]; // modulus + ReadOnlySpan coseMod = (byte[])request.CredentialPublicKey[COSE.KeyTypeParameter.N]; // modulus ReadOnlySpan coseExp = (byte[])request.CredentialPublicKey[COSE.KeyTypeParameter.E]; // exponent if (!coseMod.SequenceEqual(pubArea.Unique)) @@ -116,7 +116,7 @@ public override ValueTask VerifyAsync(VerifyAttestation if (!dataHash.SequenceEqual(certInfo.ExtraData)) throw new Fido2VerificationException(Fido2ErrorCode.InvalidAttestation, "Hash value mismatch extraData and attToBeSigned"); - // 4d. Verify that attested contains a TPMS_CERTIFY_INFO structure, whose name field contains a valid Name for pubArea, as computed using the algorithm in the nameAlg field of pubArea + // 4d. Verify that attested contains a TPMS_CERTIFY_INFO structure, whose name field contains a valid Name for pubArea, as computed using the algorithm in the nameAlg field of pubArea ReadOnlySpan pubAreaRawHash = CryptoUtils.HashData(CryptoUtils.HashAlgFromCOSEAlg((COSE.Algorithm)certInfo.Alg), pubArea.Raw); if (!pubAreaRawHash.SequenceEqual(certInfo.AttestedName)) @@ -164,9 +164,9 @@ public override ValueTask VerifyAsync(VerifyAttestation (string? tpmManufacturer, string? tpmModel, string? tpmVersion) = SANFromAttnCertExts(aikCert.Extensions); // From https://www.trustedcomputinggroup.org/wp-content/uploads/Credential_Profile_EK_V2.0_R14_published.pdf - // "The issuer MUST include TPM manufacturer, TPM part number and TPM firmware version, using the directoryName - // form within the GeneralName structure. The ASN.1 encoding is specified in section 3.1.2 TPM Device - // Attributes. In accordance with RFC 5280[11], this extension MUST be critical if subject is empty + // "The issuer MUST include TPM manufacturer, TPM part number and TPM firmware version, using the directoryName + // form within the GeneralName structure. The ASN.1 encoding is specified in section 3.1.2 TPM Device + // Attributes. In accordance with RFC 5280[11], this extension MUST be critical if subject is empty // and SHOULD be non-critical if subject is non-empty" // Best I can figure to do for now? @@ -191,7 +191,7 @@ public override ValueTask VerifyAsync(VerifyAttestation if (IsAttnCertCACert(aikCert.Extensions)) throw new Fido2VerificationException(Fido2ErrorCode.InvalidAttestation, "aikCert Basic Constraints extension CA component must be false"); - // 5biiiiii. An Authority Information Access (AIA) extension with entry id-ad-ocsp and a CRL Distribution Point extension [RFC5280] + // 5biiiiii. An Authority Information Access (AIA) extension with entry id-ad-ocsp and a CRL Distribution Point extension [RFC5280] // are both OPTIONAL as the status of many attestation certificates is available through metadata services. // See, for example, the FIDO Metadata Service [FIDOMetadataService]. @@ -261,7 +261,7 @@ private static (string?, string?, string?) SANFromAttnCertExts(X509ExtensionColl nameSequence.CheckMinimumSequenceLength(1); /* - + Per Trusted Computing Group Endorsement Key Credential Profile section 3.2.9: "The issuer MUST include TPM manufacturer, TPM part number and TPM firmware version, using the directoryName-form within the GeneralName structure. The ASN.1 encoding is specified in section 3.1.2 TPM Device Attributes." @@ -385,10 +385,10 @@ public enum TpmEccCurve : ushort TPM_ECC_NIST_P224, // 0x0002 TPM_ECC_NIST_P256, // 0x0003 TPM_ECC_NIST_P384, // 0x0004 - TPM_ECC_NIST_P521, // 0x0005 + TPM_ECC_NIST_P521, // 0x0005 TPM_ECC_BN_P256, // 0x0010 curve to support ECDAA TPM_ECC_BN_P638, // 0x0011 curve to support ECDAA - TPM_ECC_SM2_P256 // 0x0020 + TPM_ECC_SM2_P256 // 0x0020 } public enum TpmAlg : ushort @@ -426,7 +426,7 @@ public enum TpmAlg : ushort TPM_ALG_CAMELLIA, // 26 TPM_ALG_CTR = 0x40, TPM_ALG_OFB, // 41 - TPM_ALG_CBC, // 42 + TPM_ALG_CBC, // 42 TPM_ALG_CFB, // 43 TPM_ALG_ECB // 44 }; @@ -499,8 +499,8 @@ public CertInfo(byte[] data) public static (ushort size, byte[] name) NameFromTPM2BName(ReadOnlySpan ab, ref int offset) { // TCG TPM Rev 2.0, part 2, structures, section 10.5.3, TPM2B_NAME - // This buffer holds a Name for any entity type. - // The type of Name in the structure is determined by context and the size parameter. + // This buffer holds a Name for any entity type. + // The type of Name in the structure is determined by context and the size parameter. ushort totalSize = 0; if (AuthDataHelper.GetSizedByteArray(ab, ref offset, 2) is byte[] totalBytes) { @@ -514,11 +514,11 @@ public static (ushort size, byte[] name) NameFromTPM2BName(ReadOnlySpan ab size = BinaryPrimitives.ReadUInt16BigEndian(bytes); } - // If size is 4, then the Name is a handle. + // If size is 4, then the Name is a handle. if (size is 4) throw new Fido2VerificationException("Unexpected handle in TPM2B_NAME"); - // If size is 0, then no Name is present. + // If size is 0, then no Name is present. if (size is 0) throw new Fido2VerificationException("Unexpected no name found in TPM2B_NAME"); @@ -562,10 +562,10 @@ public PubArea(byte[] data) Type = AuthDataHelper.GetSizedByteArray(data, ref offset, 2); var tpmAlg = (TpmAlg)Enum.ToObject(typeof(TpmAlg), BinaryPrimitives.ReadUInt16BigEndian(Type)); - // TPMI_ALG_HASH + // TPMI_ALG_HASH Alg = AuthDataHelper.GetSizedByteArray(data, ref offset, 2); - // TPMA_OBJECT, attributes that, along with type, determine the manipulations of this object + // TPMA_OBJECT, attributes that, along with type, determine the manipulations of this object Attributes = AuthDataHelper.GetSizedByteArray(data, ref offset, 4); // TPM2B_DIGEST, optional policy for using this key, computed using the alg of the object @@ -591,7 +591,7 @@ public PubArea(byte[] data) Scheme = AuthDataHelper.GetSizedByteArray(data, ref offset, 2); } - // TPMI_RSA_KEY_BITS, number of bits in the public modulus + // TPMI_RSA_KEY_BITS, number of bits in the public modulus KeyBits = null; // The public exponent, a prime number greater than 2. @@ -618,9 +618,9 @@ public PubArea(byte[] data) // TPMI_ECC_CURVE CurveID = null; - // TPMT_KDF_SCHEME, an optional key derivation scheme for generating a symmetric key from a Z value - // If the kdf parameter associated with curveID is not TPM_ALG_NULL then this is required to be NULL. - // NOTE There are currently no commands where this parameter has effect and, in the reference code, this field needs to be set to TPM_ALG_NULL. + // TPMT_KDF_SCHEME, an optional key derivation scheme for generating a symmetric key from a Z value + // If the kdf parameter associated with curveID is not TPM_ALG_NULL then this is required to be NULL. + // NOTE There are currently no commands where this parameter has effect and, in the reference code, this field needs to be set to TPM_ALG_NULL. KDF = null; if (tpmAlg is TpmAlg.TPM_ALG_ECC) diff --git a/Src/Fido2/AuthenticatorAssertionResponse.cs b/Src/Fido2/AuthenticatorAssertionResponse.cs index 166901a2..a47d4be3 100644 --- a/Src/Fido2/AuthenticatorAssertionResponse.cs +++ b/Src/Fido2/AuthenticatorAssertionResponse.cs @@ -129,7 +129,7 @@ public async Task VerifyAsync( var conformanceTesting = metadataService != null && metadataService.ConformanceTesting(); // 14. Verify that the UP bit of the flags in authData is set. - // Todo: Conformance testing verifies the UVP flags differently than W3C spec, simplify this by removing the mention of conformanceTesting when conformance tools are updated) + // Todo: Conformance testing verifies the UVP flags differently than W3C spec, simplify this by removing the mention of conformanceTesting when conformance tools are updated) if (!authData.UserPresent && !conformanceTesting) throw new Fido2VerificationException(Fido2ErrorCode.UserPresentFlagNotSet, Fido2ErrorMessages.UserPresentFlagNotSet); @@ -156,7 +156,7 @@ public async Task VerifyAsync( devicePublicKeyResult = await DevicePublicKeyAuthenticationAsync(storedDevicePublicKeys, Raw.ClientExtensionResults, AuthenticatorData, hash).ConfigureAwait(false); } - // Pretty sure these conditions are not able to be met due to the AuthenticatorData constructor implementation + // Pretty sure these conditions are not able to be met due to the AuthenticatorData constructor implementation if (authData.HasExtensionsData && (authData.Extensions is null || authData.Extensions.Length is 0)) throw new Fido2VerificationException(Fido2ErrorCode.MalformedExtensionsDetected, Fido2ErrorMessages.MalformedExtensionsDetected); @@ -193,8 +193,8 @@ public async Task VerifyAsync( /// /// If the devicePubKey extension was included on a navigator.credentials.get() call, then the below - /// verification steps are performed in the context of this step of § 7.2 Verifying an Authentication Assertion using - /// these variables established therein: credential, clientExtensionResults, authData, and hash. Relying Party policy + /// verification steps are performed in the context of this step of § 7.2 Verifying an Authentication Assertion using + /// these variables established therein: credential, clientExtensionResults, authData, and hash. Relying Party policy /// may specify whether a response without a devicePubKey is acceptable. /// /// @@ -215,7 +215,7 @@ public async Task VerifyAsync( // perform CBOR decoding on it to extract the contained fields: aaguid, dpk, scope, nonce, fmt, attStmt. var devicePublicKeyAuthenticatorOutput = DevicePublicKeyAuthenticatorOutput.Parse(attObjForDevicePublicKey.AuthenticatorOutput); - // 3. Verify that signature is a valid signature over the assertion signature input (i.e. authData and hash) by the device public key dpk. + // 3. Verify that signature is a valid signature over the assertion signature input (i.e. authData and hash) by the device public key dpk. if (!devicePublicKeyAuthenticatorOutput.DevicePublicKey.Verify([.. authData.ToByteArray(), .. hash], attObjForDevicePublicKey.Signature)) throw new Fido2VerificationException(Fido2ErrorCode.InvalidSignature, Fido2ErrorMessages.InvalidSignature); diff --git a/Src/Fido2/AuthenticatorAttestationResponse.cs b/Src/Fido2/AuthenticatorAttestationResponse.cs index 1522e54b..075229b4 100644 --- a/Src/Fido2/AuthenticatorAttestationResponse.cs +++ b/Src/Fido2/AuthenticatorAttestationResponse.cs @@ -12,9 +12,9 @@ namespace Fido2NetLib; /// -/// The AuthenticatorAttestationResponse interface represents the authenticator's response +/// The AuthenticatorAttestationResponse interface represents the authenticator's response /// to a client’s request for the creation of a new public key credential. -/// It contains information about the new credential that can be used to identify it for later use, +/// It contains information about the new credential that can be used to identify it for later use, /// and metadata that can be used by the Relying Party to assess the characteristics of the credential during registration. /// public sealed class AuthenticatorAttestationResponse : AuthenticatorResponse @@ -120,9 +120,9 @@ public async Task VerifyAsync( if (!originalOptions.PubKeyCredParams.Any(a => authData.AttestedCredentialData.CredentialPublicKey.IsSameAlg(a.Alg))) throw new Fido2VerificationException(Fido2ErrorCode.CredentialAlgorithmRequirementNotMet, Fido2ErrorMessages.CredentialAlgorithmRequirementNotMet); - // 18. Verify that the values of the client extension outputs in clientExtensionResults and the authenticator extension outputs in the extensions in authData are as expected, - // considering the client extension input values that were given as the extensions option in the create() call. In particular, any extension identifier values - // in the clientExtensionResults and the extensions in authData MUST be also be present as extension identifier values in the extensions member of options, i.e., + // 18. Verify that the values of the client extension outputs in clientExtensionResults and the authenticator extension outputs in the extensions in authData are as expected, + // considering the client extension input values that were given as the extensions option in the create() call. In particular, any extension identifier values + // in the clientExtensionResults and the extensions in authData MUST be also be present as extension identifier values in the extensions member of options, i.e., // no extensions are present that were not requested. In the general case, the meaning of "are as expected" is specific to the Relying Party and which extensions are in use. // TODO?: Implement sort of like this: ClientExtensions.Keys.Any(x => options.extensions.contains(x); byte[]? devicePublicKeyResult = null; @@ -133,16 +133,16 @@ public async Task VerifyAsync( } // 19. Determine the attestation statement format by performing a USASCII case-sensitive match on fmt - // against the set of supported WebAuthn Attestation Statement Format Identifier values. + // against the set of supported WebAuthn Attestation Statement Format Identifier values. var verifier = AttestationVerifier.Create(AttestationObject.Fmt); - // 20. Verify that attStmt is a correct attestation statement, conveying a valid attestation signature, + // 20. Verify that attStmt is a correct attestation statement, conveying a valid attestation signature, // by using the attestation statement format fmt’s verification procedure given attStmt, authData // and the hash of the serialized client data computed in step 7 (var attType, var trustPath) = await verifier.VerifyAsync(AttestationObject.AttStmt, AttestationObject.AuthData, clientDataHash).ConfigureAwait(false); // 21. If validation is successful, obtain a list of acceptable trust anchors (attestation root certificates or ECDAA-Issuer public keys) - // for that attestation type and attestation statement format fmt, from a trusted source or from policy. + // for that attestation type and attestation statement format fmt, from a trusted source or from policy. // For example, the FIDO Metadata Service [FIDOMetadataService] provides one way to obtain such information, using the aaguid in the attestedCredentialData in authData. MetadataBLOBPayloadEntry? metadataEntry = null; @@ -170,7 +170,7 @@ public async Task VerifyAsync( // 23. Verify that the credentialId is ≤ 1023 bytes. // Handled by AttestedCredentialData constructor - // 24. Check that the credentialId is not yet registered to any other user. + // 24. Check that the credentialId is not yet registered to any other user. // If registration is requested for a credential that is already registered to a different user, // the Relying Party SHOULD fail this registration ceremony, or it MAY decide to accept the registration, e.g. while deleting the older registration @@ -180,7 +180,7 @@ public async Task VerifyAsync( } // 25. If the attestation statement attStmt verified successfully and is found to be trustworthy, - // then register the new credential with the account that was denoted in the options.user passed to create(), + // then register the new credential with the account that was denoted in the options.user passed to create(), // by associating it with the credentialId and credentialPublicKey in the attestedCredentialData in authData, // as appropriate for the Relying Party's system. @@ -207,10 +207,10 @@ public async Task VerifyAsync( } /// - /// If the devicePubKey extension was included on a navigator.credentials.create() call, - /// then the below verification steps are performed in the context of this step of § 7.1 - /// Registering a New Credential using these variables established therein: - /// credential, clientExtensionResults, authData, and hash. + /// If the devicePubKey extension was included on a navigator.credentials.create() call, + /// then the below verification steps are performed in the context of this step of § 7.1 + /// Registering a New Credential using these variables established therein: + /// credential, clientExtensionResults, authData, and hash. /// Relying Party policy may specify whether a response without a devicePubKey is acceptable. /// /// @@ -219,7 +219,7 @@ public async Task VerifyAsync( /// /// /// The used to propagate notifications that the operation should be canceled. - /// + /// private async Task DevicePublicKeyRegistrationAsync( Fido2Configuration config, IMetadataService? metadataService, @@ -235,7 +235,7 @@ private async Task DevicePublicKeyRegistrationAsync( // perform CBOR decoding on it to extract the contained fields: aaguid, dpk, scope, nonce, fmt, attStmt. var devicePublicKeyAuthenticatorOutput = DevicePublicKeyAuthenticatorOutput.Parse(attObjForDevicePublicKey.AuthenticatorOutput); - // 3. Verify that signature is a valid signature over the assertion signature input (i.e. authData and hash) by the device public key dpk. + // 3. Verify that signature is a valid signature over the assertion signature input (i.e. authData and hash) by the device public key dpk. if (!devicePublicKeyAuthenticatorOutput.DevicePublicKey.Verify([.. authData.ToByteArray(), .. hash], attObjForDevicePublicKey.Signature)) throw new Fido2VerificationException(Fido2ErrorCode.InvalidSignature, Fido2ErrorMessages.InvalidSignature); diff --git a/Src/Fido2/AuthenticatorResponse.cs b/Src/Fido2/AuthenticatorResponse.cs index eddee047..a6ce4a9f 100644 --- a/Src/Fido2/AuthenticatorResponse.cs +++ b/Src/Fido2/AuthenticatorResponse.cs @@ -85,7 +85,7 @@ protected void BaseVerify(IReadOnlySet fullyQualifiedExpectedOrigins, Re if (!fullyQualifiedExpectedOrigins.Contains(fullyQualifiedOrigin)) throw new Fido2VerificationException($"Fully qualified origin {fullyQualifiedOrigin} of {Origin} not equal to fully qualified original origin {string.Join(", ", fullyQualifiedExpectedOrigins.Take(MAX_ORIGINS_TO_PRINT))} ({fullyQualifiedExpectedOrigins.Count})"); - // 13?. Verify that the value of C.tokenBinding.status matches the state of Token Binding for the TLS connection over which the assertion was obtained. + // 13?. Verify that the value of C.tokenBinding.status matches the state of Token Binding for the TLS connection over which the assertion was obtained. // If Token Binding was used on that TLS connection, also verify that C.tokenBinding.id matches the base64url encoding of the Token Binding ID for the connection. TokenBinding?.Verify(requestTokenBindingId); } diff --git a/Src/Fido2/Extensions/CryptoUtils.cs b/Src/Fido2/Extensions/CryptoUtils.cs index 8714becf..6edb3407 100644 --- a/Src/Fido2/Extensions/CryptoUtils.cs +++ b/Src/Fido2/Extensions/CryptoUtils.cs @@ -134,13 +134,13 @@ public static byte[] SigFromEcDsaSig(byte[] ecDsaSig, int keySize) // .NET requires IEEE P-1363 fixed size unsigned big endian values for R and S // ASN.1 requires storing positive integer values with any leading 0s removed - // Convert ASN.1 format to IEEE P-1363 format - // determine coefficient size + // Convert ASN.1 format to IEEE P-1363 format + // determine coefficient size // common coefficient sizes include: 32, 48, and 64 var coefficientSize = (int)Math.Ceiling((decimal)keySize / 8); - // Create buffer to copy R into + // Create buffer to copy R into Span p1363R = coefficientSize <= 64 ? stackalloc byte[coefficientSize] : new byte[coefficientSize]; @@ -154,7 +154,7 @@ public static byte[] SigFromEcDsaSig(byte[] ecDsaSig, int keySize) r.CopyTo(p1363R.Slice(coefficientSize - r.Length)); } - // Create byte array to copy S into + // Create byte array to copy S into Span p1363S = coefficientSize <= 64 ? stackalloc byte[coefficientSize] : new byte[coefficientSize]; diff --git a/Src/Fido2/Fido2.csproj b/Src/Fido2/Fido2.csproj index 31b3a5c8..7bdeb6a8 100644 --- a/Src/Fido2/Fido2.csproj +++ b/Src/Fido2/Fido2.csproj @@ -1,4 +1,4 @@ - + $(SupportedTargetFrameworks) @@ -30,4 +30,4 @@ - \ No newline at end of file + diff --git a/Src/Fido2/Objects/AttestedCredentialData.cs b/Src/Fido2/Objects/AttestedCredentialData.cs index 94deffd1..1f4d0b7e 100644 --- a/Src/Fido2/Objects/AttestedCredentialData.cs +++ b/Src/Fido2/Objects/AttestedCredentialData.cs @@ -45,7 +45,7 @@ public AttestedCredentialData(Guid aaGuid, byte[] credentialId, CredentialPublic public byte[] CredentialId { get; } /// - /// The credential public key encoded in COSE_Key format, as defined in + /// The credential public key encoded in COSE_Key format, as defined in /// Section 7 of RFC8152, using the CTAP2 canonical CBOR encoding form. /// /// @@ -101,7 +101,7 @@ internal static AttestedCredentialData Parse(ReadOnlyMemory data, out int var aaGuid = new Guid(aaGuidBytes.Span, bigEndian: true); - // Byte length of Credential ID, 16-bit unsigned big-endian integer. + // Byte length of Credential ID, 16-bit unsigned big-endian integer. var credentialIDLen = BinaryPrimitives.ReadUInt16BigEndian(data.Slice(position, 2).Span); if (credentialIDLen > _maxCredentialIdLength) throw new Fido2VerificationException(Fido2ErrorCode.InvalidAttestedCredentialData, Fido2ErrorMessages.InvalidAttestedCredentialData_CredentialIdTooLong); @@ -113,8 +113,8 @@ internal static AttestedCredentialData Parse(ReadOnlyMemory data, out int position += credentialIDLen; - // "Determining attested credential data's length, which is variable, involves determining - // credentialPublicKey's beginning location given the preceding credentialId's length, and + // "Determining attested credential data's length, which is variable, involves determining + // credentialPublicKey's beginning location given the preceding credentialId's length, and // then determining the credentialPublicKey's length" diff --git a/Src/Fido2/Objects/AuthenticatorData.cs b/Src/Fido2/Objects/AuthenticatorData.cs index 6b7bb1b7..36918ca1 100644 --- a/Src/Fido2/Objects/AuthenticatorData.cs +++ b/Src/Fido2/Objects/AuthenticatorData.cs @@ -27,12 +27,12 @@ public sealed class AuthenticatorData( public byte[] RpIdHash { get; } = rpIdHash; /// - /// Signature counter, 32-bit unsigned big-endian integer. + /// Signature counter, 32-bit unsigned big-endian integer. /// public uint SignCount { get; } = signCount; /// - /// Attested credential data is a variable-length byte array added to the + /// Attested credential data is a variable-length byte array added to the /// authenticator data when generating an attestation object for a given credential. /// public AttestedCredentialData? AttestedCredentialData { get; } = acd; @@ -43,7 +43,7 @@ public sealed class AuthenticatorData( public Extensions? Extensions { get; } = extensions; /// - /// Flags contains information from the authenticator about the authentication + /// Flags contains information from the authenticator about the authentication /// and whether or not certain data is present in the authenticator data. /// private readonly AuthenticatorFlags _flags = flags; @@ -61,16 +61,16 @@ public sealed class AuthenticatorData( public bool UserVerified => _flags.HasFlag(AuthenticatorFlags.UV); /// - /// A Public Key Credential Source's generating authenticator determines at creation time whether the public key credential source is allowed to be backed up. - /// Backup eligibility is signaled in authenticator data's flags along with the current backup state. - /// Backup eligibility is a credential property and is permanent for a given public key credential source. + /// A Public Key Credential Source's generating authenticator determines at creation time whether the public key credential source is allowed to be backed up. + /// Backup eligibility is signaled in authenticator data's flags along with the current backup state. + /// Backup eligibility is a credential property and is permanent for a given public key credential source. /// A backup eligible public key credential source is referred to as a multi-device credential whereas one that is not backup eligible is referred to as a single-device credential. /// /// public bool IsBackupEligible => _flags.HasFlag(AuthenticatorFlags.BE); /// - /// The current backup state of a multi-device credential as determined by the current managing authenticator. + /// The current backup state of a multi-device credential as determined by the current managing authenticator. /// Backup state is signaled in authenticator data's flags and can change over time. /// /// diff --git a/Src/Fido2/Objects/AuthenticatorFlags.cs b/Src/Fido2/Objects/AuthenticatorFlags.cs index e77e5165..cb403276 100644 --- a/Src/Fido2/Objects/AuthenticatorFlags.cs +++ b/Src/Fido2/Objects/AuthenticatorFlags.cs @@ -3,7 +3,7 @@ namespace Fido2NetLib.Objects; /// -/// Authenticator data flags +/// Authenticator data flags /// /// [Flags] @@ -27,16 +27,16 @@ public enum AuthenticatorFlags : byte UV = 0x4, /// - /// A Public Key Credential Source's generating authenticator determines at creation time whether the public key credential source is allowed to be backed up. - /// Backup eligibility is signaled in authenticator data's flags along with the current backup state. - /// Backup eligibility is a credential property and is permanent for a given public key credential source. + /// A Public Key Credential Source's generating authenticator determines at creation time whether the public key credential source is allowed to be backed up. + /// Backup eligibility is signaled in authenticator data's flags along with the current backup state. + /// Backup eligibility is a credential property and is permanent for a given public key credential source. /// A backup eligible public key credential source is referred to as a multi-device credential whereas one that is not backup eligible is referred to as a single-device credential. /// /// BE = 0x8, /// - /// The current backup state of a multi-device credential as determined by the current managing authenticator. + /// The current backup state of a multi-device credential as determined by the current managing authenticator. /// Backup state is signaled in authenticator data's flags and can change over time. /// /// diff --git a/Src/Fido2/Objects/DevicePublicKeyAuthenticatorOutput.cs b/Src/Fido2/Objects/DevicePublicKeyAuthenticatorOutput.cs index fb00bdd4..b96516e0 100644 --- a/Src/Fido2/Objects/DevicePublicKeyAuthenticatorOutput.cs +++ b/Src/Fido2/Objects/DevicePublicKeyAuthenticatorOutput.cs @@ -11,7 +11,7 @@ public sealed class DevicePublicKeyAuthenticatorOutput internal static ReadOnlySpan _dpkAuthDataPrefix => [ 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x20, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x6b, 0x65, 0x79, 0x20, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x73, 0x69, 0x67, 0x00, 0xff, 0xff, 0xff, 0xff + 0x6f, 0x6e, 0x20, 0x73, 0x69, 0x67, 0x00, 0xff, 0xff, 0xff, 0xff ]; #pragma warning restore format @@ -40,25 +40,25 @@ internal DevicePublicKeyAuthenticatorOutput(CborMap map) public Guid AaGuid { get; } /// - /// The credential public key encoded in COSE_Key format, as defined in + /// The credential public key encoded in COSE_Key format, as defined in /// Section 7 of RFC8152, using the CTAP2 canonical CBOR encoding form. /// /// public CredentialPublicKey DevicePublicKey { get; } /// - /// Whether this key is scoped to the entire device, or a loosely-defined, narrower scope called "app". + /// Whether this key is scoped to the entire device, or a loosely-defined, narrower scope called "app". /// For example, a "device"-scoped key is expected to be the same between an app and a browser on the same device, while an "app"-scoped key would probably not be. /// Whatever the scope, a device key is still specific to a given credential and does not provide any ability to link credentials. /// Whether device-scoped or not, keys are still device-bound. I.e.an app-scoped key does not enjoy lesser protection from extraction. - /// A value of 0x00 means "entire device" ("all apps") scope. + /// A value of 0x00 means "entire device" ("all apps") scope. /// 0x01 means "per-app" scope. Values other than 0x00 or 0x01 are reserved for future use. /// public uint Scope { get; } /// /// An authenticator-generated random nonce for inclusion in the attestation signature. - /// If the authenticator chooses to not generate a nonce, it sets this to a zero-length byte string. + /// If the authenticator chooses to not generate a nonce, it sets this to a zero-length byte string. /// See the note below about "randomNonce" for a discussion on the nonce's purpose. /// public ReadOnlySpan Nonce => _nonce; diff --git a/Src/Fido2/TrustAnchor.cs b/Src/Fido2/TrustAnchor.cs index cbdbcdb3..ce135011 100644 --- a/Src/Fido2/TrustAnchor.cs +++ b/Src/Fido2/TrustAnchor.cs @@ -59,7 +59,7 @@ static bool ContainsAttestationType(MetadataBLOBPayloadEntry entry, MetadataAtte // [ ] ATTESTATION_ECDAA "ecdaa" | currently handled as self signed w/ no test coverage // [ ] ATTESTATION_ANONCA "anonca" | currently not verified w/ no test coverage - // [ ] ATTESTATION_NONE "none" | currently handled as self signed w/ no test coverage + // [ ] ATTESTATION_NONE "none" | currently handled as self signed w/ no test coverage } } } diff --git a/Tests/Fido2.Ctap2.Tests/Fido2.Ctap2.Tests.csproj b/Tests/Fido2.Ctap2.Tests/Fido2.Ctap2.Tests.csproj index 7b536c52..f47737c5 100644 --- a/Tests/Fido2.Ctap2.Tests/Fido2.Ctap2.Tests.csproj +++ b/Tests/Fido2.Ctap2.Tests/Fido2.Ctap2.Tests.csproj @@ -1,4 +1,4 @@ - + $(SupportedTargetFrameworks) diff --git a/Tests/Fido2.Tests/.config/dotnet-tools.json b/Tests/Fido2.Tests/.config/dotnet-tools.json index b1a31464..447a69b2 100644 --- a/Tests/Fido2.Tests/.config/dotnet-tools.json +++ b/Tests/Fido2.Tests/.config/dotnet-tools.json @@ -9,4 +9,4 @@ ] } } -} \ No newline at end of file +} diff --git a/Tests/Fido2.Tests/Fido2.Tests.csproj b/Tests/Fido2.Tests/Fido2.Tests.csproj index 8e91ee4f..4e92fc2d 100644 --- a/Tests/Fido2.Tests/Fido2.Tests.csproj +++ b/Tests/Fido2.Tests/Fido2.Tests.csproj @@ -1,4 +1,4 @@ - + $(SupportedTargetFrameworks) diff --git a/Tests/Fido2.Tests/TestFiles/assertionNoneOptions.json b/Tests/Fido2.Tests/TestFiles/assertionNoneOptions.json index fc5face4..cf8e75a4 100644 --- a/Tests/Fido2.Tests/TestFiles/assertionNoneOptions.json +++ b/Tests/Fido2.Tests/TestFiles/assertionNoneOptions.json @@ -1,4 +1,4 @@ -{ +{ "challenge": "bNhBhi9JITEQuYNPlxoHHj0kzNsVSLMVM0JfgScPZiS7nGF51omGSNLY61FBZ84gG5nRx0EL0tC8Thrl0Aazcg", "timeout": 60000, "rpId": "localhost", @@ -10,4 +10,4 @@ } ], "userVerification": "discouraged" -} \ No newline at end of file +} diff --git a/Tests/Fido2.Tests/TestFiles/assertionNoneResponse.json b/Tests/Fido2.Tests/TestFiles/assertionNoneResponse.json index 60355446..abb5b6f3 100644 --- a/Tests/Fido2.Tests/TestFiles/assertionNoneResponse.json +++ b/Tests/Fido2.Tests/TestFiles/assertionNoneResponse.json @@ -1,4 +1,4 @@ -{ +{ "id": "8Tx_CDyiKeC0A-iHNG78f5hTEDowkXVnOXrR2K-HBGGH75UxhWDzWhoqz32wHQa5afmr9OzzBz7PD3HohOhBIA", "rawId": "8Tx_CDyiKeC0A-iHNG78f5hTEDowkXVnOXrR2K-HBGGH75UxhWDzWhoqz32wHQa5afmr9OzzBz7PD3HohOhBIA", "type": "public-key", @@ -8,4 +8,4 @@ "signature": "3046022100f20793dc46905c62fdbc309506b59c7cfa4fafc42dc2e51af4e58f474f64ba78022100c550af5e6516816517ddf83706fab02fe6287c04c8747a0621949456792111b6", "userHandle": null } -} \ No newline at end of file +} diff --git a/Tests/Fido2.Tests/TestFiles/attestationAndroidKeyOptions.json b/Tests/Fido2.Tests/TestFiles/attestationAndroidKeyOptions.json index f28f797f..551ecaaf 100644 --- a/Tests/Fido2.Tests/TestFiles/attestationAndroidKeyOptions.json +++ b/Tests/Fido2.Tests/TestFiles/attestationAndroidKeyOptions.json @@ -25,4 +25,4 @@ "attestation": "direct", "authenticatorSelection": null, "excludeCredentials": [] -} \ No newline at end of file +} diff --git a/Tests/Fido2.Tests/TestFiles/attestationAppleOptions.json b/Tests/Fido2.Tests/TestFiles/attestationAppleOptions.json index e31cc402..0628b600 100644 --- a/Tests/Fido2.Tests/TestFiles/attestationAppleOptions.json +++ b/Tests/Fido2.Tests/TestFiles/attestationAppleOptions.json @@ -25,4 +25,4 @@ "attestation": "direct", "authenticatorSelection": null, "excludeCredentials": [] -} \ No newline at end of file +} diff --git a/Tests/Fido2.Tests/TestFiles/attestationNoneOptions.json b/Tests/Fido2.Tests/TestFiles/attestationNoneOptions.json index 37864ef2..0f5d051d 100644 --- a/Tests/Fido2.Tests/TestFiles/attestationNoneOptions.json +++ b/Tests/Fido2.Tests/TestFiles/attestationNoneOptions.json @@ -1,4 +1,4 @@ -{ +{ "status": "ok", "errorMessage": "", "rp": { @@ -19,4 +19,4 @@ ], "timeout": 60000, "attestation": "none" -} \ No newline at end of file +} diff --git a/Tests/Fido2.Tests/TestFiles/attestationNoneResponse.json b/Tests/Fido2.Tests/TestFiles/attestationNoneResponse.json index 7d349fb2..b2cf51f8 100644 --- a/Tests/Fido2.Tests/TestFiles/attestationNoneResponse.json +++ b/Tests/Fido2.Tests/TestFiles/attestationNoneResponse.json @@ -1,4 +1,4 @@ -{ +{ "id": "8Tx_CDyiKeC0A-iHNG78f5hTEDowkXVnOXrR2K-HBGGH75UxhWDzWhoqz32wHQa5afmr9OzzBz7PD3HohOhBIA", "rawId": "8Tx_CDyiKeC0A-iHNG78f5hTEDowkXVnOXrR2K-HBGGH75UxhWDzWhoqz32wHQa5afmr9OzzBz7PD3HohOhBIA", "type": "public-key", @@ -6,4 +6,4 @@ "attestationObject": "o2NmbXRkbm9uZWdhdHRTdG10oGhhdXRoRGF0YVjESZYN5YgOjGh0NBcPZHZgW4_krrmihjLHmVzzuoMdl2NBAAAAAAAAAAAAAAAAAAAAAAAAAAAAQPE8fwg8oingtAPohzRu_H-YUxA6MJF1Zzl60divhwRhh--VMYVg81oaKs99sB0GuWn5q_Ts8wc-zw9x6IToQSClAQIDJiABIVggHWBE15KgDB47-VhaKEOS_fZPu3-OhjM4MKQwXU4sceMiWCBTPHuYgZn-qdrZJI4EvceGQNMDHm4AgX2Fw6IZySGFjQ", "clientDataJSON": "eyJjaGFsbGVuZ2UiOiJhbkNDSXhGUnlMRXlJZ29ISHBrSm94VWp4MmF4QTlzV2JSdzNUYjd5V05mVGZ3NGQyZFBtd096bXBRODRSbFhCM1JSTlpqRGR4dE1EOHhZNDNSVGhNdyIsIm9yaWdpbiI6Imh0dHBzOi8vbG9jYWxob3N0OjQ0MzI5IiwidHlwZSI6IndlYmF1dGhuLmNyZWF0ZSJ9" } -} \ No newline at end of file +} diff --git a/Tests/Fido2.Tests/TestFiles/attestationOptionsNone.json b/Tests/Fido2.Tests/TestFiles/attestationOptionsNone.json index 41933317..5a2e9f31 100644 --- a/Tests/Fido2.Tests/TestFiles/attestationOptionsNone.json +++ b/Tests/Fido2.Tests/TestFiles/attestationOptionsNone.json @@ -17,4 +17,4 @@ } ], "timeout":0 -} \ No newline at end of file +} diff --git a/Tests/Fido2.Tests/TestFiles/attestationOptionsPacked.json b/Tests/Fido2.Tests/TestFiles/attestationOptionsPacked.json index 9fdd3a67..d50b6b39 100644 --- a/Tests/Fido2.Tests/TestFiles/attestationOptionsPacked.json +++ b/Tests/Fido2.Tests/TestFiles/attestationOptionsPacked.json @@ -17,4 +17,4 @@ } ], "timeout":0 -} \ No newline at end of file +} diff --git a/Tests/Fido2.Tests/TestFiles/attestationOptionsPacked512.json b/Tests/Fido2.Tests/TestFiles/attestationOptionsPacked512.json index 823821c6..b49ced87 100644 --- a/Tests/Fido2.Tests/TestFiles/attestationOptionsPacked512.json +++ b/Tests/Fido2.Tests/TestFiles/attestationOptionsPacked512.json @@ -1 +1 @@ -{"rp":{"id":"localhost","name":"Fido2 test"},"user":{"name":"qhpF3If1h4ANVCNzl08m","id":"qhpF3If1h4ANVCNzl08m","displayName":"Shala Dull"},"challenge":"QPA-FrCSwg-qHhzYvRIdnA","pubKeyCredParams":[{"type":"public-key","alg":-7},{"type":"public-key","alg":-257},{"type":"public-key","alg":-37},{"type":"public-key","alg":-35},{"type":"public-key","alg":-258},{"type":"public-key","alg":-38},{"type":"public-key","alg":-36},{"type":"public-key","alg":-259},{"type":"public-key","alg":-39},{"type":"public-key","alg":-65535}],"timeout":60000,"attestation":"direct","authenticatorSelection":null,"excludeCredentials":[],"status":"ok","errorMessage":""} \ No newline at end of file +{"rp":{"id":"localhost","name":"Fido2 test"},"user":{"name":"qhpF3If1h4ANVCNzl08m","id":"qhpF3If1h4ANVCNzl08m","displayName":"Shala Dull"},"challenge":"QPA-FrCSwg-qHhzYvRIdnA","pubKeyCredParams":[{"type":"public-key","alg":-7},{"type":"public-key","alg":-257},{"type":"public-key","alg":-37},{"type":"public-key","alg":-35},{"type":"public-key","alg":-258},{"type":"public-key","alg":-38},{"type":"public-key","alg":-36},{"type":"public-key","alg":-259},{"type":"public-key","alg":-39},{"type":"public-key","alg":-65535}],"timeout":60000,"attestation":"direct","authenticatorSelection":null,"excludeCredentials":[],"status":"ok","errorMessage":""} diff --git a/Tests/Fido2.Tests/TestFiles/attestationOptionsTrustKeyT110.json b/Tests/Fido2.Tests/TestFiles/attestationOptionsTrustKeyT110.json index 5cd3b1b7..f4457d9b 100644 --- a/Tests/Fido2.Tests/TestFiles/attestationOptionsTrustKeyT110.json +++ b/Tests/Fido2.Tests/TestFiles/attestationOptionsTrustKeyT110.json @@ -17,4 +17,4 @@ } ], "timeout":0 -} \ No newline at end of file +} diff --git a/Tests/Fido2.Tests/TestFiles/attestationOptionsU2F.json b/Tests/Fido2.Tests/TestFiles/attestationOptionsU2F.json index a268c778..a55aaeda 100644 --- a/Tests/Fido2.Tests/TestFiles/attestationOptionsU2F.json +++ b/Tests/Fido2.Tests/TestFiles/attestationOptionsU2F.json @@ -17,4 +17,4 @@ } ], "timeout":0 -} \ No newline at end of file +} diff --git a/Tests/Fido2.Tests/TestFiles/attestationResultsU2F.json b/Tests/Fido2.Tests/TestFiles/attestationResultsU2F.json index 7600486b..6d218beb 100644 --- a/Tests/Fido2.Tests/TestFiles/attestationResultsU2F.json +++ b/Tests/Fido2.Tests/TestFiles/attestationResultsU2F.json @@ -6,4 +6,4 @@ "attestationObject": "o2NmbXRoZmlkby11MmZnYXR0U3RtdKJjc2lnWEcwRQIgRMxowC__Z-mgVR6netL6C7Q15weqiTCPwwq1EaeJVqMCIQCHb9cCad1VloGhQ60mw7KTJhkx61mfgKKwHUVZf1wR6mN4NWOBWQLCMIICvjCCAaagAwIBAgIEdIb9wjANBgkqhkiG9w0BAQsFADAuMSwwKgYDVQQDEyNZdWJpY28gVTJGIFJvb3QgQ0EgU2VyaWFsIDQ1NzIwMDYzMTAgFw0xNDA4MDEwMDAwMDBaGA8yMDUwMDkwNDAwMDAwMFowbzELMAkGA1UEBhMCU0UxEjAQBgNVBAoMCVl1YmljbyBBQjEiMCAGA1UECwwZQXV0aGVudGljYXRvciBBdHRlc3RhdGlvbjEoMCYGA1UEAwwfWXViaWNvIFUyRiBFRSBTZXJpYWwgMTk1NTAwMzg0MjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJVd8633JH0xde_9nMTzGk6HjrrhgQlWYVD7OIsuX2Unv1dAmqWBpQ0KxS8YRFwKE1SKE1PIpOWacE5SO8BN6-2jbDBqMCIGCSsGAQQBgsQKAgQVMS4zLjYuMS40LjEuNDE0ODIuMS4xMBMGCysGAQQBguUcAgEBBAQDAgUgMCEGCysGAQQBguUcAQEEBBIEEPigEfOMCk0VgAYXER-e3H0wDAYDVR0TAQH_BAIwADANBgkqhkiG9w0BAQsFAAOCAQEAMVxIgOaaUn44Zom9af0KqG9J655OhUVBVW-q0As6AIod3AH5bHb2aDYakeIyyBCnnGMHTJtuekbrHbXYXERIn4aKdkPSKlyGLsA_A-WEi-OAfXrNVfjhrh7iE6xzq0sg4_vVJoywe4eAJx0fS-Dl3axzTTpYl71Nc7p_NX6iCMmdik0pAuYJegBcTckE3AoYEg4K99AM_JaaKIblsbFh8-3LxnemeNf7UwOczaGGvjS6UzGVI0Odf9lKcPIwYhuTxM5CaNMXTZQ7xq4_yTfC3kPWtE4hFT34UJJflZBiLrxG4OsYxkHw_n5vKgmpspB3GfYuYTWhkDKiE8CYtyg87mhhdXRoRGF0YVjESZYN5YgOjGh0NBcPZHZgW4_krrmihjLHmVzzuoMdl2NBAAAAAAAAAAAAAAAAAAAAAAAAAAAAQO5ybLba-HS0rJq1p2hwd3rKSdLmva7CdsLPvdwRXDTj-uIP7P-MCxQ75JazWHINAQjenXVIyS8Q3w0ga3ikCwOlAQIDJiABIVggUOAo5xqsJoPfJWsU50h7c2S7_llP0KwGI6vJkEj1N48iWCA2TMSeBfhJ84HyMQQgjJvBiA6JnHA0chxSlmuZeT9Xgg" }, "type": "public-key" -} \ No newline at end of file +} diff --git a/Tests/Fido2.Tests/TestFiles/attestationTPMSHA1Options.json b/Tests/Fido2.Tests/TestFiles/attestationTPMSHA1Options.json index d7673cef..0915b21c 100644 --- a/Tests/Fido2.Tests/TestFiles/attestationTPMSHA1Options.json +++ b/Tests/Fido2.Tests/TestFiles/attestationTPMSHA1Options.json @@ -25,4 +25,4 @@ "attestation": "direct", "authenticatorSelection": null, "excludeCredentials": [] -} \ No newline at end of file +} diff --git a/Tests/Fido2.Tests/TestFiles/attestationTPMSHA256Options.json b/Tests/Fido2.Tests/TestFiles/attestationTPMSHA256Options.json index 8ebdb368..bb8af8c2 100644 --- a/Tests/Fido2.Tests/TestFiles/attestationTPMSHA256Options.json +++ b/Tests/Fido2.Tests/TestFiles/attestationTPMSHA256Options.json @@ -25,4 +25,4 @@ "attestation": "direct", "authenticatorSelection": null, "excludeCredentials": [] -} \ No newline at end of file +} diff --git a/Tests/Fido2.Tests/TestFiles/json1.json b/Tests/Fido2.Tests/TestFiles/json1.json index 26e239d0..6fa7e2ba 100644 --- a/Tests/Fido2.Tests/TestFiles/json1.json +++ b/Tests/Fido2.Tests/TestFiles/json1.json @@ -1,4 +1,4 @@ -{ +{ "rawId": "pClAZoJeNWtJdU3Q_ac4fscfstngZ2FYBETxCzPjrI9x9ZD4VL_YBIEgBv0O2C1gQbHFdZO8z1-oIjvp2xOlag", "id": "pClAZoJeNWtJdU3Q_ac4fscfstngZ2FYBETxCzPjrI9x9ZD4VL_YBIEgBv0O2C1gQbHFdZO8z1-oIjvp2xOlag", "response": { @@ -6,4 +6,4 @@ "attestationObject": "o2NmbXRoZmlkby11MmZnYXR0U3RtdKJjc2lnWEYwRAIgK8AkHYknxw_MPhzjWvCDX0Mq2Q7jdw5IsDHzKBdTtSwCIGUdDp5ACPpzIdoXkdpAJHdOiqwzjwdQUItwlhzIGsoHY3g1Y4FZAsIwggK-MIIBpqADAgECAgR0hv3CMA0GCSqGSIb3DQEBCwUAMC4xLDAqBgNVBAMTI1l1YmljbyBVMkYgUm9vdCBDQSBTZXJpYWwgNDU3MjAwNjMxMCAXDTE0MDgwMTAwMDAwMFoYDzIwNTAwOTA0MDAwMDAwWjBvMQswCQYDVQQGEwJTRTESMBAGA1UECgwJWXViaWNvIEFCMSIwIAYDVQQLDBlBdXRoZW50aWNhdG9yIEF0dGVzdGF0aW9uMSgwJgYDVQQDDB9ZdWJpY28gVTJGIEVFIFNlcmlhbCAxOTU1MDAzODQyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAElV3zrfckfTF17_2cxPMaToeOuuGBCVZhUPs4iy5fZSe_V0CapYGlDQrFLxhEXAoTVIoTU8ik5ZpwTlI7wE3r7aNsMGowIgYJKwYBBAGCxAoCBBUxLjMuNi4xLjQuMS40MTQ4Mi4xLjEwEwYLKwYBBAGC5RwCAQEEBAMCBSAwIQYLKwYBBAGC5RwBAQQEEgQQ-KAR84wKTRWABhcRH57cfTAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQAxXEiA5ppSfjhmib1p_Qqob0nrnk6FRUFVb6rQCzoAih3cAflsdvZoNhqR4jLIEKecYwdMm256RusdtdhcREifhop2Q9IqXIYuwD8D5YSL44B9es1V-OGuHuITrHOrSyDj-9UmjLB7h4AnHR9L4OXdrHNNOliXvU1zun81fqIIyZ2KTSkC5gl6AFxNyQTcChgSDgr30Az8lpoohuWxsWHz7cvGd6Z41_tTA5zNoYa-NLpTMZUjQ51_2Upw8jBiG5PEzkJo0xdNlDvGrj_JN8LeQ9a0TiEVPfhQkl-VkGIuvEbg6xjGQfD-fm8qCamykHcZ9i5hNaGQMqITwJi3KDzuaGF1dGhEYXRhWMRJlg3liA6MaHQ0Fw9kdmBbj-SuuaKGMseZXPO6gx2XY0EAAAAAAAAAAAAAAAAAAAAAAAAAAABApClAZoJeNWtJdU3Q_ac4fscfstngZ2FYBETxCzPjrI9x9ZD4VL_YBIEgBv0O2C1gQbHFdZO8z1-oIjvp2xOlaqUBAgMmIAEhWCBJNREhcNbYwd2gmJg1-sW-UFCUO2wmmBBfcoQKWYbukyJYIJ-QIkY4-jGDk0cOJ35yUtyyWE5JSO_hJn7sHjRfaH-1" }, "type": "public-key" -} \ No newline at end of file +} diff --git a/Tests/Fido2.Tests/TestFiles/json2.json b/Tests/Fido2.Tests/TestFiles/json2.json index 41921692..39bdc6ab 100644 --- a/Tests/Fido2.Tests/TestFiles/json2.json +++ b/Tests/Fido2.Tests/TestFiles/json2.json @@ -1,8 +1,8 @@ -{ +{ "rawId": "sL39APyTmisrjh11vghaqNfuruLQmCfR0c1ryKtaQ81jkEhNa5u9xLTnkibvXC9YpzBLFwWEZ3k9CR_sxzm_pWYbBOtKxeZu9z2GT8b6QW4iQvRlyumCT3oENx_8401r", "id": "sL39APyTmisrjh11vghaqNfuruLQmCfR0c1ryKtaQ81jkEhNa5u9xLTnkibvXC9YpzBLFwWEZ3k9CR_sxzm_pWYbBOtKxeZu9z2GT8b6QW4iQvRlyumCT3oENx_8401r", "response": { "clientDataJSON": "eyJjaGFsbGVuZ2UiOiJ1Vlg4OElnUmEwU1NyTUlSVF9xN2NSY2RmZ2ZSQnhDZ25fcGtwVUFuWEpLMnpPYjMwN3dkMU9MWFEwQXVOYU10QlIzYW1rNkhZenAtX1Z4SlRQcHdHdyIsIm9yaWdpbiI6Imh0dHBzOi8vd2ViYXV0aG4ub3JnIiwidG9rZW5CaW5kaW5nIjp7InN0YXR1cyI6Im5vdC1zdXBwb3J0ZWQifSwidHlwZSI6IndlYmF1dGhuLmNyZWF0ZSJ9", "attestationObject": "o2NmbXRmcGFja2VkZ2F0dFN0bXSjY2FsZyZjc2lnWEgwRgIhAIsK0Wr9tmud-waIYoQw20UWi7DL_gDx_PNG3PB57eHLAiEAtRyd-4JI2pCVX-dDz4mbHc_AkvC3d_4qnBBa3n2I_hVjeDVjg1kCRTCCAkEwggHooAMCAQICEBWfe8LNiRjxKGuTSPqfM-IwCgYIKoZIzj0EAwIwSTELMAkGA1UEBhMCQ04xHTAbBgNVBAoMFEZlaXRpYW4gVGVjaG5vbG9naWVzMRswGQYDVQQDDBJGZWl0aWFuIEZJRE8yIENBLTEwIBcNMTgwNDExMDAwMDAwWhgPMjAzMzA0MTAyMzU5NTlaMG8xCzAJBgNVBAYTAkNOMR0wGwYDVQQKDBRGZWl0aWFuIFRlY2hub2xvZ2llczEiMCAGA1UECwwZQXV0aGVudGljYXRvciBBdHRlc3RhdGlvbjEdMBsGA1UEAwwURlQgQmlvUGFzcyBGSURPMiBVU0IwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASABnVcWfvJSbAVqNIKkliXvoMKsu_oLPiP7aCQlmPlSMcfEScFM7QkRnidTP7hAUOKlOmDPeIALC8qHddvTdtdo4GJMIGGMB0GA1UdDgQWBBR6VIJCgGLYiuevhJglxK-RqTSY8jAfBgNVHSMEGDAWgBRNO9jEZxUbuxPo84TYME-daRXAgzAMBgNVHRMBAf8EAjAAMBMGCysGAQQBguUcAgEBBAQDAgUgMCEGCysGAQQBguUcAQEEBBIEEEI4MkVENzNDOEZCNEU1QTIwCgYIKoZIzj0EAwIDRwAwRAIgJEtFo76I3LfgJaLGoxLP-4btvCdKIsEFLjFIUfDosIcCIDQav04cJPILGnPVPazCqfkVtBuyOmsBbx_v-ODn-JDAWQH_MIIB-zCCAaCgAwIBAgIQFZ97ws2JGPEoa5NI-p8z4TAKBggqhkjOPQQDAjBLMQswCQYDVQQGEwJDTjEdMBsGA1UECgwURmVpdGlhbiBUZWNobm9sb2dpZXMxHTAbBgNVBAMMFEZlaXRpYW4gRklETyBSb290IENBMCAXDTE4MDQxMDAwMDAwMFoYDzIwMzgwNDA5MjM1OTU5WjBJMQswCQYDVQQGEwJDTjEdMBsGA1UECgwURmVpdGlhbiBUZWNobm9sb2dpZXMxGzAZBgNVBAMMEkZlaXRpYW4gRklETzIgQ0EtMTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABI5-YAnswRZlzKD6w-lv5Qg7lW1XJRHrWzL01mc5V91n2LYXNR3_S7mA5gupuTO5mjQw8xfqIRMHVr1qB3TedY-jZjBkMB0GA1UdDgQWBBRNO9jEZxUbuxPo84TYME-daRXAgzAfBgNVHSMEGDAWgBTRoZhNgX_DuWv2B2e9UBL-kEXxVDASBgNVHRMBAf8ECDAGAQH_AgEAMA4GA1UdDwEB_wQEAwIBBjAKBggqhkjOPQQDAgNJADBGAiEA-3-j0kBHoRFQwnhWbSHMkBaY7KF_TztINFN5ymDkwmUCIQDrCkPBiMHXvYg-kSRgVsKwuVtYonRvC588qRwpLStZ7FkB3DCCAdgwggF-oAMCAQICEBWfe8LNiRjxKGuTSPqfM9YwCgYIKoZIzj0EAwIwSzELMAkGA1UEBhMCQ04xHTAbBgNVBAoMFEZlaXRpYW4gVGVjaG5vbG9naWVzMR0wGwYDVQQDDBRGZWl0aWFuIEZJRE8gUm9vdCBDQTAgFw0xODA0MDEwMDAwMDBaGA8yMDQ4MDMzMTIzNTk1OVowSzELMAkGA1UEBhMCQ04xHTAbBgNVBAoMFEZlaXRpYW4gVGVjaG5vbG9naWVzMR0wGwYDVQQDDBRGZWl0aWFuIEZJRE8gUm9vdCBDQTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJ3wCm47zF9RMtW-pPlkEHTVTLfSYBlsidz7zOAUiuV6k36PvtKAI_-LZ8MiC9BxQUfUrfpLY6klw344lwLq7POjQjBAMB0GA1UdDgQWBBTRoZhNgX_DuWv2B2e9UBL-kEXxVDAPBgNVHRMBAf8EBTADAQH_MA4GA1UdDwEB_wQEAwIBBjAKBggqhkjOPQQDAgNIADBFAiEAt7E9ZQYxnhfsSk6c1dSmFNnJGoU3eJiycs2DoWh7-IoCIA9iWJH8h-UOAaaPK66DtCLe6GIxdpIMv3kmd1PRpWqsaGF1dGhEYXRhWOSVaQiPHs7jIylUA129ENfK45EwWidRtVm7j9fLsim91EEAAAABQjgyRUQ3M0M4RkI0RTVBMgBgsL39APyTmisrjh11vghaqNfuruLQmCfR0c1ryKtaQ81jkEhNa5u9xLTnkibvXC9YpzBLFwWEZ3k9CR_sxzm_pWYbBOtKxeZu9z2GT8b6QW4iQvRlyumCT3oENx_8401rpQECAyYgASFYIFkdweEE6mWiIAYPDoKz3881Aoa4sn8zkTm0aPKKYBvdIlggtlG32lxrang8M0tojYJ36CL1VMv2pZSzqR_NfvG88bA" } -} \ No newline at end of file +} diff --git a/Tests/Fido2.Tests/TestFiles/metadata/256K1 U2F Authenticator anonca.json b/Tests/Fido2.Tests/TestFiles/metadata/256K1 U2F Authenticator anonca.json index e844de94..e5dca1fc 100644 --- a/Tests/Fido2.Tests/TestFiles/metadata/256K1 U2F Authenticator anonca.json +++ b/Tests/Fido2.Tests/TestFiles/metadata/256K1 U2F Authenticator anonca.json @@ -65,4 +65,4 @@ "MIIFwDCCA6gCCQCNm1u56oRwXTANBgkqhkiG9w0BAQsFADCBoTEYMBYGA1UEAwwPRklETzIgVEVTVCBST09UMTEwLwYJKoZIhvcNAQkBFiJjb25mb3JtYW5jZS10b29sc0BmaWRvYWxsaWFuY2Uub3JnMRYwFAYDVQQKDA1GSURPIEFsbGlhbmNlMQwwCgYDVQQLDANDV0cxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJNWTESMBAGA1UEBwwJV2FrZWZpZWxkMB4XDTE4MDMxNjE0MzUyN1oXDTQ1MDgwMTE0MzUyN1owgaExGDAWBgNVBAMMD0ZJRE8yIFRFU1QgUk9PVDExMC8GCSqGSIb3DQEJARYiY29uZm9ybWFuY2UtdG9vbHNAZmlkb2FsbGlhbmNlLm9yZzEWMBQGA1UECgwNRklETyBBbGxpYW5jZTEMMAoGA1UECwwDQ1dHMQswCQYDVQQGEwJVUzELMAkGA1UECAwCTVkxEjAQBgNVBAcMCVdha2VmaWVsZDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL11U5yAIVLMrL3xS8u8ysMSdOkDeoTO+RcAy+uXXp6k4SC+jOy37gICEtYI+MKQV1EMeMMf3rM1ueZAO3iPFa0NEdi/oQ7npnGjBNI8wMzD8FfNe6rWtzkDaHpsZW///MwWDpGyJR+Xyjcq6U4vS9bS6zZ7jslw0Oczx4UsYgOsIUXSSBaGOrRbxJ/JC5gnDYEYvtNM+PDPczLNKAyhdvBZWNWHr7MZ0P5TeJQcXsAoShRX2Y8U8fRNJm7SeiFKDP0Nn/QKxOSt7zGP4xt9nMasE1q2ZTdar2+W13CRz37RI0ZWpq/+YquoEbZ7Uj7NmBTcqhb260nmDER2FpwwYwPSark92IZbamozB8d7OEI1jJgsrjJhKan0EmRaWVBpHT4xYKdEu7r09S0JhKyU+52WDmmVQTMpYLrm4Xl7hRxyPyBYkalrozsGmPs8vlhNq3VsVbyBSMSpEmUaeAa7LLE9/Vh0agJLVFHh1ehYKJpzHnmmBXUqx0Fz3afmDm1NX0sr3O/6xIx1VSTViT3KNxBYpVH1qjHATLzuxcWmm+75fcJMiPYPSMXVmRb3Q1l91AM4BBeWhlP3Fbc7gDy0r+s7m0sGS6PT2J2rGog2rUxnJ+zCM11M7DeO0XM2nny4uRYPPk9w2EXzfvtdvieYU/5RB4RDm5TGxHhGXVZUgac5AgMBAAEwDQYJKoZIhvcNAQELBQADggIBAFt2XGd3k5GpbO1EUm3u60zT1fE6u6pOscp156k5VnsHgaHRHdIAPNLeLNmR7y5OnrXbh13CrGwU1q84jjJXpv+v14xUCc5i01yopFTQFLr4A7NHp2nNYfNhhIVSFAgW43EflJflbLEelCJzxLlWb5BoDsZeeNmEQsXIM1mJ26R3r0dzsHBb0uy+8LNR1gdVqdjhC8BLy3gh4+BWuidyZNt07LveDsSFW5rcj5wRrSx9hXPIyVpjQSljNvY7MVTouqJzNAAQMsTKkXPkTXldCop9Qo9UPkHRRm0l7LLtdaOoXrct0Ymocf8zxf9bFNiw9f4WRYQM6sMhzt8+s/oDilo4QhcUgeJEiEPESi6ynYTV62SHA4eMunUJ5dlCaRnFiR9DTImFa5IRzie326/nW/SPCaKc/yrFIihMMjJoSAPhpTb/K6yHOUG8r+KiQut7NzqGV301pQ9u62dGL5Oi1VXmCFlE2ramZs15BNOUyAo2CBbRJg3jKcdu/8QC6ojjDvQ863+7LPtn74wJC5RpUJsS0GhQWgq5pAXO3wA61Uobxi6MkOpCC0zBWx/d4CqpS4j4hFgxWBTXX48ihPu+hIxIF/AxbqtPvqLMExW/xZITn6ArpWyQ9e4SUVr3n3F33ap1XdDyZ0vwFcm18JQAtsvXT6qCLrWOXnHUgfn/+Viu" ], "icon": "data:image/png;base64,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" -} \ No newline at end of file +} diff --git a/Tests/Fido2.Tests/TestFiles/metadata/256K1 U2F Authenticator basic_full.json b/Tests/Fido2.Tests/TestFiles/metadata/256K1 U2F Authenticator basic_full.json index c09f42b7..7d75202a 100644 --- a/Tests/Fido2.Tests/TestFiles/metadata/256K1 U2F Authenticator basic_full.json +++ b/Tests/Fido2.Tests/TestFiles/metadata/256K1 U2F Authenticator basic_full.json @@ -65,4 +65,4 @@ "MIIFwDCCA6gCCQCNm1u56oRwXTANBgkqhkiG9w0BAQsFADCBoTEYMBYGA1UEAwwPRklETzIgVEVTVCBST09UMTEwLwYJKoZIhvcNAQkBFiJjb25mb3JtYW5jZS10b29sc0BmaWRvYWxsaWFuY2Uub3JnMRYwFAYDVQQKDA1GSURPIEFsbGlhbmNlMQwwCgYDVQQLDANDV0cxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJNWTESMBAGA1UEBwwJV2FrZWZpZWxkMB4XDTE4MDMxNjE0MzUyN1oXDTQ1MDgwMTE0MzUyN1owgaExGDAWBgNVBAMMD0ZJRE8yIFRFU1QgUk9PVDExMC8GCSqGSIb3DQEJARYiY29uZm9ybWFuY2UtdG9vbHNAZmlkb2FsbGlhbmNlLm9yZzEWMBQGA1UECgwNRklETyBBbGxpYW5jZTEMMAoGA1UECwwDQ1dHMQswCQYDVQQGEwJVUzELMAkGA1UECAwCTVkxEjAQBgNVBAcMCVdha2VmaWVsZDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL11U5yAIVLMrL3xS8u8ysMSdOkDeoTO+RcAy+uXXp6k4SC+jOy37gICEtYI+MKQV1EMeMMf3rM1ueZAO3iPFa0NEdi/oQ7npnGjBNI8wMzD8FfNe6rWtzkDaHpsZW///MwWDpGyJR+Xyjcq6U4vS9bS6zZ7jslw0Oczx4UsYgOsIUXSSBaGOrRbxJ/JC5gnDYEYvtNM+PDPczLNKAyhdvBZWNWHr7MZ0P5TeJQcXsAoShRX2Y8U8fRNJm7SeiFKDP0Nn/QKxOSt7zGP4xt9nMasE1q2ZTdar2+W13CRz37RI0ZWpq/+YquoEbZ7Uj7NmBTcqhb260nmDER2FpwwYwPSark92IZbamozB8d7OEI1jJgsrjJhKan0EmRaWVBpHT4xYKdEu7r09S0JhKyU+52WDmmVQTMpYLrm4Xl7hRxyPyBYkalrozsGmPs8vlhNq3VsVbyBSMSpEmUaeAa7LLE9/Vh0agJLVFHh1ehYKJpzHnmmBXUqx0Fz3afmDm1NX0sr3O/6xIx1VSTViT3KNxBYpVH1qjHATLzuxcWmm+75fcJMiPYPSMXVmRb3Q1l91AM4BBeWhlP3Fbc7gDy0r+s7m0sGS6PT2J2rGog2rUxnJ+zCM11M7DeO0XM2nny4uRYPPk9w2EXzfvtdvieYU/5RB4RDm5TGxHhGXVZUgac5AgMBAAEwDQYJKoZIhvcNAQELBQADggIBAFt2XGd3k5GpbO1EUm3u60zT1fE6u6pOscp156k5VnsHgaHRHdIAPNLeLNmR7y5OnrXbh13CrGwU1q84jjJXpv+v14xUCc5i01yopFTQFLr4A7NHp2nNYfNhhIVSFAgW43EflJflbLEelCJzxLlWb5BoDsZeeNmEQsXIM1mJ26R3r0dzsHBb0uy+8LNR1gdVqdjhC8BLy3gh4+BWuidyZNt07LveDsSFW5rcj5wRrSx9hXPIyVpjQSljNvY7MVTouqJzNAAQMsTKkXPkTXldCop9Qo9UPkHRRm0l7LLtdaOoXrct0Ymocf8zxf9bFNiw9f4WRYQM6sMhzt8+s/oDilo4QhcUgeJEiEPESi6ynYTV62SHA4eMunUJ5dlCaRnFiR9DTImFa5IRzie326/nW/SPCaKc/yrFIihMMjJoSAPhpTb/K6yHOUG8r+KiQut7NzqGV301pQ9u62dGL5Oi1VXmCFlE2ramZs15BNOUyAo2CBbRJg3jKcdu/8QC6ojjDvQ863+7LPtn74wJC5RpUJsS0GhQWgq5pAXO3wA61Uobxi6MkOpCC0zBWx/d4CqpS4j4hFgxWBTXX48ihPu+hIxIF/AxbqtPvqLMExW/xZITn6ArpWyQ9e4SUVr3n3F33ap1XdDyZ0vwFcm18JQAtsvXT6qCLrWOXnHUgfn/+Viu" ], "icon": "data:image/png;base64,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" -} \ No newline at end of file +} diff --git a/Tests/Fido2.Tests/TestFiles/metadata/256K1 U2F Authenticator basic_surrogate.json b/Tests/Fido2.Tests/TestFiles/metadata/256K1 U2F Authenticator basic_surrogate.json index c2c55c06..8a381c4a 100644 --- a/Tests/Fido2.Tests/TestFiles/metadata/256K1 U2F Authenticator basic_surrogate.json +++ b/Tests/Fido2.Tests/TestFiles/metadata/256K1 U2F Authenticator basic_surrogate.json @@ -65,4 +65,4 @@ "MIIFwDCCA6gCCQCNm1u56oRwXTANBgkqhkiG9w0BAQsFADCBoTEYMBYGA1UEAwwPRklETzIgVEVTVCBST09UMTEwLwYJKoZIhvcNAQkBFiJjb25mb3JtYW5jZS10b29sc0BmaWRvYWxsaWFuY2Uub3JnMRYwFAYDVQQKDA1GSURPIEFsbGlhbmNlMQwwCgYDVQQLDANDV0cxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJNWTESMBAGA1UEBwwJV2FrZWZpZWxkMB4XDTE4MDMxNjE0MzUyN1oXDTQ1MDgwMTE0MzUyN1owgaExGDAWBgNVBAMMD0ZJRE8yIFRFU1QgUk9PVDExMC8GCSqGSIb3DQEJARYiY29uZm9ybWFuY2UtdG9vbHNAZmlkb2FsbGlhbmNlLm9yZzEWMBQGA1UECgwNRklETyBBbGxpYW5jZTEMMAoGA1UECwwDQ1dHMQswCQYDVQQGEwJVUzELMAkGA1UECAwCTVkxEjAQBgNVBAcMCVdha2VmaWVsZDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL11U5yAIVLMrL3xS8u8ysMSdOkDeoTO+RcAy+uXXp6k4SC+jOy37gICEtYI+MKQV1EMeMMf3rM1ueZAO3iPFa0NEdi/oQ7npnGjBNI8wMzD8FfNe6rWtzkDaHpsZW///MwWDpGyJR+Xyjcq6U4vS9bS6zZ7jslw0Oczx4UsYgOsIUXSSBaGOrRbxJ/JC5gnDYEYvtNM+PDPczLNKAyhdvBZWNWHr7MZ0P5TeJQcXsAoShRX2Y8U8fRNJm7SeiFKDP0Nn/QKxOSt7zGP4xt9nMasE1q2ZTdar2+W13CRz37RI0ZWpq/+YquoEbZ7Uj7NmBTcqhb260nmDER2FpwwYwPSark92IZbamozB8d7OEI1jJgsrjJhKan0EmRaWVBpHT4xYKdEu7r09S0JhKyU+52WDmmVQTMpYLrm4Xl7hRxyPyBYkalrozsGmPs8vlhNq3VsVbyBSMSpEmUaeAa7LLE9/Vh0agJLVFHh1ehYKJpzHnmmBXUqx0Fz3afmDm1NX0sr3O/6xIx1VSTViT3KNxBYpVH1qjHATLzuxcWmm+75fcJMiPYPSMXVmRb3Q1l91AM4BBeWhlP3Fbc7gDy0r+s7m0sGS6PT2J2rGog2rUxnJ+zCM11M7DeO0XM2nny4uRYPPk9w2EXzfvtdvieYU/5RB4RDm5TGxHhGXVZUgac5AgMBAAEwDQYJKoZIhvcNAQELBQADggIBAFt2XGd3k5GpbO1EUm3u60zT1fE6u6pOscp156k5VnsHgaHRHdIAPNLeLNmR7y5OnrXbh13CrGwU1q84jjJXpv+v14xUCc5i01yopFTQFLr4A7NHp2nNYfNhhIVSFAgW43EflJflbLEelCJzxLlWb5BoDsZeeNmEQsXIM1mJ26R3r0dzsHBb0uy+8LNR1gdVqdjhC8BLy3gh4+BWuidyZNt07LveDsSFW5rcj5wRrSx9hXPIyVpjQSljNvY7MVTouqJzNAAQMsTKkXPkTXldCop9Qo9UPkHRRm0l7LLtdaOoXrct0Ymocf8zxf9bFNiw9f4WRYQM6sMhzt8+s/oDilo4QhcUgeJEiEPESi6ynYTV62SHA4eMunUJ5dlCaRnFiR9DTImFa5IRzie326/nW/SPCaKc/yrFIihMMjJoSAPhpTb/K6yHOUG8r+KiQut7NzqGV301pQ9u62dGL5Oi1VXmCFlE2ramZs15BNOUyAo2CBbRJg3jKcdu/8QC6ojjDvQ863+7LPtn74wJC5RpUJsS0GhQWgq5pAXO3wA61Uobxi6MkOpCC0zBWx/d4CqpS4j4hFgxWBTXX48ihPu+hIxIF/AxbqtPvqLMExW/xZITn6ArpWyQ9e4SUVr3n3F33ap1XdDyZ0vwFcm18JQAtsvXT6qCLrWOXnHUgfn/+Viu" ], "icon": "data:image/png;base64,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" -} \ No newline at end of file +} diff --git a/Tests/Fido2.Tests/TestFiles/metadata/Secp256R1 Packed Authenticator.json b/Tests/Fido2.Tests/TestFiles/metadata/Secp256R1 Packed Authenticator.json index db5b0b68..56a7312e 100644 --- a/Tests/Fido2.Tests/TestFiles/metadata/Secp256R1 Packed Authenticator.json +++ b/Tests/Fido2.Tests/TestFiles/metadata/Secp256R1 Packed Authenticator.json @@ -125,4 +125,4 @@ "defaultCredProtect": 2, "firmwareVersion": 5 } -} \ No newline at end of file +} diff --git a/Tests/Fido2.Tests/TestFiles/options1.json b/Tests/Fido2.Tests/TestFiles/options1.json index 1bfe276e..2bbb642c 100644 --- a/Tests/Fido2.Tests/TestFiles/options1.json +++ b/Tests/Fido2.Tests/TestFiles/options1.json @@ -1,4 +1,4 @@ -{ +{ "status": "ok", "errorMessage": "", "rp": { @@ -18,4 +18,4 @@ } ], "timeout": 0 -} \ No newline at end of file +} diff --git a/Tests/Fido2.Tests/TestFiles/options2.json b/Tests/Fido2.Tests/TestFiles/options2.json index f52d2cef..299cb94e 100644 --- a/Tests/Fido2.Tests/TestFiles/options2.json +++ b/Tests/Fido2.Tests/TestFiles/options2.json @@ -1,4 +1,4 @@ -{ +{ "status": "ok", "errorMessage": "", "rp": { @@ -18,4 +18,4 @@ } ], "timeout": 0 -} \ No newline at end of file +} diff --git a/Tests/Fido2.Tests/xunit.runner.json b/Tests/Fido2.Tests/xunit.runner.json index 3ad9c00e..9db029ba 100644 --- a/Tests/Fido2.Tests/xunit.runner.json +++ b/Tests/Fido2.Tests/xunit.runner.json @@ -1,4 +1,4 @@ { "parallelizeAssembly": false, "parallelizeTestCollections": false -} \ No newline at end of file +} diff --git a/VDP.md b/VDP.md index 956b809e..7260b094 100644 --- a/VDP.md +++ b/VDP.md @@ -49,7 +49,7 @@ Any activities conducted in a manner consistent with this policy will be conside We will make a best effort to meet the following SLAs for hackers participating in our program: * Time to first response (from report submit) - 3 business day -* Time to triage (from report submit) - 14 business days +* Time to triage (from report submit) - 14 business days The only appropriate place to inquire about a report status is the report email itself. Please refrain from submitting your report or inquiring about its status through additional channels including Github Issues or any other unrelated report, as this unnecessarily binds resources in the security team. @@ -62,4 +62,4 @@ If you want to be kept anonymous, please inform us about it in the report. **All disclosure should be done via email to security@passwordless.dev.** # Eligibility for Participation -You are responsible for complying with any applicable laws. \ No newline at end of file +You are responsible for complying with any applicable laws. diff --git a/nuget.config b/nuget.config index 3dd1c851..6f121ee8 100644 --- a/nuget.config +++ b/nuget.config @@ -1,6 +1,6 @@ - +