PKWareExtraHeader
Date: 2017-02-08

org.apache.commons.compress.archivers.zip

## Class PKWareExtraHeader

- java.lang.Object
- - org.apache.commons.compress.archivers.zip.PKWareExtraHeader

- All Implemented Interfaces:
    ZipExtraField
  Direct Known Subclasses:
    X0014_X509Certificates, X0015_CertificateIdForFile, X0016_CertificateIdForCentralDirectory, X0017_StrongEncryptionHeader, X0019_EncryptionRecipientCertificateList

      public abstract class PKWareExtraHeader
      extends java.lang.Object
      implements ZipExtraField

  Base class for all PKWare strong crypto extra headers.

  This base class acts as a marker so you know you can ignore all extra fields that extend this class if you are not interested in the meta data of PKWare strong encryption.

  Algorithm IDs - integer identifier of the encryption algorithm from the following range
  - 0x6601 - DES
  - 0x6602 - RC2 (version needed to extract < 5.2)
  - 0x6603 - 3DES 168
  - 0x6609 - 3DES 112
  - 0x660E - AES 128
  - 0x660F - AES 192
  - 0x6610 - AES 256
  - 0x6702 - RC2 (version needed to extract >= 5.2)
  - 0x6720 - Blowfish
  - 0x6721 - Twofish
  - 0x6801 - RC4
  - 0xFFFF - Unknown algorithm
  Hash Algorithms - integer identifier of the hash algorithm from the following range
  - 0x0000 - none
  - 0x0001 - CRC32
  - 0x8003 - MD5
  - 0x8004 - SHA1
  - 0x8007 - RIPEMD160
  - 0x800C - SHA256
  - 0x800D - SHA384
  - 0x800E - SHA512
  Since:
    1.11

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static class` | `PKWareExtraHeader.EncryptionAlgorithm` Encryption algorithm.
    `static class` | `PKWareExtraHeader.HashAlgorithm` Hash Algorithm

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `PKWareExtraHeader(ZipShort headerId)`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `byte[]` | `getCentralDirectoryData()` Get the central data.
    `ZipShort` | `getCentralDirectoryLength()` Get the central data length.
    `ZipShort` | `getHeaderId()` Get the header id.
    `byte[]` | `getLocalFileDataData()` Get the local data.
    `ZipShort` | `getLocalFileDataLength()` Get the length of the local data.
    `void` | `parseFromCentralDirectoryData(byte[] data, int offset, int length)` Populate data from this array as if it was in central directory data.
    `void` | `parseFromLocalFileData(byte[] data, int offset, int length)` Populate data from this array as if it was in local file data.
    `void` | `setCentralDirectoryData(byte[] data)` Set the extra field data in central directory.
    `void` | `setLocalFileDataData(byte[] data)` Set the extra field data in the local file data - without Header-ID or length specifier.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### PKWareExtraHeader

          protected PKWareExtraHeader(ZipShort headerId)

  - ### Method Detail

    - #### getHeaderId

          public ZipShort getHeaderId()

      Get the header id.
      Specified by:
        `getHeaderId` in interface `ZipExtraField`
      Returns:
        the header id

    - #### setLocalFileDataData

          public void setLocalFileDataData(byte[] data)

      Set the extra field data in the local file data - without Header-ID or length specifier.
      Parameters:
        `data` - the field data to use

    - #### getLocalFileDataLength

          public ZipShort getLocalFileDataLength()

      Get the length of the local data.
      Specified by:
        `getLocalFileDataLength` in interface `ZipExtraField`
      Returns:
        the length of the local data

    - #### getLocalFileDataData

          public byte[] getLocalFileDataData()

      Get the local data.
      Specified by:
        `getLocalFileDataData` in interface `ZipExtraField`
      Returns:
        the local data

    - #### setCentralDirectoryData

          public void setCentralDirectoryData(byte[] data)

      Set the extra field data in central directory.
      Parameters:
        `data` - the data to use

    - #### getCentralDirectoryLength

          public ZipShort getCentralDirectoryLength()

      Get the central data length. If there is no central data, get the local file data length.
      Specified by:
        `getCentralDirectoryLength` in interface `ZipExtraField`
      Returns:
        the central data length

    - #### getCentralDirectoryData

          public byte[] getCentralDirectoryData()

      Get the central data.
      Specified by:
        `getCentralDirectoryData` in interface `ZipExtraField`
      Returns:
        the central data if present, else return the local file data

    - #### parseFromLocalFileData

          public void parseFromLocalFileData(byte[] data,
                                    int offset,
                                    int length)

      Description copied from interface: `ZipExtraField`
      Populate data from this array as if it was in local file data.
      Specified by:
        `parseFromLocalFileData` in interface `ZipExtraField`
      Parameters:
        `data` - the array of bytes.
        `offset` - the source location in the data array.
        `length` - the number of bytes to use in the data array.
      See Also:
        `ZipExtraField.parseFromLocalFileData(byte[], int, int)`

    - #### parseFromCentralDirectoryData

          public void parseFromCentralDirectoryData(byte[] data,
                                           int offset,
                                           int length)

      Description copied from interface: `ZipExtraField`
      Populate data from this array as if it was in central directory data.
      Specified by:
        `parseFromCentralDirectoryData` in interface `ZipExtraField`
      Parameters:
        `data` - the array of bytes.
        `offset` - the source location in the data array.
        `length` - the number of bytes to use in the data array.
      See Also:
        `ZipExtraField.parseFromCentralDirectoryData(byte[], int, int)`