Phase 07 complete: - IMachineFingerprint + ILicenseValidator interfaces - MachineFingerprint: WMI CPU ProcessorID + BaseBoard SerialNumber - LicenseValidator: RSACryptoServiceProvider + SHA256, injectable public key - LicenseFile.TryRead: out-param bool, no exceptions from file I/O - 6 NUnit tests (valid/wrong-machine/tampered/empty/not-base64/missing-file) - 118 tests total, 116 pass, 2 Fanuc FOCAS ignored (Windows DLL) - Fix: missing 'using System' in CncMachineFactoryTests.cs - Fix: Dockerfile.test updated for NcProgramManager rename PublicKeyXml = PLACEHOLDER until Phase 09 generates real key pair. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
34 lines
976 B
C#
34 lines
976 B
C#
using System.Management;
|
|
|
|
namespace NcProgramManager.Licensing
|
|
{
|
|
internal class MachineFingerprint : IMachineFingerprint
|
|
{
|
|
public string GetFingerprint()
|
|
{
|
|
string pcInfo = string.Empty;
|
|
|
|
using (var mc = new ManagementClass("win32_processor"))
|
|
using (ManagementObjectCollection moc = mc.GetInstances())
|
|
{
|
|
foreach (ManagementObject mo in moc)
|
|
{
|
|
pcInfo = mo.Properties["processorID"].Value.ToString();
|
|
break;
|
|
}
|
|
}
|
|
|
|
using (var searcher = new ManagementObjectSearcher(
|
|
"root\\CIMV2", "SELECT * FROM Win32_BaseBoard"))
|
|
{
|
|
foreach (ManagementObject obj in searcher.Get())
|
|
{
|
|
pcInfo += obj["SerialNumber"].ToString();
|
|
break;
|
|
}
|
|
}
|
|
|
|
return pcInfo;
|
|
}
|
|
}
|
|
}
|