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

时间:2017-11-29 13:00:09

标签: ios objective-c signing key-pair nativescript-plugin

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

首先,我想说下面呈现的状态是很多尝试以不同方式进行的结果(不幸的是,我坐了好几天),我不仅考虑了这种方法。在这个项目的开始,我只是按照Apple文档,并认为我将很容易成功。多么不相信。

我的要求:为了保持简单,我想将私钥存储在Keychain中(Secure Enclave将是下一步),并在SecKeyCopyPublicKey之后通过SecItemCopyMatching计算公钥我通过SecKeyCreateRandomKey检索了密钥,如Apple docs中所述。

现状:此模型最初来自here。我从来没有使用SecKeyGeneratePair,因此我尝试使用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); atm。我目前实施的内容如下:

SecKeyCopyPublicKey

目前我收到错误-50。根据{{​​3}},这意味着我的给定参数在某些时候无效。我不知道究竟是什么问题。

我的问题:如何生成密钥对,其中至少私钥被隐含地存储在钥匙串中,之后我成功通过A检索公钥。

感谢任何有价值的提示和帮助。

大胆地,大卫

1 个答案:

答案 0 :(得分:0)

尝试了几个设置后,我找到了解决方法。我的答案记录在以下GitHub issue中。

祝你好运, 大卫