从钥匙串中检索 SecKey

2023-12-06

我正在尝试升级我从中获得的代码这个答案用于生成 CSR,从 Swift 2 到 Swift 3。

我已升级大部分代码,但原始答案的实用程序块中的以下代码失败并出现错误:

“init”不可用:使用“withMemoryRebound(to:capacity:_)”暂时将内存视为另一种布局兼容类型。

错误发生在以下行:

let status: OSStatus = withUnsafeMutablePointer(to: &dataTypeRef) { SecItemCopyMatching(query as NSDictionary, UnsafeMutablePointer($0)) }
func loadKeySecKeyFromKeyChain(key: String) -> SecKey{
    let query: Dictionary<String, AnyObject> = [
        String(kSecAttrKeyType): kSecAttrKeyTypeRSA,
        String(kSecAttrKeySizeInBits): KEY_SIZE as AnyObject,
        String(kSecClass): kSecClassKey,
        String(kSecAttrApplicationTag): key as AnyObject,
        kSecReturnRef as String : kCFBooleanTrue ]

    var dataTypeRef: Unmanaged<AnyObject>? = nil
    var resultData: SecKey? = nil

    let status: OSStatus = withUnsafeMutablePointer(to: &dataTypeRef) { SecItemCopyMatching(query as NSDictionary, UnsafeMutablePointer($0)) }
    NSLog("SecItemCopyMatching: " + status.description)

    if status == errSecSuccess {
        NSLog("private or public debug description is: " + dataTypeRef.debugDescription)
        resultData = (dataTypeRef!.takeRetainedValue() as! SecKey)
        NSLog("SecItemCopyMatching returns SecKey: " + resultData.debugDescription)
        return resultData!
    } else {
        return resultData!
    }
}

我已经被这个问题困扰了一整天,有什么建议可以解决这个错误吗?


只需使用SecItemCopyMatching。我能够将其转换为 Swift 3 并成功生成 CSR。

