118
118
#if TARGET_OS_IPHONE
119
119
NSString *const GCDAsyncSocketUseCFStreamForTLS = @" GCDAsyncSocketUseCFStreamForTLS" ;
120
120
#endif
121
-
121
+ NSString * const GCDAsyncSocketSSLPeerID = @" GCDAsyncSocketSSLPeerID " ;
122
122
NSString *const GCDAsyncSocketSSLCipherSuites = @" GCDAsyncSocketSSLCipherSuites" ;
123
123
NSString *const GCDAsyncSocketSSLProtocolVersionMin = @" GCDAsyncSocketSSLProtocolVersionMin" ;
124
124
NSString *const GCDAsyncSocketSSLProtocolVersionMax = @" GCDAsyncSocketSSLProtocolVersionMax" ;
@@ -3615,17 +3615,14 @@ - (void)setupReadAndWriteSourcesForNewlyConnectedSocket:(int)socketFD
3615
3615
- (BOOL )usingCFStreamForTLS
3616
3616
{
3617
3617
#if TARGET_OS_IPHONE
3618
- {
3619
- if ((flags & kSocketSecure ) && (flags & kUsingCFStreamForTLS ))
3620
- {
3621
- // Due to the fact that Apple doesn't give us the full power of SecureTransport on iOS,
3622
- // we are relegated to using the slower, less powerful, and RunLoop based CFStream API. :( Boo!
3623
- //
3624
- // Thus we're not able to use the GCD read/write sources in this particular scenario.
3625
-
3626
- return YES ;
3627
- }
3618
+
3619
+ if ((flags & kSocketSecure ) && (flags & kUsingCFStreamForTLS ))
3620
+ {
3621
+ // The startTLS method was given the GCDAsyncSocketUseCFStreamForTLS flag.
3622
+
3623
+ return YES ;
3628
3624
}
3625
+
3629
3626
#endif
3630
3627
3631
3628
return NO ;
@@ -6121,16 +6118,17 @@ - (void)ssl_startTLS
6121
6118
// Checklist:
6122
6119
// 1. kCFStreamSSLPeerName
6123
6120
// 2. kCFStreamSSLCertificates
6124
- // 3. GCDAsyncSocketSSLProtocolVersionMin & GCDAsyncSocketSSLProtocolVersionMax
6125
- // 4. GCDAsyncSocketSSLCipherSuites
6126
- // 5. GCDAsyncSocketSSLDiffieHellmanParameters (Mac)
6121
+ // 3. GCDAsyncSocketSSLPeerID
6122
+ // 4. GCDAsyncSocketSSLProtocolVersionMin & GCDAsyncSocketSSLProtocolVersionMax
6123
+ // 5. GCDAsyncSocketSSLCipherSuites
6124
+ // 6. GCDAsyncSocketSSLDiffieHellmanParameters (Mac)
6127
6125
//
6128
6126
// Deprecated (throw error):
6129
- // 6 . kCFStreamSSLAllowsAnyRoot
6130
- // 7 . kCFStreamSSLAllowsExpiredRoots
6131
- // 8 . kCFStreamSSLAllowsExpiredCertificates
6132
- // 9 . kCFStreamSSLValidatesCertificateChain
6133
- // 10 . kCFStreamSSLLevel
6127
+ // 7 . kCFStreamSSLAllowsAnyRoot
6128
+ // 8 . kCFStreamSSLAllowsExpiredRoots
6129
+ // 9 . kCFStreamSSLAllowsExpiredCertificates
6130
+ // 10 . kCFStreamSSLValidatesCertificateChain
6131
+ // 11 . kCFStreamSSLLevel
6134
6132
6135
6133
id value;
6136
6134
@@ -6167,7 +6165,22 @@ - (void)ssl_startTLS
6167
6165
}
6168
6166
}
6169
6167
6170
- // 3. GCDAsyncSocketSSLProtocolVersionMin & GCDAsyncSocketSSLProtocolVersionMax
6168
+ // 3. GCDAsyncSocketSSLPeerID
6169
+
6170
+ value = [tlsSettings objectForKey: GCDAsyncSocketSSLPeerID];
6171
+ if (value)
6172
+ {
6173
+ NSData *peerIdData = (NSData *)value;
6174
+
6175
+ status = SSLSetPeerID (sslContext, [peerIdData bytes ], [peerIdData length ]);
6176
+ if (status != noErr)
6177
+ {
6178
+ [self closeWithError: [self otherError: @" Error in SSLSetPeerID" ]];
6179
+ return ;
6180
+ }
6181
+ }
6182
+
6183
+ // 4. GCDAsyncSocketSSLProtocolVersionMin & GCDAsyncSocketSSLProtocolVersionMax
6171
6184
6172
6185
id sslMinLevel = [tlsSettings objectForKey: GCDAsyncSocketSSLProtocolVersionMin];
6173
6186
id sslMaxLevel = [tlsSettings objectForKey: GCDAsyncSocketSSLProtocolVersionMax];
@@ -6212,7 +6225,7 @@ - (void)ssl_startTLS
6212
6225
}
6213
6226
}
6214
6227
6215
- // 4 . GCDAsyncSocketSSLCipherSuites
6228
+ // 5 . GCDAsyncSocketSSLCipherSuites
6216
6229
6217
6230
value = [tlsSettings objectForKey: GCDAsyncSocketSSLCipherSuites];
6218
6231
if (value)
@@ -6236,15 +6249,14 @@ - (void)ssl_startTLS
6236
6249
}
6237
6250
}
6238
6251
6239
- // 9 . GCDAsyncSocketSSLDiffieHellmanParameters
6252
+ // 6 . GCDAsyncSocketSSLDiffieHellmanParameters
6240
6253
6241
6254
#if !TARGET_OS_IPHONE
6242
6255
value = [tlsSettings objectForKey: GCDAsyncSocketSSLDiffieHellmanParameters];
6243
6256
if (value)
6244
6257
{
6245
6258
NSData *diffieHellmanData = (NSData *)value;
6246
6259
6247
- // Still available
6248
6260
status = SSLSetDiffieHellmanParams (sslContext, [diffieHellmanData bytes ], [diffieHellmanData length ]);
6249
6261
if (status != noErr)
6250
6262
{
@@ -6256,7 +6268,7 @@ - (void)ssl_startTLS
6256
6268
6257
6269
// DEPRECATED checks
6258
6270
6259
- // 6 . kCFStreamSSLAllowsAnyRoot
6271
+ // 7 . kCFStreamSSLAllowsAnyRoot
6260
6272
6261
6273
value = [tlsSettings objectForKey: (NSString *)kCFStreamSSLAllowsAnyRoot ];
6262
6274
if (value)
@@ -6272,7 +6284,7 @@ - (void)ssl_startTLS
6272
6284
return ;
6273
6285
}
6274
6286
6275
- // 7 . kCFStreamSSLAllowsExpiredRoots
6287
+ // 8 . kCFStreamSSLAllowsExpiredRoots
6276
6288
6277
6289
value = [tlsSettings objectForKey: (NSString *)kCFStreamSSLAllowsExpiredRoots ];
6278
6290
if (value)
@@ -6288,7 +6300,7 @@ - (void)ssl_startTLS
6288
6300
return ;
6289
6301
}
6290
6302
6291
- // 8 . kCFStreamSSLValidatesCertificateChain
6303
+ // 9 . kCFStreamSSLValidatesCertificateChain
6292
6304
6293
6305
value = [tlsSettings objectForKey: (NSString *)kCFStreamSSLValidatesCertificateChain ];
6294
6306
if (value)
@@ -6304,7 +6316,7 @@ - (void)ssl_startTLS
6304
6316
return ;
6305
6317
}
6306
6318
6307
- // 9 . kCFStreamSSLAllowsExpiredCertificates
6319
+ // 10 . kCFStreamSSLAllowsExpiredCertificates
6308
6320
6309
6321
value = [tlsSettings objectForKey: (NSString *)kCFStreamSSLAllowsExpiredCertificates ];
6310
6322
if (value)
@@ -6320,6 +6332,8 @@ - (void)ssl_startTLS
6320
6332
return ;
6321
6333
}
6322
6334
6335
+ // 11. kCFStreamSSLLevel
6336
+
6323
6337
value = [tlsSettings objectForKey: (NSString *)kCFStreamSSLLevel ];
6324
6338
if (value)
6325
6339
{
0 commit comments