/*
* Copyright 2010 Srikanth Reddy Lingala  
* 
* Licensed under the Apache License, Version 2.0 (the "License"); 
* you may not use this file except in compliance with the License. 
* You may obtain a copy of the License at 
* 
* http://www.apache.org/licenses/LICENSE-2.0 
* 
* Unless required by applicable law or agreed to in writing, 
* software distributed under the License is distributed on an "AS IS" BASIS, 
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
* See the License for the specific language governing permissions and 
* limitations under the License. 
*/

package com.zip4j.util;

public interface InternalZipConstants {
	
	/*
     * Header signatures
     */
	// Whenever a new Signature is added here, make sure to add it
	// in Zip4jUtil.getAllHeaderSignatures()
    static long LOCSIG = 0x04034b50L;	// "PK\003\004"
    static long EXTSIG = 0x08074b50L;	// "PK\007\008"
    static long CENSIG = 0x02014b50L;	// "PK\001\002"
    static long ENDSIG = 0x06054b50L;	// "PK\005\006"
    static long DIGSIG = 0x05054b50L;
    static long ARCEXTDATREC = 0x08064b50L;
    static long SPLITSIG = 0x08074b50L;
    static long ZIP64ENDCENDIRLOC = 0x07064b50L;
    static long ZIP64ENDCENDIRREC = 0x06064b50;
    static int EXTRAFIELDZIP64LENGTH = 0x0001;
    static int AESSIG = 0x9901;

    /*
     * Header sizes in bytes (including signatures)
     */
    static final int LOCHDR = 30;	// LOC header size
    static final int EXTHDR = 16;	// EXT header size
    static final int CENHDR = 46;	// CEN header size
    static final int ENDHDR = 22;	// END header size

    /*
     * Local file (LOC) header field offsets
     */
    static final int LOCVER = 4;	// version needed to extract
    static final int LOCFLG = 6;	// general purpose bit flag
    static final int LOCHOW = 8;	// compression method
    static final int LOCTIM = 10;	// modification time
    static final int LOCCRC = 14;	// uncompressed file crc-32 value
    static final int LOCSIZ = 18;	// compressed size
    static final int LOCLEN = 22;	// uncompressed size
    static final int LOCNAM = 26;	// filename length
    static final int LOCEXT = 28;	// extra field length

    /*
     * Extra local (EXT) header field offsets
     */
    static final int EXTCRC = 4;	// uncompressed file crc-32 value
    static final int EXTSIZ = 8;	// compressed size
    static final int EXTLEN = 12;	// uncompressed size

    /*
     * Central directory (CEN) header field offsets
     */
    static final int CENVEM = 4;	// version made by
    static final int CENVER = 6;	// version needed to extract
    static final int CENFLG = 8;	// encrypt, decrypt flags
    static final int CENHOW = 10;	// compression method
    static final int CENTIM = 12;	// modification time
    static final int CENCRC = 16;	// uncompressed file crc-32 value
    static final int CENSIZ = 20;	// compressed size
    static final int CENLEN = 24;	// uncompressed size
    static final int CENNAM = 28;	// filename length
    static final int CENEXT = 30;	// extra field length
    static final int CENCOM = 32;	// comment length
    static final int CENDSK = 34;	// disk number start
    static final int CENATT = 36;	// internal file attributes
    static final int CENATX = 38;	// external file attributes
    static final int CENOFF = 42;	// LOC header offset

    /*
     * End of central directory (END) header field offsets
     */
    static final int ENDSUB = 8;	// number of entries on this disk
    static final int ENDTOT = 10;	// total number of entries
    static final int ENDSIZ = 12;	// central directory size in bytes
    static final int ENDOFF = 16;	// offset of first CEN header
    static final int ENDCOM = 20;	// zip file comment length
    
    static final int STD_DEC_HDR_SIZE = 12;
    
    //AES Constants
    static final int AES_AUTH_LENGTH = 10;
    static final int AES_BLOCK_SIZE = 16;
    
    static final int MIN_SPLIT_LENGTH = 65536;
    
    static final long ZIP_64_LIMIT = 4294967295L;
	
	public static String OFFSET_CENTRAL_DIR = "offsetCentralDir";
	
	public static final String VERSION = "1.3.1";
	
	public static final int MODE_ZIP = 1;
	
	public static final int MODE_UNZIP = 2;
	
	public static final String WRITE_MODE = "rw";
	
	public static final String READ_MODE = "r";
	
	public static final int BUFF_SIZE = 1024 * 4;
	
	public static final int FILE_MODE_NONE = 0;
	
	public static final int FILE_MODE_READ_ONLY = 1;
	
	public static final int FILE_MODE_HIDDEN = 2;
	
	public static final int FILE_MODE_ARCHIVE = 32;
	
	public static final int FILE_MODE_READ_ONLY_HIDDEN = 3;
	
	public static final int FILE_MODE_READ_ONLY_ARCHIVE = 33;
	
	public static final int FILE_MODE_HIDDEN_ARCHIVE = 34;
	
	public static final int FILE_MODE_READ_ONLY_HIDDEN_ARCHIVE = 35;
	
	public static final int FILE_MODE_SYSTEM = 38;
	
	public static final int FOLDER_MODE_NONE = 16;
	
	public static final int FOLDER_MODE_HIDDEN = 18;

	public static final int FOLDER_MODE_ARCHIVE = 48;
	
	public static final int FOLDER_MODE_HIDDEN_ARCHIVE = 50;
	
	// Update local file header constants
	// This value holds the number of bytes to skip from
	// the offset of start of local header
	public static final int UPDATE_LFH_CRC = 14;
	
	public static final int UPDATE_LFH_COMP_SIZE = 18;
	
	public static final int UPDATE_LFH_UNCOMP_SIZE = 22;
	
	public static final int LIST_TYPE_FILE = 1;
	
	public static final int LIST_TYPE_STRING = 2;
	
	public static final int UFT8_NAMES_FLAG = 1 << 11;
	
	public static final String CHARSET_UTF8 = "UTF8";
	
	public static final String CHARSET_CP850 = "Cp850";
	
	public static final String CHARSET_COMMENTS_DEFAULT = "windows-1254";
	
	public static final String CHARSET_DEFAULT = System.getProperty("file.encoding");
	
	public static final String FILE_SEPARATOR = System.getProperty("file.separator");
	
	public static final String ZIP_FILE_SEPARATOR = "/";
	
	public static final String THREAD_NAME = "Zip4j";
	
	public static final int MAX_ALLOWED_ZIP_COMMENT_LENGTH = 0xFFFF;
}
