Add PKZIP appendix A and B

This commit is contained in:
Matt Nadareski
2024-04-28 02:02:58 -04:00
parent c4f14854c2
commit 6bc948784a
4 changed files with 853 additions and 1 deletions

View File

@@ -0,0 +1,26 @@
namespace SabreTools.Models.PKZIP
{
/// <summary>
/// AS/400 Extra Field (0x0065) Attribute [APPENDIX A]
/// </summary>
/// <see href="https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT"/>
public class AS400ExtraFieldAttribute : ExtensibleDataField
{
/// <summary>
/// Field length including length
/// </summary>
/// <remarks>Big-endian</remarks>
public ushort FieldLength { get; set; }
/// <summary>
/// Field code
/// </summary>
public AS400ExtraFieldAttributeFieldCode FieldCode { get; set; }
/// <summary>
/// Data
/// </summary>
/// <remarks>Variable byte length based on field code</remarks>
public byte[]? Data { get; set; }
}
}

View File

@@ -207,6 +207,87 @@ namespace SabreTools.Models.PKZIP
Reserved31 = 0b1000_0000_0000_0000_0000_0000_0000_0000,
}
public enum AS400ExtraFieldAttributeFieldCode : ushort
{
/// <summary>
/// Source type i.e. CLP etc
/// </summary>
SourceType = 0x4001,
/// <summary>
/// The text description of the library
/// </summary>
LibraryTextDescription = 0x4002,
/// <summary>
/// The text description of the file
/// </summary>
FileTextDescription = 0x4003,
/// <summary>
/// The text description of the member
/// </summary>
MemberTextDescription = 0x4004,
/// <summary>
/// x'F0' or 0 is PF-DTA, x'F1' or 1 is PF_SRC
/// </summary>
PFType = 0x4005,
/// <summary>
/// Database Type Code
/// </summary>
/// <remarks>1 byte</remarks>
DatabaseTypeCode = 0x4007,
/// <summary>
/// Database file and fields definition
/// </summary>
DatabaseFileAndFieldsDefinition = 0x4008,
/// <summary>
/// GZIP file type
/// </summary>
/// <remarks>2 bytes</remarks>
GZIPFileType = 0x4009,
/// <summary>
/// IFS code page
/// </summary>
/// <remarks>2 bytes</remarks>
IFSCodePage = 0x400B,
/// <summary>
/// IFS Time of last file status change
/// </summary>
/// <remarks>4 bytes</remarks>
IFSTimeOfLastFileStatusChange = 0x400C,
/// <summary>
/// IFS Access Time
/// </summary>
/// <remarks>4 bytes</remarks>
IFSAccessTime = 0x4001,
/// <summary>
/// IFS Modification time
/// </summary>
/// <remarks>4 bytes</remarks>
IFSModificationTime = 0x4001,
/// <summary>
/// Length of the records in the file
/// </summary>
/// <remarks>2 bytes</remarks>
RecordsLength = 0x4001,
/// <summary>
/// GZIP two words
/// </summary>
/// <remarks>8 bytes</remarks>
GZIPTwoWords = 0x4001,
}
public enum CompressionMethod : ushort
{
/// <summary>
@@ -920,4 +1001,723 @@ namespace SabreTools.Models.PKZIP
value is provided for mainframe data transfer support.
*/
}
public enum ZOSExtraFieldAttributeFieldCode : ushort
{
/// <summary>
/// File Type
/// <summary>
/// </remarks>2 bytes</remarks>
FileType = 0x0001,
/// <summary>
/// NonVSAM Record Format
/// <summary>
/// </remarks>1 byte</remarks>
NonVSAMRecordFormat = 0x0002,
/// <summary>
/// Reserved
/// <summary>
/// </remarks></remarks>
Reserved03 = 0x0003,
/// <summary>
/// NonVSAM Block Size
/// <summary>
/// </remarks>2 bytes Big Endian</remarks>
NonVSAMBlockSize = 0x0004,
/// <summary>
/// Primary Space Allocation
/// <summary>
/// </remarks>3 bytes Big Endian</remarks>
PrimarySpaceAllocation = 0x0005,
/// <summary>
/// Secondary Space Allocation
/// <summary>
/// </remarks>3 bytes Big Endian</remarks>
SecondarySpaceAllocation = 0x0006,
/// <summary>
/// Space Allocation Type1 byte flag
/// <summary>
/// </remarks>1 byte</remarks>
SpaceAllocationType1ByteFlag = 0x0007,
/// <summary>
/// Modification Date
/// <summary>
/// </remarks>Retired with PKZIP 5.0 +</remarks>
ModificationDate = 0x0008,
/// <summary>
/// Expiration Date
/// <summary>
/// </remarks>Retired with PKZIP 5.0 +</remarks>
ExpirationDate = 0x0009,
/// <summary>
/// PDS Directory Block Allocation
/// <summary>
/// </remarks>3 bytes Big Endian binary value</remarks>
PDSDirectoryBlockAllocation = 0x000A,
/// <summary>
/// NonVSAM Volume List
/// <summary>
/// </remarks>variable</remarks>
NonVSAMVolumeList = 0x000B,
/// <summary>
/// UNIT Reference
/// <summary>
/// </remarks>Retired with PKZIP 5.0 +</remarks>
UNITReference = 0x000C,
/// <summary>
/// DF/SMS Management Class
/// <summary>
/// </remarks>8 bytes EBCDIC Text Value</remarks>
DFSMSManagementClass = 0x000D,
/// <summary>
/// DF/SMS Storage Class
/// <summary>
/// </remarks>8 bytes EBCDIC Text Value</remarks>
DFSMSStorageClass = 0x000E,
/// <summary>
/// DF/SMS Data Class
/// <summary>
/// </remarks>8 bytes EBCDIC Text Value</remarks>
DFSMSDataClass = 0x000F,
/// <summary>
/// PDS/PDSE Member Info
/// <summary>
/// </remarks>30 bytes</remarks>
PDSPDSEMemberInfo = 0x0010,
/// <summary>
/// VSAM sub-filetype
/// <summary>
/// </remarks>2 bytes</remarks>
VSAMSubFiletype = 0x0011,
/// <summary>
/// VSAM LRECL
/// <summary>
/// </remarks>13 bytes EBCDIC "(num_avg num_max)"</remarks>
VSAMLRECL = 0x0012,
/// <summary>
/// VSAM Cluster Name
/// <summary>
/// </remarks>Retired with PKZIP 5.0 +</remarks>
VSAMClusterName = 0x0013,
/// <summary>
/// VSAM KSDS Key Information
/// <summary>
/// </remarks>13 bytes EBCDIC "(num_length num_position)"</remarks>
VSAMKSDSKeyInformation = 0x0014,
/// <summary>
/// VSAM Average LRECL
/// <summary>
/// </remarks>5 bytes EBCDIC num_value padded with blanks</remarks>
VSAMAverageLRECL = 0x0015,
/// <summary>
/// VSAM Maximum LRECL
/// <summary>
/// </remarks>5 bytes EBCDIC num_value padded with blanks</remarks>
VSAMMaximumLRECL = 0x0016,
/// <summary>
/// VSAM KSDS Key Length
/// <summary>
/// </remarks>5 bytes EBCDIC num_value padded with blanks</remarks>
VSAMKSDSKeyLength = 0x0017,
/// <summary>
/// VSAM KSDS Key Position
/// <summary>
/// </remarks>5 bytes EBCDIC num_value padded with blanks</remarks>
VSAMKSDSKeyPosition = 0x0018,
/// <summary>
/// VSAM Data Name
/// <summary>
/// </remarks>1-44 bytes EBCDIC text string</remarks>
VSAMDataName = 0x0019,
/// <summary>
/// VSAM KSDS Index Name
/// <summary>
/// </remarks>1-44 bytes EBCDIC text string</remarks>
VSAMKSDSIndexName = 0x001A,
/// <summary>
/// VSAM Catalog Name
/// <summary>
/// </remarks>1-44 bytes EBCDIC text string</remarks>
VSAMCatalogName = 0x001B,
/// <summary>
/// VSAM Data Space Type
/// <summary>
/// </remarks>9 bytes EBCDIC text string</remarks>
VSAMDataSpaceType = 0x001C,
/// <summary>
/// VSAM Data Space Primary
/// <summary>
/// </remarks>9 bytes EBCDIC num_value left-justified</remarks>
VSAMDataSpacePrimary = 0x001D,
/// <summary>
/// VSAM Data Space Secondary
/// <summary>
/// </remarks>9 bytes EBCDIC num_value left-justified</remarks>
VSAMDataSpaceSecondary = 0x001E,
/// <summary>
/// VSAM Data Volume List
/// <summary>
/// </remarks>variable EBCDIC text list of 6-character Volume IDs</remarks>
VSAMDataVolumeList = 0x001F,
/// <summary>
/// VSAM Data Buffer Space
/// <summary>
/// </remarks>8 bytes EBCDIC num_value left-justified</remarks>
VSAMDataBufferSpace = 0x0020,
/// <summary>
/// VSAM Data CISIZE
/// <summary>
/// </remarks>5 bytes EBCDIC num_value left-justified</remarks>
VSAMDataCISIZE = 0x0021,
/// <summary>
/// VSAM Erase Flag
/// <summary>
/// </remarks>1 byte flag</remarks>
VSAMEraseFlag = 0x0022,
/// <summary>
/// VSAM Free CI %
/// <summary>
/// </remarks>3 bytes EBCDIC num_value left-justified</remarks>
VSAMFreeCIPercentage = 0x0023,
/// <summary>
/// VSAM Free CA %
/// <summary>
/// </remarks>3 bytes EBCDIC num_value left-justified</remarks>
VSAMFreeCAPercentage = 0x0024,
/// <summary>
/// VSAM Index Volume List
/// <summary>
/// </remarks>variable EBCDIC text list of 6-character Volume IDs</remarks>
VSAMIndexVolumeList = 0x0025,
/// <summary>
/// VSAM Ordered Flag
/// <summary>
/// </remarks>1 byte flag</remarks>
VSAMOrderedFlag = 0x0026,
/// <summary>
/// VSAM REUSE Flag
/// <summary>
/// </remarks>1 byte flag</remarks>
VSAMREUSEFlag = 0x0027,
/// <summary>
/// VSAM SPANNED Flag
/// <summary>
/// </remarks>1 byte flag</remarks>
VSAMSPANNEDFlag = 0x0028,
/// <summary>
/// VSAM Recovery Flag
/// <summary>
/// </remarks>1 byte flag</remarks>
VSAMRecoveryFlag = 0x0029,
/// <summary>
/// VSAM WRITECHK Flag
/// <summary>
/// </remarks>1 byte flag</remarks>
VSAMWRITECHKFlag = 0x002A,
/// <summary>
/// VSAM Cluster/Data SHROPTS
/// <summary>
/// </remarks>3 bytes EBCDIC "n,y"</remarks>
CSAMClusterDataSHROPTS = 0x002B,
/// <summary>
/// VSAM Index SHROPTS
/// <summary>
/// </remarks>3 bytes EBCDIC "n,y"</remarks>
VSAMIndexSHROPTS = 0x002C,
/// <summary>
/// VSAM Index Space Type
/// <summary>
/// </remarks>9 bytes EBCDIC text string</remarks>
VSAMIndexSpaceType = 0x002D,
/// <summary>
/// VSAM Index Space Primary
/// <summary>
/// </remarks>9 bytes EBCDIC num_value left-justified</remarks>
VSAMIndexSpacePrimary = 0x002E,
/// <summary>
/// VSAM Index Space Secondary
/// <summary>
/// </remarks>9 bytes EBCDIC num_value left-justified</remarks>
VSAMIndexSpaceSecondary = 0x002F,
/// <summary>
/// VSAM Index CISIZE
/// <summary>
/// </remarks>v</remarks>
VSAMIndexCISIZE = 0x0030,
/// <summary>
/// VSAM Index IMBED
/// <summary>
/// </remarks>1 byte flag</remarks>
VSAMIndexIMBED = 0x0031,
/// <summary>
/// VSAM Index Ordered Flag
/// <summary>
/// </remarks>1 byte flag</remarks>
VSAMIndexOrderedFlag = 0x0032,
/// <summary>
/// VSAM REPLICATE Flag
/// <summary>
/// </remarks>1 byte flag</remarks>
VSAMREPLICATEFlag = 0x0033,
/// <summary>
/// VSAM Index REUSE Flag
/// <summary>
/// </remarks>1 byte flag</remarks>
VSAMIndexREUSEFlag = 0x0034,
/// <summary>
/// VSAM Index WRITECHK Flag
/// <summary>
/// </remarks>1 byte flag Retired with PKZIP 5.0 +</remarks>
VSAMIndexWRITECHKFlag = 0x0035,
/// <summary>
/// VSAM Owner
/// <summary>
/// </remarks>8 bytes EBCDIC text string</remarks>
VSAMOwner = 0x0036,
/// <summary>
/// VSAM Index Owner
/// <summary>
/// </remarks>8 bytes EBCDIC text string</remarks>
VSAMIndexOwner = 0x0037,
/// <summary>
/// Reserved
/// <summary>
Reserved38 = 0x0038,
/// <summary>
/// Reserved
/// <summary>
Reserved39 = 0x0039,
/// <summary>
/// Reserved
/// <summary>
Reserved3A = 0x003A,
/// <summary>
/// Reserved
/// <summary>
Reserved3B = 0x003B,
/// <summary>
/// Reserved
/// <summary>
Reserved3C = 0x003C,
/// <summary>
/// Reserved
/// <summary>
Reserved3D = 0x003D,
/// <summary>
/// Reserved
/// <summary>
Reserved3E = 0x003E,
/// <summary>
/// Reserved
/// <summary>
ReservedeF = 0x003F,
/// <summary>
/// Reserved
/// <summary>
Reserved40 = 0x0040,
/// <summary>
/// Reserved
/// <summary>
Reserved41 = 0x0041,
/// <summary>
/// Reserved
/// <summary>
Reserved42 = 0x0042,
/// <summary>
/// Reserved
/// <summary>
Reserved43 = 0x0043,
/// <summary>
/// Reserved
/// <summary>
Reserved44 = 0x0044,
/// <summary>
/// Reserved
/// <summary>
Reserved45 = 0x0045,
/// <summary>
/// Reserved
/// <summary>
Reserved46 = 0x0046,
/// <summary>
/// Reserved
/// <summary>
Reserved47 = 0x0047,
/// <summary>
/// Reserved
/// <summary>
Reserved48 = 0x0048,
/// <summary>
/// Reserved
/// <summary>
Reserved49 = 0x0049,
/// <summary>
/// Reserved
/// <summary>
Reserved4A = 0x004A,
/// <summary>
/// Reserved
/// <summary>
Reserved4B = 0x004B,
/// <summary>
/// Reserved
/// <summary>
Reserved4C = 0x004C,
/// <summary>
/// Reserved
/// <summary>
Reserved4D = 0x004D,
/// <summary>
/// Reserved
/// <summary>
Reserved4E = 0x004E,
/// <summary>
/// Reserved
/// <summary>
Reserved4F = 0x004F,
/// <summary>
/// Reserved
/// <summary>
Reserved50 = 0x0050,
/// <summary>
/// Reserved
/// <summary>
Reserved51 = 0x0051,
/// <summary>
/// Reserved
/// <summary>
Reserved52 = 0x0052,
/// <summary>
/// Reserved
/// <summary>
Reserved53 = 0x0053,
/// <summary>
/// Reserved
/// <summary>
Reserved54 = 0x0054,
/// <summary>
/// Reserved
/// <summary>
Reserved55 = 0x0055,
/// <summary>
/// Reserved
/// <summary>
Reserved56 = 0x0056,
/// <summary>
/// Reserved
/// <summary>
Reserved57 = 0x0057,
/// <summary>
/// PDS/PDSE Member TTR Info
/// <summary>
/// </remarks>6 bytes Big Endian</remarks>
PDSPDSEMemberTTRInfo = 0x0058,
/// <summary>
/// PDS 1st LMOD Text TTR
/// <summary>
/// </remarks>3 bytes Big Endian</remarks>
PDSFirstLMODTextTTR = 0x0059,
/// <summary>
/// PDS LMOD EP Rec #
/// <summary>
/// </remarks>4 bytes Big Endian</remarks>
PDSLMODEPRecNum = 0x005A,
/// <summary>
/// Reserved
/// <summary>
Reserved5B = 0x005B,
/// <summary>
/// Max Length of records
/// <summary>
/// </remarks>2 bytes Big Endian</remarks>
MaxLengthOfRecords = 0x005C,
/// <summary>
/// PDSE Flag
/// <summary>
/// </remarks>1 byte flag</remarks>
PDSEFlag = 0x005D,
/// <summary>
/// Reserved
/// <summary>
Reserved5E = 0x005E,
/// <summary>
/// Reserved
/// <summary>
Reserved5F = 0x005F,
/// <summary>
/// Reserved
/// <summary>
Reserved60 = 0x0060,
/// <summary>
/// Reserved
/// <summary>
Reserved61 = 0x0061,
/// <summary>
/// Reserved
/// <summary>
Reserved62 = 0x0062,
/// <summary>
/// Reserved
/// <summary>
Reserved63 = 0x0063,
/// <summary>
/// Reserved
/// <summary>
Reserved64 = 0x0064,
/// <summary>
/// Last Date Referenced
/// <summary>
/// </remarks>4 bytes Packed Hex "yyyymmdd"</remarks>
LastDateReferenced = 0x0065,
/// <summary>
/// Date Created
/// <summary>
/// </remarks>4 bytes Packed Hex "yyyymmdd"</remarks>
DateCreated = 0x0066,
/// <summary>
/// GZIP two words
/// <summary>
/// </remarks>8 bytes</remarks>
GZIPTwoWords = 0x0068,
/// <summary>
/// Extended NOTE Location
/// <summary>
/// </remarks>12 bytes Big Endian</remarks>
ExtendedNOTELocation = 0x0071,
/// <summary>
/// Archive device UNIT
/// <summary>
/// </remarks>6 bytes EBCDIC</remarks>
ArchiveDeviceUNIT = 0x0072,
/// <summary>
/// Archive 1st Volume
/// <summary>
/// </remarks>6 bytes EBCDIC</remarks>
ArchiveFirstVolume = 0x0073,
/// <summary>
/// Archive 1st VOL File Seq#
/// <summary>
/// </remarks>2 bytes Binary</remarks>
ArchiveFirstVolFileSeqNum = 0x0074,
/// <summary>
/// Native I/O Flags
/// <summary>
/// </remarks>2 bytes</remarks>
NativeIOFlags = 0x0075,
/// <summary>
/// Unix File Type
/// <summary>
/// </remarks>1 byte enumerated</remarks>
UnixFileType = 0x0081,
/// <summary>
/// Unix File Format
/// <summary>
/// </remarks>1 byte enumerated</remarks>
UnixFileFormat = 0x0082,
/// <summary>
/// Unix File Character Set Tag Info
/// <summary>
/// </remarks>4 bytes</remarks>
UnixFileCharacterSetTagInfo = 0x0083,
/// <summary>
/// ZIP Environmental Processing Info
/// <summary>
/// </remarks>4 bytes</remarks>
ZIPEnvironmentalProcessingInfo = 0x0090,
/// <summary>
/// EAV EATTR Flags
/// <summary>
/// </remarks>1 byte</remarks>
EAVEATTRFlags = 0x0091,
/// <summary>
/// DSNTYPE Flags
/// <summary>
/// </remarks>1 byte</remarks>
DSNTYPEFlags = 0x0092,
/// <summary>
/// Total Space Allocation (Cyls)
/// <summary>
/// </remarks>4 bytes Big Endian</remarks>
TotalSpaceAllocationCyls = 0x0093,
/// <summary>
/// NONVSAM DSORG
/// <summary>
/// </remarks>2 bytes</remarks>
NONVSAMDSORG = 0x009D,
/// <summary>
/// Program Virtual Object Info
/// <summary>
/// </remarks>3 bytes</remarks>
ProgramVirtualObjectInfo = 0x009E,
/// <summary>
/// Encapsulated file Info
/// <summary>
/// </remarks>9 bytes</remarks>
EncapsulatedFileInfo = 0x009F,
/// <summary>
/// Cluster Log
/// <summary>
/// </remarks>4 bytes Binary</remarks>
ClusterLog = 0x00A2,
/// <summary>
/// Cluster LSID Length
/// <summary>
/// </remarks>4 bytes Binary</remarks>
ClusterLSIDLength = 0x00A3,
/// <summary>
/// Cluster LSID
/// <summary>
/// </remarks>26 bytes EBCDIC</remarks>
ClusterLSID = 0x00A4,
/// <summary>
/// Unix File Creation Time
/// <summary>
/// </remarks>4 bytes</remarks>
UnixFileCreationTime = 0x400C,
/// <summary>
/// Unix File Access Time
/// <summary>
/// </remarks>4 bytes</remarks>
UnixFileAccessTime = 0x400D,
/// <summary>
/// Unix File Modification time
/// <summary>
/// </remarks>4 bytes</remarks>
UnixFileModificationTime = 0x400E,
/// <summary>
/// IBMCMPSC Compression Info
/// <summary>
/// </remarks>variable</remarks>
IBMCMPSCCompressionInfo = 0x4101,
/// <summary>
/// IBMCMPSC Compression Size
/// <summary>
/// </remarks>8 bytes Big Endian</remarks>
IBMCMPSCCompressionSize = 0x4102,
}
}

View File

@@ -1,7 +1,7 @@
namespace SabreTools.Models.PKZIP
{
/// <summary>
/// TThe following is the layout of the Policy Key Data "extra" block.
/// The following is the layout of the Policy Key Data "extra" block.
/// TData is a variable length, variable content field. It holds
/// information about encryptions and/or encryption key sources.
/// Contact PKWARE for information on current TData structures.

View File

@@ -0,0 +1,26 @@
namespace SabreTools.Models.PKZIP
{
/// <summary>
/// z/OS Extra Field (0x0065) Attribute [APPENDIX B]
/// </summary>
/// <see href="https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT"/>
public class ZOSExtraFieldAttribute : ExtensibleDataField
{
/// <summary>
/// Field length including length
/// </summary>
/// <remarks>Big-endian</remarks>
public ushort FieldLength { get; set; }
/// <summary>
/// Field code
/// </summary>
public ZOSExtraFieldAttributeFieldCode FieldCode { get; set; }
/// <summary>
/// Data
/// </summary>
/// <remarks>Variable byte length based on field code</remarks>
public byte[]? Data { get; set; }
}
}