Source File
root_darwin.go
Belonging Package
crypto/x509
package x509
import (
macOS
)
var debugDarwinRoots = strings.Contains(os.Getenv("GODEBUG"), "x509roots=1")
func ( *Certificate) ( *VerifyOptions) ( [][]*Certificate, error) {
return nil, nil
}
func () (*CertPool, error) {
var []*Certificate
:= make(map[string]bool)
for , := range []macOS.SecTrustSettingsDomain{
macOS.SecTrustSettingsDomainUser,
macOS.SecTrustSettingsDomainAdmin,
macOS.SecTrustSettingsDomainSystem,
} {
, := macOS.SecTrustSettingsCopyCertificates()
if == macOS.ErrNoTrustSettings {
continue
} else if != nil {
return nil,
}
defer macOS.CFRelease()
for := 0; < macOS.CFArrayGetCount(); ++ {
:= macOS.CFArrayGetValueAtIndex(, )
, := exportCertificate()
if != nil {
if debugDarwinRoots {
fmt.Fprintf(os.Stderr, "crypto/x509: domain %d, certificate #%d: %v\n", , , )
}
continue
}
var macOS.SecTrustSettingsResult
= macOS.SecTrustSettingsResultTrustRoot
} else {
, = sslTrustSettingsResult()
if != nil {
if debugDarwinRoots {
fmt.Fprintf(os.Stderr, "crypto/x509: trust settings for %v: %v\n", .Subject, )
}
continue
}
if debugDarwinRoots {
fmt.Fprintf(os.Stderr, "crypto/x509: trust settings for %v: %d\n", .Subject, )
}
}
case macOS.SecTrustSettingsResultTrustRoot:
if isRootCertificate() {
= append(, )
}
case macOS.SecTrustSettingsResultTrustAsRoot:
if !isRootCertificate() {
= append(, )
}
func ( macOS.CFRef) (*Certificate, error) {
, := macOS.SecItemExport()
if != nil {
return nil,
}
defer macOS.CFRelease()
:= macOS.CFDataToSlice()
return ParseCertificate()
}
func ( *Certificate) bool {
return bytes.Equal(.RawSubject, .RawIssuer)
}
, := macOS.SecTrustSettingsCopyTrustSettings(, macOS.SecTrustSettingsDomainUser)
if != nil || == 0 {
if debugDarwinRoots && != macOS.ErrNoTrustSettings {
fmt.Fprintf(os.Stderr, "crypto/x509: SecTrustSettingsCopyTrustSettings for SecTrustSettingsDomainUser failed: %s\n", )
}
, = macOS.SecTrustSettingsCopyTrustSettings(, macOS.SecTrustSettingsDomainAdmin)
}
if debugDarwinRoots && != macOS.ErrNoTrustSettings {
fmt.Fprintf(os.Stderr, "crypto/x509: SecTrustSettingsCopyTrustSettings for SecTrustSettingsDomainAdmin failed: %s\n", )
}
return macOS.SecTrustSettingsResultUnspecified, nil
}
defer macOS.CFRelease()
if macOS.CFArrayGetCount() == 0 {
return macOS.SecTrustSettingsResultTrustRoot, nil
}
:= func( macOS.CFRef) bool {
:= macOS.SecPolicyCopyProperties()
defer macOS.CFRelease()
if , := macOS.CFDictionaryGetValueIfPresent(, macOS.SecPolicyOid); {
return macOS.CFEqual(, macOS.CFRef(macOS.SecPolicyAppleSSL))
}
return false
}
for := 0; < macOS.CFArrayGetCount(); ++ {
:= macOS.CFArrayGetValueAtIndex(, )
if , := macOS.CFDictionaryGetValueIfPresent(, macOS.SecTrustSettingsPolicy); {
if !() {
continue
}
}
if , := macOS.CFDictionaryGetValueIfPresent(, macOS.SecTrustSettingsPolicyString); {
continue
}
if ! {
return macOS.SecTrustSettingsResultTrustRoot, nil
}
, := macOS.CFNumberGetValue()
if != nil {
return 0,
}
switch := macOS.SecTrustSettingsResult(); {
case macOS.SecTrustSettingsResultTrustRoot,
macOS.SecTrustSettingsResultTrustAsRoot,
macOS.SecTrustSettingsResultDeny:
return , nil
}
}
![]() |
The pages are generated with Golds v0.3.2-preview. (GOOS=darwin GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |