44 lines
4.7 KiB
Swift
Executable File
44 lines
4.7 KiB
Swift
Executable File
#!/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())");
|
|
|
|
// generated by rust
|
|
// SharedSecret: ec/eevxNuvn2vfLb6grp39Q3/T/M/Sk/vMtMVXCOn58=
|
|
let encapsulatedBase64 = "H0z0Br0ABhO5sec4nm1SXqTKDNcgXgRmIDltbcWOJUMQtesoJV/IBHMHIMAjuFLXJzF0eDNgSmohVIkWz7uL6aADTQfrQBJgAyXfAC4Xr4vKRENbif92K6yOhXXugS7UldBQyERmo8XyT0UaiIbSJprfpE/dWN1czn8gSR1NujEqKBGO9nGlKNZsBs9oR/6pqu7GUpQcu3TNnvxpqyk6leTS8cl94+bVH3dOFovxsGzGLBB8EyOtLG6KmKYgYZ03OrXJL/O3P8QwB83arU0UjFcwY03+BgTxKjVapAs9riqT0SJ8GdwcycWwCcuiFSc5iXtKR6zcEAT8fRawHOkQs38hQlQFExCTQLlOLu68fYYlXwVgCRidJ9AOTXzkbGThg9FBN0Ss+HeZrCZMmeMPxcJNvN7WUhQ/Rxx79azFFWu1KFMtKfr3QmWzoYvkEmUQ3fNrqYb0U2O9Yzxfh2RFPW7BvgtK0cx29srb6eGotX7ciYu8CweD7T1rERQ4K/+1pMDh6BGwjiQng9PqVHBhFkBLYfAJskny/AmGpH5DwrnzLONBlSaz10P/jpFVNNq2Z7LakZuBfiCc8U1puaXeZztjwS7nCTjWB95qA7kdrV2vhuuTX79M0B5NxOOf8sfDuUH9oHQftLgHkK55deNP0IoOAkP5puc3mzAvEj1JYd2tZwDKVR9ZMo17oeT8JYMhKzuwu59lQZa7aC1aeuFYRFWQ315npLHVcMJrsL2/LsCeXcJNNYOPTatPxCtvuLrL89Tk/qBFYeNcxNp4tMqCgexDmdLQJSvETDDFBpzBBkomGQlureD7anUQDXvDyWBGNjhLAaEzJy96SQyu56MGgDNXiDuox3pOwEKv7XWVshr9W3n2/SERDZS6DWjEU8fbntiTIYll/AhTAsqrwJv/stMiPNdyCVSkZaS8/8ZJwxUe2Xzg+3Hs8375s22C9wmZ28bHQlw+3W4rEet+GxdecZmB6H7mJpUpU6xHJDlcrxMON5SQEp6tlwBgXUMBSnW8Vo0xu/a6huDrCJe3cTLG9oaqvI59ef/WVOuIDEaBloo4RI4RpjlJpqZZhcKdbLR0Jv4qnPS9EzNhgZbyCwII0pwsittKZM9ECmc5C4csJcPPQrfjwbj79H2YeXHvAd2QpugRgmMbwJD4exEBDVCUm4mYnW+vCI4/PtUz5I1be5a8IzFihGDW4cmRAFmBil3hKDyVDtX4h5KJ7ntwZIZaFWM+DC0NWW3WpvqLjmbYQw9qu3oQZqHf+VlTG4vtLi5wtixIjxuei7OKJOsEFsKbUna3d0h2/954GK2+gI4f4ilSiEAfw5MmhBD3D5gsi4INkYKXw3Mtj8GVK836boVwktgROGRw/ypyeOR/05IwYV+gz6G3BwPuXHBh5IL6tJfY9brdL6QTEXEOBMSH1cpPgYYI8Z6qtOF4/IndF3lvspA="
|
|
|
|
guard let encapsulated = Data(
|
|
base64Encoded: encapsulatedBase64,
|
|
) else {
|
|
exit(1)
|
|
}
|
|
|
|
let sharedSecret = try privateKeyReference.decapsulate(encapsulated);
|
|
let sharedSecretData = sharedSecret.withUnsafeBytes { Data($0) }
|
|
|
|
print();
|
|
print("Expected shared secret: ec/eevxNuvn2vfLb6grp39Q3/T/M/Sk/vMtMVXCOn58=")
|
|
print("SharedSecret : \(sharedSecretData.base64EncodedString())");
|