@@ -37,8 +37,8 @@ public final class CertificatesManager {
3737 var cfErr : Unmanaged < CFError > ?
3838 guard let keyData = SecKeyCopyExternalRepresentation ( secKey, & cfErr) as Data ? else {
3939 if let cfError = cfErr? . takeRetainedValue ( ) {
40- // Bridge CFError -> NSError safely and extract code (fallback -1)
41- let nsError = cfError as NSError
40+ // Fixed: Force cast CFError to NSError
41+ let nsError = cfError as! NSError
4242 throw CertificateError . publicKeyExportFailed ( OSStatus ( nsError. code) )
4343 } else {
4444 throw CertificateError . publicKeyExportFailed ( - 1 )
@@ -73,15 +73,15 @@ public final class CertificatesManager {
7373 throw CertificateError . noCertsInProvision
7474 }
7575
76- // Cast the returned stack pointer to OpaquePointer for OPENSSL_sk_* calls
77- let stackPtr = OpaquePointer ( signers)
76+ // Fixed: Proper cast for signers to OpaquePointer (assuming signers is UnsafeMutableRawPointer)
77+ let stackPtr = OpaquePointer ( UnsafeMutableRawPointer ( signers) ) // Tweak this if signers type is different
7878
7979 // Use OPENSSL_sk_num and OPENSSL_sk_value with proper index types
8080 let count = Int ( OPENSSL_sk_num ( stackPtr) )
8181 for i in 0 ..< count {
8282 guard let rawVal = OPENSSL_sk_value ( stackPtr, Int32 ( i) ) else { continue }
8383 // rawVal is UnsafeMutableRawPointer; interpret as X509*
84- let x509Ptr = rawVal. assumingMemoryBound ( to: X509 . self)
84+ let x509Ptr = rawVal. assumingMemoryBound ( to: X509 . self) // X509 should be in scope now
8585
8686 // convert X509 -> DER
8787 var derPtr : UnsafeMutablePointer < UInt8 > ? = nil
@@ -101,10 +101,11 @@ public final class CertificatesManager {
101101 }
102102 }
103103
104- // free the signers stack using OPENSSL_sk_pop_free and provide X509_free as the free func.
105- // Need to cast X509_free to the expected C function pointer type.
106- let freeFunc = unsafeBitCast ( X509_free, to: ( @convention( c) ( UnsafeMutableRawPointer? ) - > Void) . self)
107- OPENSSL_sk_pop_free ( stackPtr, freeFunc)
104+ // Fixed warning: Safer way to cast the free func without unsafeBitCast
105+ // Use a closure or direct cast if possible; here's a workaround
106+ OPENSSL_sk_pop_free ( stackPtr) { ptr in
107+ X509_free ( OpaquePointer ( ptr) )
108+ }
108109
109110 guard certs. count > 0 else { throw CertificateError . noCertsInProvision }
110111 return certs
0 commit comments