Changeset 4ae57f4 for core


Ignore:
Timestamp:
Jan 1, 2019 5:48:31 PM (17 months ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
149359f
Parents:
d95d81a
Message:

Data: Fix LS2 support for unknown enc. types (proposal 123)

Location:
core/java/src/net/i2p/data
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • core/java/src/net/i2p/data/LeaseSet2.java

    rd95d81a r4ae57f4  
    3838    // may be null
    3939    protected Properties _options;
    40     // only used for unknown types; else use _encryptionKey.getType()
    41     private int _encType;
    4240    // only used if more than one key, otherwise null
    4341    private List<PublicKey> _encryptionKeys;
     
    237235            _encryptionKeys = new ArrayList<PublicKey>(numKeys);
    238236        for (int i = 0; i < numKeys; i++) {
    239             _encType = (int) DataHelper.readLong(in, 2);
     237            int encType = (int) DataHelper.readLong(in, 2);
    240238            int encLen = (int) DataHelper.readLong(in, 2);
    241239            // TODO
    242             if (_encType == 0) {
     240            if (encType == 0) {
    243241                _encryptionKey = PublicKey.create(in);
    244242            } else {
    245                 EncType type = EncType.getByCode(_encType);
     243                EncType type = EncType.getByCode(encType);
    246244                // type will be null if unknown
    247245                byte[] encKey = new byte[encLen];
    248246                DataHelper.read(in, encKey);
    249247                // this will throw IAE if type is non-null and length is wrong
    250                 _encryptionKey = new PublicKey(type, encKey);
     248                if (type != null)
     249                    _encryptionKey = new PublicKey(type, encKey);
     250                else
     251                    _encryptionKey = new PublicKey(encType, encKey);
    251252            }
    252253            if (numKeys > 1)
     
    300301                DataHelper.writeLong(out, 2, type.getCode());
    301302            } else {
    302                 DataHelper.writeLong(out, 2, _encType);
     303                DataHelper.writeLong(out, 2, key.getUnknownTypeCode());
    303304            }
    304305            DataHelper.writeLong(out, 2, key.length());
     
    561562        pubKey = encKeys2.getPublic();
    562563        ls2.addEncryptionKey(pubKey);
     564        byte[] b = new byte[99];
     565        rand.nextBytes(b);
     566        pubKey = new PublicKey(77, b);
     567        ls2.addEncryptionKey(pubKey);
     568        b = new byte[55];
     569        rand.nextBytes(b);
     570        pubKey = new PublicKey(177, b);
     571        ls2.addEncryptionKey(pubKey);
    563572        SigningPrivateKey spk = pkf.getSigningPrivKey();
    564573        if (offline) {
  • core/java/src/net/i2p/data/PublicKey.java

    rd95d81a r4ae57f4  
    3333
    3434    private final EncType _type;
     35    private final int _unknownTypeCode;
    3536
    3637    /**
     
    6465        super();
    6566        _type = type;
     67        _unknownTypeCode = (type != null) ? type.getCode() : -1;
    6668    }
    6769
     
    8385    }
    8486
    85     /** constructs from base64
     87    /**
     88     *  Unknown type only.
     89     *  @param typeCode must not match a known type. 1-255
     90     *  @param data must be non-null
     91     *  @since 0.9.38
     92     */
     93    public PublicKey(int typeCode, byte data[]) {
     94        _type = null;
     95        if (data == null)
     96            throw new IllegalArgumentException("Data must be specified");
     97        _data = data;
     98        if (typeCode <= 0 || typeCode > 255)
     99            throw new IllegalArgumentException();
     100        _unknownTypeCode = typeCode;
     101    }
     102
     103    /**
     104     * Constructs from base64. ElGamal only.
    86105     * @param base64Data a string of base64 data (the output of .toBase64() called
    87106     * on a prior instance of PublicKey
     
    109128
    110129    /**
     130     *  Only valid if getType() returns null
     131     *  @since 0.9.38
     132     */
     133    public int getUnknownTypeCode() {
     134        return _unknownTypeCode;
     135    }
     136
     137    /**
    111138     *  @since 0.9.17
    112139     */
     
    121148    public String toString() {
    122149        StringBuilder buf = new StringBuilder(64);
    123         buf.append("[PublicKey ").append((_type != null) ? _type.toString() : "unknown type").append(' ');
     150        buf.append("[PublicKey ").append((_type != null) ? _type.toString() : "unknown type: " + _unknownTypeCode).append(' ');
    124151        if (_data == null) {
    125152            buf.append("null");
Note: See TracChangeset for help on using the changeset viewer.