@@ -77,7 +77,7 @@ extension CertificatePolicy {
7777 func verify(
7878 certChain: [ Certificate ] ,
7979 trustedRoots: [ Certificate ] ? ,
80- policies: [ VerifierPolicy ] ,
80+ @ PolicyBuilder policies: ( ) -> some VerifierPolicy ,
8181 observabilityScope: ObservabilityScope ,
8282 callbackQueue: DispatchQueue ,
8383 callback: @escaping ( Result < Void , Error > ) -> Void
@@ -87,7 +87,7 @@ extension CertificatePolicy {
8787 guard !certChain. isEmpty else {
8888 return wrappedCallback ( . failure( CertificatePolicyError . emptyCertChain) )
8989 }
90-
90+ let policies = policies ( )
9191 Task {
9292 var trustStore = CertificateStores . defaultTrustRoots
9393 if let trustedRoots {
@@ -98,9 +98,9 @@ extension CertificatePolicy {
9898 return wrappedCallback ( . failure( CertificatePolicyError . noTrustedRootCertsConfigured) )
9999 }
100100
101- let policySet = PolicySet ( policies : policies )
102-
103- var verifier = Verifier ( rootCertificates : CertificateStore ( trustStore ) , policy : policySet )
101+ var verifier = Verifier ( rootCertificates : CertificateStore ( trustStore ) ) {
102+ policies
103+ }
104104 let result = await verifier. validate (
105105 leafCertificate: certChain [ 0 ] ,
106106 intermediates: CertificateStore ( certChain)
@@ -182,31 +182,26 @@ struct DefaultCertificatePolicy: CertificatePolicy {
182182 return wrappedCallback ( . failure( CertificatePolicyError . emptyCertChain) )
183183 }
184184
185- var policies = [ VerifierPolicy] ( )
186- policies. append ( _ADPCertificatePolicy ( ) ) // included for testing
187- // Check if subject name matches
188- policies. append (
189- _SubjectNamePolicy (
190- expectedUserID: self . expectedSubjectUserID,
191- expectedOrganizationalUnit: self . expectedSubjectOrganizationalUnit
192- )
193- )
194- // Must be a code signing certificate
195- policies. append ( _CodeSigningPolicy ( ) )
196- // Basic validations including expiry check
197- policies. append ( RFC5280Policy ( validationTime: validationTime) )
198- // Must support OCSP
199- policies. append (
200- _OCSPVerifierPolicy (
201- httpClient: self . httpClient,
202- validationTime: validationTime
203- )
204- )
205-
206185 self . verify (
207186 certChain: certChain,
208187 trustedRoots: self . trustedRoots,
209- policies: policies,
188+ policies: {
189+ _ADPCertificatePolicy ( ) // included for testing
190+ // Check if subject name matches
191+ _SubjectNamePolicy (
192+ expectedUserID: self . expectedSubjectUserID,
193+ expectedOrganizationalUnit: self . expectedSubjectOrganizationalUnit
194+ )
195+ // Must be a code signing certificate
196+ _CodeSigningPolicy ( )
197+ // Basic validations including expiry check
198+ RFC5280Policy ( validationTime: validationTime)
199+ // Must support OCSP
200+ _OCSPVerifierPolicy (
201+ httpClient: self . httpClient,
202+ validationTime: validationTime
203+ )
204+ } ,
210205 observabilityScope: self . observabilityScope,
211206 callbackQueue: self . callbackQueue,
212207 callback: callback
@@ -269,33 +264,28 @@ struct ADPSwiftPackageCollectionCertificatePolicy: CertificatePolicy {
269264 return wrappedCallback ( . failure( CertificatePolicyError . emptyCertChain) )
270265 }
271266
272- var policies = [ VerifierPolicy] ( )
273- // Check for specific markers
274- policies. append ( _ADPSwiftPackageCertificatePolicy ( ) )
275- policies. append ( _ADPCertificatePolicy ( ) ) // included for testing
276- // Check if subject name matches
277- policies. append (
278- _SubjectNamePolicy (
279- expectedUserID: self . expectedSubjectUserID,
280- expectedOrganizationalUnit: self . expectedSubjectOrganizationalUnit
281- )
282- )
283- // Must be a code signing certificate
284- policies. append ( _CodeSigningPolicy ( ) )
285- // Basic validations including expiry check
286- policies. append ( RFC5280Policy ( validationTime: validationTime) )
287- // Must support OCSP
288- policies. append (
289- _OCSPVerifierPolicy (
290- httpClient: self . httpClient,
291- validationTime: validationTime
292- )
293- )
294-
295267 self . verify (
296268 certChain: certChain,
297269 trustedRoots: self . trustedRoots,
298- policies: policies,
270+ policies: {
271+ // Check for specific markers
272+ _ADPSwiftPackageCertificatePolicy ( )
273+ _ADPCertificatePolicy ( ) // included for testing
274+ // Check if subject name matches
275+ _SubjectNamePolicy (
276+ expectedUserID: self . expectedSubjectUserID,
277+ expectedOrganizationalUnit: self . expectedSubjectOrganizationalUnit
278+ )
279+ // Must be a code signing certificate
280+ _CodeSigningPolicy ( )
281+ // Basic validations including expiry check
282+ RFC5280Policy ( validationTime: validationTime)
283+ // Must support OCSP
284+ _OCSPVerifierPolicy (
285+ httpClient: self . httpClient,
286+ validationTime: validationTime
287+ )
288+ } ,
299289 observabilityScope: self . observabilityScope,
300290 callbackQueue: self . callbackQueue,
301291 callback: callback
@@ -358,33 +348,28 @@ struct ADPAppleDistributionCertificatePolicy: CertificatePolicy {
358348 return wrappedCallback ( . failure( CertificatePolicyError . emptyCertChain) )
359349 }
360350
361- var policies = [ VerifierPolicy] ( )
362- // Check for specific markers
363- policies. append ( _ADPAppleDistributionCertificatePolicy ( ) )
364- policies. append ( _ADPCertificatePolicy ( ) ) // included for testing
365- // Check if subject name matches
366- policies. append (
367- _SubjectNamePolicy (
368- expectedUserID: self . expectedSubjectUserID,
369- expectedOrganizationalUnit: self . expectedSubjectOrganizationalUnit
370- )
371- )
372- // Must be a code signing certificate
373- policies. append ( _CodeSigningPolicy ( ) )
374- // Basic validations including expiry check
375- policies. append ( RFC5280Policy ( validationTime: validationTime) )
376- // Must support OCSP
377- policies. append (
378- _OCSPVerifierPolicy (
379- httpClient: self . httpClient,
380- validationTime: validationTime
381- )
382- )
383-
384351 self . verify (
385352 certChain: certChain,
386353 trustedRoots: self . trustedRoots,
387- policies: policies,
354+ policies: {
355+ // Check for specific markers
356+ _ADPAppleDistributionCertificatePolicy ( )
357+ _ADPCertificatePolicy ( ) // included for testing
358+ // Check if subject name matches
359+ _SubjectNamePolicy (
360+ expectedUserID: self . expectedSubjectUserID,
361+ expectedOrganizationalUnit: self . expectedSubjectOrganizationalUnit
362+ )
363+ // Must be a code signing certificate
364+ _CodeSigningPolicy ( )
365+ // Basic validations including expiry check
366+ RFC5280Policy ( validationTime: validationTime)
367+ // Must support OCSP
368+ _OCSPVerifierPolicy (
369+ httpClient: self . httpClient,
370+ validationTime: validationTime
371+ )
372+ } ,
388373 observabilityScope: self . observabilityScope,
389374 callbackQueue: self . callbackQueue,
390375 callback: callback
0 commit comments