0001 http://alamofire.org/)
0023 import Foundation
0024
0025 public class ServerTrustPolicyManager| Manager.swift:123 | serverTrustPolicyManager: ServerTrustPolicyManager? = nil) |
| Manager.swift:144 | serverTrustPolicyManager: ServerTrustPolicyManager? = nil) |
| Manager.swift:154 | private func commonInit(serverTrustPolicyManager serverTrustPolicyManager: ServerTrustPolicyManager?) { |
| ServerTrustPolicy.swift:70 | return objc_getAssociatedObject(self, &AssociatedKeys.ManagerKey) as? ServerTrustPolicyManager |
| ServerTrustPolicy.swift:68 | var serverTrustPolicyManager: ServerTrustPolicyManager? { |
{
0027 public let policies| ServerTrustPolicy.swift:43 | self.policies = policies |
| ServerTrustPolicy.swift:57 | return policies[host] |
: [String: ServerTrustPolicy]
0029
0030 parameterreturns
0042 public init(policies: [String: ServerTrustPolicy]) {
0043 self.policies = policies
0044 }
0045
0046 parameterreturns
0056 public func serverTrustPolicyForHost| Manager.swift:293 | serverTrustPolicy = session.serverTrustPolicyManager?.serverTrustPolicyForHost(host), |
| Request.swift:275 | serverTrustPolicy = session.serverTrustPolicyManager?.serverTrustPolicyForHost(host), |
(host: String) -> ServerTrustPolicy? {
0057 return policies[host]
0058 }
0059 }
0060
0061
0063 extension NSURLSession {
0064 private struct AssociatedKeys| ServerTrustPolicy.swift:70 | return objc_getAssociatedObject(self, &AssociatedKeys.ManagerKey) as? ServerTrustPolicyManager |
| ServerTrustPolicy.swift:73 | objc_setAssociatedObject(self, &AssociatedKeys.ManagerKey, manager, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) |
{
0065 static var ManagerKey| ServerTrustPolicy.swift:70 | return objc_getAssociatedObject(self, &AssociatedKeys.ManagerKey) as? ServerTrustPolicyManager |
| ServerTrustPolicy.swift:73 | objc_setAssociatedObject(self, &AssociatedKeys.ManagerKey, manager, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) |
= "NSURLSession.ServerTrustPolicyManager"
0066 }
0067
0068 var serverTrustPolicyManager| Manager.swift:155 | session.serverTrustPolicyManager = serverTrustPolicyManager |
| Manager.swift:293 | serverTrustPolicy = session.serverTrustPolicyManager?.serverTrustPolicyForHost(host), |
| Request.swift:275 | serverTrustPolicy = session.serverTrustPolicyManager?.serverTrustPolicyForHost(host), |
: ServerTrustPolicyManager? {
0069 get {
0070 return objc_getAssociatedObject(self, &AssociatedKeys.ManagerKey) as? ServerTrustPolicyManager
0071 }
0072 set (manager) {
0073 objc_setAssociatedObject(self, &AssociatedKeys.ManagerKey, manager, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
0074 }
0075 }
0076 }
0077
0078
0080
0112 public enum ServerTrustPolicy| ServerTrustPolicy.swift:28 | public let policies: [String: ServerTrustPolicy] |
| ServerTrustPolicy.swift:42 | public init(policies: [String: ServerTrustPolicy]) { |
| ServerTrustPolicy.swift:56 | public func serverTrustPolicyForHost(host: String) -> ServerTrustPolicy? { |
| ServerTrustPolicy.swift:218 | outerLoop: for serverPublicKey in ServerTrustPolicy.publicKeysForTrust(serverTrust) as [AnyObject] { |
{
0113 case PerformDefaultEvaluation| ServerTrustPolicy.swift:180 | case let .PerformDefaultEvaluation(validateHost): |
(validateHost: Bool)
0114 case PinCertificates| ServerTrustPolicy.swift:185 | case let .PinCertificates(pinnedCertificates, validateCertificateChain, validateHost): |
(certificates: [SecCertificate], validateCertificateChain: Bool, validateHost: Bool)
0115 case PinPublicKeys| ServerTrustPolicy.swift:207 | case let .PinPublicKeys(pinnedPublicKeys, validateCertificateChain, validateHost): |
(publicKeys: [SecKey], validateCertificateChain: Bool, validateHost: Bool)
0116 case DisableEvaluation| ServerTrustPolicy.swift:227 | case .DisableEvaluation: |
0117 case CustomEvaluation| ServerTrustPolicy.swift:229 | case let .CustomEvaluation(closure): |
((serverTrust: SecTrust, host: String) -> Bool)
0118
0119
0121 parameterreturns
0128 public static func certificatesInBundle| ServerTrustPolicy.swift:157 | for certificate in certificatesInBundle(bundle) { |
(bundle: NSBundle = NSBundle.mainBundle()) -> [SecCertificate] {
0129 var certificates: [SecCertificate] = []
0130
0131 let paths = Set([".cer", ".CER", ".crt", ".CRT", ".der", ".DER"].map { fileExtension in
0132 bundle.pathsForResourcesOfType(fileExtension, inDirectory: nil)
0133 }.flatten())
0134
0135 for path in paths {
0136 if let
0137 certificateData = NSData(contentsOfFile: path),
0138 certificate = SecCertificateCreateWithData(nil, certificateData)
0139 {
0140 certificates.append(certificate)
0141 }
0142 }
0143
0144 return certificates
0145 }
0146
0147 parameterreturns
0154 public static func publicKeysInBundle(bundle: NSBundle = NSBundle.mainBundle()) -> [SecKey] {
0155 var publicKeys: [SecKey] = []
0156
0157 for certificate in certificatesInBundle(bundle) {
0158 if let publicKey = publicKeyForCertificate(certificate) {
0159 publicKeys.append(publicKey)
0160 }
0161 }
0162
0163 return publicKeys
0164 }
0165
0166
0168 parameterparameterreturns
0176 public func evaluateServerTrust| Manager.swift:296 | if serverTrustPolicy.evaluateServerTrust(serverTrust, isValidForHost: host) { |
| Request.swift:278 | if serverTrustPolicy.evaluateServerTrust(serverTrust, isValidForHost: host) { |
(serverTrust: SecTrust, isValidForHost host: String) -> Bool {
0177 var serverTrustIsValid = false
0178
0179 switch self {
0180 case let .PerformDefaultEvaluation(validateHost):
0181 let policy = SecPolicyCreateSSL(true, validateHost ? host as CFString : nil)
0182 SecTrustSetPolicies(serverTrust, [policy])
0183
0184 serverTrustIsValid = trustIsValid(serverTrust)
0185 case let .PinCertificates(pinnedCertificates, validateCertificateChain, validateHost):
0186 if validateCertificateChain {
0187 let policy = SecPolicyCreateSSL(true, validateHost ? host as CFString : nil)
0188 SecTrustSetPolicies(serverTrust, [policy])
0189
0190 SecTrustSetAnchorCertificates(serverTrust, pinnedCertificates)
0191 SecTrustSetAnchorCertificatesOnly(serverTrust, true)
0192
0193 serverTrustIsValid = trustIsValid(serverTrust)
0194 } else {
0195 let serverCertificatesDataArray = certificateDataForTrust(serverTrust)
0196 let pinnedCertificatesDataArray = certificateDataForCertificates(pinnedCertificates)
0197
0198 outerLoop: for serverCertificateData in serverCertificatesDataArray {
0199 for pinnedCertificateData in pinnedCertificatesDataArray {
0200 if serverCertificateData.isEqualToData(pinnedCertificateData) {
0201 serverTrustIsValid = true
0202 break outerLoop
0203 }
0204 }
0205 }
0206 }
0207 case let .PinPublicKeys(pinnedPublicKeys, validateCertificateChain, validateHost):
0208 var certificateChainEvaluationPassed = true
0209
0210 if validateCertificateChain {
0211 let policy = SecPolicyCreateSSL(true, validateHost ? host as CFString : nil)
0212 SecTrustSetPolicies(serverTrust, [policy])
0213
0214 certificateChainEvaluationPassed = trustIsValid(serverTrust)
0215 }
0216
0217 if certificateChainEvaluationPassed {
0218 outerLoop: for serverPublicKey in ServerTrustPolicy.publicKeysForTrust(serverTrust) as [AnyObject] {
0219 for pinnedPublicKey in pinnedPublicKeys as [AnyObject] {
0220 if serverPublicKey.isEqual(pinnedPublicKey) {
0221 serverTrustIsValid = true
0222 break outerLoop
0223 }
0224 }
0225 }
0226 }
0227 case .DisableEvaluation:
0228 serverTrustIsValid = true
0229 case let .CustomEvaluation(closure):
0230 serverTrustIsValid = closure(serverTrust: serverTrust, host: host)
0231 }
0232
0233 return serverTrustIsValid
0234 }
0235
0236
0238 private func trustIsValid| ServerTrustPolicy.swift:184 | serverTrustIsValid = trustIsValid(serverTrust) |
| ServerTrustPolicy.swift:193 | serverTrustIsValid = trustIsValid(serverTrust) |
| ServerTrustPolicy.swift:214 | certificateChainEvaluationPassed = trustIsValid(serverTrust) |
(trust: SecTrust) -> Bool {
0239 var isValid = false
0240
0241 var result = SecTrustResultType(kSecTrustResultInvalid)
0242 let status = SecTrustEvaluate(trust, &result)
0243
0244 if status == errSecSuccess {
0245 let unspecified = SecTrustResultType(kSecTrustResultUnspecified)
0246 let proceed = SecTrustResultType(kSecTrustResultProceed)
0247
0248 isValid = result == unspecified || result == proceed
0249 }
0250
0251 return isValid
0252 }
0253
0254
0256 private func certificateDataForTrust| ServerTrustPolicy.swift:195 | let serverCertificatesDataArray = certificateDataForTrust(serverTrust) |
(trust: SecTrust) -> [NSData] {
0257 var certificates: [SecCertificate] = []
0258
0259 for index in 0..<SecTrustGetCertificateCount(trust) {
0260 if let certificate = SecTrustGetCertificateAtIndex(trust, index) {
0261 certificates.append(certificate)
0262 }
0263 }
0264
0265 return certificateDataForCertificates(certificates)
0266 }
0267
0268 private func certificateDataForCertificates| ServerTrustPolicy.swift:196 | let pinnedCertificatesDataArray = certificateDataForCertificates(pinnedCertificates) |
| ServerTrustPolicy.swift:265 | return certificateDataForCertificates(certificates) |
(certificates: [SecCertificate]) -> [NSData] {
0269 return certificates.map { SecCertificateCopyData($0) as NSData }
0270 }
0271
0272
0274 private static func publicKeysForTrust| ServerTrustPolicy.swift:218 | outerLoop: for serverPublicKey in ServerTrustPolicy.publicKeysForTrust(serverTrust) as [AnyObject] { |
(trust: SecTrust) -> [SecKey] {
0275 var publicKeys: [SecKey] = []
0276
0277 for index in 0..<SecTrustGetCertificateCount(trust) {
0278 if let
0279 certificate = SecTrustGetCertificateAtIndex(trust, index),
0280 publicKey = publicKeyForCertificate(certificate)
0281 {
0282 publicKeys.append(publicKey)
0283 }
0284 }
0285
0286 return publicKeys
0287 }
0288
0289 private static func publicKeyForCertificate| ServerTrustPolicy.swift:158 | if let publicKey = publicKeyForCertificate(certificate) { |
| ServerTrustPolicy.swift:280 | publicKey = publicKeyForCertificate(certificate) |
(certificate: SecCertificate) -> SecKey? {
0290 var publicKey: SecKey?
0291
0292 let policy = SecPolicyCreateBasicX509()
0293 var trust: SecTrust?
0294 let trustCreationStatus = SecTrustCreateWithCertificates(certificate, policy, &trust)
0295
0296 if let trust = trust where trustCreationStatus == errSecSuccess {
0297 publicKey = SecTrustCopyPublicKey(trust)
0298 }
0299
0300 return publicKey
0301 }
0302 }
0303