net.i2p.client.datagram

## Class I2PDatagramDissector

- java.lang.Object
- - net.i2p.client.datagram.I2PDatagramDissector

-     public final class I2PDatagramDissector
      extends Object

  Class for dissecting I2P repliable datagrams, checking the authenticity of the sender. Note that objects of this class are NOT THREAD SAFE!

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `I2PDatagramDissector()` Crate a new I2P repliable datagram dissector.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `Hash` | `extractHash()` Extract the hash of the payload of an I2P repliable datagram (previously loaded with the loadI2PDatagram() method), without verifying the datagram signature.
    `byte[]` | `extractPayload()` Extract the payload carried by an I2P repliable datagram (previously loaded with the loadI2PDatagram() method), without verifying the datagram signature.
    `Destination` | `extractSender()` Extract the sender of an I2P repliable datagram (previously loaded with the loadI2PDatagram() method), without verifying the datagram signature.
    `Hash` | `getHash()` Extract the hash of the payload of an I2P repliable datagram (previously loaded with the loadI2PDatagram() method), verifying the datagram signature.
    `byte[]` | `getPayload()` Get the payload carried by an I2P repliable datagram (previously loaded with the loadI2PDatagram() method), verifying the datagram signature.
    `Destination` | `getSender()` Get the sender of an I2P repliable datagram (previously loaded with the loadI2PDatagram() method), verifying the datagram signature.
    `void` | `loadI2PDatagram(byte[] dgram)` Load an I2P repliable datagram into the dissector.
    `void` | `verifySignature()` Verify the signature of this datagram (previously loaded with the loadI2PDatagram() method)

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

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

- - ### Constructor Detail

    - #### I2PDatagramDissector

          public I2PDatagramDissector()

      Crate a new I2P repliable datagram dissector.

  - ### Method Detail

    - #### extractHash

          public Hash extractHash()

      Extract the hash of the payload of an I2P repliable datagram (previously loaded with the loadI2PDatagram() method), without verifying the datagram signature. As of 0.9.14, for signature types other than DSA_SHA1, this returns null.
      Returns:
        The hash of the payload of the I2P repliable datagram

    - #### extractPayload

          public byte[] extractPayload()

      Extract the payload carried by an I2P repliable datagram (previously loaded with the loadI2PDatagram() method), without verifying the datagram signature.
      Returns:
        A byte array containing the datagram payload

    - #### extractSender

          public Destination extractSender()

      Extract the sender of an I2P repliable datagram (previously loaded with the loadI2PDatagram() method), without verifying the datagram signature.
      Returns:
        The Destination of the I2P repliable datagram sender

    - #### getHash

          public Hash getHash()
                       throws I2PInvalidDatagramException

      Extract the hash of the payload of an I2P repliable datagram (previously loaded with the loadI2PDatagram() method), verifying the datagram signature. As of 0.9.14, for signature types other than DSA_SHA1, this returns null.
      Returns:
        The hash of the payload of the I2P repliable datagram
      Throws:
        `I2PInvalidDatagramException` - if the signature verification fails

    - #### getPayload

          public byte[] getPayload()
                            throws I2PInvalidDatagramException

      Get the payload carried by an I2P repliable datagram (previously loaded with the loadI2PDatagram() method), verifying the datagram signature.
      Returns:
        A byte array containing the datagram payload
      Throws:
        `I2PInvalidDatagramException` - if the signature verification fails

    - #### getSender

          public Destination getSender()
                                throws I2PInvalidDatagramException

      Get the sender of an I2P repliable datagram (previously loaded with the loadI2PDatagram() method), verifying the datagram signature.
      Returns:
        The Destination of the I2P repliable datagram sender
      Throws:
        `I2PInvalidDatagramException` - if the signature verification fails

    - #### loadI2PDatagram

          public void loadI2PDatagram(byte[] dgram)
                               throws DataFormatException

      Load an I2P repliable datagram into the dissector. Does NOT verify the signature. Format is:
      1. Destination (387+ bytes)
      2. Signature (40+ bytes, type and length as implied by signing key type in the Destination)
      3. Payload
      For DSA_SHA1 Destinations, the signature is of the SHA-256 Hash of the payload. As of 0.9.14, for non-DSA_SHA1 Destinations, the signature is of the payload itself.
      Parameters:
        `dgram` - non-null I2P repliable datagram to be loaded
      Throws:
        `DataFormatException` - If there's an error in the datagram format

    - #### verifySignature

          public void verifySignature()
                               throws I2PInvalidDatagramException

      Verify the signature of this datagram (previously loaded with the loadI2PDatagram() method)
      Throws:
        `I2PInvalidDatagramException` - if the signature is invalid