@@ -111,15 +111,21 @@ struct CoreCertificate {
111
111
112
112
#elseif os(Linux) || os(Windows) || os(Android)
113
113
final class BoringSSLCertificate {
114
- private let underlying : UnsafeMutablePointer < X509 >
114
+ #if CRYPTO_v2
115
+ typealias Pointer = OpaquePointer
116
+ #else
117
+ typealias Pointer = UnsafeMutablePointer < X509 >
118
+ #endif
119
+
120
+ private let underlying : Pointer
115
121
116
122
deinit {
117
123
CCryptoBoringSSL_X509_free ( self . underlying)
118
124
}
119
125
120
126
init ( derEncoded data: Data ) throws {
121
127
let bytes = data. copyBytes ( )
122
- let x509 = try bytes. withUnsafeBufferPointer { ( ptr: UnsafeBufferPointer < UInt8 > ) throws -> UnsafeMutablePointer < X509 > in
128
+ let x509 = try bytes. withUnsafeBufferPointer { ( ptr: UnsafeBufferPointer < UInt8 > ) throws -> Pointer in
123
129
var pointer = ptr. baseAddress
124
130
guard let x509 = CCryptoBoringSSL_d2i_X509 ( nil , & pointer, numericCast ( ptr. count) ) else {
125
131
throw CertificateError . initializationFailure
@@ -129,7 +135,7 @@ final class BoringSSLCertificate {
129
135
self . underlying = x509
130
136
}
131
137
132
- func withUnsafeMutablePointer< R> ( _ body: ( UnsafeMutablePointer < X509 > ) throws -> R ) rethrows -> R {
138
+ func withUnsafeMutablePointer< R> ( _ body: ( Pointer ) throws -> R ) rethrows -> R {
133
139
return try body ( self . underlying)
134
140
}
135
141
@@ -195,34 +201,38 @@ final class BoringSSLCertificate {
195
201
}
196
202
197
203
private extension CertificateName {
198
- init ( x509Name: UnsafeMutablePointer < X509_NAME > ) {
199
- self . userID = x509Name. getStringValue ( of: NID_userId)
200
- self . commonName = x509Name. getStringValue ( of: NID_commonName)
201
- self . organization = x509Name. getStringValue ( of: NID_organizationName)
202
- self . organizationalUnit = x509Name. getStringValue ( of: NID_organizationalUnitName)
203
- }
204
- }
204
+ #if CRYPTO_v2
205
+ typealias Pointer = OpaquePointer
206
+ #else
207
+ typealias Pointer = UnsafeMutablePointer < X509_NAME >
208
+ #endif
209
+
210
+ init ( x509Name: Pointer ) {
211
+ func getStringValue( from name: Pointer , of nid: CInt ) -> String ? {
212
+ let index = CCryptoBoringSSL_X509_NAME_get_index_by_NID ( name, nid, - 1 )
213
+ guard index >= 0 else {
214
+ return nil
215
+ }
205
216
206
- private extension UnsafeMutablePointer where Pointee == X509_NAME {
207
- func getStringValue( of nid: CInt ) -> String ? {
208
- let index = CCryptoBoringSSL_X509_NAME_get_index_by_NID ( self , nid, - 1 )
209
- guard index >= 0 else {
210
- return nil
211
- }
217
+ let entry = CCryptoBoringSSL_X509_NAME_get_entry ( name, index)
218
+ guard let data = CCryptoBoringSSL_X509_NAME_ENTRY_get_data ( entry) else {
219
+ return nil
220
+ }
212
221
213
- let entry = CCryptoBoringSSL_X509_NAME_get_entry ( self , index)
214
- guard let data = CCryptoBoringSSL_X509_NAME_ENTRY_get_data ( entry) else {
215
- return nil
216
- }
222
+ var value : UnsafeMutablePointer < CUnsignedChar > ?
223
+ defer { CCryptoBoringSSL_OPENSSL_free ( value) }
217
224
218
- var value : UnsafeMutablePointer < CUnsignedChar > ?
219
- defer { CCryptoBoringSSL_OPENSSL_free ( value) }
225
+ guard CCryptoBoringSSL_ASN1_STRING_to_UTF8 ( & value, data) >= 0 else {
226
+ return nil
227
+ }
220
228
221
- guard CCryptoBoringSSL_ASN1_STRING_to_UTF8 ( & value, data) >= 0 else {
222
- return nil
229
+ return String . decodeCString ( value, as: UTF8 . self, repairingInvalidCodeUnits: true ) ? . result
223
230
}
224
231
225
- return String . decodeCString ( value, as: UTF8 . self, repairingInvalidCodeUnits: true ) ? . result
232
+ self . userID = getStringValue ( from: x509Name, of: NID_userId)
233
+ self . commonName = getStringValue ( from: x509Name, of: NID_commonName)
234
+ self . organization = getStringValue ( from: x509Name, of: NID_organizationName)
235
+ self . organizationalUnit = getStringValue ( from: x509Name, of: NID_organizationalUnitName)
226
236
}
227
237
}
228
238
0 commit comments