序言:我试图在我的 NativeScript 插件中创建一个椭圆曲线密钥对(因此我被迫使用 Objective-C)用于签名和验证目的。
起初,我想说下面呈现的状态是通过以不同方式进行的大量尝试的结果(不幸的是,我已经坐了好几天了)而且我不仅考虑了这种方法。在这个项目开始时,我只是简单地遵循了 Apple 文档,并认为我会很容易成功。多么错误的信念。
我的要求:为了方便起见,我想将私钥存储在钥匙串中(下一步将是 Secure Enclave),并SecKeyCopyPublicKey
在我通过检索密钥后计算公钥SecItemCopyMatching
,如Apple 文档中所述。
现状:这个模型最初来自这里。我从未使用过它,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,这意味着我给定的参数在某些时候无效。我不知道到底是什么问题。
我的问题:如何生成一个密钥对,其中至少将私钥隐式存储在钥匙串中,然后我可以成功地检索公钥SecKeyCopyPublicKey
。
感谢您提供任何宝贵的提示和帮助。
诚挚的,大卫
在尝试了几种设置后,我找到了解决方案。我的回答记录在以下GitHub 问题中。
最好的问候,大卫
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句