序言:我正在尝试在我的 NativeScript 插件中创建一个椭圆曲线密钥对(因此我被迫使用 Objective-C)来进行签名和验证。
首先,我想说的是,下面呈现的状态是许多尝试以不同方式进行操作的结果(不幸的是,我已经坐了好几天了)而且我不仅考虑了这种方法。在这个项目开始时,我只是遵循 Apple 文档,并认为我会轻松成功。多么错误的信念。
我的要求:为了简单起见,我想将私钥存储在 Keychain 中(下一步将是 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
。
感谢您提供任何有价值的提示和帮助。
诚挚的,大卫