在 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.
此致,
大卫
序言:我试图在我的 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.
此致, 大卫