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