Documentation ¶
Index ¶
- Constants
- Variables
- func DefaultRequirement(identifier string, certs []*x509.Certificate) ([]byte, error)
- func MarkHandledExtensions(cert *x509.Certificate)
- func Sign(ctx context.Context, cert *certloader.Certificate, params *SignatureParams) ([]byte, *pkcs9.TimestampedSignature, error)
- func TeamID(cert *x509.Certificate) string
- type CodeDirectory
- type CodeDirectoryHeader
- type HashType
- type Requirement
- type RequirementType
- type Requirements
- type SigBlob
- type SignatureFlags
- type SignatureParams
- type VerifiedBlob
- type VerifyParams
Constants ¶
View Source
const RootCA = `` /* 1700-byte string literal not displayed */
RootCA lists known proprietary certificate roots
Variables ¶
View Source
var ( CodeSign = asn1.ObjectIdentifier{1, 2, 840, 113635, 100, 6, 1} CodeSignApple = asn1.ObjectIdentifier{1, 2, 840, 113635, 100, 6, 1, 1} CodeSignIphoneDev = asn1.ObjectIdentifier{1, 2, 840, 113635, 100, 6, 1, 2} CodeSignIphoneApple = asn1.ObjectIdentifier{1, 2, 840, 113635, 100, 6, 1, 3} CodeSignIphoneSubmit = asn1.ObjectIdentifier{1, 2, 840, 113635, 100, 6, 1, 4} CodeSignSafariExtension = asn1.ObjectIdentifier{1, 2, 840, 113635, 100, 6, 1, 5} CodeSignMacAppSubmit = asn1.ObjectIdentifier{1, 2, 840, 113635, 100, 6, 1, 7} CodeSignMacInstallerSubmit = asn1.ObjectIdentifier{1, 2, 840, 113635, 100, 6, 1, 8} CodeSignMacAppStore = asn1.ObjectIdentifier{1, 2, 840, 113635, 100, 6, 1, 9} CodeSignMacAppStoreInstaller = asn1.ObjectIdentifier{1, 2, 840, 113635, 100, 6, 1, 10} CodeSignMacDev = asn1.ObjectIdentifier{1, 2, 840, 113635, 100, 6, 1, 12} CodeSignDevIDExecute = asn1.ObjectIdentifier{1, 2, 840, 113635, 100, 6, 1, 13} CodeSignDevIDInstall = asn1.ObjectIdentifier{1, 2, 840, 113635, 100, 6, 1, 14} CodeSignDevIDKernel = asn1.ObjectIdentifier{1, 2, 840, 113635, 100, 6, 1, 18} )
Extensions for specific types of key usage. These endorse a leaf certificate to create signatures with the named capability. https://images.apple.com/certificateauthority/pdf/Apple_WWDR_CPS_v1.22.pdf
View Source
var ( Intermediate = asn1.ObjectIdentifier{1, 2, 840, 113635, 100, 6, 2} IntermediateWWDR = asn1.ObjectIdentifier{1, 2, 840, 113635, 100, 6, 2, 1} IntermediateITMS = asn1.ObjectIdentifier{1, 2, 840, 113635, 100, 6, 2, 2} IntermediateAAI = asn1.ObjectIdentifier{1, 2, 840, 113635, 100, 6, 2, 3} IntermediateDevID = asn1.ObjectIdentifier{1, 2, 840, 113635, 100, 6, 2, 6} )
These endorse an intermediate certificate to sign a certain type of leaf.
View Source
var ( // AttrCodeDirHashPlist holds a plist with (truncated) hashes of each code // directory found in the signature AttrCodeDirHashPlist = asn1.ObjectIdentifier{1, 2, 840, 113635, 100, 9, 1} // AttrCodeDirHashes is a set of code directory digests identified by ASN.1 // algorithm AttrCodeDirHashes = asn1.ObjectIdentifier{1, 2, 840, 113635, 100, 9, 2} )
Authenticated attributes found in a signature
Functions ¶
func DefaultRequirement ¶
func DefaultRequirement(identifier string, certs []*x509.Certificate) ([]byte, error)
func MarkHandledExtensions ¶
func MarkHandledExtensions(cert *x509.Certificate)
MarkHandledExtensions marks proprietary critical extensions as handled so that chain verification can proceed
func Sign ¶
func Sign(ctx context.Context, cert *certloader.Certificate, params *SignatureParams) ([]byte, *pkcs9.TimestampedSignature, error)
func TeamID ¶
func TeamID(cert *x509.Certificate) string
TeamID returns the team identifier found in an apple-issued leaf certificate, or "" if none was found
Types ¶
type CodeDirectory ¶
type CodeDirectory struct { Header CodeDirectoryHeader SigningIdentity string TeamIdentifier string HashFunc crypto.Hash CodeHashes [][]byte ManifestHash []byte RequirementsHash []byte ResourcesHash []byte EntitlementsHash []byte EntitlementsDERHash []byte RepSpecificHash []byte Raw []byte CDHash []byte IType uint32 }
type CodeDirectoryHeader ¶
type CodeDirectoryHeader struct { Magic csMagic Length uint32 Version uint32 Flags SignatureFlags HashOffset uint32 IdentOffset uint32 SpecialSlotCount uint32 CodeSlotCount uint32 CodeLimit uint32 HashSize uint8 HashType HashType PageSizeLog2 uint8 // Version >= 0x20100 ScatterOffset uint32 // Version >= 0x20200 TeamOffset uint32 // Version >= 0x20300 CodeLimit64 int64 // Version >= 0x20400 ExecSegmentBase int64 ExecSegmentLimit int64 ExecSegmentFlags int64 // contains filtered or unexported fields }
type Requirement ¶
type Requirement struct {
Raw []byte
}
func (*Requirement) Format ¶
func (r *Requirement) Format() (string, error)
type RequirementType ¶
type RequirementType uint32
const ( HostRequirement RequirementType = iota + 1 GuestRequirement DesignatedRequirement LibraryRequirement PluginRequirement )
CSCommon.h
func (RequirementType) String ¶
func (t RequirementType) String() string
type Requirements ¶
type Requirements map[RequirementType]*Requirement
type SigBlob ¶
type SigBlob struct { // with blob header Entitlement []byte EntitlementDER []byte RawRequirements []byte NotaryTicket []byte Unknowns [][]byte Directories []*CodeDirectory CMS *pkcs7.ContentInfoSignedData }
func (*SigBlob) Requirements ¶
func (b *SigBlob) Requirements() (Requirements, error)
type SignatureFlags ¶
type SignatureFlags uint32
const ( FlagHost SignatureFlags = 0x000001 FlagAdhoc SignatureFlags = 0x000002 FlagForceHard SignatureFlags = 0x000100 FlagForceKill SignatureFlags = 0x000200 FlagForceExpiration SignatureFlags = 0x000400 FlagRestrict SignatureFlags = 0x000800 FlagEnforcement SignatureFlags = 0x001000 FlagLibraryValidation SignatureFlags = 0x002000 FlagRuntime SignatureFlags = 0x010000 FlagLinkerSigned SignatureFlags = 0x020000 )
CSCommon.h
type SignatureParams ¶
type SignatureParams struct { Pages io.Reader // read page contents OldSignature io.Reader // read the existing signature, if any, after the pages HashFunc crypto.Hash InfoPlist []byte // manifest to bind to signature Resources []byte // CodeResources to bind to signature // the following are copied from the old signature if empty Flags SignatureFlags Requirements []byte // requirements to embed in signature Entitlement []byte // entitlement to embed in signature EntitlementDER []byte // entitlement in DER format RepSpecific []byte // DMG header SigningIdentity string // bundle ID TeamIdentifier string // team ID from signing cert (set automatically if empty) ExecSegmentBase int64 ExecSegmentLimit int64 ExecSegmentFlags int64 }
func (*SignatureParams) DefaultsFromBundle ¶
func (p *SignatureParams) DefaultsFromBundle(cert *certloader.Certificate) error
func (*SignatureParams) DefaultsFromSignature ¶
func (p *SignatureParams) DefaultsFromSignature() error
type VerifiedBlob ¶
type VerifiedBlob struct { Blob *SigBlob Signature *pkcs9.TimestampedSignature HashFunc crypto.Hash }
func Verify ¶
func Verify(blob []byte, params VerifyParams) (*VerifiedBlob, error)
type VerifyParams ¶
Click to show internal directories.
Click to hide internal directories.