feat: add secure_enclave_ml_kem_recover.swift

This commit is contained in:
2025-09-24 22:40:24 +08:00
parent 89f6363a4d
commit 8e8389bac2

View File

@@ -0,0 +1,41 @@
#!/usr/bin/env swift
import Foundation
import CryptoKit
import LocalAuthentication
let se = SecureEnclave.isAvailable;
print("Supports SE: \(se)");
let context = LAContext();
guard let privateKeyDataRepresentation = Data(
base64Encoded: "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"
) else {
exit(1)
}
let privateKeyReference = try SecureEnclave.MLKEM768.PrivateKey(
dataRepresentation: privateKeyDataRepresentation,
authenticationContext: context
)
print("\(privateKeyReference)");
print();
print("Private key reference - publicKey: \(privateKeyReference.publicKey.rawRepresentation.base64EncodedString())");
// SharedSecret: wPgRcA9Ooisdsuj9sB6up39SHptGAdt5UENqUVur4pk=
let encapsulatedBase64 = "eGnPHukjhnWio6/JXoDhSoXpWH5ecLhMDwjdjwDTNinuBJ9yEvfcrZS9JJVVYL6ktP3FVnhSis74W0/rgDZk7m2Q98lwDPs/0MzpNjvZThd6T/07/ITJsi/d02OGDd9lGlXWrijSip7p67BEjJKzCLHOvXdD321T4PQZQbm5sFvUfMh1FBI/g1/V9SGtSjsX5KSh8CwjCTI+oHj9LIuZqCxmwyV8KjzNPrPmsUVQSMBa1TkpzKJkjuDe5FZQP0NTCbZW0/IeV59RQSaB74PICTbsN4x352JqmMGdGedzcutnajnPh5jwHUlCZauEryj/YfLIh4xfDDKL8yn/ecCIAuHbIqNXF0J972j4E4n+SBdm53H6gC01j7BKzOH69yxYa0sdQ15w5HQQHqm54UKbfZT0O6xKzBoSsAr9SfkHi86zUAfe4mp/BLrPOU4vScVa9hymlhmgucB/vGY80zUPasabyYykfTdMNRiO+MhINnfrnah5FSrbyo3K8Fxt+XUuRjhCtIR0u1r9D3po++9q+gVMM7vFi8dMJxgstl3y9xk49lcqda8AMHmho+ub6JYnr+pKFbbfLyd2w6bL1J0sN0y00Ji+uGITrVEn9vUTvdyYsUTJjBTX5x1CO/FV2TViApCfyrTJalLelf/mg8u6gxusd71B5AmVaL/W3JxL2Fx8pot9gQwKSK4pScKkZ5HQiPCUPigDyBR9h5pzxndKjHloboh/Ki44jiqspj8QFj2SR3HOQJjdZZCGO/i0iaRrFoY0DgJDW3OzoaHFBxHcFwMtUghaTyzSp+BgRVqDJn+JuL8ziTSmNeH1GH1709kSQisFK1E1pc+8TOYE7XB0c2wEfl/0k60yuil7GH+2xxxXTN3Lt4WWXN21aPHTf7YZfm0fQZOzL5FV+7342z5QqnOgMXELh8ng3slAKkdxzLOFmUDoYA3OPRij73LU5DL0e4iQUWGIyI83thlNmJTl5CE0lOSjmua0ayB+ToSys9yugxGfZM54JCln3odXu5xgik6ltapMTFOQqwBtDOvgbsgjiYIV/pkuJLwyr1pLTgtPnCkO16o3xvGyjaRigNpSS9gkjUUMmfWK46n8O+/qz6guoPFKiInwvC842F02szyIcp9Fm415nRzLPLPsXl3PdphV0lQjU9bu2ExFuRZMiQ3ZnyGVm1RSt+EZ/0twVSWZTZmrf23pLRZim/TqV92NOVpbVVuS2MvmYknmua+zce0mhx7uDMPA4jaWy84cvyus34pgwxPyL0HYuDo/F2yiR0r7z+Vk5+csc2MRnhDLOj3UQoGmddPekutDE4V9LojcbCvyEHfZupLZTfX+IxRGd0zPH40cirt602iBrf8+sYpQJ4gbeZtEVPG08kNL1se5892iXbuJz7u2OvZ8i0C/mMmM+2BAtMNAb3Otz9ohJPogjQDP7BOVuAqP4FPFN1Q="
guard let encapsulated = Data(
base64Encoded: encapsulatedBase64,
) else {
exit(1)
}
let sharedSecret = try privateKeyReference.decapsulate(encapsulated);
let sharedSecretData = sharedSecret.withUnsafeBytes { Data($0) }
print();
print("SharedSecret: \(sharedSecretData.base64EncodedString())");