在 NativeScript 插件中为 iOS 生成 EC 密钥对

Generate EC keypair for iOS in NativeScript plugin

序言:我试图在我的 NativeScript 插件中创建一个椭圆曲线密钥对(因此我不得不使用 Objective-C) 用于签名和验证目的。

首先我想说的是,下面呈现的状态是以不同方式进行大量尝试的结果(不幸的是,我已经坐了好几天了)而且我不仅考虑了这种方法。在这个项目开始的时候,我只是简单地按照 Apple 文档进行操作,并认为我会很容易地成功。真是误会。

我的要求:为了简单起见,我想将私钥存储在钥匙串中(下一步将是 Secure Enclave),并计算 public 密钥通过 SecKeyCopyPublicKey 在我通过 SecItemCopyMatching 检索到密钥后,如 Apple docs.

中所述

现状:这个模型最初来自here。我从来没有让它与 SecKeyCreateRandomKey 一起工作,因此我正在尝试使用 SecKeyGeneratePair atm。我目前实现的是这样的:

const privAttr: NSMutableDictionary<string, any> = NSMutableDictionary.new<string, any>();
privAttr.setObjectForKey("my.tag.sign.private", kSecAttrApplicationTag);
privAttr.setObjectForKey(kCFBooleanTrue, kSecAttrIsPermanent);

const pubAttr: NSMutableDictionary<string, any> = NSMutableDictionary.new<string, any>();
pubAttr.setObjectForKey("my.tag.sign.public", kSecAttrApplicationTag);
pubAttr.setObjectForKey(kCFBooleanTrue, kSecAttrIsPermanent);

const param: NSMutableDictionary<string, any> = NSMutableDictionary.new<string, any>();
param.setObjectForKey(kSecAttrKeyTypeECSECPrimeRandom, kSecAttrKeyType);
param.setObjectForKey(256, kSecAttrKeySizeInBits);
param.setObjectForKey(privAttr, kSecPrivateKeyAttrs);
param.setObjectForKey(pubAttr, kSecPublicKeyAttrs);

let pubKeyRef = new interop.Reference<any>();
let privKeyRef = new interop.Reference<any>();
const status = SecKeyGeneratePair(param, pubKeyRef, privKeyRef);

目前我收到错误 -50。根据 OSStatus.com 这意味着我给定的参数在某些时候无效。我不知道到底是什么问题。

我的问题:如何生成至少私钥隐式存储在钥匙串中的密钥对,并且我可以通过 public 成功检索密钥=12=] 之后。

感谢您的宝贵提示和帮助。

亲切的,大卫

在尝试了几种设置后,我找到了解决方案。我的回答记录在下面 GitHub issue.

此致, 大卫