Imports #
"crypto/sha256"
"debug/macho"
"encoding/binary"
"io"
"cmd/internal/hash"
"crypto/sha256"
"debug/macho"
"encoding/binary"
"io"
"cmd/internal/hash"
const CSMAGIC_CODEDIRECTORY = 0xfade0c02const CSMAGIC_DETACHED_SIGNATURE = 0xfade0cc1const CSMAGIC_EMBEDDED_SIGNATURE = 0xfade0cc0const CSMAGIC_REQUIREMENT = 0xfade0c00const CSMAGIC_REQUIREMENTS = 0xfade0c01const CSSLOT_CODEDIRECTORY = 0const CS_EXECSEG_ALLOW_UNSIGNED = 0x10const CS_EXECSEG_CAN_EXEC_CDHASH = 0x200const CS_EXECSEG_CAN_LOAD_CDHASH = 0x100const CS_EXECSEG_DEBUGGER = 0x20const CS_EXECSEG_JIT = 0x40const CS_EXECSEG_MAIN_BINARY = 0x1const CS_EXECSEG_SKIP_LV = 0x80const CS_HASHTYPE_SHA1 = 1const CS_HASHTYPE_SHA256 = 2const CS_HASHTYPE_SHA256_TRUNCATED = 3const CS_HASHTYPE_SHA384 = 4const LC_CODE_SIGNATURE = 0x1dconst blobSize = *ast.BinaryExprconst codeDirectorySize = *ast.BinaryExprconst pageSize = *ast.BinaryExprconst pageSizeBits = 12const superBlobSize = *ast.BinaryExprtype Blob struct {
typ uint32
offset uint32
}type CodeDirectory struct {
magic uint32
length uint32
version uint32
flags uint32
hashOffset uint32
identOffset uint32
nSpecialSlots uint32
nCodeSlots uint32
codeLimit uint32
hashSize uint8
hashType uint8
_pad1 uint8
pageSize uint8
_pad2 uint32
scatterOffset uint32
teamOffset uint32
_pad3 uint32
codeLimit64 uint64
execSegBase uint64
execSegLimit uint64
execSegFlags uint64
}CodeSigCmd is Mach-O LC_CODE_SIGNATURE load command.
type CodeSigCmd struct {
Cmd uint32
Cmdsize uint32
Dataoff uint32
Datasize uint32
}type SuperBlob struct {
magic uint32
length uint32
count uint32
}func FindCodeSigCmd(f *macho.File) (CodeSigCmd, bool)Sign generates an ad-hoc code signature and writes it to out. out must have length at least Size(codeSize, id). data is the file content without the signature, of size codeSize. textOff and textSize is the file offset and size of the text segment. isMain is true if this is a main executable. id is the identifier used for signing (a field in CodeDirectory blob, which has no significance in ad-hoc signing).
func Sign(out []byte, data io.Reader, id string, codeSize int64, textOff int64, textSize int64, isMain bool)Size computes the size of the code signature. id is the identifier used for signing (a field in CodeDirectory blob, which has no significance in ad-hoc signing).
func Size(codeSize int64, id string) int64func (b *Blob) put(out []byte) []bytefunc (s *SuperBlob) put(out []byte) []bytefunc (c *CodeDirectory) put(out []byte) []bytefunc put32be(b []byte, x uint32) []bytefunc put64be(b []byte, x uint64) []bytefunc put8(b []byte, x uint8) []bytefunc puts(b []byte, s []byte) []byteGenerated with Arrow