diff --git a/types/codesign.go b/types/codesign.go index 833be9e..45ab654 100644 --- a/types/codesign.go +++ b/types/codesign.go @@ -1,7 +1,5 @@ package types -//go:generate stringer -type=CsCodeDirectoryFlag,CDVersion,ExecSegFlag -output codesign_string.go - type CsMagic uint32 const ( @@ -109,9 +107,9 @@ var csSlotTypeStrings = []intName{ {uint32(CSSLOT_RESOURCEDIR), "ResourceDir"}, {uint32(CSSLOT_APPLICATION), "Application"}, {uint32(CSSLOT_ENTITLEMENTS), "Entitlements"}, - {uint32(CSSLOT_ALTERNATE_CODEDIRECTORIES), "AlternateCodeDirectories"}, - {uint32(CSSLOT_ALTERNATE_CODEDIRECTORY_MAX), "AlternateCodeDirectoryMax"}, - {uint32(CSSLOT_ALTERNATE_CODEDIRECTORY_LIMIT), "AlternateCodeDirectoryLimit"}, + {uint32(CSSLOT_ALTERNATE_CODEDIRECTORIES), "Alternate CodeDirectories"}, + {uint32(CSSLOT_ALTERNATE_CODEDIRECTORY_MAX), "Alternate CodeDirectory Max"}, + {uint32(CSSLOT_ALTERNATE_CODEDIRECTORY_LIMIT), "Alternate CodeDirectory Limit"}, {uint32(CSSLOT_CMS_SIGNATURE), "CMS (RFC3852) signature"}, {uint32(CSSLOT_IDENTIFICATIONSLOT), "IdentificationSlot"}, {uint32(CSSLOT_TICKETSLOT), "TicketSlot"}, @@ -175,10 +173,27 @@ const ( CS_SUPPORTS_LINKAGE CDVersion = 0x20600 ) +var csVersionypeStrings = []intName{ + {uint32(CS_SUPPORTS_SCATTER), "Scatter"}, + {uint32(CS_SUPPORTS_TEAMID), "TeamID"}, + {uint32(CS_SUPPORTS_CODELIMIT64), "Codelimit64"}, + {uint32(CS_SUPPORTS_EXECSEG), "ExecSeg"}, + {uint32(CS_SUPPORTS_RUNTIME), "Runtime"}, + {uint32(CS_SUPPORTS_LINKAGE), "Linkage"}, +} + +func (v CDVersion) String() string { + return stringName(uint32(v), csVersionypeStrings, false) +} +func (v CDVersion) GoString() string { + return stringName(uint32(v), csVersionypeStrings, true) +} + type CsCodeDirectoryFlag uint32 const ( /* code signing attributes of a process */ + CS_NONE CsCodeDirectoryFlag = 0x00000000 /* no flags */ CS_VALID CsCodeDirectoryFlag = 0x00000001 /* dynamically valid */ CS_ADHOC CsCodeDirectoryFlag = 0x00000002 /* ad hoc signed */ CS_GET_TASK_ALLOW CsCodeDirectoryFlag = 0x00000004 /* has get-task-allow entitlement */ @@ -219,6 +234,46 @@ const ( CS_ENTITLEMENT_FLAGS CsCodeDirectoryFlag = (CS_GET_TASK_ALLOW | CS_INSTALLER | CS_DATAVAULT_CONTROLLER | CS_NVRAM_UNRESTRICTED) ) +var cdFlagStrings = []intName{ + {uint32(CS_NONE), "None"}, + {uint32(CS_VALID), "Valid"}, + {uint32(CS_ADHOC), "Adhoc"}, + {uint32(CS_GET_TASK_ALLOW), "GetTaskAllow"}, + {uint32(CS_INSTALLER), "Installer"}, + {uint32(CS_FORCED_LV), "ForcedLv"}, + {uint32(CS_INVALID_ALLOWED), "InvalidAllowed"}, + {uint32(CS_HARD), "Hard"}, + {uint32(CS_KILL), "Kill"}, + {uint32(CS_CHECK_EXPIRATION), "CheckExpiration"}, + {uint32(CS_RESTRICT), "Restrict"}, + {uint32(CS_ENFORCEMENT), "Enforcement"}, + {uint32(CS_REQUIRE_LV), "RequireLv"}, + {uint32(CS_ENTITLEMENTS_VALIDATED), "EntitlementsValidated"}, + {uint32(CS_NVRAM_UNRESTRICTED), "NvramUnrestricted"}, + {uint32(CS_RUNTIME), "Runtime"}, + {uint32(CS_ALLOWED_MACHO), "AllowedMacho"}, + {uint32(CS_EXEC_SET_HARD), "ExecSetHard"}, + {uint32(CS_EXEC_SET_KILL), "ExecSetKill"}, + {uint32(CS_EXEC_SET_ENFORCEMENT), "ExecSetEnforcement"}, + {uint32(CS_EXEC_INHERIT_SIP), "ExecInheritSip"}, + {uint32(CS_KILLED), "Killed"}, + {uint32(CS_DYLD_PLATFORM), "DyldPlatform"}, + {uint32(CS_PLATFORM_BINARY), "PlatformBinary"}, + {uint32(CS_PLATFORM_PATH), "PlatformPath"}, + {uint32(CS_DEBUGGED), "Debugged"}, + {uint32(CS_SIGNED), "Signed"}, + {uint32(CS_DEV_CODE), "DevCode"}, + {uint32(CS_DATAVAULT_CONTROLLER), "DatavaultController"}, + {uint32(CS_ENTITLEMENT_FLAGS), "EntitlementFlags"}, +} + +func (f CsCodeDirectoryFlag) String() string { + return stringName(uint32(f), cdFlagStrings, false) +} +func (f CsCodeDirectoryFlag) GoString() string { + return stringName(uint32(f), cdFlagStrings, true) +} + // C form of a CodeDirectory. type CsCodeDirectory struct { Magic CsMagic // magic number (CSMAGIC_CODEDIRECTORY) */ @@ -273,6 +328,23 @@ const ( CS_EXECSEG_CAN_EXEC_CDHASH ExecSegFlag = 0x200 /* can execute blessed cdhash */ ) +var csExecSegFlagStrings = []int64Name{ + {uint64(CS_EXECSEG_MAIN_BINARY), "Main Binary"}, + {uint64(CS_EXECSEG_ALLOW_UNSIGNED), "Allow Unsigned"}, + {uint64(CS_EXECSEG_DEBUGGER), "Debugger"}, + {uint64(CS_EXECSEG_JIT), "JIT"}, + {uint64(CS_EXECSEG_SKIP_LV), "Skip LV"}, + {uint64(CS_EXECSEG_CAN_LOAD_CDHASH), "Can Load Cdhash"}, + {uint64(CS_EXECSEG_CAN_EXEC_CDHASH), "Can Exec Cdhash"}, +} + +func (f ExecSegFlag) String() string { + return stringName64(uint64(f), csExecSegFlagStrings, false) +} +func (f ExecSegFlag) GoString() string { + return stringName64(uint64(f), csExecSegFlagStrings, true) +} + /* Version 0x20400 */ type CsCodeDirExecSeg struct { ExecSegBase uint64 /* offset of executable segment */ diff --git a/types/codesign_string.go b/types/codesign_string.go deleted file mode 100644 index a0f277f..0000000 --- a/types/codesign_string.go +++ /dev/null @@ -1,163 +0,0 @@ -// Code generated by "stringer -type=CsCodeDirectoryFlag,CDVersion,ExecSegFlag -output codesign_string.go"; DO NOT EDIT. - -package types - -import "strconv" - -func _() { - // An "invalid array index" compiler error signifies that the constant values have changed. - // Re-run the stringer command to generate them again. - var x [1]struct{} - _ = x[CS_VALID-1] - _ = x[CS_ADHOC-2] - _ = x[CS_GET_TASK_ALLOW-4] - _ = x[CS_INSTALLER-8] - _ = x[CS_FORCED_LV-16] - _ = x[CS_INVALID_ALLOWED-32] - _ = x[CS_HARD-256] - _ = x[CS_KILL-512] - _ = x[CS_CHECK_EXPIRATION-1024] - _ = x[CS_RESTRICT-2048] - _ = x[CS_ENFORCEMENT-4096] - _ = x[CS_REQUIRE_LV-8192] - _ = x[CS_ENTITLEMENTS_VALIDATED-16384] - _ = x[CS_NVRAM_UNRESTRICTED-32768] - _ = x[CS_RUNTIME-65536] - _ = x[CS_ALLOWED_MACHO-81666] - _ = x[CS_EXEC_SET_HARD-1048576] - _ = x[CS_EXEC_SET_KILL-2097152] - _ = x[CS_EXEC_SET_ENFORCEMENT-4194304] - _ = x[CS_EXEC_INHERIT_SIP-8388608] - _ = x[CS_KILLED-16777216] - _ = x[CS_DYLD_PLATFORM-33554432] - _ = x[CS_PLATFORM_BINARY-67108864] - _ = x[CS_PLATFORM_PATH-134217728] - _ = x[CS_DEBUGGED-268435456] - _ = x[CS_SIGNED-536870912] - _ = x[CS_DEV_CODE-1073741824] - _ = x[CS_DATAVAULT_CONTROLLER-2147483648] - _ = x[CS_ENTITLEMENT_FLAGS-2147516428] -} - -const _CsCodeDirectoryFlag_name = "CS_VALIDCS_ADHOCCS_GET_TASK_ALLOWCS_INSTALLERCS_FORCED_LVCS_INVALID_ALLOWEDCS_HARDCS_KILLCS_CHECK_EXPIRATIONCS_RESTRICTCS_ENFORCEMENTCS_REQUIRE_LVCS_ENTITLEMENTS_VALIDATEDCS_NVRAM_UNRESTRICTEDCS_RUNTIMECS_ALLOWED_MACHOCS_EXEC_SET_HARDCS_EXEC_SET_KILLCS_EXEC_SET_ENFORCEMENTCS_EXEC_INHERIT_SIPCS_KILLEDCS_DYLD_PLATFORMCS_PLATFORM_BINARYCS_PLATFORM_PATHCS_DEBUGGEDCS_SIGNEDCS_DEV_CODECS_DATAVAULT_CONTROLLERCS_ENTITLEMENT_FLAGS" - -var _CsCodeDirectoryFlag_map = map[CsCodeDirectoryFlag]string{ - 1: _CsCodeDirectoryFlag_name[0:8], - 2: _CsCodeDirectoryFlag_name[8:16], - 4: _CsCodeDirectoryFlag_name[16:33], - 8: _CsCodeDirectoryFlag_name[33:45], - 16: _CsCodeDirectoryFlag_name[45:57], - 32: _CsCodeDirectoryFlag_name[57:75], - 256: _CsCodeDirectoryFlag_name[75:82], - 512: _CsCodeDirectoryFlag_name[82:89], - 1024: _CsCodeDirectoryFlag_name[89:108], - 2048: _CsCodeDirectoryFlag_name[108:119], - 4096: _CsCodeDirectoryFlag_name[119:133], - 8192: _CsCodeDirectoryFlag_name[133:146], - 16384: _CsCodeDirectoryFlag_name[146:171], - 32768: _CsCodeDirectoryFlag_name[171:192], - 65536: _CsCodeDirectoryFlag_name[192:202], - 81666: _CsCodeDirectoryFlag_name[202:218], - 1048576: _CsCodeDirectoryFlag_name[218:234], - 2097152: _CsCodeDirectoryFlag_name[234:250], - 4194304: _CsCodeDirectoryFlag_name[250:273], - 8388608: _CsCodeDirectoryFlag_name[273:292], - 16777216: _CsCodeDirectoryFlag_name[292:301], - 33554432: _CsCodeDirectoryFlag_name[301:317], - 67108864: _CsCodeDirectoryFlag_name[317:335], - 134217728: _CsCodeDirectoryFlag_name[335:351], - 268435456: _CsCodeDirectoryFlag_name[351:362], - 536870912: _CsCodeDirectoryFlag_name[362:371], - 1073741824: _CsCodeDirectoryFlag_name[371:382], - 2147483648: _CsCodeDirectoryFlag_name[382:405], - 2147516428: _CsCodeDirectoryFlag_name[405:425], -} - -func (i CsCodeDirectoryFlag) String() string { - if str, ok := _CsCodeDirectoryFlag_map[i]; ok { - return str - } - return "CsCodeDirectoryFlag(" + strconv.FormatInt(int64(i), 10) + ")" -} -func _() { - // An "invalid array index" compiler error signifies that the constant values have changed. - // Re-run the stringer command to generate them again. - var x [1]struct{} - _ = x[CS_SUPPORTS_SCATTER-131328] - _ = x[CS_SUPPORTS_TEAMID-131584] - _ = x[CS_SUPPORTS_CODELIMIT64-131840] - _ = x[CS_SUPPORTS_EXECSEG-132096] - _ = x[CS_SUPPORTS_RUNTIME-132352] - _ = x[CS_SUPPORTS_LINKAGE-132608] -} - -const ( - _CDVersion_name_0 = "CS_SUPPORTS_SCATTER" - _CDVersion_name_1 = "CS_SUPPORTS_TEAMID" - _CDVersion_name_2 = "CS_SUPPORTS_CODELIMIT64" - _CDVersion_name_3 = "CS_SUPPORTS_EXECSEG" - _CDVersion_name_4 = "CS_SUPPORTS_RUNTIME" - _CDVersion_name_5 = "CS_SUPPORTS_LINKAGE" -) - -func (i CDVersion) String() string { - switch { - case i == 131328: - return _CDVersion_name_0 - case i == 131584: - return _CDVersion_name_1 - case i == 131840: - return _CDVersion_name_2 - case i == 132096: - return _CDVersion_name_3 - case i == 132352: - return _CDVersion_name_4 - case i == 132608: - return _CDVersion_name_5 - default: - return "CDVersion(" + strconv.FormatInt(int64(i), 10) + ")" - } -} -func _() { - // An "invalid array index" compiler error signifies that the constant values have changed. - // Re-run the stringer command to generate them again. - var x [1]struct{} - _ = x[CS_EXECSEG_MAIN_BINARY-1] - _ = x[CS_EXECSEG_ALLOW_UNSIGNED-16] - _ = x[CS_EXECSEG_DEBUGGER-32] - _ = x[CS_EXECSEG_JIT-64] - _ = x[CS_EXECSEG_SKIP_LV-128] - _ = x[CS_EXECSEG_CAN_LOAD_CDHASH-256] - _ = x[CS_EXECSEG_CAN_EXEC_CDHASH-512] -} - -const ( - _ExecSegFlag_name_0 = "CS_EXECSEG_MAIN_BINARY" - _ExecSegFlag_name_1 = "CS_EXECSEG_ALLOW_UNSIGNED" - _ExecSegFlag_name_2 = "CS_EXECSEG_DEBUGGER" - _ExecSegFlag_name_3 = "CS_EXECSEG_JIT" - _ExecSegFlag_name_4 = "CS_EXECSEG_SKIP_LV" - _ExecSegFlag_name_5 = "CS_EXECSEG_CAN_LOAD_CDHASH" - _ExecSegFlag_name_6 = "CS_EXECSEG_CAN_EXEC_CDHASH" -) - -func (i ExecSegFlag) String() string { - switch { - case i == 1: - return _ExecSegFlag_name_0 - case i == 16: - return _ExecSegFlag_name_1 - case i == 32: - return _ExecSegFlag_name_2 - case i == 64: - return _ExecSegFlag_name_3 - case i == 128: - return _ExecSegFlag_name_4 - case i == 256: - return _ExecSegFlag_name_5 - case i == 512: - return _ExecSegFlag_name_6 - default: - return "ExecSegFlag(" + strconv.FormatInt(int64(i), 10) + ")" - } -} diff --git a/types/types.go b/types/types.go index 6aeca34..7307e48 100644 --- a/types/types.go +++ b/types/types.go @@ -120,6 +120,11 @@ type intName struct { s string } +type int64Name struct { + i uint64 + s string +} + func stringName(i uint32, names []intName, goSyntax bool) string { for _, n := range names { if n.i == i { @@ -132,6 +137,18 @@ func stringName(i uint32, names []intName, goSyntax bool) string { return "0x" + strconv.FormatUint(uint64(i), 16) } +func stringName64(i uint64, names []int64Name, goSyntax bool) string { + for _, n := range names { + if n.i == i { + if goSyntax { + return "macho." + n.s + } + return n.s + } + } + return "0x" + strconv.FormatUint(uint64(i), 16) +} + var lsb64Mtable = [65]uint64{ 0x0000000000000000, 0x0000000000000001, 0x0000000000000003, 0x0000000000000007, 0x000000000000000f, 0x000000000000001f,