Package net.i2p.data

Class PublicKey

  • All Implemented Interfaces:
    DataStructure
    Direct Known Subclasses:
    NextSessionKey

    public class PublicKey
    extends SimpleDataStructure
    Defines the PublicKey as defined by the I2P data structure spec. A public key is 256byte Integer. The public key represents only the exponent, not the primes, which are constant and defined in the crypto spec. As of release 0.9.38, keys of arbitrary length and type are supported. Note: Support for keys longer than 256 bytes unimplemented. See EncType.
    Author:
    jrandom
    • Field Detail

      • KEYSIZE_BYTES

        public static final int KEYSIZE_BYTES
    • Constructor Detail

      • PublicKey

        public PublicKey()
      • PublicKey

        public PublicKey​(EncType type)
        Parameters:
        type - if null, type is unknown
        Since:
        0.9.38
      • PublicKey

        public PublicKey​(byte[] data)
        Parameters:
        data - must be non-null
      • PublicKey

        public PublicKey​(EncType type,
                         byte[] data)
        Parameters:
        type - if null, type is unknown
        data - must be non-null
        Since:
        0.9.38
      • PublicKey

        public PublicKey​(int typeCode,
                         byte[] data)
        Unknown type only.
        Parameters:
        typeCode - must not match a known type. 1-255
        data - must be non-null
        Since:
        0.9.38
      • PublicKey

        public PublicKey​(String base64Data)
                  throws DataFormatException
        Constructs from base64. ElGamal only.
        Parameters:
        base64Data - a string of base64 data (the output of .toBase64() called on a prior instance of PublicKey
        Throws:
        DataFormatException
    • Method Detail

      • create

        public static PublicKey create​(byte[] data,
                                       int off)
        Pull from cache or return new. ELGAMAL_2048 only! Deprecated - used only by deprecated Destination.readBytes(data, off)
        Throws:
        ArrayIndexOutOfBoundsException - if not enough bytes, FIXME should throw DataFormatException
        Since:
        0.8.3
      • getType

        public EncType getType()
        Returns:
        null if unknown
        Since:
        0.9.38
      • getUnknownTypeCode

        public int getUnknownTypeCode()
        Only valid if getType() returns null
        Since:
        0.9.38
      • toTypedKey

        public PublicKey toTypedKey​(KeyCertificate kcert)
        Up-convert this from an untyped (type 0) PK to a typed PK based on the Key Cert given. The type of the returned key will be null if the kcert sigtype is null.
        Throws:
        IllegalArgumentException - if this is already typed to a different type
        Since:
        0.9.42
      • getPadding

        public byte[] getPadding​(KeyCertificate kcert)
        Get the portion of this (type 0) PK that is really padding based on the Key Cert type given, if any
        Returns:
        trailing padding length > 0 or null if no padding or type is unknown
        Throws:
        IllegalArgumentException - if this is already typed to a different type
        Since:
        0.9.42
      • clearCache

        public static void clearCache()
        Since:
        0.9.17
      • hashCode

        public int hashCode()
        Description copied from class: SimpleDataStructure
        We assume the data has enough randomness in it, so use the first 4 bytes for speed. If this is not the case, override in the extending class.
        Overrides:
        hashCode in class SimpleDataStructure
        Since:
        0.9.42
      • equals

        public boolean equals​(Object obj)
        Description copied from class: SimpleDataStructure
        Warning - this returns true for two different classes with the same size and same data, e.g. SessionKey and SessionTag, but you wouldn't put them in the same Set, would you?
        Overrides:
        equals in class SimpleDataStructure
        Since:
        0.9.42