Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
92 changes: 46 additions & 46 deletions LibsAndSamples.sln
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 18
VisualStudioVersion = 18.0.11217.181 d18.0
VisualStudioVersion = 18.0.11217.181
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{9B0B5396-4D95-4C15-82ED-DC22B5A3123F}"
ProjectSection(SolutionItems) = preProject
Expand Down Expand Up @@ -192,10 +192,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MacMauiAppWithBroker", "tes
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MacConsoleAppWithBroker", "tests\devapps\MacConsoleAppWithBroker\MacConsoleAppWithBroker.csproj", "{DBD18BC8-72E4-47D4-BD79-8DEBD9F2C0D0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Identity.Client.MtlsPop", "src\client\Microsoft.Identity.Client.MtlsPop\Microsoft.Identity.Client.MtlsPop.csproj", "{3E1C29E5-6E67-D9B2-28DF-649A609937A2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinUI3PackagedSampleApp", "tests\devapps\WinUI3PackagedSampleApp\WinUI3PackagedSampleApp.csproj", "{CE282240-0806-EB91-87E4-D791DC86DEE8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Identity.Client.KeyAttestation", "src\client\Microsoft.Identity.Client.KeyAttestation\Microsoft.Identity.Client.KeyAttestation.csproj", "{425EAEBE-595F-0037-6FDC-2D08D5184705}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug + MobileApps|Any CPU = Debug + MobileApps|Any CPU
Expand Down Expand Up @@ -1948,48 +1948,6 @@ Global
{DBD18BC8-72E4-47D4-BD79-8DEBD9F2C0D0}.Release|x64.Build.0 = Release|Any CPU
{DBD18BC8-72E4-47D4-BD79-8DEBD9F2C0D0}.Release|x86.ActiveCfg = Release|Any CPU
{DBD18BC8-72E4-47D4-BD79-8DEBD9F2C0D0}.Release|x86.Build.0 = Release|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Debug + MobileApps|Any CPU.ActiveCfg = Debug|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Debug + MobileApps|Any CPU.Build.0 = Debug|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Debug + MobileApps|ARM.ActiveCfg = Debug|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Debug + MobileApps|ARM.Build.0 = Debug|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Debug + MobileApps|ARM64.ActiveCfg = Debug|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Debug + MobileApps|ARM64.Build.0 = Debug|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Debug + MobileApps|iPhone.ActiveCfg = Debug|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Debug + MobileApps|iPhone.Build.0 = Debug|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Debug + MobileApps|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Debug + MobileApps|iPhoneSimulator.Build.0 = Debug|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Debug + MobileApps|x64.ActiveCfg = Debug|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Debug + MobileApps|x64.Build.0 = Debug|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Debug + MobileApps|x86.ActiveCfg = Debug|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Debug + MobileApps|x86.Build.0 = Debug|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Debug|ARM.ActiveCfg = Debug|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Debug|ARM.Build.0 = Debug|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Debug|ARM64.Build.0 = Debug|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Debug|iPhone.Build.0 = Debug|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Debug|x64.ActiveCfg = Debug|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Debug|x64.Build.0 = Debug|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Debug|x86.ActiveCfg = Debug|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Debug|x86.Build.0 = Debug|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Release|Any CPU.Build.0 = Release|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Release|ARM.ActiveCfg = Release|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Release|ARM.Build.0 = Release|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Release|ARM64.ActiveCfg = Release|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Release|ARM64.Build.0 = Release|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Release|iPhone.ActiveCfg = Release|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Release|iPhone.Build.0 = Release|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Release|x64.ActiveCfg = Release|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Release|x64.Build.0 = Release|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Release|x86.ActiveCfg = Release|Any CPU
{3E1C29E5-6E67-D9B2-28DF-649A609937A2}.Release|x86.Build.0 = Release|Any CPU
{CE282240-0806-EB91-87E4-D791DC86DEE8}.Debug + MobileApps|Any CPU.ActiveCfg = Debug|x64
{CE282240-0806-EB91-87E4-D791DC86DEE8}.Debug + MobileApps|Any CPU.Build.0 = Debug|x64
{CE282240-0806-EB91-87E4-D791DC86DEE8}.Debug + MobileApps|ARM.ActiveCfg = Debug|x64
Expand Down Expand Up @@ -2032,6 +1990,48 @@ Global
{CE282240-0806-EB91-87E4-D791DC86DEE8}.Release|x64.Build.0 = Release|x64
{CE282240-0806-EB91-87E4-D791DC86DEE8}.Release|x86.ActiveCfg = Release|x86
{CE282240-0806-EB91-87E4-D791DC86DEE8}.Release|x86.Build.0 = Release|x86
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Debug + MobileApps|Any CPU.ActiveCfg = Debug|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Debug + MobileApps|Any CPU.Build.0 = Debug|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Debug + MobileApps|ARM.ActiveCfg = Debug|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Debug + MobileApps|ARM.Build.0 = Debug|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Debug + MobileApps|ARM64.ActiveCfg = Debug|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Debug + MobileApps|ARM64.Build.0 = Debug|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Debug + MobileApps|iPhone.ActiveCfg = Debug|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Debug + MobileApps|iPhone.Build.0 = Debug|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Debug + MobileApps|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Debug + MobileApps|iPhoneSimulator.Build.0 = Debug|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Debug + MobileApps|x64.ActiveCfg = Debug|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Debug + MobileApps|x64.Build.0 = Debug|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Debug + MobileApps|x86.ActiveCfg = Debug|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Debug + MobileApps|x86.Build.0 = Debug|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Debug|Any CPU.Build.0 = Debug|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Debug|ARM.ActiveCfg = Debug|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Debug|ARM.Build.0 = Debug|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Debug|ARM64.Build.0 = Debug|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Debug|iPhone.Build.0 = Debug|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Debug|x64.ActiveCfg = Debug|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Debug|x64.Build.0 = Debug|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Debug|x86.ActiveCfg = Debug|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Debug|x86.Build.0 = Debug|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Release|Any CPU.ActiveCfg = Release|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Release|Any CPU.Build.0 = Release|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Release|ARM.ActiveCfg = Release|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Release|ARM.Build.0 = Release|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Release|ARM64.ActiveCfg = Release|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Release|ARM64.Build.0 = Release|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Release|iPhone.ActiveCfg = Release|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Release|iPhone.Build.0 = Release|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Release|x64.ActiveCfg = Release|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Release|x64.Build.0 = Release|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Release|x86.ActiveCfg = Release|Any CPU
{425EAEBE-595F-0037-6FDC-2D08D5184705}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down Expand Up @@ -2089,8 +2089,8 @@ Global
{97995B86-AA0F-3AF9-DA40-85A6263E4391} = {9B0B5396-4D95-4C15-82ED-DC22B5A3123F}
{AEF6BB00-931F-4638-955D-24D735625C34} = {34BE693E-3496-45A4-B1D2-D3A0E068EEDB}
{DBD18BC8-72E4-47D4-BD79-8DEBD9F2C0D0} = {34BE693E-3496-45A4-B1D2-D3A0E068EEDB}
{3E1C29E5-6E67-D9B2-28DF-649A609937A2} = {1A37FD75-94E9-4D6F-953A-0DABBD7B49E9}
{CE282240-0806-EB91-87E4-D791DC86DEE8} = {34BE693E-3496-45A4-B1D2-D3A0E068EEDB}
{425EAEBE-595F-0037-6FDC-2D08D5184705} = {1A37FD75-94E9-4D6F-953A-0DABBD7B49E9}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {020399A9-DC27-4B82-9CAA-EF488665AC27}
Expand Down
2 changes: 1 addition & 1 deletion prototype/MsiV2DemoApp/MsiV2DemoApp.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

<ItemGroup>
<PackageReference Include="Microsoft.Identity.Client" />
<PackageReference Include="Microsoft.Identity.Client.MtlsPop" />
<PackageReference Include="Microsoft.Identity.Client.KeyAttestation" />
</ItemGroup>

</Project>
4 changes: 2 additions & 2 deletions prototype/MsiV2DemoApp/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@

using Microsoft.Identity.Client;
using Microsoft.Identity.Client.AppConfig;
using Microsoft.Identity.Client.MtlsPop;
using Microsoft.Identity.Client.KeyAttestation;
using Microsoft.IdentityModel.Abstractions;
using System.Net.Http;
using System.Net.Http.Headers;
Expand Down Expand Up @@ -256,7 +256,7 @@ private static IManagedIdentityApplication BuildMiApp(ManagedIdentityId miId, II
bool showFullToken)
{
var builder = app.AcquireTokenForManagedIdentity(scope);
if (useMtls) builder = builder.WithMtlsProofOfPossession();
if (useMtls) builder = builder.WithMtlsProofOfPossession().WithAttestationSupport();
if (forceRefresh) builder = builder.WithForceRefresh(true);

var result = await Ui.WithSpinnerAsync(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

using System;
using System.Runtime.InteropServices;
using Microsoft.Win32.SafeHandles;

namespace Microsoft.Identity.Client.MtlsPop.Attestation
namespace Microsoft.Identity.Client.KeyAttestation.Attestation
{
/// <summary>
/// Managed façade for <c>AttestationClientLib.dll</c>. Holds initialization state,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

using Microsoft.Win32.SafeHandles;
using System;
using System.IO;
using System.Runtime.InteropServices;

namespace Microsoft.Identity.Client.MtlsPop.Attestation
namespace Microsoft.Identity.Client.KeyAttestation.Attestation
{
internal static class AttestationClientLib
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,7 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

using System;
using System.Collections.Generic;
using System.Text;

namespace Microsoft.Identity.Client.MtlsPop.Attestation
namespace Microsoft.Identity.Client.KeyAttestation.Attestation
{
internal static class AttestationErrors
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace Microsoft.Identity.Client.MtlsPop.Attestation
namespace Microsoft.Identity.Client.KeyAttestation.Attestation
{
internal static class AttestationLogger
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

namespace Microsoft.Identity.Client.MtlsPop.Attestation
namespace Microsoft.Identity.Client.KeyAttestation.Attestation
{
/// <summary>
/// AttestationResult is the result of an attestation operation.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

using System;
using System.Collections.Generic;
using System.Text;

namespace Microsoft.Identity.Client.MtlsPop.Attestation
namespace Microsoft.Identity.Client.KeyAttestation.Attestation
{
/// <summary>
/// Error codes returned by <c>AttestationClientLib.dll</c>.
Expand Down Expand Up @@ -35,7 +35,7 @@ internal enum AttestationResultErrorCode
/// <summary>The attestation enclave rejected the supplied evidence (policy or signature failure).</summary>
ERRORATTESTATIONFAILED = -6,

/// <summary>libcurl reported couldnt send (DNS resolution, TLS handshake, or socket error).</summary>
/// <summary>libcurl reported "couldn't send" (DNS resolution, TLS handshake, or socket error).</summary>
ERRORSENDINGCURLREQUESTFAILED = -7,

/// <summary>One or more input parameters passed to the native API were invalid or null.</summary>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

using System;
using System.Collections.Generic;
using System.Text;

namespace Microsoft.Identity.Client.MtlsPop.Attestation
namespace Microsoft.Identity.Client.KeyAttestation.Attestation
{
/// <summary>
/// High-level outcome categories returned by <see cref="AttestationClient.Attest"/>.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

using System;
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Identity.Client.ManagedIdentity;

namespace Microsoft.Identity.Client.KeyAttestation.Attestation
{
/// <summary>
/// Implementation of IAttestationProvider for KeyGuard attestation.
/// This provider is automatically registered when the KeyAttestation package is loaded.
/// </summary>
internal class KeyGuardAttestationProvider : IAttestationProvider
Copy link
Member

@bgavrilMS bgavrilMS Dec 17, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this PR is doing too much. The existing logic just sets builder.CommonParameters.AttestationTokenProvider. Why does this need to change with introduction of registry, new interfaces and classes etc. I do not understand the new design.

{
public async Task<ManagedIdentity.AttestationResult> AttestKeyGuardAsync(
string attestationEndpoint,
SafeHandle keyHandle,
string clientId,
CancellationToken cancellationToken)
{
try
{
// Call the existing PopKeyAttestor implementation
var result = await PopKeyAttestor.AttestKeyGuardAsync(
attestationEndpoint,
keyHandle,
clientId,
cancellationToken).ConfigureAwait(false);

// Map the result to the MSAL interface types
return new ManagedIdentity.AttestationResult
{
Status = result.Status == AttestationStatus.Success
? ManagedIdentity.AttestationStatus.Success
: ManagedIdentity.AttestationStatus.Failed,
Jwt = result.Jwt,
ErrorMessage = result.ErrorMessage,
NativeErrorCode = result.NativeErrorCode
};
}
catch (Exception ex)
{
return new ManagedIdentity.AttestationResult
{
Status = ManagedIdentity.AttestationStatus.Failed,
ErrorMessage = ex.Message,
NativeErrorCode = -1
};
}
}
}

/// <summary>
/// Static initializer that registers the KeyGuard attestation provider
/// when the KeyAttestation assembly is loaded.
/// </summary>
internal static class AttestationProviderInitializer
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 file per class pls

{
static AttestationProviderInitializer()
{
// Register the provider when this type is first accessed
AttestationProviderRegistry.RegisterProvider(new KeyGuardAttestationProvider());
}

/// <summary>
/// Method to force static constructor execution.
/// Called from module initializer.
/// </summary>
internal static void Initialize()
{
// This method body is intentionally empty.
// Its purpose is to trigger the static constructor above.
}
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

using System;
using System.ComponentModel;
using System.IO;

namespace Microsoft.Identity.Client.MtlsPop.Attestation
namespace Microsoft.Identity.Client.KeyAttestation.Attestation
{
internal static class NativeDiagnostics
{
Expand Down Expand Up @@ -38,7 +38,7 @@ internal static string ProbeNativeDll()
return $"Unable to load {NativeDll}: {ex.Message}";
}

// success – unload and return null (meaning no error)
// success – unload and return null (meaning "no error")
WindowsDllLoader.Free(h);
return null;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

using System;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices;

namespace Microsoft.Identity.Client.MtlsPop.Attestation
namespace Microsoft.Identity.Client.KeyAttestation.Attestation
{
/// <summary>
/// Windows‑only helper that loads a native DLL from an absolute path.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

#if NETSTANDARD
Expand Down
Loading
Loading