rpm/
constants.rs

1//! RPM specific constants
2//!
3//! These constants were extracted from the rpm upstream project C headers.
4
5use std::fmt::Display;
6
7use bitflags::bitflags;
8
9use crate::ScriptletIndexTags;
10
11pub const HEADER_IMAGE: u32 = 61;
12pub const HEADER_SIGNATURES: u32 = 62;
13pub const HEADER_IMMUTABLE: u32 = 63;
14pub const HEADER_REGIONS: u32 = 64;
15pub const HEADER_I18NTABLE: u32 = 100;
16pub const HEADER_SIGBASE: u32 = 256;
17pub const HEADER_SIGTOP: u32 = 999;
18pub const HEADER_TAGBASE: u32 = 1000;
19
20#[repr(u32)]
21#[derive(
22    num_derive::FromPrimitive,
23    num_derive::ToPrimitive,
24    Debug,
25    PartialEq,
26    Eq,
27    Copy,
28    Clone,
29    enum_display_derive::Display,
30)]
31#[allow(non_camel_case_types)]
32pub enum IndexTag {
33    RPMTAG_HEADERIMAGE = HEADER_IMAGE,
34    RPMTAG_HEADERSIGNATURES = HEADER_SIGNATURES,
35    RPMTAG_HEADERIMMUTABLE = HEADER_IMMUTABLE,
36    RPMTAG_HEADERREGIONS = HEADER_REGIONS,
37
38    RPMTAG_HEADERI18NTABLE = HEADER_I18NTABLE,
39
40    RPMTAG_SIGSIZE = HEADER_SIGBASE,
41    RPMTAG_SIGLEMD5_1 = HEADER_SIGBASE + 2,
42    RPMTAG_SIGPGP = HEADER_SIGBASE + 3,
43    RPMTAG_SIGLEMD5_2 = HEADER_SIGBASE + 4,
44    RPMTAG_SIGMD5 = HEADER_SIGBASE + 5,
45
46    RPMTAG_SIGGPG = HEADER_SIGBASE + 6,
47    RPMTAG_SIGPGP5 = HEADER_SIGBASE + 7,
48
49    RPMTAG_BADSHA1_1 = HEADER_SIGBASE + 8,
50    RPMTAG_BADSHA1_2 = HEADER_SIGBASE + 9,
51    RPMTAG_PUBKEYS = HEADER_SIGBASE + 10,
52    RPMTAG_DSAHEADER = HEADER_SIGBASE + 11,
53    RPMTAG_RSAHEADER = HEADER_SIGBASE + 12,
54    RPMTAG_SHA1HEADER = HEADER_SIGBASE + 13,
55
56    RPMTAG_LONGSIGSIZE = HEADER_SIGBASE + 14,
57    RPMTAG_LONGARCHIVESIZE = HEADER_SIGBASE + 15,
58
59    RPMTAG_SHA256HEADER = HEADER_SIGBASE + 17,
60    RPMTAG_VERITYSIGNATURES = HEADER_SIGBASE + 20,
61    RPMTAG_VERITYSIGNATUREALGO = HEADER_SIGBASE + 21,
62    RPMTAG_OPENPGP = HEADER_SIGBASE + 22,
63    RPMTAG_SHA3_256_HEADER = HEADER_SIGBASE + 23,
64
65    RPMTAG_NAME = 1000,
66    RPMTAG_VERSION = 1001,
67    RPMTAG_RELEASE = 1002,
68    RPMTAG_EPOCH = 1003,
69    RPMTAG_SUMMARY = 1004,
70    RPMTAG_DESCRIPTION = 1005,
71    RPMTAG_BUILDTIME = 1006,
72    RPMTAG_BUILDHOST = 1007,
73    RPMTAG_INSTALLTIME = 1008,
74    RPMTAG_SIZE = 1009,
75    RPMTAG_DISTRIBUTION = 1010,
76    RPMTAG_VENDOR = 1011,
77    RPMTAG_GIF = 1012,
78    RPMTAG_XPM = 1013,
79    RPMTAG_LICENSE = 1014,
80    RPMTAG_PACKAGER = 1015,
81    RPMTAG_GROUP = 1016,
82    RPMTAG_CHANGELOG = 1017,
83    RPMTAG_SOURCE = 1018,
84    RPMTAG_PATCH = 1019,
85    RPMTAG_URL = 1020,
86    RPMTAG_OS = 1021,
87    RPMTAG_ARCH = 1022,
88    RPMTAG_PREIN = 1023,
89    RPMTAG_POSTIN = 1024,
90    RPMTAG_PREUN = 1025,
91    RPMTAG_POSTUN = 1026,
92    RPMTAG_OLDFILENAMES = 1027,
93    RPMTAG_FILESIZES = 1028,
94    RPMTAG_FILESTATES = 1029,
95    RPMTAG_FILEMODES = 1030,
96    RPMTAG_FILEUIDS = 1031,
97    RPMTAG_FILEGIDS = 1032,
98    RPMTAG_FILERDEVS = 1033,
99    RPMTAG_FILEMTIMES = 1034,
100    RPMTAG_FILEDIGESTS = 1035,
101    RPMTAG_FILELINKTOS = 1036,
102    RPMTAG_FILEFLAGS = 1037,
103    RPMTAG_ROOT = 1038,
104    RPMTAG_FILEUSERNAME = 1039,
105    RPMTAG_FILEGROUPNAME = 1040,
106    RPMTAG_EXCLUDE = 1041,
107    RPMTAG_EXCLUSIVE = 1042,
108    RPMTAG_ICON = 1043,
109    RPMTAG_SOURCERPM = 1044,
110    RPMTAG_FILEVERIFYFLAGS = 1045,
111    RPMTAG_ARCHIVESIZE = 1046,
112    RPMTAG_PROVIDENAME = 1047,
113    RPMTAG_REQUIREFLAGS = 1048,
114    RPMTAG_REQUIRENAME = 1049,
115    RPMTAG_REQUIREVERSION = 1050,
116    RPMTAG_NOSOURCE = 1051,
117    RPMTAG_NOPATCH = 1052,
118    RPMTAG_CONFLICTFLAGS = 1053,
119    RPMTAG_CONFLICTNAME = 1054,
120    RPMTAG_CONFLICTVERSION = 1055,
121    RPMTAG_DEFAULTPREFIX = 1056,
122    RPMTAG_BUILDROOT = 1057,
123    RPMTAG_INSTALLPREFIX = 1058,
124    RPMTAG_EXCLUDEARCH = 1059,
125    RPMTAG_EXCLUDEOS = 1060,
126    RPMTAG_EXCLUSIVEARCH = 1061,
127    RPMTAG_EXCLUSIVEOS = 1062,
128    RPMTAG_AUTOREQPROV = 1063,
129    RPMTAG_RPMVERSION = 1064,
130    RPMTAG_TRIGGERSCRIPTS = 1065,
131    RPMTAG_TRIGGERNAME = 1066,
132    RPMTAG_TRIGGERVERSION = 1067,
133    RPMTAG_TRIGGERFLAGS = 1068,
134    RPMTAG_TRIGGERINDEX = 1069,
135    RPMTAG_VERIFYSCRIPT = 1079,
136    RPMTAG_CHANGELOGTIME = 1080,
137    RPMTAG_CHANGELOGNAME = 1081,
138    RPMTAG_CHANGELOGTEXT = 1082,
139    RPMTAG_BROKENMD5 = 1083,
140    RPMTAG_PREREQ = 1084,
141    RPMTAG_PREINPROG = 1085,
142    RPMTAG_POSTINPROG = 1086,
143    RPMTAG_PREUNPROG = 1087,
144    RPMTAG_POSTUNPROG = 1088,
145    RPMTAG_BUILDARCHS = 1089,
146    RPMTAG_OBSOLETENAME = 1090,
147    RPMTAG_VERIFYSCRIPTPROG = 1091,
148    RPMTAG_TRIGGERSCRIPTPROG = 1092,
149    RPMTAG_DOCDIR = 1093,
150    RPMTAG_COOKIE = 1094,
151    RPMTAG_FILEDEVICES = 1095,
152    RPMTAG_FILEINODES = 1096,
153    RPMTAG_FILELANGS = 1097,
154    RPMTAG_PREFIXES = 1098,
155    RPMTAG_INSTPREFIXES = 1099,
156    RPMTAG_TRIGGERIN = 1100,
157    RPMTAG_TRIGGERUN = 1101,
158    RPMTAG_TRIGGERPOSTUN = 1102,
159    RPMTAG_AUTOREQ = 1103,
160    RPMTAG_AUTOPROV = 1104,
161    RPMTAG_CAPABILITY = 1105,
162    RPMTAG_SOURCEPACKAGE = 1106,
163    RPMTAG_OLDORIGFILENAMES = 1107,
164    RPMTAG_BUILDPREREQ = 1108,
165    RPMTAG_BUILDREQUIRES = 1109,
166    RPMTAG_BUILDCONFLICTS = 1110,
167    RPMTAG_BUILDMACROS = 1111,
168    RPMTAG_PROVIDEFLAGS = 1112,
169    RPMTAG_PROVIDEVERSION = 1113,
170    RPMTAG_OBSOLETEFLAGS = 1114,
171    RPMTAG_OBSOLETEVERSION = 1115,
172    RPMTAG_DIRINDEXES = 1116,
173    RPMTAG_BASENAMES = 1117,
174    RPMTAG_DIRNAMES = 1118,
175    RPMTAG_ORIGDIRINDEXES = 1119,
176    RPMTAG_ORIGBASENAMES = 1120,
177    RPMTAG_ORIGDIRNAMES = 1121,
178    RPMTAG_OPTFLAGS = 1122,
179    RPMTAG_DISTURL = 1123,
180    RPMTAG_PAYLOADFORMAT = 1124,
181    RPMTAG_PAYLOADCOMPRESSOR = 1125,
182    RPMTAG_PAYLOADFLAGS = 1126,
183    RPMTAG_INSTALLCOLOR = 1127,
184    RPMTAG_INSTALLTID = 1128,
185    RPMTAG_REMOVETID = 1129,
186    RPMTAG_SHA1RHN = 1130,
187    RPMTAG_RHNPLATFORM = 1131,
188    RPMTAG_PLATFORM = 1132,
189    RPMTAG_PATCHESNAME = 1133,
190    RPMTAG_PATCHESFLAGS = 1134,
191    RPMTAG_PATCHESVERSION = 1135,
192    RPMTAG_CACHECTIME = 1136,
193    RPMTAG_CACHEPKGPATH = 1137,
194    RPMTAG_CACHEPKGSIZE = 1138,
195    RPMTAG_CACHEPKGMTIME = 1139,
196    RPMTAG_FILECOLORS = 1140,
197    RPMTAG_FILECLASS = 1141,
198    RPMTAG_CLASSDICT = 1142,
199    RPMTAG_FILEDEPENDSX = 1143,
200    RPMTAG_FILEDEPENDSN = 1144,
201    RPMTAG_DEPENDSDICT = 1145,
202    RPMTAG_SOURCEPKGID = 1146,
203    RPMTAG_FILECONTEXTS = 1147,
204    RPMTAG_FSCONTEXTS = 1148,
205    RPMTAG_RECONTEXTS = 1149,
206    RPMTAG_POLICIES = 1150,
207    RPMTAG_PRETRANS = 1151,
208    RPMTAG_POSTTRANS = 1152,
209    RPMTAG_PRETRANSPROG = 1153,
210    RPMTAG_POSTTRANSPROG = 1154,
211    RPMTAG_DISTTAG = 1155,
212    RPMTAG_OLDSUGGESTSNAME = 1156,
213    RPMTAG_OLDSUGGESTSVERSION = 1157,
214    RPMTAG_OLDSUGGESTSFLAGS = 1158,
215    RPMTAG_OLDENHANCESNAME = 1159,
216    RPMTAG_OLDENHANCESVERSION = 1160,
217    RPMTAG_OLDENHANCESFLAGS = 1161,
218    RPMTAG_PRIORITY = 1162,
219    RPMTAG_CVSID = 1163,
220    RPMTAG_BLINKPKGID = 1164,
221    RPMTAG_BLINKHDRID = 1165,
222    RPMTAG_BLINKNEVRA = 1166,
223    RPMTAG_FLINKPKGID = 1167,
224    RPMTAG_FLINKHDRID = 1168,
225    RPMTAG_FLINKNEVRA = 1169,
226    RPMTAG_PACKAGEORIGIN = 1170,
227    RPMTAG_TRIGGERPREIN = 1171,
228    RPMTAG_BUILDSUGGESTS = 1172,
229    RPMTAG_BUILDENHANCES = 1173,
230    RPMTAG_SCRIPTSTATES = 1174,
231    RPMTAG_SCRIPTMETRICS = 1175,
232    RPMTAG_BUILDCPUCLOCK = 1176,
233    RPMTAG_FILEDIGESTALGOS = 1177,
234    RPMTAG_VARIANTS = 1178,
235    RPMTAG_XMAJOR = 1179,
236    RPMTAG_XMINOR = 1180,
237    RPMTAG_REPOTAG = 1181,
238    RPMTAG_KEYWORDS = 1182,
239    RPMTAG_BUILDPLATFORMS = 1183,
240    RPMTAG_PACKAGECOLOR = 1184,
241    RPMTAG_PACKAGEPREFCOLOR = 1185,
242    RPMTAG_XATTRSDICT = 1186,
243    RPMTAG_FILEXATTRSX = 1187,
244    RPMTAG_DEPATTRSDICT = 1188,
245    RPMTAG_CONFLICTATTRSX = 1189,
246    RPMTAG_OBSOLETEATTRSX = 1190,
247    RPMTAG_PROVIDEATTRSX = 1191,
248    RPMTAG_REQUIREATTRSX = 1192,
249    RPMTAG_BUILDPROVIDES = 1193,
250    RPMTAG_BUILDOBSOLETES = 1194,
251    RPMTAG_DBINSTANCE = 1195,
252    RPMTAG_NVRA = 1196,
253
254    RPMTAG_FILENAMES = 5000,
255    RPMTAG_FILEPROVIDE = 5001,
256    RPMTAG_FILEREQUIRE = 5002,
257    RPMTAG_FSNAMES = 5003,
258    RPMTAG_FSSIZES = 5004,
259    RPMTAG_TRIGGERCONDS = 5005,
260    RPMTAG_TRIGGERTYPE = 5006,
261    RPMTAG_ORIGFILENAMES = 5007,
262    RPMTAG_LONGFILESIZES = 5008,
263    RPMTAG_LONGSIZE = 5009,
264    RPMTAG_FILECAPS = 5010,
265    RPMTAG_FILEDIGESTALGO = 5011,
266    RPMTAG_BUGURL = 5012,
267    RPMTAG_EVR = 5013,
268    RPMTAG_NVR = 5014,
269    RPMTAG_NEVR = 5015,
270    RPMTAG_NEVRA = 5016,
271    RPMTAG_HEADERCOLOR = 5017,
272    RPMTAG_VERBOSE = 5018,
273    RPMTAG_EPOCHNUM = 5019,
274    RPMTAG_PREINFLAGS = 5020,
275    RPMTAG_POSTINFLAGS = 5021,
276    RPMTAG_PREUNFLAGS = 5022,
277    RPMTAG_POSTUNFLAGS = 5023,
278    RPMTAG_PRETRANSFLAGS = 5024,
279    RPMTAG_POSTTRANSFLAGS = 5025,
280    RPMTAG_VERIFYSCRIPTFLAGS = 5026,
281    RPMTAG_TRIGGERSCRIPTFLAGS = 5027,
282    RPMTAG_COLLECTIONS = 5029,
283    RPMTAG_POLICYNAMES = 5030,
284    RPMTAG_POLICYTYPES = 5031,
285    RPMTAG_POLICYTYPESINDEXES = 5032,
286    RPMTAG_POLICYFLAGS = 5033,
287    RPMTAG_VCS = 5034,
288    RPMTAG_ORDERNAME = 5035,
289    RPMTAG_ORDERVERSION = 5036,
290    RPMTAG_ORDERFLAGS = 5037,
291    RPMTAG_MSSFMANIFEST = 5038,
292    RPMTAG_MSSFDOMAIN = 5039,
293    RPMTAG_INSTFILENAMES = 5040,
294    RPMTAG_REQUIRENEVRS = 5041,
295    RPMTAG_PROVIDENEVRS = 5042,
296    RPMTAG_OBSOLETENEVRS = 5043,
297    RPMTAG_CONFLICTNEVRS = 5044,
298    RPMTAG_FILENLINKS = 5045,
299    RPMTAG_RECOMMENDNAME = 5046,
300    RPMTAG_RECOMMENDVERSION = 5047,
301    RPMTAG_RECOMMENDFLAGS = 5048,
302    RPMTAG_SUGGESTNAME = 5049,
303    RPMTAG_SUGGESTVERSION = 5050,
304    RPMTAG_SUGGESTFLAGS = 5051,
305    RPMTAG_SUPPLEMENTNAME = 5052,
306    RPMTAG_SUPPLEMENTVERSION = 5053,
307    RPMTAG_SUPPLEMENTFLAGS = 5054,
308    RPMTAG_ENHANCENAME = 5055,
309    RPMTAG_ENHANCEVERSION = 5056,
310    RPMTAG_ENHANCEFLAGS = 5057,
311    RPMTAG_RECOMMENDNEVRS = 5058,
312    RPMTAG_SUGGESTNEVRS = 5059,
313    RPMTAG_SUPPLEMENTNEVRS = 5060,
314    RPMTAG_ENHANCENEVRS = 5061,
315    RPMTAG_ENCODING = 5062,
316    RPMTAG_FILETRIGGERIN = 5063,
317    RPMTAG_FILETRIGGERUN = 5064,
318    RPMTAG_FILETRIGGERPOSTUN = 5065,
319    RPMTAG_FILETRIGGERSCRIPTS = 5066,
320    RPMTAG_FILETRIGGERSCRIPTPROG = 5067,
321    RPMTAG_FILETRIGGERSCRIPTFLAGS = 5068,
322    RPMTAG_FILETRIGGERNAME = 5069,
323    RPMTAG_FILETRIGGERINDEX = 5070,
324    RPMTAG_FILETRIGGERVERSION = 5071,
325    RPMTAG_FILETRIGGERFLAGS = 5072,
326    RPMTAG_TRANSFILETRIGGERIN = 5073,
327    RPMTAG_TRANSFILETRIGGERUN = 5074,
328    RPMTAG_TRANSFILETRIGGERPOSTUN = 5075,
329    RPMTAG_TRANSFILETRIGGERSCRIPTS = 5076,
330    RPMTAG_TRANSFILETRIGGERSCRIPTPROG = 5077,
331    RPMTAG_TRANSFILETRIGGERSCRIPTFLAGS = 5078,
332    RPMTAG_TRANSFILETRIGGERNAME = 5079,
333    RPMTAG_TRANSFILETRIGGERINDEX = 5080,
334    RPMTAG_TRANSFILETRIGGERVERSION = 5081,
335    RPMTAG_TRANSFILETRIGGERFLAGS = 5082,
336    RPMTAG_REMOVEPATHPOSTFIXES = 5083,
337    RPMTAG_FILETRIGGERPRIORITIES = 5084,
338    RPMTAG_TRANSFILETRIGGERPRIORITIES = 5085,
339    RPMTAG_FILETRIGGERCONDS = 5086,
340    RPMTAG_FILETRIGGERTYPE = 5087,
341    RPMTAG_TRANSFILETRIGGERCONDS = 5088,
342    RPMTAG_TRANSFILETRIGGERTYPE = 5089,
343    RPMTAG_FILESIGNATURES = 5090,
344    RPMTAG_FILESIGNATURELENGTH = 5091,
345    RPMTAG_PAYLOADSHA256 = 5092, // hex-encoded string representing the sha256 digest of the payload
346    RPMTAG_PAYLOADDIGESTALGO = 5093,
347    RPMTAG_AUTOINSTALLED = 5094,
348    RPMTAG_IDENTITY = 5095,
349    RPMTAG_MODULARITYLABEL = 5096,
350    RPMTAG_PAYLOADSHA256ALT = 5097, // hex-encoded string representing the sha256 digest of the payload without compression
351    RPMTAG_ARCHSUFFIX = 5098,
352    RPMTAG_SPEC = 5099,
353    RPMTAG_TRANSLATIONURL = 5100,
354    RPMTAG_UPSTREAMRELEASES = 5101,
355    RPMTAG_SOURCELICENSE = 5102,
356    RPMTAG_PREUNTRANS = 5103,
357    RPMTAG_POSTUNTRANS = 5104,
358    RPMTAG_PREUNTRANSPROG = 5105,
359    RPMTAG_POSTUNTRANSPROG = 5106,
360    RPMTAG_PREUNTRANSFLAGS = 5107,
361    RPMTAG_POSTUNTRANSFLAGS = 5108,
362    RPMTAG_SYSUSERS = 5109,
363    RPMTAG_BUILDSYSTEM = 5110,
364    RPMTAG_BUILDOPTION = 5111,
365    RPMTAG_PAYLOADSIZE = 5112,
366    RPMTAG_PAYLOADSIZEALT = 5113,
367    RPMTAG_RPMFORMAT = 5114,
368    RPMTAG_FILEMIMEINDEX = 5115,
369    RPMTAG_MIMEDICT = 5116,
370    RPMTAG_FILEMIMES = 5117,
371    RPMTAG_PACKAGEDIGESTS = 5118,
372    RPMTAG_PACKAGEDIGESTALGOS = 5119,
373    RPMTAG_SOURCENEVR = 5120,
374    RPMTAG_PAYLOAD_SHA512 = 5121, // hex-encoded string representing the sha2-512 digest of the payload
375    RPMTAG_PAYLOAD_SHA512_ALT = 5122, // hex-encoded string representing the sha2-512 digest of the payload without compression
376    RPMTAG_PAYLOAD_SHA3_256 = 5123, // hex-encoded string representing the sha3-256 digest of the payload
377    RPMTAG_PAYLOAD_SHA3_256_ALT = 5124, // hex-encoded string representing the sha3-256 digest of the payload without compression
378}
379
380#[repr(u32)]
381#[derive(
382    num_derive::FromPrimitive,
383    num_derive::ToPrimitive,
384    Debug,
385    PartialEq,
386    Eq,
387    Copy,
388    Clone,
389    enum_display_derive::Display,
390)]
391#[allow(non_camel_case_types)]
392pub enum IndexSignatureTag {
393    HEADER_SIGNATURES = HEADER_SIGNATURES,
394    /// This tag specifies the combined size of the Header and Payload sections.
395    RPMSIGTAG_SIZE = HEADER_TAGBASE,
396
397    /// This tag specifies the uncompressed size of the Payload archive, including the cpio headers.
398    RPMSIGTAG_PAYLOADSIZE = HEADER_TAGBASE + 7,
399
400    /// The SHA1 checksum of the entire Header Section, including the Header Record, Index Records and
401    /// Header store, stored as a hex-encoded string.
402    RPMSIGTAG_SHA1 = 269,
403
404    /// This tag specifies the 128-bit MD5 checksum of the combined Header and Archive sections, stored as
405    /// a binary representation.
406    RPMSIGTAG_MD5 = 1004,
407
408    /// The tag contains the DSA signature of the Header section.
409    /// The data is formatted as a Version 3 Signature Packet as specified in RFC 2440: OpenPGP Message Format.
410    /// If this tag is present, then the SIGTAG_GPG tag shall also be present.
411    RPMSIGTAG_DSA = 267,
412
413    /// The tag contains the RSA signature of the Header section.
414    /// The data is formatted as a Version 3 Signature Packet as specified in RFC 2440: OpenPGP Message Format.
415    /// If this tag is present, then the SIGTAG_PGP shall also be present.
416    RPMSIGTAG_RSA = 268,
417
418    /// Size of combined header and payload if > 4GB.
419    RPMSIGTAG_LONGSIZE = 270,
420
421    /// This tag specifies the uncompressed size of the Payload archive, including the cpio headers, when >4gb.
422    RPMSIGTAG_LONGARCHIVESIZE = IndexTag::RPMTAG_LONGARCHIVESIZE as u32,
423
424    /// The tag contains the file signature of a file.
425    /// The data is formatted as a hex-encoded string.
426    /// If this tag is present, then the SIGTAG_FILESIGNATURE_LENGTH shall also be present.
427    RPMSIGTAG_FILESIGNATURES = 274,
428
429    /// The tag contains the length of the file signatures in total.
430    /// If this tag is present, then the SIGTAG_FILESIGNATURE shall also be present.
431    RPMSIGTAG_FILESIGNATURE_LENGTH = 275,
432
433    /// FSVerity signatures of files.
434    RPMSIGTAG_VERITYSIGNATURES = IndexTag::RPMTAG_VERITYSIGNATURES as u32,
435    /// Algorithm used for FSVerity signatures.
436    RPMSIGTAG_VERITYSIGNATUREALGO = IndexTag::RPMTAG_VERITYSIGNATUREALGO as u32,
437
438    /// All OpenPGP signatures present in the header
439    RPMSIGTAG_OPENPGP = IndexTag::RPMTAG_OPENPGP as u32,
440
441    /// This tag contains the SHA3-256 checksum of the entire Header Section, including the Header Record,
442    /// Index Records and Header store, stored as a hex-encoded string.
443    RPMSIGTAG_SHA3_256 = IndexTag::RPMTAG_SHA3_256_HEADER as u32,
444
445    /// This tag specifies the RSA signature of the combined Header and Payload sections.
446    /// The data is formatted as a Version 3 Signature Packet as specified in RFC 2440: OpenPGP Message Format.
447    RPMSIGTAG_PGP = 1002,
448
449    /// The tag contains the DSA signature of the combined Header and Payload sections.
450    /// The data is formatted as a Version 3 Signature Packet as specified in RFC 2440: OpenPGP Message Format.
451    RPMSIGTAG_GPG = 1005,
452
453    /// This tag contains the SHA256 checksum of the entire Header Section, including the Header Record,
454    /// Index Records and Header store, stored as a hex-encoded string.
455    RPMSIGTAG_SHA256 = IndexTag::RPMTAG_SHA256HEADER as u32,
456
457    /// A silly tag for a date.
458    RPMTAG_INSTALLTIME = IndexTag::RPMTAG_INSTALLTIME as u32,
459}
460
461/// Header tag.
462///
463/// Each and every header has a particular header tag that identifies the type of
464/// the header the format / information contained in that header.
465pub trait Tag: num::FromPrimitive + PartialEq + std::fmt::Display + std::fmt::Debug + Copy {
466    fn tag_type_name() -> &'static str;
467    fn to_u32(&self) -> u32;
468}
469
470impl Tag for IndexTag {
471    fn tag_type_name() -> &'static str {
472        "IndexTag"
473    }
474
475    fn to_u32(&self) -> u32 {
476        *self as u32
477    }
478}
479
480impl Tag for IndexSignatureTag {
481    fn tag_type_name() -> &'static str {
482        "IndexSignatureTag"
483    }
484
485    fn to_u32(&self) -> u32 {
486        *self as u32
487    }
488}
489
490impl From<IndexTag> for u32 {
491    fn from(val: IndexTag) -> Self {
492        val.to_u32()
493    }
494}
495
496impl From<IndexSignatureTag> for u32 {
497    fn from(val: IndexSignatureTag) -> Self {
498        val.to_u32()
499    }
500}
501
502/// Size (in bytes) of the package "lead" section
503pub const LEAD_SIZE: u32 = 96;
504/// Size (in bytes) of the index header (the fixed portion of each header)
505pub const INDEX_HEADER_SIZE: u32 = 16;
506/// Size (in bytes) of each entry in the index
507pub const INDEX_ENTRY_SIZE: u32 = 16;
508/// rpm magic as part of the lead header
509pub const RPM_MAGIC: [u8; 4] = [0xed, 0xab, 0xee, 0xdb];
510
511/// header magic recognition (not the lead!)
512pub const HEADER_MAGIC: [u8; 3] = [0x8e, 0xad, 0xe8];
513
514bitflags! {
515    #[derive(Copy, Clone, Debug, Eq, Hash, PartialEq)]
516    pub struct DependencyFlags: u32 {
517        const ANY = 0;
518        const LESS = 1 << 1;
519        const GREATER = 1 << 2;
520        const EQUAL = 1 << 3;
521
522        const LE = Self::LESS.bits() | Self::EQUAL.bits();
523        const GE = Self::GREATER.bits() | Self::EQUAL.bits();
524
525        // bit 4 unused
526        const POSTTRANS = 1 << 5;  // %posttrans dependency
527        const PREREQ = 1 << 6;     // legacy prereq dependency
528        const PRETRANS = 1 << 7;   // pre-transaction dependency
529        const INTERP = 1 << 8;     // interpreter used by scriptlet
530        const SCRIPT_PRE = 1 << 9;  // %pre dependency
531        const SCRIPT_POST = 1 << 10;  // %post dependency
532        const SCRIPT_PREUN = 1 << 11;  // %preun dependency
533        const SCRIPT_POSTUN = 1 << 12;  // %postun dependency
534        const SCRIPT_VERIFY = 1 << 13;  // %verify dependency
535        const FIND_REQUIRES = 1 << 14;  // find-requires generated depenency
536        const FIND_PROVIDES = 1 << 15;  // find-provides generated dependency
537        const TRIGGERIN = 1 << 16;  // %triggerin dependency
538        const TRIGGERUN = 1 << 17;  // %triggerun dependency
539        const TRIGGERPOSTUN = 1 << 18;  // %triggerpostun dependency
540        const MISSINGOK = 1 << 19;  //suggests/enhances hint
541        const PREUNTRANS	= 1 << 20;	// %preuntrans dependency
542        const POSTUNTRANS = 1 << 21;	// %postuntrans dependency
543        // bits 22-23 unused
544        const RPMLIB = 1 << 24;	      // rpmlib(feature) dependency.
545        const TRIGGERPREIN = 1 << 25;  // %triggerprein dependency
546        const KEYRING	= 1 << 26;
547        // bit 27 unused
548        const CONFIG	= 1 << 28;    // config() dependency
549        const META	= 1 << 29;	      // meta dependency
550    }
551}
552
553bitflags! {
554    /// Flags to configure scriptlet execution,
555    #[derive(Copy, Clone, Debug, Eq, Hash, PartialEq)]
556    pub struct ScriptletFlags: u32 {
557        /// Macro expansion
558        const EXPAND = 1;
559        /// Header queryformat expansion
560        const QFORMAT = 1 << 1;
561        /// Critical for success/failure
562        const CRITICAL = 1 << 2;
563    }
564}
565
566bitflags! {
567    #[derive(Copy, Clone, Debug, Eq, Hash, PartialEq)]
568    pub struct FileVerifyFlags: u32 {
569        const NONE 	= 0;
570        const MD5 	= 1 << 0;	      // from %verify(md5) - obsolete */
571        const FILEDIGEST = 1 << 0;    // from %verify(filedigest) */
572        const FILESIZE 	= 1 << 1;     // from %verify(size) */
573        const LINKTO 	= 1 << 2;	  // from %verify(link)
574        const USER 	= 1 << 3;	      // from %verify(user)
575        const GROUP 	= 1 << 4;	  // from %verify(group)
576        const MTIME 	= 1 << 5;	  // from %verify(mtime)
577        const MODE 	= 1 << 6;	      // from %verify(mode)
578        const RDEV 	= 1 << 7;	      // from %verify(rdev)
579        const CAPS 	= 1 << 8;	      // from %verify(caps)
580        // bits 9-14 unused, reserved for rpmVerifyAttrs
581        const CONTEXTS	= 1 << 15;	  // verify: from --nocontexts
582        // bits 16-22 used in rpmVerifyFlags
583        // bits 23-27 used in rpmQueryFlags
584        const READLINKFAIL= 1 << 28;  // readlink failed
585        const READFAIL	= 1 << 29;	  // file read failed
586        const LSTATFAIL	= 1 << 30;	  // lstat failed
587        const LGETFILECONFAIL	= 1 << 31;	// lgetfilecon failed
588    }
589}
590
591bitflags! {
592    #[derive(Copy, Clone, Debug, Eq, Hash, PartialEq)]
593    pub struct FileFlags: u32 {
594        const CONFIG = 1;  // %%config
595        const DOC = 1 << 1;  // %%doc
596        const DONOTUSE = 1 << 2;  // %%donotuse
597        const MISSINGOK = 1 << 3;  // %%config(missingok)
598        const NOREPLACE = 1 << 4;  // %%config(noreplace)
599        const SPECFILE = 1 << 5;  // specfile, which is the first file in a source RPM
600        const GHOST = 1 << 6;  // %%ghost
601        const LICENSE = 1 << 7;  // %%license
602        const README = 1 << 8;  // %%readme
603        // bits 9-10 unused
604        const PUBKEY = 1 << 11;	// %%pubkey
605        const ARTIFACT	= 1 << 12;	// %%artifact
606    }
607}
608
609// should be equivalent the value mapping used by `pgp::crypto::hash::HashAlgorithm`
610// but we have to copy it as not everyone uses the `signature` feature
611#[repr(u32)]
612#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, enum_primitive_derive::Primitive)]
613pub enum DigestAlgorithm {
614    Md5 = 1,
615    Sha2_256 = 8,
616    Sha2_384 = 9,
617    Sha2_512 = 10,
618    Sha2_224 = 11,
619    Sha3_256 = 12,
620    Sha3_512 = 14,
621}
622
623/// Index tag values for the %prein scriptlet,
624pub(crate) const PREIN_TAGS: ScriptletIndexTags = (
625    IndexTag::RPMTAG_PREIN,
626    IndexTag::RPMTAG_PREINFLAGS,
627    IndexTag::RPMTAG_PREINPROG,
628);
629
630/// Index tag values for the %postin scriptlet,
631pub(crate) const POSTIN_TAGS: ScriptletIndexTags = (
632    IndexTag::RPMTAG_POSTIN,
633    IndexTag::RPMTAG_POSTINFLAGS,
634    IndexTag::RPMTAG_POSTINPROG,
635);
636
637/// Index tag values for the %preun scriptlet,
638pub(crate) const PREUN_TAGS: ScriptletIndexTags = (
639    IndexTag::RPMTAG_PREUN,
640    IndexTag::RPMTAG_PREUNFLAGS,
641    IndexTag::RPMTAG_PREUNPROG,
642);
643
644/// Index tag values for the %postun scriptlet,
645pub(crate) const POSTUN_TAGS: ScriptletIndexTags = (
646    IndexTag::RPMTAG_POSTUN,
647    IndexTag::RPMTAG_POSTUNFLAGS,
648    IndexTag::RPMTAG_POSTUNPROG,
649);
650
651/// Index tag values for the %pretrans scriptlet,
652pub(crate) const PRETRANS_TAGS: ScriptletIndexTags = (
653    IndexTag::RPMTAG_PRETRANS,
654    IndexTag::RPMTAG_PRETRANSFLAGS,
655    IndexTag::RPMTAG_PRETRANSPROG,
656);
657
658/// Index tag values for the %posttrans scriptlet,
659pub(crate) const POSTTRANS_TAGS: ScriptletIndexTags = (
660    IndexTag::RPMTAG_POSTTRANS,
661    IndexTag::RPMTAG_POSTTRANSFLAGS,
662    IndexTag::RPMTAG_POSTTRANSPROG,
663);
664
665/// Index tag values for the %preuntrans scriptlet,
666pub(crate) const PREUNTRANS_TAGS: ScriptletIndexTags = (
667    IndexTag::RPMTAG_PREUNTRANS,
668    IndexTag::RPMTAG_PREUNTRANSFLAGS,
669    IndexTag::RPMTAG_PREUNTRANSPROG,
670);
671
672/// Index tag values for the %postuntrans scriptlet,
673pub(crate) const POSTUNTRANS_TAGS: ScriptletIndexTags = (
674    IndexTag::RPMTAG_POSTUNTRANS,
675    IndexTag::RPMTAG_POSTUNTRANSFLAGS,
676    IndexTag::RPMTAG_POSTUNTRANSPROG,
677);