- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
背景:我正在使用 OpenSSL 库在 Swift 中创建 PKCS12 文件。我将证书和私钥存储在钥匙串(keychain)中。
问题:我能够创建 PKCS12 文件并将其成功存储在应用程序包中。当我想使用 PKCS12 文件时(例如,从 HTTPS 服务器接收身份验证质询),我可以使用 SecPKCS12Import()
加载文件苹果提供的功能。现在,我不想生成物理文件,而是想在需要时生成运行中的 PKCS12 对象。它将存储在内存中。由于我是 Swift 的新手,因此我正在寻求有关从 UnsafeMutablePointer 转换为 Data 的帮助。当您阅读我的以下代码时,您会了解更多:
以前,我有我的 createP12
函数实现为:
createP12(pemCert: String, pemPK: String) {
// .......
// Code to load certificate and private key Object..
guard let p12 = PKCS12_create(passPhrase, name, privateKey, certificate, nil, NID_pbe_WithSHA1And3_Key_TripleDES_CBC, NID_pbe_WithSHA1And3_Key_TripleDES_CBC, 0, 0, 0) else {
ERR_print_errors_fp(stderr)
return
}
// Save p12 to file
let fileManager = FileManager.default
let tempDirectory = NSTemporaryDirectory() as NSString
let path = tempDirectory.appendingPathComponent("ssl.p12")
fileManager.createFile(atPath: path, contents: nil, attributes: nil)
guard let fileHandle = FileHandle(forWritingAtPath: path) else {
LogUtils.logError("Cannot open file handle: \(path)")
return
}
let p12File = fdopen(fileHandle.fileDescriptor, "w")
i2d_PKCS12_fp(p12File, p12)
fclose(p12File)
fileHandle.closeFile()
}
然后当我想读取p12文件的时候,可以调用
let p12Data = NSData(contentsOfFile: Bundle.main.path(forResource: mainBundleResource, ofType:resourceType)!)! as Data
var items: CFArray?
let certOptions: NSDictionary = [kSecImportExportPassphrase as NSString: passwordStr as NSString]
self.securityError = SecPKCS12Import(p12Data as NSData, certOptions, &items)
// Code to read attributes
来自 createP12()
函数,我首先得到一个 UnsafeMutablePointer<PKCS12>
类型的 p12 对象然后将其存储在文件中。相反,现在我想将 p12 直接传递给 pkcs12 读取器函数。为此,我必须首先将 p12 对象转换为 Data/NSData 对象,因为这是 SecPKCS12Import()
所要求的。功能。
所以,长话短说,我如何从 UnsafaMutablePointer<PKCS12>
类型的 p12 对象构造一个 Data/NSData 对象?因此我可以将它传递给 SecPKCS12Import()
?
最佳答案
这应该可以工作(可以编译但我无法测试)。这个想法是将 PKCS12 对象写入内存缓冲区,然后创建 Data
来自缓冲区:
func p12ToData(p12: UnsafeMutablePointer<PKCS12>) -> Data {
// Write PKCS12 to memory buffer:
let mbio = BIO_new(BIO_s_mem())
i2d_PKCS12_bio(mbio, p12)
// Get pointer to memory buffer and number of bytes. The
// # define BIO_get_mem_data(b,pp) BIO_ctrl(b,BIO_CTRL_INFO,0,(char *)pp)
// macro is not imported to Swift.
var ptr = UnsafeRawPointer(bitPattern: 1)!
let cnt = BIO_ctrl(mbio, BIO_CTRL_INFO, 1, &ptr)
// Create data from pointer and count:
let data = Data(bytes: ptr, count: cnt)
// Release memory buffer:
BIO_free(mbio)
return data
}
关于ios - 如何从 UnsafeMutablePointer<T> 构建 Data/NSData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42868241/
我正在使用 Swift 的 C API,对于我需要调用的方法之一,我需要给出一个 UnsafeMutablePointer>> 更多信息: 快速界面: public func presage_pred
函数: public func OSAtomicCompareAndSwapPtr(_ __oldValue: UnsafeMutableRawPointer!, _ __newValue: Unsa
我正在尝试使用 NSView 的 getRectsBeingDrawn,但我不太确定如何转换它需要的变量。 它的定义是: func getRectsBeingDrawn(rects: UnsafeMu
更新到 Swift 3 后,我的代码出现了一些问题。我在转换之前有这段代码: extension NSData { func castToCPointer() -> T { let mem
我真的被一个愚蠢但看似简单的问题弄疯了......我必须将 Data 转换为 AVAudioPCMBuffer。 寻找this question这似乎很容易,但随着 Swift 3 的出现,一切都发生
我需要使用一个使用 UnsafeMutablePointer?>! 的函数作为参数。它是用 Objective-C++ 框架编写的,我通过桥接 header 访问它: - (void) applyFi
我的 Swift 项目中有这个 EZAudio 方法,用于从麦克风捕获音频: func microphone(microphone: EZMicrophone!, hasAudioReceived b
我刚开始弄乱图像处理,我遇到了几个非常奇怪的问题,或者至少我认为是这样。我假设我犯了一些非常愚蠢的错误。 我本来打算就此发布另一个问题,但是使用下面的代码有时我也会得到随机噪声,而不是用户抽取数字的像
在main.swift文件,我们调用了我们的收据检查系统(由 Receigen 生成)。在 Swift 2 中,main.swift阅读: startup(Process.argc, UnsafeMu
我在 Swift 中创建了一个名为 RGB 的结构,非常简单: struct PixelRGB { var r: CUnsignedChar = 0 var g: CUnsignedC
我正在使用 SceneKit 的 SCNParticleSystem 构建一个测试应用程序。它有一个回调,可让您修改每个帧上的粒子属性。这个回调的签名是 typealias SCNParticleMo
Accelerate 框架的 Swift 签名 vDSP_biquadm()函数包括 UnsafeMutablePointer> 的参数类型和 UnsafeMutablePointer> . 如何在
请帮助语法: __weak typeof (self) weakSelf = self; [self.audioFile getWaveformDataWithCompletionBlock:^(fl
这段代码在 Swift2.3 中运行良好,现在我将其转换为 Swift3。所以我收到这个错误。有人知道如何解决这个问题吗? var cmdLnConf: OpaquePointer? filepriv
我构建了一个小结构,其中包含伪 C 字符串 UnsafeMutablePointer。现在我想添加一种方法来获取字符串的长度,但有些行为非常奇怪: struct Char { let valu
1. let context = CGContext(...) 2. context.draw(...) 3. let buffer = UnsafeMutablePointer(context.da
在 C 中,我有以下代码来分配一个具有适当大小的 AudioBufferList,然后用相关数据填充它。 AudioObjectPropertyScope scope = mIsInput ? kAu
我正在尝试将我的 Swift 2 代码转换为最新的语法 (Swift 3)。我收到以下错误: Cannot invoke initializer for type 'UnsafeMutablePoin
var a = [1,2,3] let ptr1 = UnsafeMutablePointer(&a[0]) //works fine let index = 0 let ptr2 = UnsafeM
在我创建的结构中(在Xcode 10.1,Swift 4.2上)观察到的属性上使用UnsafeMutablePointer时,出现了一些意外的行为。请参阅以下游乐场代码: struct NormalT
我是一名优秀的程序员,十分优秀!