This parser is for the RPM version 3 file format which is the current version of the file format used by RPM 2.1 and later (including RPM version 4.x, which is the current version of the RPM tool). There are historical versions of the RPM file format, as well as a currently abandoned fork (rpm5). These formats are not covered by this specification.
This page hosts a formal specification of RPM package file using Kaitai Struct. This specification can be automatically translated into a variety of programming languages to get a parsing library.
// Code generated by kaitai-struct-compiler from a .ksy source file. DO NOT EDIT.
import (
"github.com/kaitai-io/kaitai_struct_go_runtime/kaitai"
"io"
"bytes"
)
/**
* This parser is for the RPM version 3 file format which is the current version
* of the file format used by RPM 2.1 and later (including RPM version 4.x, which
* is the current version of the RPM tool). There are historical versions of the
* RPM file format, as well as a currently abandoned fork (rpm5). These formats
* are not covered by this specification.
* @see <a href="https://github.com/rpm-software-management/rpm/blob/afad3167/docs/manual/format.md">Source</a>
* @see <a href="https://github.com/rpm-software-management/rpm/blob/afad3167/docs/manual/tags.md">Source</a>
* @see <a href="https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/pkgformat.html">Source</a>
* @see <a href="http://ftp.rpm.org/max-rpm/">Source</a>
*/
type Rpm_Architectures int
const (
Rpm_Architectures__X86 Rpm_Architectures = 1
Rpm_Architectures__Alpha Rpm_Architectures = 2
Rpm_Architectures__Sparc Rpm_Architectures = 3
Rpm_Architectures__Mips Rpm_Architectures = 4
Rpm_Architectures__Ppc Rpm_Architectures = 5
Rpm_Architectures__M68k Rpm_Architectures = 6
Rpm_Architectures__Sgi Rpm_Architectures = 7
Rpm_Architectures__Rs6000 Rpm_Architectures = 8
Rpm_Architectures__Ia64 Rpm_Architectures = 9
Rpm_Architectures__Sparc64 Rpm_Architectures = 10
Rpm_Architectures__Mips64 Rpm_Architectures = 11
Rpm_Architectures__Arm Rpm_Architectures = 12
Rpm_Architectures__M68kMint Rpm_Architectures = 13
Rpm_Architectures__S390 Rpm_Architectures = 14
Rpm_Architectures__S390x Rpm_Architectures = 15
Rpm_Architectures__Ppc64 Rpm_Architectures = 16
Rpm_Architectures__Sh Rpm_Architectures = 17
Rpm_Architectures__Xtensa Rpm_Architectures = 18
Rpm_Architectures__Aarch64 Rpm_Architectures = 19
Rpm_Architectures__MipsR6 Rpm_Architectures = 20
Rpm_Architectures__Mips64R6 Rpm_Architectures = 21
Rpm_Architectures__Riscv Rpm_Architectures = 22
Rpm_Architectures__Loongarch64 Rpm_Architectures = 23
Rpm_Architectures__NoArch Rpm_Architectures = 255
)
var values_Rpm_Architectures = map[Rpm_Architectures]struct{}{1: {}, 2: {}, 3: {}, 4: {}, 5: {}, 6: {}, 7: {}, 8: {}, 9: {}, 10: {}, 11: {}, 12: {}, 13: {}, 14: {}, 15: {}, 16: {}, 17: {}, 18: {}, 19: {}, 20: {}, 21: {}, 22: {}, 23: {}, 255: {}}
func (v Rpm_Architectures) isDefined() bool {
_, ok := values_Rpm_Architectures[v]
return ok
}
type Rpm_HeaderTags int
const (
Rpm_HeaderTags__Signatures Rpm_HeaderTags = 62
Rpm_HeaderTags__HeaderImmutable Rpm_HeaderTags = 63
Rpm_HeaderTags__I18nTable Rpm_HeaderTags = 100
Rpm_HeaderTags__Name Rpm_HeaderTags = 1000
Rpm_HeaderTags__Version Rpm_HeaderTags = 1001
Rpm_HeaderTags__Release Rpm_HeaderTags = 1002
Rpm_HeaderTags__Epoch Rpm_HeaderTags = 1003
Rpm_HeaderTags__Summary Rpm_HeaderTags = 1004
Rpm_HeaderTags__Description Rpm_HeaderTags = 1005
Rpm_HeaderTags__BuildTime Rpm_HeaderTags = 1006
Rpm_HeaderTags__BuildHost Rpm_HeaderTags = 1007
Rpm_HeaderTags__InstallTime Rpm_HeaderTags = 1008
Rpm_HeaderTags__Size Rpm_HeaderTags = 1009
Rpm_HeaderTags__Distribution Rpm_HeaderTags = 1010
Rpm_HeaderTags__Vendor Rpm_HeaderTags = 1011
Rpm_HeaderTags__GifObsolete Rpm_HeaderTags = 1012
Rpm_HeaderTags__XpmObsolete Rpm_HeaderTags = 1013
Rpm_HeaderTags__License Rpm_HeaderTags = 1014
Rpm_HeaderTags__Packager Rpm_HeaderTags = 1015
Rpm_HeaderTags__Group Rpm_HeaderTags = 1016
Rpm_HeaderTags__ChangelogInternal Rpm_HeaderTags = 1017
Rpm_HeaderTags__Source Rpm_HeaderTags = 1018
Rpm_HeaderTags__Patch Rpm_HeaderTags = 1019
Rpm_HeaderTags__Url Rpm_HeaderTags = 1020
Rpm_HeaderTags__Os Rpm_HeaderTags = 1021
Rpm_HeaderTags__Arch Rpm_HeaderTags = 1022
Rpm_HeaderTags__PreInstallScriptlet Rpm_HeaderTags = 1023
Rpm_HeaderTags__PostInstallScriptlet Rpm_HeaderTags = 1024
Rpm_HeaderTags__PreUninstallScriptlet Rpm_HeaderTags = 1025
Rpm_HeaderTags__PostUninstallScriptlet Rpm_HeaderTags = 1026
Rpm_HeaderTags__OldFileNamesObsolete Rpm_HeaderTags = 1027
Rpm_HeaderTags__FileSizes Rpm_HeaderTags = 1028
Rpm_HeaderTags__FileStates Rpm_HeaderTags = 1029
Rpm_HeaderTags__FileModes Rpm_HeaderTags = 1030
Rpm_HeaderTags__FileUidsInternal Rpm_HeaderTags = 1031
Rpm_HeaderTags__FileGidsInternal Rpm_HeaderTags = 1032
Rpm_HeaderTags__DeviceNumber Rpm_HeaderTags = 1033
Rpm_HeaderTags__Mtimes Rpm_HeaderTags = 1034
Rpm_HeaderTags__FileDigests Rpm_HeaderTags = 1035
Rpm_HeaderTags__LinkTos Rpm_HeaderTags = 1036
Rpm_HeaderTags__FileFlags Rpm_HeaderTags = 1037
Rpm_HeaderTags__RootInternal Rpm_HeaderTags = 1038
Rpm_HeaderTags__FileOwner Rpm_HeaderTags = 1039
Rpm_HeaderTags__FileGroup Rpm_HeaderTags = 1040
Rpm_HeaderTags__ExcludeInternal Rpm_HeaderTags = 1041
Rpm_HeaderTags__ExclusiveInternal Rpm_HeaderTags = 1042
Rpm_HeaderTags__IconObsolete Rpm_HeaderTags = 1043
Rpm_HeaderTags__SourceRpm Rpm_HeaderTags = 1044
Rpm_HeaderTags__FileVerifyFlags Rpm_HeaderTags = 1045
Rpm_HeaderTags__ArchiveSize Rpm_HeaderTags = 1046
Rpm_HeaderTags__ProvideName Rpm_HeaderTags = 1047
Rpm_HeaderTags__RequireFlags Rpm_HeaderTags = 1048
Rpm_HeaderTags__RequireName Rpm_HeaderTags = 1049
Rpm_HeaderTags__RequireVersion Rpm_HeaderTags = 1050
Rpm_HeaderTags__NoSource Rpm_HeaderTags = 1051
Rpm_HeaderTags__NoPatch Rpm_HeaderTags = 1052
Rpm_HeaderTags__ConflictFlags Rpm_HeaderTags = 1053
Rpm_HeaderTags__ConflictName Rpm_HeaderTags = 1054
Rpm_HeaderTags__ConflictVersion Rpm_HeaderTags = 1055
Rpm_HeaderTags__DefaultPrefixInternal Rpm_HeaderTags = 1056
Rpm_HeaderTags__BuildRootInternal Rpm_HeaderTags = 1057
Rpm_HeaderTags__InstallPrefixInternal Rpm_HeaderTags = 1058
Rpm_HeaderTags__ExcludeArch Rpm_HeaderTags = 1059
Rpm_HeaderTags__ExcludeOs Rpm_HeaderTags = 1060
Rpm_HeaderTags__ExclusiveArch Rpm_HeaderTags = 1061
Rpm_HeaderTags__ExclusiveOs Rpm_HeaderTags = 1062
Rpm_HeaderTags__AutoreqprovInternal Rpm_HeaderTags = 1063
Rpm_HeaderTags__RpmVersion Rpm_HeaderTags = 1064
Rpm_HeaderTags__TriggerScripts Rpm_HeaderTags = 1065
Rpm_HeaderTags__TriggerName Rpm_HeaderTags = 1066
Rpm_HeaderTags__TriggerVersion Rpm_HeaderTags = 1067
Rpm_HeaderTags__TriggerFlags Rpm_HeaderTags = 1068
Rpm_HeaderTags__TriggerIndex Rpm_HeaderTags = 1069
Rpm_HeaderTags__VerifyScript Rpm_HeaderTags = 1079
Rpm_HeaderTags__ChangelogTime Rpm_HeaderTags = 1080
Rpm_HeaderTags__ChangelogName Rpm_HeaderTags = 1081
Rpm_HeaderTags__ChangelogText Rpm_HeaderTags = 1082
Rpm_HeaderTags__BrokenMd5Internal Rpm_HeaderTags = 1083
Rpm_HeaderTags__PrereqInternal Rpm_HeaderTags = 1084
Rpm_HeaderTags__PreInstallInterpreter Rpm_HeaderTags = 1085
Rpm_HeaderTags__PostInstallInterpreter Rpm_HeaderTags = 1086
Rpm_HeaderTags__PreUninstallInterpreter Rpm_HeaderTags = 1087
Rpm_HeaderTags__PostUninstallInterpreter Rpm_HeaderTags = 1088
Rpm_HeaderTags__BuildArchs Rpm_HeaderTags = 1089
Rpm_HeaderTags__ObsoleteName Rpm_HeaderTags = 1090
Rpm_HeaderTags__VerifyScriptProg Rpm_HeaderTags = 1091
Rpm_HeaderTags__TriggerScriptProg Rpm_HeaderTags = 1092
Rpm_HeaderTags__DocDirInternal Rpm_HeaderTags = 1093
Rpm_HeaderTags__Cookie Rpm_HeaderTags = 1094
Rpm_HeaderTags__FileDevices Rpm_HeaderTags = 1095
Rpm_HeaderTags__FileInodes Rpm_HeaderTags = 1096
Rpm_HeaderTags__FileLangs Rpm_HeaderTags = 1097
Rpm_HeaderTags__Prefixes Rpm_HeaderTags = 1098
Rpm_HeaderTags__InstallPrefixes Rpm_HeaderTags = 1099
Rpm_HeaderTags__TriggerInstallInternal Rpm_HeaderTags = 1100
Rpm_HeaderTags__TriggerUninstallInternal Rpm_HeaderTags = 1101
Rpm_HeaderTags__TriggerPostUninstallInternal Rpm_HeaderTags = 1102
Rpm_HeaderTags__AutoreqInternal Rpm_HeaderTags = 1103
Rpm_HeaderTags__AutoprovInternal Rpm_HeaderTags = 1104
Rpm_HeaderTags__CapabilityInternal Rpm_HeaderTags = 1105
Rpm_HeaderTags__SourcePackage Rpm_HeaderTags = 1106
Rpm_HeaderTags__OldOrigFilenamesInternal Rpm_HeaderTags = 1107
Rpm_HeaderTags__BuildPrereqInternal Rpm_HeaderTags = 1108
Rpm_HeaderTags__BuildRequiresInternal Rpm_HeaderTags = 1109
Rpm_HeaderTags__BuildConflictsInternal Rpm_HeaderTags = 1110
Rpm_HeaderTags__BuildMacrosInternal Rpm_HeaderTags = 1111
Rpm_HeaderTags__ProvideFlags Rpm_HeaderTags = 1112
Rpm_HeaderTags__ProvideVersion Rpm_HeaderTags = 1113
Rpm_HeaderTags__ObsoleteFlags Rpm_HeaderTags = 1114
Rpm_HeaderTags__ObsoleteVersion Rpm_HeaderTags = 1115
Rpm_HeaderTags__DirIndexes Rpm_HeaderTags = 1116
Rpm_HeaderTags__BaseNames Rpm_HeaderTags = 1117
Rpm_HeaderTags__DirNames Rpm_HeaderTags = 1118
Rpm_HeaderTags__OrigDirIndexes Rpm_HeaderTags = 1119
Rpm_HeaderTags__OrigBaseNames Rpm_HeaderTags = 1120
Rpm_HeaderTags__OrigDirNames Rpm_HeaderTags = 1121
Rpm_HeaderTags__OptFlags Rpm_HeaderTags = 1122
Rpm_HeaderTags__DistUrl Rpm_HeaderTags = 1123
Rpm_HeaderTags__PayloadFormat Rpm_HeaderTags = 1124
Rpm_HeaderTags__PayloadCompressor Rpm_HeaderTags = 1125
Rpm_HeaderTags__PayloadFlags Rpm_HeaderTags = 1126
Rpm_HeaderTags__InstallColor Rpm_HeaderTags = 1127
Rpm_HeaderTags__InstallTid Rpm_HeaderTags = 1128
Rpm_HeaderTags__RemoveTidObsolete Rpm_HeaderTags = 1129
Rpm_HeaderTags__Sha1RhnInternal Rpm_HeaderTags = 1130
Rpm_HeaderTags__RhnPlatformInternal Rpm_HeaderTags = 1131
Rpm_HeaderTags__Platform Rpm_HeaderTags = 1132
Rpm_HeaderTags__PatchesNameObsolete Rpm_HeaderTags = 1133
Rpm_HeaderTags__PatchesFlagsObsolete Rpm_HeaderTags = 1134
Rpm_HeaderTags__PatchesVersionObsolete Rpm_HeaderTags = 1135
Rpm_HeaderTags__CacheCtimeInternal Rpm_HeaderTags = 1136
Rpm_HeaderTags__CachePkgPathInternal Rpm_HeaderTags = 1137
Rpm_HeaderTags__CachePkgSizeInternal Rpm_HeaderTags = 1138
Rpm_HeaderTags__CachePkgMtimeInternal Rpm_HeaderTags = 1139
Rpm_HeaderTags__FileColors Rpm_HeaderTags = 1140
Rpm_HeaderTags__FileClass Rpm_HeaderTags = 1141
Rpm_HeaderTags__ClassDict Rpm_HeaderTags = 1142
Rpm_HeaderTags__FileDependsIdx Rpm_HeaderTags = 1143
Rpm_HeaderTags__FileDependsNum Rpm_HeaderTags = 1144
Rpm_HeaderTags__DependsDict Rpm_HeaderTags = 1145
Rpm_HeaderTags__SourcePkgid Rpm_HeaderTags = 1146
Rpm_HeaderTags__FileContextsObsolete Rpm_HeaderTags = 1147
Rpm_HeaderTags__FsContextsObsolete Rpm_HeaderTags = 1148
Rpm_HeaderTags__ReContextsObsolete Rpm_HeaderTags = 1149
Rpm_HeaderTags__Policies Rpm_HeaderTags = 1150
Rpm_HeaderTags__PreTrans Rpm_HeaderTags = 1151
Rpm_HeaderTags__PostTrans Rpm_HeaderTags = 1152
Rpm_HeaderTags__PreTransProg Rpm_HeaderTags = 1153
Rpm_HeaderTags__PostTransProg Rpm_HeaderTags = 1154
Rpm_HeaderTags__DistTag Rpm_HeaderTags = 1155
Rpm_HeaderTags__OldSuggestsNameObsolete Rpm_HeaderTags = 1156
Rpm_HeaderTags__OldSuggestsVersionObsolete Rpm_HeaderTags = 1157
Rpm_HeaderTags__OldSuggestsFlagsObsolete Rpm_HeaderTags = 1158
Rpm_HeaderTags__OldEnhancesNameObsolete Rpm_HeaderTags = 1159
Rpm_HeaderTags__OldEnhancesVersionObsolete Rpm_HeaderTags = 1160
Rpm_HeaderTags__OldEnhancesFlagsObsolete Rpm_HeaderTags = 1161
Rpm_HeaderTags__PriorityUnimplemented Rpm_HeaderTags = 1162
Rpm_HeaderTags__CvsidUnimplemented Rpm_HeaderTags = 1163
Rpm_HeaderTags__BlinkPkgidUnimplemented Rpm_HeaderTags = 1164
Rpm_HeaderTags__BlinkHdridUnimplemented Rpm_HeaderTags = 1165
Rpm_HeaderTags__BlinkNevraUnimplemented Rpm_HeaderTags = 1166
Rpm_HeaderTags__FlinkPkgidUnimplemented Rpm_HeaderTags = 1167
Rpm_HeaderTags__FlinkHdridUnimplemented Rpm_HeaderTags = 1168
Rpm_HeaderTags__FlinkNevraUnimplemented Rpm_HeaderTags = 1169
Rpm_HeaderTags__PackageOriginUnimplemented Rpm_HeaderTags = 1170
Rpm_HeaderTags__TriggerPreInstallInternal Rpm_HeaderTags = 1171
Rpm_HeaderTags__BuildSuggestsUnimplemented Rpm_HeaderTags = 1172
Rpm_HeaderTags__BuildEnhancesUnimplemented Rpm_HeaderTags = 1173
Rpm_HeaderTags__ScriptStatesUnimplemented Rpm_HeaderTags = 1174
Rpm_HeaderTags__ScriptMetricsUnimplemented Rpm_HeaderTags = 1175
Rpm_HeaderTags__BuildCpuClockUnimplemented Rpm_HeaderTags = 1176
Rpm_HeaderTags__FileDigestAlgosUnimplemented Rpm_HeaderTags = 1177
Rpm_HeaderTags__VariantsUnimplemented Rpm_HeaderTags = 1178
Rpm_HeaderTags__XmajorUnimplemented Rpm_HeaderTags = 1179
Rpm_HeaderTags__XminorUnimplemented Rpm_HeaderTags = 1180
Rpm_HeaderTags__RepoTagUnimplemented Rpm_HeaderTags = 1181
Rpm_HeaderTags__KeywordsUnimplemented Rpm_HeaderTags = 1182
Rpm_HeaderTags__BuildPlatformsUnimplemented Rpm_HeaderTags = 1183
Rpm_HeaderTags__PackageColorUnimplemented Rpm_HeaderTags = 1184
Rpm_HeaderTags__PackagePrefColorUnimplemented Rpm_HeaderTags = 1185
Rpm_HeaderTags__XattrsDictUnimplemented Rpm_HeaderTags = 1186
Rpm_HeaderTags__FilexAttrsxUnimplemented Rpm_HeaderTags = 1187
Rpm_HeaderTags__DepAttrsDictUnimplemented Rpm_HeaderTags = 1188
Rpm_HeaderTags__ConflictAttrsxUnimplemented Rpm_HeaderTags = 1189
Rpm_HeaderTags__ObsoleteAttrsxUnimplemented Rpm_HeaderTags = 1190
Rpm_HeaderTags__ProvideAttrsxUnimplemented Rpm_HeaderTags = 1191
Rpm_HeaderTags__RequireAttrsxUnimplemented Rpm_HeaderTags = 1192
Rpm_HeaderTags__BuildProvidesUnimplemented Rpm_HeaderTags = 1193
Rpm_HeaderTags__BuildObsoletesUnimplemented Rpm_HeaderTags = 1194
Rpm_HeaderTags__DbInstance Rpm_HeaderTags = 1195
Rpm_HeaderTags__Nvra Rpm_HeaderTags = 1196
Rpm_HeaderTags__FileNames Rpm_HeaderTags = 5000
Rpm_HeaderTags__FileProvide Rpm_HeaderTags = 5001
Rpm_HeaderTags__FileRequire Rpm_HeaderTags = 5002
Rpm_HeaderTags__FsNamesUnimplemented Rpm_HeaderTags = 5003
Rpm_HeaderTags__FsSizesUnimplemented Rpm_HeaderTags = 5004
Rpm_HeaderTags__TriggerConds Rpm_HeaderTags = 5005
Rpm_HeaderTags__TriggerType Rpm_HeaderTags = 5006
Rpm_HeaderTags__OrigFileNames Rpm_HeaderTags = 5007
Rpm_HeaderTags__LongFileSizes Rpm_HeaderTags = 5008
Rpm_HeaderTags__LongSize Rpm_HeaderTags = 5009
Rpm_HeaderTags__FileCaps Rpm_HeaderTags = 5010
Rpm_HeaderTags__FileDigestAlgo Rpm_HeaderTags = 5011
Rpm_HeaderTags__BugUrl Rpm_HeaderTags = 5012
Rpm_HeaderTags__Evr Rpm_HeaderTags = 5013
Rpm_HeaderTags__Nvr Rpm_HeaderTags = 5014
Rpm_HeaderTags__Nevr Rpm_HeaderTags = 5015
Rpm_HeaderTags__Nevra Rpm_HeaderTags = 5016
Rpm_HeaderTags__HeaderColor Rpm_HeaderTags = 5017
Rpm_HeaderTags__Verbose Rpm_HeaderTags = 5018
Rpm_HeaderTags__EpochNum Rpm_HeaderTags = 5019
Rpm_HeaderTags__PreInstallFlags Rpm_HeaderTags = 5020
Rpm_HeaderTags__PostInstallFlags Rpm_HeaderTags = 5021
Rpm_HeaderTags__PreUninstallFlags Rpm_HeaderTags = 5022
Rpm_HeaderTags__PostUninstallFlags Rpm_HeaderTags = 5023
Rpm_HeaderTags__PreTransFlags Rpm_HeaderTags = 5024
Rpm_HeaderTags__PostTransFlags Rpm_HeaderTags = 5025
Rpm_HeaderTags__VerifyScriptFlags Rpm_HeaderTags = 5026
Rpm_HeaderTags__TriggerScriptFlags Rpm_HeaderTags = 5027
Rpm_HeaderTags__CollectionsUnimplemented Rpm_HeaderTags = 5029
Rpm_HeaderTags__PolicyNames Rpm_HeaderTags = 5030
Rpm_HeaderTags__PolicyTypes Rpm_HeaderTags = 5031
Rpm_HeaderTags__PolicyTypesIndexes Rpm_HeaderTags = 5032
Rpm_HeaderTags__PolicyFlags Rpm_HeaderTags = 5033
Rpm_HeaderTags__Vcs Rpm_HeaderTags = 5034
Rpm_HeaderTags__OrderName Rpm_HeaderTags = 5035
Rpm_HeaderTags__OrderVersion Rpm_HeaderTags = 5036
Rpm_HeaderTags__OrderFlags Rpm_HeaderTags = 5037
Rpm_HeaderTags__MssfManifestUnimplemented Rpm_HeaderTags = 5038
Rpm_HeaderTags__MssfDomainUnimplemented Rpm_HeaderTags = 5039
Rpm_HeaderTags__InstFileNames Rpm_HeaderTags = 5040
Rpm_HeaderTags__RequireNevrs Rpm_HeaderTags = 5041
Rpm_HeaderTags__ProvideNevrs Rpm_HeaderTags = 5042
Rpm_HeaderTags__ObsoleteNevrs Rpm_HeaderTags = 5043
Rpm_HeaderTags__ConflictNevrs Rpm_HeaderTags = 5044
Rpm_HeaderTags__FileNlinks Rpm_HeaderTags = 5045
Rpm_HeaderTags__RecommendName Rpm_HeaderTags = 5046
Rpm_HeaderTags__RecommendVersion Rpm_HeaderTags = 5047
Rpm_HeaderTags__RecommendFlags Rpm_HeaderTags = 5048
Rpm_HeaderTags__SuggestName Rpm_HeaderTags = 5049
Rpm_HeaderTags__SuggestVersion Rpm_HeaderTags = 5050
Rpm_HeaderTags__SuggestFlags Rpm_HeaderTags = 5051
Rpm_HeaderTags__SupplementName Rpm_HeaderTags = 5052
Rpm_HeaderTags__SupplementVersion Rpm_HeaderTags = 5053
Rpm_HeaderTags__SupplementFlags Rpm_HeaderTags = 5054
Rpm_HeaderTags__EnhanceName Rpm_HeaderTags = 5055
Rpm_HeaderTags__EnhanceVersion Rpm_HeaderTags = 5056
Rpm_HeaderTags__EnhanceFlags Rpm_HeaderTags = 5057
Rpm_HeaderTags__RecommendNevrs Rpm_HeaderTags = 5058
Rpm_HeaderTags__SuggestNevrs Rpm_HeaderTags = 5059
Rpm_HeaderTags__SupplementNevrs Rpm_HeaderTags = 5060
Rpm_HeaderTags__EnhanceNevrs Rpm_HeaderTags = 5061
Rpm_HeaderTags__Encoding Rpm_HeaderTags = 5062
Rpm_HeaderTags__FileTriggerInstallInternal Rpm_HeaderTags = 5063
Rpm_HeaderTags__FileTriggerUninstallInternal Rpm_HeaderTags = 5064
Rpm_HeaderTags__FileTriggerPostUninstallInternal Rpm_HeaderTags = 5065
Rpm_HeaderTags__FileTriggerScripts Rpm_HeaderTags = 5066
Rpm_HeaderTags__FileTriggerScriptProg Rpm_HeaderTags = 5067
Rpm_HeaderTags__FileTriggerScriptFlags Rpm_HeaderTags = 5068
Rpm_HeaderTags__FileTriggerName Rpm_HeaderTags = 5069
Rpm_HeaderTags__FileTriggerIndex Rpm_HeaderTags = 5070
Rpm_HeaderTags__FileTriggerVersion Rpm_HeaderTags = 5071
Rpm_HeaderTags__FileTriggerFlags Rpm_HeaderTags = 5072
Rpm_HeaderTags__TransFileTriggerInstallInternal Rpm_HeaderTags = 5073
Rpm_HeaderTags__TransFileTriggerUninstallInternal Rpm_HeaderTags = 5074
Rpm_HeaderTags__TransFileTriggerPostUninstallInternal Rpm_HeaderTags = 5075
Rpm_HeaderTags__TransFileTriggerScripts Rpm_HeaderTags = 5076
Rpm_HeaderTags__TransFileTriggerScriptProg Rpm_HeaderTags = 5077
Rpm_HeaderTags__TransFileTriggerScriptFlags Rpm_HeaderTags = 5078
Rpm_HeaderTags__TransFileTriggerName Rpm_HeaderTags = 5079
Rpm_HeaderTags__TransFileTriggerIndex Rpm_HeaderTags = 5080
Rpm_HeaderTags__TransFileTriggerVersion Rpm_HeaderTags = 5081
Rpm_HeaderTags__TransFileTriggerFlags Rpm_HeaderTags = 5082
Rpm_HeaderTags__RemovePathPostfixesInternal Rpm_HeaderTags = 5083
Rpm_HeaderTags__FileTriggerPriorities Rpm_HeaderTags = 5084
Rpm_HeaderTags__TransFileTriggerPriorities Rpm_HeaderTags = 5085
Rpm_HeaderTags__FileTriggerConds Rpm_HeaderTags = 5086
Rpm_HeaderTags__FileTriggerType Rpm_HeaderTags = 5087
Rpm_HeaderTags__TransFileTriggerConds Rpm_HeaderTags = 5088
Rpm_HeaderTags__TransFileTriggerType Rpm_HeaderTags = 5089
Rpm_HeaderTags__FileSignatures Rpm_HeaderTags = 5090
Rpm_HeaderTags__FileSignatureLength Rpm_HeaderTags = 5091
Rpm_HeaderTags__PayloadDigest Rpm_HeaderTags = 5092
Rpm_HeaderTags__PayloadDigestAlgo Rpm_HeaderTags = 5093
Rpm_HeaderTags__AutoInstalledUnimplemented Rpm_HeaderTags = 5094
Rpm_HeaderTags__IdentityUnimplemented Rpm_HeaderTags = 5095
Rpm_HeaderTags__ModularityLabel Rpm_HeaderTags = 5096
Rpm_HeaderTags__PayloadDigestAlt Rpm_HeaderTags = 5097
Rpm_HeaderTags__ArchSuffix Rpm_HeaderTags = 5098
Rpm_HeaderTags__Spec Rpm_HeaderTags = 5099
Rpm_HeaderTags__TranslationUrl Rpm_HeaderTags = 5100
Rpm_HeaderTags__UpstreamReleases Rpm_HeaderTags = 5101
Rpm_HeaderTags__SourceLicenseInternal Rpm_HeaderTags = 5102
Rpm_HeaderTags__PreUntrans Rpm_HeaderTags = 5103
Rpm_HeaderTags__PostUntrans Rpm_HeaderTags = 5104
Rpm_HeaderTags__PreUntransProg Rpm_HeaderTags = 5105
Rpm_HeaderTags__PostUntransProg Rpm_HeaderTags = 5106
Rpm_HeaderTags__PreUntransFlags Rpm_HeaderTags = 5107
Rpm_HeaderTags__PostUntransFlags Rpm_HeaderTags = 5108
Rpm_HeaderTags__SysUsers Rpm_HeaderTags = 5109
)
var values_Rpm_HeaderTags = map[Rpm_HeaderTags]struct{}{62: {}, 63: {}, 100: {}, 1000: {}, 1001: {}, 1002: {}, 1003: {}, 1004: {}, 1005: {}, 1006: {}, 1007: {}, 1008: {}, 1009: {}, 1010: {}, 1011: {}, 1012: {}, 1013: {}, 1014: {}, 1015: {}, 1016: {}, 1017: {}, 1018: {}, 1019: {}, 1020: {}, 1021: {}, 1022: {}, 1023: {}, 1024: {}, 1025: {}, 1026: {}, 1027: {}, 1028: {}, 1029: {}, 1030: {}, 1031: {}, 1032: {}, 1033: {}, 1034: {}, 1035: {}, 1036: {}, 1037: {}, 1038: {}, 1039: {}, 1040: {}, 1041: {}, 1042: {}, 1043: {}, 1044: {}, 1045: {}, 1046: {}, 1047: {}, 1048: {}, 1049: {}, 1050: {}, 1051: {}, 1052: {}, 1053: {}, 1054: {}, 1055: {}, 1056: {}, 1057: {}, 1058: {}, 1059: {}, 1060: {}, 1061: {}, 1062: {}, 1063: {}, 1064: {}, 1065: {}, 1066: {}, 1067: {}, 1068: {}, 1069: {}, 1079: {}, 1080: {}, 1081: {}, 1082: {}, 1083: {}, 1084: {}, 1085: {}, 1086: {}, 1087: {}, 1088: {}, 1089: {}, 1090: {}, 1091: {}, 1092: {}, 1093: {}, 1094: {}, 1095: {}, 1096: {}, 1097: {}, 1098: {}, 1099: {}, 1100: {}, 1101: {}, 1102: {}, 1103: {}, 1104: {}, 1105: {}, 1106: {}, 1107: {}, 1108: {}, 1109: {}, 1110: {}, 1111: {}, 1112: {}, 1113: {}, 1114: {}, 1115: {}, 1116: {}, 1117: {}, 1118: {}, 1119: {}, 1120: {}, 1121: {}, 1122: {}, 1123: {}, 1124: {}, 1125: {}, 1126: {}, 1127: {}, 1128: {}, 1129: {}, 1130: {}, 1131: {}, 1132: {}, 1133: {}, 1134: {}, 1135: {}, 1136: {}, 1137: {}, 1138: {}, 1139: {}, 1140: {}, 1141: {}, 1142: {}, 1143: {}, 1144: {}, 1145: {}, 1146: {}, 1147: {}, 1148: {}, 1149: {}, 1150: {}, 1151: {}, 1152: {}, 1153: {}, 1154: {}, 1155: {}, 1156: {}, 1157: {}, 1158: {}, 1159: {}, 1160: {}, 1161: {}, 1162: {}, 1163: {}, 1164: {}, 1165: {}, 1166: {}, 1167: {}, 1168: {}, 1169: {}, 1170: {}, 1171: {}, 1172: {}, 1173: {}, 1174: {}, 1175: {}, 1176: {}, 1177: {}, 1178: {}, 1179: {}, 1180: {}, 1181: {}, 1182: {}, 1183: {}, 1184: {}, 1185: {}, 1186: {}, 1187: {}, 1188: {}, 1189: {}, 1190: {}, 1191: {}, 1192: {}, 1193: {}, 1194: {}, 1195: {}, 1196: {}, 5000: {}, 5001: {}, 5002: {}, 5003: {}, 5004: {}, 5005: {}, 5006: {}, 5007: {}, 5008: {}, 5009: {}, 5010: {}, 5011: {}, 5012: {}, 5013: {}, 5014: {}, 5015: {}, 5016: {}, 5017: {}, 5018: {}, 5019: {}, 5020: {}, 5021: {}, 5022: {}, 5023: {}, 5024: {}, 5025: {}, 5026: {}, 5027: {}, 5029: {}, 5030: {}, 5031: {}, 5032: {}, 5033: {}, 5034: {}, 5035: {}, 5036: {}, 5037: {}, 5038: {}, 5039: {}, 5040: {}, 5041: {}, 5042: {}, 5043: {}, 5044: {}, 5045: {}, 5046: {}, 5047: {}, 5048: {}, 5049: {}, 5050: {}, 5051: {}, 5052: {}, 5053: {}, 5054: {}, 5055: {}, 5056: {}, 5057: {}, 5058: {}, 5059: {}, 5060: {}, 5061: {}, 5062: {}, 5063: {}, 5064: {}, 5065: {}, 5066: {}, 5067: {}, 5068: {}, 5069: {}, 5070: {}, 5071: {}, 5072: {}, 5073: {}, 5074: {}, 5075: {}, 5076: {}, 5077: {}, 5078: {}, 5079: {}, 5080: {}, 5081: {}, 5082: {}, 5083: {}, 5084: {}, 5085: {}, 5086: {}, 5087: {}, 5088: {}, 5089: {}, 5090: {}, 5091: {}, 5092: {}, 5093: {}, 5094: {}, 5095: {}, 5096: {}, 5097: {}, 5098: {}, 5099: {}, 5100: {}, 5101: {}, 5102: {}, 5103: {}, 5104: {}, 5105: {}, 5106: {}, 5107: {}, 5108: {}, 5109: {}}
func (v Rpm_HeaderTags) isDefined() bool {
_, ok := values_Rpm_HeaderTags[v]
return ok
}
type Rpm_OperatingSystems int
const (
Rpm_OperatingSystems__Linux Rpm_OperatingSystems = 1
Rpm_OperatingSystems__Irix Rpm_OperatingSystems = 2
Rpm_OperatingSystems__NoOs Rpm_OperatingSystems = 255
)
var values_Rpm_OperatingSystems = map[Rpm_OperatingSystems]struct{}{1: {}, 2: {}, 255: {}}
func (v Rpm_OperatingSystems) isDefined() bool {
_, ok := values_Rpm_OperatingSystems[v]
return ok
}
type Rpm_RecordTypes int
const (
Rpm_RecordTypes__NotImplemented Rpm_RecordTypes = 0
Rpm_RecordTypes__Char Rpm_RecordTypes = 1
Rpm_RecordTypes__Uint8 Rpm_RecordTypes = 2
Rpm_RecordTypes__Uint16 Rpm_RecordTypes = 3
Rpm_RecordTypes__Uint32 Rpm_RecordTypes = 4
Rpm_RecordTypes__Uint64 Rpm_RecordTypes = 5
Rpm_RecordTypes__String Rpm_RecordTypes = 6
Rpm_RecordTypes__Bin Rpm_RecordTypes = 7
Rpm_RecordTypes__StringArray Rpm_RecordTypes = 8
Rpm_RecordTypes__I18nString Rpm_RecordTypes = 9
)
var values_Rpm_RecordTypes = map[Rpm_RecordTypes]struct{}{0: {}, 1: {}, 2: {}, 3: {}, 4: {}, 5: {}, 6: {}, 7: {}, 8: {}, 9: {}}
func (v Rpm_RecordTypes) isDefined() bool {
_, ok := values_Rpm_RecordTypes[v]
return ok
}
type Rpm_RpmTypes int
const (
Rpm_RpmTypes__Binary Rpm_RpmTypes = 0
Rpm_RpmTypes__Source Rpm_RpmTypes = 1
)
var values_Rpm_RpmTypes = map[Rpm_RpmTypes]struct{}{0: {}, 1: {}}
func (v Rpm_RpmTypes) isDefined() bool {
_, ok := values_Rpm_RpmTypes[v]
return ok
}
type Rpm_SignatureTags int
const (
Rpm_SignatureTags__Signatures Rpm_SignatureTags = 62
Rpm_SignatureTags__HeaderImmutable Rpm_SignatureTags = 63
Rpm_SignatureTags__I18nTable Rpm_SignatureTags = 100
Rpm_SignatureTags__BadSha11Obsolete Rpm_SignatureTags = 264
Rpm_SignatureTags__BadSha12Obsolete Rpm_SignatureTags = 265
Rpm_SignatureTags__Dsa Rpm_SignatureTags = 267
Rpm_SignatureTags__Rsa Rpm_SignatureTags = 268
Rpm_SignatureTags__Sha1 Rpm_SignatureTags = 269
Rpm_SignatureTags__LongSize Rpm_SignatureTags = 270
Rpm_SignatureTags__LongArchiveSize Rpm_SignatureTags = 271
Rpm_SignatureTags__Sha256 Rpm_SignatureTags = 273
Rpm_SignatureTags__FileSignatures Rpm_SignatureTags = 274
Rpm_SignatureTags__FileSignatureLength Rpm_SignatureTags = 275
Rpm_SignatureTags__VeritySignatures Rpm_SignatureTags = 276
Rpm_SignatureTags__VeritySignatureAlgo Rpm_SignatureTags = 277
Rpm_SignatureTags__Size Rpm_SignatureTags = 1000
Rpm_SignatureTags__LeMd51Obsolete Rpm_SignatureTags = 1001
Rpm_SignatureTags__Pgp Rpm_SignatureTags = 1002
Rpm_SignatureTags__LeMd52Obsolete Rpm_SignatureTags = 1003
Rpm_SignatureTags__Md5 Rpm_SignatureTags = 1004
Rpm_SignatureTags__Gpg Rpm_SignatureTags = 1005
Rpm_SignatureTags__Pgp5Obsolete Rpm_SignatureTags = 1006
Rpm_SignatureTags__PayloadSize Rpm_SignatureTags = 1007
Rpm_SignatureTags__ReservedSpace Rpm_SignatureTags = 1008
)
var values_Rpm_SignatureTags = map[Rpm_SignatureTags]struct{}{62: {}, 63: {}, 100: {}, 264: {}, 265: {}, 267: {}, 268: {}, 269: {}, 270: {}, 271: {}, 273: {}, 274: {}, 275: {}, 276: {}, 277: {}, 1000: {}, 1001: {}, 1002: {}, 1003: {}, 1004: {}, 1005: {}, 1006: {}, 1007: {}, 1008: {}}
func (v Rpm_SignatureTags) isDefined() bool {
_, ok := values_Rpm_SignatureTags[v]
return ok
}
type Rpm struct {
Lead *Rpm_Lead
Signature *Rpm_Header
SignaturePadding []byte
_unnamed3 []byte
Header *Rpm_Header
_unnamed5 []byte
SignatureTagsSteps []*Rpm_SignatureTagsStep
_io *kaitai.Stream
_root *Rpm
_parent kaitai.Struct
_f_hasSignatureSizeTag bool
hasSignatureSizeTag bool
_f_lenHeader bool
lenHeader int
_f_lenPayload bool
lenPayload int
_f_ofsHeader bool
ofsHeader int
_f_ofsPayload bool
ofsPayload int
_f_payload bool
payload []byte
_f_signatureSizeTag bool
signatureSizeTag *Rpm_HeaderIndexRecord
}
func NewRpm() *Rpm {
return &Rpm{
}
}
func (this Rpm) IO_() *kaitai.Stream {
return this._io
}
func (this *Rpm) Read(io *kaitai.Stream, parent kaitai.Struct, root *Rpm) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp1 := NewRpm_Lead()
err = tmp1.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Lead = tmp1
tmp2 := NewRpm_Header(true)
err = tmp2.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Signature = tmp2
tmp4, err := this._io.Pos()
if err != nil {
return err
}
tmp3 := -(tmp4) % 8
if tmp3 < 0 {
tmp3 += 8
}
tmp5, err := this._io.ReadBytes(int(tmp3))
if err != nil {
return err
}
tmp5 = tmp5
this.SignaturePadding = tmp5
tmp6, err := this.OfsHeader()
if err != nil {
return err
}
if (tmp6 < 0) {
tmp7, err := this._io.ReadBytes(int(0))
if err != nil {
return err
}
tmp7 = tmp7
this._unnamed3 = tmp7
}
tmp8 := NewRpm_Header(false)
err = tmp8.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Header = tmp8
tmp9, err := this.OfsPayload()
if err != nil {
return err
}
if (tmp9 < 0) {
tmp10, err := this._io.ReadBytes(int(0))
if err != nil {
return err
}
tmp10 = tmp10
this._unnamed5 = tmp10
}
for i := 0; i < int(this.Signature.HeaderRecord.NumIndexRecords); i++ {
_ = i
var tmp11 int;
if (i < 1) {
tmp11 = -1
} else {
tmp12, err := this.SignatureTagsSteps[i - 1].SizeTagIdx()
if err != nil {
return err
}
tmp11 = tmp12
}
tmp13 := NewRpm_SignatureTagsStep(i, tmp11)
err = tmp13.Read(this._io, this, this._root)
if err != nil {
return err
}
this.SignatureTagsSteps = append(this.SignatureTagsSteps, tmp13)
}
return err
}
func (this *Rpm) HasSignatureSizeTag() (v bool, err error) {
if (this._f_hasSignatureSizeTag) {
return this.hasSignatureSizeTag, nil
}
this._f_hasSignatureSizeTag = true
tmp14 := this.SignatureTagsSteps
tmp15, err := tmp14[len(tmp14) - 1].SizeTagIdx()
if err != nil {
return false, err
}
this.hasSignatureSizeTag = bool(tmp15 != -1)
return this.hasSignatureSizeTag, nil
}
func (this *Rpm) LenHeader() (v int, err error) {
if (this._f_lenHeader) {
return this.lenHeader, nil
}
this._f_lenHeader = true
tmp16, err := this.OfsPayload()
if err != nil {
return 0, err
}
tmp17, err := this.OfsHeader()
if err != nil {
return 0, err
}
this.lenHeader = int(tmp16 - tmp17)
return this.lenHeader, nil
}
func (this *Rpm) LenPayload() (v int, err error) {
if (this._f_lenPayload) {
return this.lenPayload, nil
}
this._f_lenPayload = true
tmp18, err := this.HasSignatureSizeTag()
if err != nil {
return 0, err
}
if (tmp18) {
tmp19, err := this.SignatureSizeTag()
if err != nil {
return 0, err
}
tmp20, err := tmp19.Body()
if err != nil {
return 0, err
}
tmp21, err := this.LenHeader()
if err != nil {
return 0, err
}
this.lenPayload = int(tmp20.(*Rpm_RecordTypeUint32).Values[0] - tmp21)
}
return this.lenPayload, nil
}
func (this *Rpm) OfsHeader() (v int, err error) {
if (this._f_ofsHeader) {
return this.ofsHeader, nil
}
this._f_ofsHeader = true
tmp22, err := this._io.Pos()
if err != nil {
return 0, err
}
this.ofsHeader = int(tmp22)
return this.ofsHeader, nil
}
func (this *Rpm) OfsPayload() (v int, err error) {
if (this._f_ofsPayload) {
return this.ofsPayload, nil
}
this._f_ofsPayload = true
tmp23, err := this._io.Pos()
if err != nil {
return 0, err
}
this.ofsPayload = int(tmp23)
return this.ofsPayload, nil
}
func (this *Rpm) Payload() (v []byte, err error) {
if (this._f_payload) {
return this.payload, nil
}
this._f_payload = true
tmp24, err := this.HasSignatureSizeTag()
if err != nil {
return nil, err
}
if (tmp24) {
_pos, err := this._io.Pos()
if err != nil {
return nil, err
}
tmp25, err := this.OfsPayload()
if err != nil {
return nil, err
}
_, err = this._io.Seek(int64(tmp25), io.SeekStart)
if err != nil {
return nil, err
}
tmp26, err := this.LenPayload()
if err != nil {
return nil, err
}
tmp27, err := this._io.ReadBytes(int(tmp26))
if err != nil {
return nil, err
}
tmp27 = tmp27
this.payload = tmp27
_, err = this._io.Seek(_pos, io.SeekStart)
if err != nil {
return nil, err
}
}
return this.payload, nil
}
func (this *Rpm) SignatureSizeTag() (v *Rpm_HeaderIndexRecord, err error) {
if (this._f_signatureSizeTag) {
return this.signatureSizeTag, nil
}
this._f_signatureSizeTag = true
tmp28, err := this.HasSignatureSizeTag()
if err != nil {
return nil, err
}
if (tmp28) {
tmp29 := this.SignatureTagsSteps
tmp30, err := tmp29[len(tmp29) - 1].SizeTagIdx()
if err != nil {
return nil, err
}
this.signatureSizeTag = this.Signature.IndexRecords[tmp30]
}
return this.signatureSizeTag, nil
}
type Rpm_Dummy struct {
_io *kaitai.Stream
_root *Rpm
_parent *Rpm_Header
}
func NewRpm_Dummy() *Rpm_Dummy {
return &Rpm_Dummy{
}
}
func (this Rpm_Dummy) IO_() *kaitai.Stream {
return this._io
}
func (this *Rpm_Dummy) Read(io *kaitai.Stream, parent *Rpm_Header, root *Rpm) (err error) {
this._io = io
this._parent = parent
this._root = root
return err
}
/**
* header structure used for both the "header" and "signature", but some tag
* values have different meanings in signature and header (hence they use
* different enums)
*/
type Rpm_Header struct {
HeaderRecord *Rpm_HeaderRecord
IndexRecords []*Rpm_HeaderIndexRecord
StorageSection *Rpm_Dummy
IsSignature bool
_io *kaitai.Stream
_root *Rpm
_parent *Rpm
_raw_StorageSection []byte
_f_isHeader bool
isHeader bool
}
func NewRpm_Header(isSignature bool) *Rpm_Header {
return &Rpm_Header{
IsSignature: isSignature,
}
}
func (this Rpm_Header) IO_() *kaitai.Stream {
return this._io
}
func (this *Rpm_Header) Read(io *kaitai.Stream, parent *Rpm, root *Rpm) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp31 := NewRpm_HeaderRecord()
err = tmp31.Read(this._io, this, this._root)
if err != nil {
return err
}
this.HeaderRecord = tmp31
for i := 0; i < int(this.HeaderRecord.NumIndexRecords); i++ {
_ = i
tmp32 := NewRpm_HeaderIndexRecord()
err = tmp32.Read(this._io, this, this._root)
if err != nil {
return err
}
this.IndexRecords = append(this.IndexRecords, tmp32)
}
tmp33, err := this._io.ReadBytes(int(this.HeaderRecord.LenStorageSection))
if err != nil {
return err
}
tmp33 = tmp33
this._raw_StorageSection = tmp33
_io__raw_StorageSection := kaitai.NewStream(bytes.NewReader(this._raw_StorageSection))
tmp34 := NewRpm_Dummy()
err = tmp34.Read(_io__raw_StorageSection, this, this._root)
if err != nil {
return err
}
this.StorageSection = tmp34
return err
}
func (this *Rpm_Header) IsHeader() (v bool, err error) {
if (this._f_isHeader) {
return this.isHeader, nil
}
this._f_isHeader = true
this.isHeader = bool(!(this.IsSignature))
return this.isHeader, nil
}
type Rpm_HeaderIndexRecord struct {
TagRaw uint32
RecordType Rpm_RecordTypes
OfsBody uint32
Count uint32
_io *kaitai.Stream
_root *Rpm
_parent *Rpm_Header
_f_body bool
body kaitai.Struct
_f_headerTag bool
headerTag Rpm_HeaderTags
_f_lenValue bool
lenValue uint32
_f_numValues bool
numValues uint32
_f_signatureTag bool
signatureTag Rpm_SignatureTags
}
func NewRpm_HeaderIndexRecord() *Rpm_HeaderIndexRecord {
return &Rpm_HeaderIndexRecord{
}
}
func (this Rpm_HeaderIndexRecord) IO_() *kaitai.Stream {
return this._io
}
func (this *Rpm_HeaderIndexRecord) Read(io *kaitai.Stream, parent *Rpm_Header, root *Rpm) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp35, err := this._io.ReadU4be()
if err != nil {
return err
}
this.TagRaw = uint32(tmp35)
tmp36, err := this._io.ReadU4be()
if err != nil {
return err
}
this.RecordType = Rpm_RecordTypes(tmp36)
tmp37, err := this._io.ReadU4be()
if err != nil {
return err
}
this.OfsBody = uint32(tmp37)
tmp38, err := this._io.ReadU4be()
if err != nil {
return err
}
this.Count = uint32(tmp38)
return err
}
func (this *Rpm_HeaderIndexRecord) Body() (v kaitai.Struct, err error) {
if (this._f_body) {
return this.body, nil
}
this._f_body = true
thisIo := this._parent.StorageSection._io
_pos, err := thisIo.Pos()
if err != nil {
return nil, err
}
_, err = thisIo.Seek(int64(this.OfsBody), io.SeekStart)
if err != nil {
return nil, err
}
switch (this.RecordType) {
case Rpm_RecordTypes__Bin:
tmp39, err := this.LenValue()
if err != nil {
return nil, err
}
tmp40 := NewRpm_RecordTypeBin(tmp39)
err = tmp40.Read(thisIo, this, this._root)
if err != nil {
return nil, err
}
this.body = tmp40
case Rpm_RecordTypes__Char:
tmp41, err := this.NumValues()
if err != nil {
return nil, err
}
tmp42 := NewRpm_RecordTypeUint8(tmp41)
err = tmp42.Read(thisIo, this, this._root)
if err != nil {
return nil, err
}
this.body = tmp42
case Rpm_RecordTypes__I18nString:
tmp43, err := this.NumValues()
if err != nil {
return nil, err
}
tmp44 := NewRpm_RecordTypeStringArray(tmp43)
err = tmp44.Read(thisIo, this, this._root)
if err != nil {
return nil, err
}
this.body = tmp44
case Rpm_RecordTypes__String:
tmp45 := NewRpm_RecordTypeString()
err = tmp45.Read(thisIo, this, this._root)
if err != nil {
return nil, err
}
this.body = tmp45
case Rpm_RecordTypes__StringArray:
tmp46, err := this.NumValues()
if err != nil {
return nil, err
}
tmp47 := NewRpm_RecordTypeStringArray(tmp46)
err = tmp47.Read(thisIo, this, this._root)
if err != nil {
return nil, err
}
this.body = tmp47
case Rpm_RecordTypes__Uint16:
tmp48, err := this.NumValues()
if err != nil {
return nil, err
}
tmp49 := NewRpm_RecordTypeUint16(tmp48)
err = tmp49.Read(thisIo, this, this._root)
if err != nil {
return nil, err
}
this.body = tmp49
case Rpm_RecordTypes__Uint32:
tmp50, err := this.NumValues()
if err != nil {
return nil, err
}
tmp51 := NewRpm_RecordTypeUint32(tmp50)
err = tmp51.Read(thisIo, this, this._root)
if err != nil {
return nil, err
}
this.body = tmp51
case Rpm_RecordTypes__Uint64:
tmp52, err := this.NumValues()
if err != nil {
return nil, err
}
tmp53 := NewRpm_RecordTypeUint64(tmp52)
err = tmp53.Read(thisIo, this, this._root)
if err != nil {
return nil, err
}
this.body = tmp53
case Rpm_RecordTypes__Uint8:
tmp54, err := this.NumValues()
if err != nil {
return nil, err
}
tmp55 := NewRpm_RecordTypeUint8(tmp54)
err = tmp55.Read(thisIo, this, this._root)
if err != nil {
return nil, err
}
this.body = tmp55
}
_, err = thisIo.Seek(_pos, io.SeekStart)
if err != nil {
return nil, err
}
return this.body, nil
}
func (this *Rpm_HeaderIndexRecord) HeaderTag() (v Rpm_HeaderTags, err error) {
if (this._f_headerTag) {
return this.headerTag, nil
}
this._f_headerTag = true
tmp56, err := this._parent.IsHeader()
if err != nil {
return nil, err
}
if (tmp56) {
this.headerTag = Rpm_HeaderTags(Rpm_HeaderTags(this.TagRaw))
}
return this.headerTag, nil
}
func (this *Rpm_HeaderIndexRecord) LenValue() (v uint32, err error) {
if (this._f_lenValue) {
return this.lenValue, nil
}
this._f_lenValue = true
if (this.RecordType == Rpm_RecordTypes__Bin) {
this.lenValue = uint32(this.Count)
}
return this.lenValue, nil
}
func (this *Rpm_HeaderIndexRecord) NumValues() (v uint32, err error) {
if (this._f_numValues) {
return this.numValues, nil
}
this._f_numValues = true
if (this.RecordType != Rpm_RecordTypes__Bin) {
this.numValues = uint32(this.Count)
}
return this.numValues, nil
}
func (this *Rpm_HeaderIndexRecord) SignatureTag() (v Rpm_SignatureTags, err error) {
if (this._f_signatureTag) {
return this.signatureTag, nil
}
this._f_signatureTag = true
if (this._parent.IsSignature) {
this.signatureTag = Rpm_SignatureTags(Rpm_SignatureTags(this.TagRaw))
}
return this.signatureTag, nil
}
/**
* prefer to access `signature_tag` and `header_tag` instead
*/
/**
* internal; access `num_values` and `len_value` instead
*/
type Rpm_HeaderRecord struct {
Magic []byte
Reserved []byte
NumIndexRecords uint32
LenStorageSection uint32
_io *kaitai.Stream
_root *Rpm
_parent *Rpm_Header
}
func NewRpm_HeaderRecord() *Rpm_HeaderRecord {
return &Rpm_HeaderRecord{
}
}
func (this Rpm_HeaderRecord) IO_() *kaitai.Stream {
return this._io
}
func (this *Rpm_HeaderRecord) Read(io *kaitai.Stream, parent *Rpm_Header, root *Rpm) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp57, err := this._io.ReadBytes(int(4))
if err != nil {
return err
}
tmp57 = tmp57
this.Magic = tmp57
if !(bytes.Equal(this.Magic, []uint8{142, 173, 232, 1})) {
return kaitai.NewValidationNotEqualError([]uint8{142, 173, 232, 1}, this.Magic, this._io, "/types/header_record/seq/0")
}
tmp58, err := this._io.ReadBytes(int(4))
if err != nil {
return err
}
tmp58 = tmp58
this.Reserved = tmp58
if !(bytes.Equal(this.Reserved, []uint8{0, 0, 0, 0})) {
return kaitai.NewValidationNotEqualError([]uint8{0, 0, 0, 0}, this.Reserved, this._io, "/types/header_record/seq/1")
}
tmp59, err := this._io.ReadU4be()
if err != nil {
return err
}
this.NumIndexRecords = uint32(tmp59)
if !(this.NumIndexRecords >= 1) {
return kaitai.NewValidationLessThanError(1, this.NumIndexRecords, this._io, "/types/header_record/seq/2")
}
tmp60, err := this._io.ReadU4be()
if err != nil {
return err
}
this.LenStorageSection = uint32(tmp60)
return err
}
/**
* Size of the storage area for the data
* pointed to by the Index Records.
*/
/**
* In 2021, Panu Matilainen (a RPM developer) [described this
* structure](https://github.com/kaitai-io/kaitai_struct_formats/pull/469#discussion_r718288192)
* as follows:
*
* > The lead as a structure is 25 years obsolete, the data there is
* > meaningless. Seriously. Except to check for the magic to detect that
* > it's an rpm file in the first place, just ignore everything in it.
* > Literally everything.
*
* The fields with `valid` constraints are important, because these are the
* same validations that RPM does (which means that any valid `.rpm` file
* must pass them), but otherwise you should not make decisions based on the
* values given here.
*/
type Rpm_Lead struct {
Magic []byte
Version *Rpm_RpmVersion
Type Rpm_RpmTypes
Architecture Rpm_Architectures
PackageName string
Os Rpm_OperatingSystems
SignatureType uint16
Reserved []byte
_io *kaitai.Stream
_root *Rpm
_parent *Rpm
}
func NewRpm_Lead() *Rpm_Lead {
return &Rpm_Lead{
}
}
func (this Rpm_Lead) IO_() *kaitai.Stream {
return this._io
}
func (this *Rpm_Lead) Read(io *kaitai.Stream, parent *Rpm, root *Rpm) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp61, err := this._io.ReadBytes(int(4))
if err != nil {
return err
}
tmp61 = tmp61
this.Magic = tmp61
if !(bytes.Equal(this.Magic, []uint8{237, 171, 238, 219})) {
return kaitai.NewValidationNotEqualError([]uint8{237, 171, 238, 219}, this.Magic, this._io, "/types/lead/seq/0")
}
tmp62 := NewRpm_RpmVersion()
err = tmp62.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Version = tmp62
tmp63, err := this._io.ReadU2be()
if err != nil {
return err
}
this.Type = Rpm_RpmTypes(tmp63)
tmp64, err := this._io.ReadU2be()
if err != nil {
return err
}
this.Architecture = Rpm_Architectures(tmp64)
tmp65, err := this._io.ReadBytes(int(66))
if err != nil {
return err
}
tmp65 = kaitai.BytesTerminate(tmp65, 0, false)
this.PackageName = string(tmp65)
tmp66, err := this._io.ReadU2be()
if err != nil {
return err
}
this.Os = Rpm_OperatingSystems(tmp66)
tmp67, err := this._io.ReadU2be()
if err != nil {
return err
}
this.SignatureType = uint16(tmp67)
if !(this.SignatureType == 5) {
return kaitai.NewValidationNotEqualError(5, this.SignatureType, this._io, "/types/lead/seq/6")
}
tmp68, err := this._io.ReadBytes(int(16))
if err != nil {
return err
}
tmp68 = tmp68
this.Reserved = tmp68
return err
}
type Rpm_RecordTypeBin struct {
Values [][]byte
LenValue uint32
_io *kaitai.Stream
_root *Rpm
_parent *Rpm_HeaderIndexRecord
}
func NewRpm_RecordTypeBin(lenValue uint32) *Rpm_RecordTypeBin {
return &Rpm_RecordTypeBin{
LenValue: lenValue,
}
}
func (this Rpm_RecordTypeBin) IO_() *kaitai.Stream {
return this._io
}
func (this *Rpm_RecordTypeBin) Read(io *kaitai.Stream, parent *Rpm_HeaderIndexRecord, root *Rpm) (err error) {
this._io = io
this._parent = parent
this._root = root
for i := 0; i < int(1); i++ {
_ = i
tmp69, err := this._io.ReadBytes(int(this.LenValue))
if err != nil {
return err
}
tmp69 = tmp69
this.Values = append(this.Values, tmp69)
}
return err
}
type Rpm_RecordTypeString struct {
Values []string
_io *kaitai.Stream
_root *Rpm
_parent *Rpm_HeaderIndexRecord
}
func NewRpm_RecordTypeString() *Rpm_RecordTypeString {
return &Rpm_RecordTypeString{
}
}
func (this Rpm_RecordTypeString) IO_() *kaitai.Stream {
return this._io
}
func (this *Rpm_RecordTypeString) Read(io *kaitai.Stream, parent *Rpm_HeaderIndexRecord, root *Rpm) (err error) {
this._io = io
this._parent = parent
this._root = root
for i := 0; i < int(1); i++ {
_ = i
tmp70, err := this._io.ReadBytesTerm(0, false, true, true)
if err != nil {
return err
}
this.Values = append(this.Values, string(tmp70))
}
return err
}
type Rpm_RecordTypeStringArray struct {
Values []string
NumValues uint32
_io *kaitai.Stream
_root *Rpm
_parent *Rpm_HeaderIndexRecord
}
func NewRpm_RecordTypeStringArray(numValues uint32) *Rpm_RecordTypeStringArray {
return &Rpm_RecordTypeStringArray{
NumValues: numValues,
}
}
func (this Rpm_RecordTypeStringArray) IO_() *kaitai.Stream {
return this._io
}
func (this *Rpm_RecordTypeStringArray) Read(io *kaitai.Stream, parent *Rpm_HeaderIndexRecord, root *Rpm) (err error) {
this._io = io
this._parent = parent
this._root = root
for i := 0; i < int(this.NumValues); i++ {
_ = i
tmp71, err := this._io.ReadBytesTerm(0, false, true, true)
if err != nil {
return err
}
this.Values = append(this.Values, string(tmp71))
}
return err
}
type Rpm_RecordTypeUint16 struct {
Values []uint16
NumValues uint32
_io *kaitai.Stream
_root *Rpm
_parent *Rpm_HeaderIndexRecord
}
func NewRpm_RecordTypeUint16(numValues uint32) *Rpm_RecordTypeUint16 {
return &Rpm_RecordTypeUint16{
NumValues: numValues,
}
}
func (this Rpm_RecordTypeUint16) IO_() *kaitai.Stream {
return this._io
}
func (this *Rpm_RecordTypeUint16) Read(io *kaitai.Stream, parent *Rpm_HeaderIndexRecord, root *Rpm) (err error) {
this._io = io
this._parent = parent
this._root = root
for i := 0; i < int(this.NumValues); i++ {
_ = i
tmp72, err := this._io.ReadU2be()
if err != nil {
return err
}
this.Values = append(this.Values, tmp72)
}
return err
}
type Rpm_RecordTypeUint32 struct {
Values []uint32
NumValues uint32
_io *kaitai.Stream
_root *Rpm
_parent *Rpm_HeaderIndexRecord
}
func NewRpm_RecordTypeUint32(numValues uint32) *Rpm_RecordTypeUint32 {
return &Rpm_RecordTypeUint32{
NumValues: numValues,
}
}
func (this Rpm_RecordTypeUint32) IO_() *kaitai.Stream {
return this._io
}
func (this *Rpm_RecordTypeUint32) Read(io *kaitai.Stream, parent *Rpm_HeaderIndexRecord, root *Rpm) (err error) {
this._io = io
this._parent = parent
this._root = root
for i := 0; i < int(this.NumValues); i++ {
_ = i
tmp73, err := this._io.ReadU4be()
if err != nil {
return err
}
this.Values = append(this.Values, tmp73)
}
return err
}
type Rpm_RecordTypeUint64 struct {
Values []uint64
NumValues uint32
_io *kaitai.Stream
_root *Rpm
_parent *Rpm_HeaderIndexRecord
}
func NewRpm_RecordTypeUint64(numValues uint32) *Rpm_RecordTypeUint64 {
return &Rpm_RecordTypeUint64{
NumValues: numValues,
}
}
func (this Rpm_RecordTypeUint64) IO_() *kaitai.Stream {
return this._io
}
func (this *Rpm_RecordTypeUint64) Read(io *kaitai.Stream, parent *Rpm_HeaderIndexRecord, root *Rpm) (err error) {
this._io = io
this._parent = parent
this._root = root
for i := 0; i < int(this.NumValues); i++ {
_ = i
tmp74, err := this._io.ReadU8be()
if err != nil {
return err
}
this.Values = append(this.Values, tmp74)
}
return err
}
type Rpm_RecordTypeUint8 struct {
Values []uint8
NumValues uint32
_io *kaitai.Stream
_root *Rpm
_parent *Rpm_HeaderIndexRecord
}
func NewRpm_RecordTypeUint8(numValues uint32) *Rpm_RecordTypeUint8 {
return &Rpm_RecordTypeUint8{
NumValues: numValues,
}
}
func (this Rpm_RecordTypeUint8) IO_() *kaitai.Stream {
return this._io
}
func (this *Rpm_RecordTypeUint8) Read(io *kaitai.Stream, parent *Rpm_HeaderIndexRecord, root *Rpm) (err error) {
this._io = io
this._parent = parent
this._root = root
for i := 0; i < int(this.NumValues); i++ {
_ = i
tmp75, err := this._io.ReadU1()
if err != nil {
return err
}
this.Values = append(this.Values, tmp75)
}
return err
}
type Rpm_RpmVersion struct {
Major uint8
Minor uint8
_io *kaitai.Stream
_root *Rpm
_parent *Rpm_Lead
}
func NewRpm_RpmVersion() *Rpm_RpmVersion {
return &Rpm_RpmVersion{
}
}
func (this Rpm_RpmVersion) IO_() *kaitai.Stream {
return this._io
}
func (this *Rpm_RpmVersion) Read(io *kaitai.Stream, parent *Rpm_Lead, root *Rpm) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp76, err := this._io.ReadU1()
if err != nil {
return err
}
this.Major = tmp76
if !(this.Major >= 3) {
return kaitai.NewValidationLessThanError(3, this.Major, this._io, "/types/rpm_version/seq/0")
}
if !(this.Major <= 4) {
return kaitai.NewValidationGreaterThanError(4, this.Major, this._io, "/types/rpm_version/seq/0")
}
tmp77, err := this._io.ReadU1()
if err != nil {
return err
}
this.Minor = tmp77
return err
}
/**
* @see <a href="https://github.com/rpm-software-management/rpm/blob/afad3167/lib/rpmlead.c#L102">Source</a>
*/
type Rpm_SignatureTagsStep struct {
Idx int32
PrevSizeTagIdx int32
_io *kaitai.Stream
_root *Rpm
_parent *Rpm
_f_sizeTagIdx bool
sizeTagIdx int
}
func NewRpm_SignatureTagsStep(idx int32, prevSizeTagIdx int32) *Rpm_SignatureTagsStep {
return &Rpm_SignatureTagsStep{
Idx: idx,
PrevSizeTagIdx: prevSizeTagIdx,
}
}
func (this Rpm_SignatureTagsStep) IO_() *kaitai.Stream {
return this._io
}
func (this *Rpm_SignatureTagsStep) Read(io *kaitai.Stream, parent *Rpm, root *Rpm) (err error) {
this._io = io
this._parent = parent
this._root = root
return err
}
func (this *Rpm_SignatureTagsStep) SizeTagIdx() (v int, err error) {
if (this._f_sizeTagIdx) {
return this.sizeTagIdx, nil
}
this._f_sizeTagIdx = true
var tmp78 int32;
if (this.PrevSizeTagIdx != -1) {
tmp78 = this.PrevSizeTagIdx
} else {
var tmp79 int32;
tmp80, err := this._parent.Signature.IndexRecords[this.Idx].SignatureTag()
if err != nil {
return 0, err
}
tmp81, err := this._parent.Signature.IndexRecords[this.Idx].NumValues()
if err != nil {
return 0, err
}
if ( ((tmp80 == Rpm_SignatureTags__Size) && (this._parent.Signature.IndexRecords[this.Idx].RecordType == Rpm_RecordTypes__Uint32) && (tmp81 >= 1)) ) {
tmp79 = this.Idx
} else {
tmp79 = -1
}
tmp78 = tmp79
}
this.sizeTagIdx = int(tmp78)
return this.sizeTagIdx, nil
}