Changeset 3b7284c for core/java


Ignore:
Timestamp:
Jan 4, 2019 2:30:38 PM (18 months ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
5634055
Parents:
74ed9741
Message:

I2CP: Add support for multiple private keys in CreateLS2Message

File:
1 edited

Legend:

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

    r74ed9741 r3b7284c  
    55import java.io.IOException;
    66import java.io.InputStream;
     7import java.util.ArrayList;
     8import java.util.Collections;
     9import java.util.List;
    710
    811import net.i2p.crypto.EncType;
     
    1518import net.i2p.data.MetaLeaseSet;
    1619import net.i2p.data.PrivateKey;
     20import net.i2p.data.PublicKey;
    1721import net.i2p.data.SigningPrivateKey;
    1822
     
    2327 * For LS2:
    2428 * Same as CreateLeaseSetMessage, but has a netdb type before
    25  * the LeaseSet. SigningPrivateKey and PrivateKey are
     29 * the LeaseSet. SigningPrivateKey and PrivateKey(s) are
    2630 * serialized after the LeaseSet, not before, so we can
    2731 * infer the types from the LeaseSet.
     
    3034 * SigningPrivateKey and PrivateKey are not present.
    3135 *
     36 * For Encrypted LS:
     37 * TODO
     38 *
    3239 * @since 0.9.38
    3340 */
     
    3542    public final static int MESSAGE_TYPE = 40;
    3643
     44    // only used if more than one key, otherwise null
     45    private List<PrivateKey> _privateKeys;
     46
    3747    public CreateLeaseSet2Message() {
    3848        super();
     49    }
     50
     51    /**
     52     *  This returns all the keys. getPrivateKey() returns the first one.
     53     *  @return not a copy, do not modify, null if none
     54     */
     55    public List<PrivateKey> getPrivateKeys() {
     56        if (_privateKeys != null)
     57            return _privateKeys;
     58        PrivateKey pk = getPrivateKey();
     59        if (pk != null)
     60            return Collections.singletonList(pk);
     61        return null;
     62    }
     63
     64    /**
     65     *  Add a private key.
     66     */
     67    public void addPrivateKey(PrivateKey key) {
     68        PrivateKey pk = getPrivateKey();
     69        if (pk == null) {
     70            setPrivateKey(key);
     71        } else {
     72            if (_privateKeys == null) {
     73                _privateKeys = new ArrayList<PrivateKey>(4);
     74                _privateKeys.add(pk);
     75            }
     76            _privateKeys.add(key);
     77        }
    3978    }
    4079
     
    69108                _signingPrivateKey = new SigningPrivateKey(stype);
    70109                _signingPrivateKey.readBytes(in);
    71                 EncType etype = _leaseSet.getEncryptionKey().getType();
    72                 if (etype == null)
    73                     throw new I2CPMessageException("Unsupported encryption type");
    74                 _privateKey = new PrivateKey(etype);
    75                 _privateKey.readBytes(in);
     110                if (type == DatabaseEntry.KEY_TYPE_LS2) {
     111                    LeaseSet2 ls2 = (LeaseSet2) _leaseSet;
     112                    // get one PrivateKey for each PublicKey
     113                    List<PublicKey> pks = ls2.getEncryptionKeys();
     114                    for (PublicKey pk : pks) {
     115                        EncType etype = pk.getType();
     116                        if (etype == null)
     117                            throw new I2CPMessageException("Unsupported encryption type");
     118                        PrivateKey priv = new PrivateKey(etype);
     119                        priv.readBytes(in);
     120                        addPrivateKey(priv);
     121                    }
     122                } else {
     123                    EncType etype = _leaseSet.getEncryptionKey().getType();
     124                    if (etype == null)
     125                        throw new I2CPMessageException("Unsupported encryption type");
     126                    _privateKey = new PrivateKey(etype);
     127                    _privateKey.readBytes(in);
     128                }
    76129            }
    77130        } catch (DataFormatException dfe) {
Note: See TracChangeset for help on using the changeset viewer.