net.i2p.data

## Class DatabaseEntry

- java.lang.Object
- - net.i2p.data.DataStructureImpl
  - - net.i2p.data.DatabaseEntry

- All Implemented Interfaces:
    DataStructure
  Direct Known Subclasses:
    LeaseSet, RouterInfo

      public abstract class DatabaseEntry
      extends DataStructureImpl

  Base implementation of common methods for the two data structures that are stored in the netDb, i.e. LeaseSet and RouterInfo. Implemented in 0.8.2 and retrofitted over LeaseSet and RouterInfo. This consolidates some common code and makes it easier to implement the NetDB and I2NP without doing instanceof all over the place. DatabaseEntries have a SHA256 hash, a routing key, a timestamp, and signatures.
  Since:
    0.8.2
  Author:
    zzz

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected Hash` | `_currentRoutingKey`
    `protected byte[]` | `_routingKeyGenMod`
    `protected Signature` | `_signature`
    `static int` | `KEY_TYPE_LEASESET`
    `static int` | `KEY_TYPE_ROUTERINFO` these are the same as in i2np's DatabaseStoreMessage

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `DatabaseEntry()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected abstract byte[]` | `getBytes()` Returns the raw payload data, excluding the signature, to be signed by sign().
    `abstract long` | `getDate()` A common interface to the timestamp of the two subclasses.
    `Hash` | `getHash()` A common interface to the Hash of the two subclasses.
    `protected abstract KeysAndCert` | `getKeysAndCert()` Get the keys and the cert Identical to getDestination() in LeaseSet, and getIdentity() in RouterInfo.
    `Hash` | `getRoutingKey()` Get the routing key for the structure using the current modifier in the RoutingKeyGenerator.
    `Signature` | `getSignature()` Retrieve the proof that the identity stands behind the info here
    `protected SigningPublicKey` | `getSigningPublicKey()` Identical to getDestination().getSigningPublicKey() in LeaseSet, and getIdentity().getSigningPublicKey() in RouterInfo.
    `abstract int` | `getType()` Get the type of the data structure.
    `void` | `setRoutingKey(Hash key)`
    `void` | `setSignature(Signature signature)` Configure the proof that the entity stands behind the info here
    `void` | `sign(SigningPrivateKey key)` Sign the structure using the supplied signing key
    `boolean` | `validateRoutingKey()`
    `protected boolean` | `verifySignature()` This is the same as isValid() in RouterInfo or verifySignature() in LeaseSet.

    - ### Methods inherited from class net.i2p.data.DataStructureImpl

      `calculateHash, fromBase64, fromByteArray, read, toBase64, toByteArray`

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

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

    - ### Methods inherited from interface net.i2p.data.DataStructure

      `readBytes, writeBytes`

- - ### Field Detail

    - #### KEY_TYPE_ROUTERINFO

          public static final int KEY_TYPE_ROUTERINFO

      these are the same as in i2np's DatabaseStoreMessage
      See Also:
        Constant Field Values

    - #### KEY_TYPE_LEASESET

          public static final int KEY_TYPE_LEASESET

      See Also:
        Constant Field Values

    - #### _signature

          protected volatile Signature _signature

    - #### _currentRoutingKey

          protected volatile Hash _currentRoutingKey

    - #### _routingKeyGenMod

          protected volatile byte[] _routingKeyGenMod

  - ### Constructor Detail

    - #### DatabaseEntry

          public DatabaseEntry()

  - ### Method Detail

    - #### getDate

          public abstract long getDate()

      A common interface to the timestamp of the two subclasses. Identical to getEarliestLeaseData() in LeaseSet, and getPublished() in RouterInfo. Note that for a LeaseSet this will be in the future, and for a RouterInfo it will be in the past. Either way, it's a timestamp.
      Since:
        0.8.2

    - #### getKeysAndCert

          protected abstract KeysAndCert getKeysAndCert()

      Get the keys and the cert Identical to getDestination() in LeaseSet, and getIdentity() in RouterInfo.
      Returns:
        KAC or null
      Since:
        0.8.2

    - #### getHash

          public Hash getHash()

      A common interface to the Hash of the two subclasses. Identical to getDestination().calculateHash() in LeaseSet, and getIdentity().getHash() in RouterInfo.
      Returns:
        Hash or null
      Since:
        0.8.2

    - #### getType

          public abstract int getType()

      Get the type of the data structure. This should be faster than instanceof.
      Returns:
        KEY_TYPE_ROUTERINFO or KEY_TYPE_LEASESET
      Since:
        0.8.2

    - #### getBytes

          protected abstract byte[] getBytes()
                                      throws DataFormatException

      Returns the raw payload data, excluding the signature, to be signed by sign(). FIXME RouterInfo throws DFE and LeaseSet returns null
      Returns:
        null on error ???????????????????????
      Throws:
        `DataFormatException`

    - #### getRoutingKey

          public Hash getRoutingKey()

      Get the routing key for the structure using the current modifier in the RoutingKeyGenerator. This only calculates a new one when necessary though (if the generator's key modifier changes)

    - #### setRoutingKey

          public void setRoutingKey(Hash key)

    - #### validateRoutingKey

          public boolean validateRoutingKey()

    - #### getSignature

          public Signature getSignature()

      Retrieve the proof that the identity stands behind the info here

    - #### setSignature

          public void setSignature(Signature signature)

      Configure the proof that the entity stands behind the info here

    - #### sign

          public void sign(SigningPrivateKey key)
                    throws DataFormatException

      Sign the structure using the supplied signing key
      Throws:
        `DataFormatException`

    - #### getSigningPublicKey

          protected SigningPublicKey getSigningPublicKey()

      Identical to getDestination().getSigningPublicKey() in LeaseSet, and getIdentity().getSigningPublicKey() in RouterInfo.
      Returns:
        SPK or null
      Since:
        0.8.2

    - #### verifySignature

          protected boolean verifySignature()

      This is the same as isValid() in RouterInfo or verifySignature() in LeaseSet.
      Returns:
        valid