JAR TECHNICAL INFORMATION October 1996 JAR archive identification scheme: A file is considered a JAR archive if it contains a predefined 64-byte structure. Structure description: at byte offset 0 for 4 bytes: Whole structure CRC32 XOR-ed with 0xffffffff and shifted cyclically 11 bits to the right (to the lowest bit). When counting CRC32 this field itself is assumed to be 0. at byte offset 14 for 6 bytes: signature: 0x1A 'J' 'a' 'r' 0x1B 0x00 other structure fields not defined. This structure does NOT necessarily start at the head of the file. For normal archives this structure resides at the head of the file. However to support future JAR SFX-es you must search the first 128 kilobytes of the file for this structure (optional check for executable 'MZ' may also be done). The remaining part of this document contains a description of the JAR archive header information that is dumped to a text file using the "lt" command. The dump file should be treated as a text file. Each line has the same syntax: = These lines are assembled into a tree. Subnodes are shifted with respect to the parent node by using two ' ' (space) characters. Example: Chapter=1 Created=1996-09-01 17:55:05.9800000 Modified=1996-09-01 17:55:05.9800000 Comment="Some\r\ncomment" Flags=0 File=FIRST.BAT Created=1996-09-01 17:20:41.4400000 Modified=1996-09-01 16:37:00.0000000 LastAccess=1996-09-01 00:00:00.0000000 Size=2160 ChaptersRange=1-2 Attributes=1 File=SECOND.BAT Created=1996-09-01 17:20:41.4400000 Modified=1996-09-01 16:37:00.0000000 LastAccess=1996-09-01 00:00:00.0000000 Size=2160 ChaptersRange=1-2 Attributes=1 Currently, the tree depth is two (only nodes and one-level subnodes) but in future JAR versions, the depth may be increased. You should not rely on the order in which keywords are listed. For compatibility with future versions all unknown keywords must be skipped. Binary keyword values (such as ANSI comments) are quoted and encoded using escape character '\'. This is a brief description of the currently used keywords: Archive= Archive keyword. Subnodes describe global archive related information. Created=1996-09-01 17:21:31.9100000 Archive creation time YYYY-MM-DD HH:MM:SS.SSSSSSS Modified=1996-09-01 19:17:56.5100000 Last time archive has been modified. VersionUsed=0101 JAR version used to update archive (1.01 in this example). VersionToUpdate=0050 JAR version required to update archive (0.50 in this example). VersionToExtract=0050 JAR version required to extract files from archive. VersionToList=0050 JAR version required to list files in archive. Flags=0 Currently, JAR archive flags is the sum of the following constants: 1 LOCKED 2 AUTO_LOCK 4 RECOVERY RECORDS 8 SECURED 16 HIDDEN 32 ENCRYPTED/PROTECTED Comment="Some\r\ncomment" Optional archive comment. Escape characters: \\ Backslash \" Double quotation mark \b Backspace \n Newline \r Carriage return \t Tab \ddd ASCII character in octal notation. 3 digits always used. MaxChapter=3 Maximum chapter in archive. Chapter=1 Chapter (#1 in this example). Subnodes supply information about chapter. Created=1996-09-01 17:21:31.9100000 Creation time Modified=1996-09-01 17:21:31.9100000 Modification time Flags=0 Chapter flags is sum of following constants: 1 LOCKED Comment="Some\r\ncomment" Optional chapter comment. Same format as in case of archive. File=TESTJAR.BAT Filename. Subnodes contain information about file. Created=1996-09-01 17:20:41.4400000 File creation time Modified=1996-09-01 16:37:00.0000000 File modification time LastAccess=1996-09-01 00:00:00.0000000 File last accessed time Size=2160 File size in bytes ChaptersRange=1-2 Chapter range to which file belongs Attributes=1 Sum of: 1 ARCHIVE 2 HIDDEN 4 SYSTEM 8 READONLY 16 DIRECTORY Comment="Some\r\ncomment" Optional file comment. Actually, the JAR header contains more information than is currently listed using the "lt" command. In the future we will add additional keywords. end of document