// Finds the SecKeyRef corresponding to the parameter key and returns it
func loadKeySecKeyFromKeyChain(key: String) -> SecKey {
    let query: Dictionary<String, AnyObject> = [
        String(kSecAttrKeyType): kSecAttrKeyTypeRSA,
        String(kSecAttrKeySizeInBits): KEY_SIZE as AnyObject,
        String(kSecClass): kSecClassKey,
        String(kSecAttrApplicationTag): key as AnyObject,
        kSecReturnRef as String : kCFBooleanTrue ]

    var dataTypeRef: Unmanaged<AnyObject>? = nil
    var resultData: SecKey? = nil
    var result: AnyObject?
    let status = SecItemCopyMatching(query as CFDictionary, &result)

    if status == errSecSuccess {
        resultData = result as! SecKey
        return resultData!
    } else {
        return resultData!
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从钥匙串中检索 SecKey 的相关文章

随机推荐

  • 在控制台应用程序中使用等待光标作为鼠标指针

    我正在开发一个控制台应用程序c 在这个应用程序中我需要使用dism命令来启用某些 Windows 功能 我注意到在旧版本的 dism 中 之前的10 0版本 dism在执行操作时不会显示加载栏 因此该过程似乎受到了打击 为了更好地告知用户该
  • Facebook 图表“/me/photos”端点需要“页面公共内容访问”

    我们有一个 Facebook 应用程序可以访问授权用户的照片 它使用用户令牌 它已经工作了很长时间 最近几天 对图形端点的请求me photos已开始向我们发出错误 指出端点需要 页面公共内容访问 我还可以在图形浏览器中重现这一点 注意 只
  • 检测 Facebook 分享成功吗?

    我希望检测页面上的 Facebook 共享是否成功 并在成功后更改框的值 我可以很好地处理后者 但对于如何执行实际的共享检测有点迷失 我通过 Google 找到了 FB ui 但如何将其实际实现到页面中并让它运行检测 首先 您必须包含 Fa
  • 使用防盗链

    我想知道如何在以下代码中定位图片 RewriteCond HTTP REFERER RewriteCond HTTP REFERER http dooomain com NC RewriteCond HTTP REFERER http ww
  • 用于对 .NET core MVC 控制器进行单元测试的模拟 HttpContext?

    我在控制器中有一个函数 我正在对其进行单元测试 该函数期望 http 请求标头中的值 我无法初始化 HttpContext 因为它是只读的 我的控制器函数需要 device id 的 http 请求标头值 TestMethod public
  • 使用和要求之间的区别

    谁能解释一下两者之间的区别use and require 无论是直接使用还是用作 use and require in the ns macro require加载库 尚未加载 use做同样的事plus它引用它们的名称空间clojure c
  • 使用java的mongo驱动程序保存接口对象列表

    我有一个 POJO 其中包含以下列表Resources 这是接口ResourceType1 and ResourceType2 public class MyPojo private List
  • 如何获取数据框箱线图中异常值的索引?

    我有一个数据框 我想获取异常值索引的每一列 这是我的数据框的一部分 mediamarkt 48 1 7126 4012 3711 3237 3432 2671 2861 7065 3158 4023 4770 3861 13 4108 74
  • MessageBodyWriter 未找到 vogella 教程

    我正在尝试重新创建最优秀的 vogella 教程 用于使用 java JAX RS 和 Jersey 创建 REST 我正在使用带有 Java EE 视角的 eclipse Kepler tomcat 7 0 我已经创建了 Todo 类 带
  • Xcode 4.5 故事板崩溃

    很多时候 当我尝试在 Storyboard 中编辑 UILabels 时 Xcode 会崩溃 有什么想法可能导致这种情况吗 看起来它与自动布局约束之一有关 这是错误报告 Process Xcode 43938 Path Applicatio
  • 无法在 JSP 中包含 WEB-INF 目录中的 javascript 文件。

    如何使用tomcat在jsp中包含以下文件夹WEB INF includes header js中的文件 我已在 jsp 文件中包含以下内容 但它不起作用 它没有获取 header js 当我查看源代码并尝试单击 src 链接时 它显示资源
  • 如何验证共享点列表中的表单字段?

    我想在添加 编辑时验证列表项的字段并停止保存操作并提供用户在该页面本身上所做的错误信息 例如 如果我想阻止用户在保存之前根据另一个字段的特定状态保留几个字段设置 我不能将该字段设置为必填字段 使用预保存操作 将名为 PreSaveActio
  • 如何将maven版本从3.XX降级到2.2.1?

    我在构建需要 maven 2 2 1 才能构建的项目时遇到问题 如何降级maven版本 编辑 更多信息 我正在尝试从命令行构建项目 我正在本地构建这个 我当前安装的是 3 0 4 版本 您可以安装多个版本的 Maven 您没有提供很多其他必
  • 保存用户名和高分的最佳方法是什么

    在我的应用程序中 我需要保存一个双值 高分 和字符串 玩家名称 我应该使用什么来获得这个 任何想法都会很棒 谢谢 如果这就是你要节省的全部NS用户默认值应该没事 To store NSUserDefaults standardUserDef
  • sql server中的列到行?

    Table CREATE TABLE Table1 col1 INT col2 nvarchar 10 col3 INT col4 INT INSERT INTO Table1 col1 col2 col3 col4 VALUES 1 we
  • UIWebView 未完成加载?

    我的应用程序中有一个 webview 它加载大部分页面 并且加载完成时调用函数 webViewDidFinishLoad 但是 尽管页面似乎已加载 但某些页面加载并未完成 在这些情况下 void webViewDidFinishLoad U
  • 有没有办法检测 SQL Server 分层查询中的循环?

    在Oracle中 我们可以使用该函数CONNECT BY ISCYCLE检测分层查询中的循环 我尝试在 SQL Server 中做同样的事情 有没有办法做到这一点 多谢 连接记录 ID 根据记录的 ROW NUMBER 构建位图 并根据列表
  • 如何修改/部分删除 BTreeMap 中的范围?

    我正在尝试建立一个RangeSet出于一个BTreeMap 其中键是下限 值是上限 只要我只是查找东西 这就非常有效 然而 第一个变异方法让我难住了 如果我想insert我的集合的范围 我需要检查Range of my BTreeMap从尾
  • Spring JPA 的多租户

    我正在为我的 Web 应用程序寻找多租户解决方案 我想用单独的架构模型实现一个应用程序 我想每个会话都有一个数据源 为了做到这一点 我将数据源和实体管理器放在会话范围内 但这不起作用 我正在考虑在用户输入用户名和密码以及tenantId时加
  • 从钥匙串中检索 SecKey

    我正在尝试升级我从中获得的代码这个答案用于生成 CSR 从 Swift 2 到 Swift 3 我已升级大部分代码 但原始答案的实用程序块中的以下代码失败并出现错误 init 不可用 使用 withMemoryRebound to capa