0

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

首先,我想说的是,下面呈现的状态是许多尝试以不同方式进行操作的结果(不幸的是,我已经坐了好几天了)而且我不仅考虑了这种方法。在这个项目开始时,我只是遵循 Apple 文档,并认为我会轻松成功。多么错误的信念。

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

现状:这个模型原本就是从这里来的。我从来没有使用过它,SecKeyCreateRandomKey因此我正在尝试使用SecKeyGeneratePairatm。我目前实现的内容如下所示:

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

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

诚挚的,大卫

4

1 回答 1

0

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

最好的问候,大卫

于 2018-01-13T09:50:16.927 回答