feat: add secure_enclave_ml_kem.swift
This commit is contained in:
42
secure_enclave_ml_kem.swift
Executable file
42
secure_enclave_ml_kem.swift
Executable file
@@ -0,0 +1,42 @@
|
||||
#!/usr/bin/env swift
|
||||
|
||||
import Foundation
|
||||
import CryptoKit
|
||||
|
||||
let se = SecureEnclave.isAvailable;
|
||||
print("Supports SE: \(se)");
|
||||
|
||||
var error: Unmanaged<CFError>? = nil;
|
||||
guard
|
||||
let accessCtrl = SecAccessControlCreateWithFlags(
|
||||
nil,
|
||||
kSecAttrAccessibleWhenUnlockedThisDeviceOnly,
|
||||
[.privateKeyUsage, .biometryCurrentSet],
|
||||
&error
|
||||
) else {
|
||||
throw error!.takeRetainedValue() as Swift.Error;
|
||||
}
|
||||
|
||||
var privateKeyReference = try CryptoKit.SecureEnclave.MLKEM768.PrivateKey.init(
|
||||
accessControl: accessCtrl
|
||||
);
|
||||
|
||||
print("Private key reference: \(privateKeyReference)");
|
||||
print();
|
||||
print("Private key reference - dataRepresentation: \(privateKeyReference.dataRepresentation.base64EncodedString())");
|
||||
print();
|
||||
print("Private key reference - publicKey: \(privateKeyReference.publicKey.rawRepresentation.base64EncodedString())");
|
||||
|
||||
let encapsulationResult = try privateKeyReference.publicKey.encapsulate();
|
||||
print();
|
||||
print("Encapsulated: \(encapsulationResult.encapsulated.base64EncodedString())");
|
||||
print();
|
||||
let sharedSecretData = encapsulationResult.sharedSecret.withUnsafeBytes { Data($0) }
|
||||
|
||||
print("SharedSecret: \(sharedSecretData.base64EncodedString())");
|
||||
|
||||
|
||||
let sharedSecret2 = try privateKeyReference.decapsulate(encapsulationResult.encapsulated);
|
||||
let sharedSecretData2 = sharedSecret2.withUnsafeBytes { Data($0) }
|
||||
|
||||
print("SharedSecret2: \(sharedSecretData2.base64EncodedString())");
|
||||
Reference in New Issue
Block a user