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

public final class I2PDatagramDissectorextends Object
Class for dissecting I2P repliable datagrams, checking the authenticity of the sender. Note that objects of this class are NOT THREAD SAFE!
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private static final int
    Largest datagram buffer allocated.
    private final DSAEngine
    The engine verifying the signature.
    private final SHA256Generator
    The hash of the payload.
    private static final int
    Smallest size of a valid datagram.
    private Destination
    The destination received with the datagram.
    private byte[]
    The hash received with the datagram.
    private final byte[]
    The buffer holding the payload.
    private int
    Length of the received payload.
    private Signature
    The signature received with the datagram.
    private boolean
    True when the datagram passed the checks.
  • Constructor Summary

    Constructors
    Constructor
    Description
    Crate a new I2P repliable datagram dissector.
  • Method Summary

    All Methods
    Modifier and Type
    Method
    Description
    Extract the hash of the payload of an I2P repliable datagram (previously loaded with the loadI2PDatagram() method), without verifying the datagram signature.
    byte[]
    Extract the payload carried by an I2P repliable datagram (previously loaded with the loadI2PDatagram() method), without verifying the datagram signature.
    Extract the sender of an I2P repliable datagram (previously loaded with the loadI2PDatagram() method), without verifying the datagram signature.
    Extract the hash of the payload of an I2P repliable datagram (previously loaded with the loadI2PDatagram() method), verifying the datagram signature.
    byte[]
    The payload carried by an I2P repliable datagram (previously loaded with the loadI2PDatagram(byte[]) method), verifying the datagram signature.
    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
    Verify the signature of this datagram (previously loaded with the loadI2PDatagram() method).

    Methods inherited from class Object

    clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • DGRAM_BUFSIZE

      private static final int DGRAM_BUFSIZE
      Largest datagram buffer allocated.
      See Also:
    • MIN_DGRAM_SIZE

      private static final int MIN_DGRAM_SIZE
      Smallest size of a valid datagram.
      See Also:
    • dsaEng

      private final DSAEngine dsaEng
      The engine verifying the signature.
    • hashGen

      private final SHA256Generator hashGen
      The hash of the payload.
    • rxHash

      private byte[] rxHash
      The hash received with the datagram.
    • rxSign

      private Signature rxSign
      The signature received with the datagram.
    • rxDest

      private Destination rxDest
      The destination received with the datagram.
    • rxPayload

      private final byte[] rxPayload
      The buffer holding the payload.
    • rxPayloadLen

      private int rxPayloadLen
      Length of the received payload.
    • valid

      private boolean valid
      True when the datagram passed the checks.
  • Constructor Details

    • I2PDatagramDissector

      public I2PDatagramDissector()
      Crate a new I2P repliable datagram dissector.
  • Method Details

    • 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
    • getPayload

      public byte[] getPayload() throws I2PInvalidDatagramException
      The payload carried by an I2P repliable datagram (previously loaded with the loadI2PDatagram(byte[]) 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
      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
    • 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
    • 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
    • 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
    • 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