Changeset c5c158e


Ignore:
Timestamp:
Aug 25, 2014 4:55:16 PM (6 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
ddb32c6
Parents:
f83007e
Message:

PrivateKeyFile?: Add validateKeyPairs()
Router: Validate router key pairs read in from file

Files:
3 edited

Legend:

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

    rf83007e rc5c158e  
    5454    protected final File file;
    5555    private final I2PClient client;
    56     private Destination dest;
     56    protected Destination dest;
    5757    protected PrivateKey privKey;
    5858    protected SigningPrivateKey signingPrivKey;
     
    453453                try { out.close(); } catch (IOException ioe) {}
    454454            }
     455        }
     456    }
     457
     458    /**
     459     *  Verify that the PublicKey matches the PrivateKey, and
     460     *  the SigningPublicKey matches the SigningPrivateKey.
     461     *
     462     *  @return success
     463     *  @since 0.9.16
     464     */
     465    public boolean validateKeyPairs() {
     466        try {
     467            if (!dest.getPublicKey().equals(KeyGenerator.getPublicKey(privKey)))
     468                return false;
     469            return dest.getSigningPublicKey().equals(KeyGenerator.getSigningPublicKey(signingPrivKey));
     470        } catch (IllegalArgumentException iae) {
     471            return false;
    455472        }
    456473    }
  • router/java/src/net/i2p/data/router/RouterPrivateKeyFile.java

    rf83007e rc5c158e  
    1010import net.i2p.crypto.SigType;
    1111import net.i2p.data.DataFormatException;
     12import net.i2p.data.Destination;
    1213import net.i2p.data.PrivateKey;
    1314import net.i2p.data.PrivateKeyFile;
     
    4344            signingPrivKey = new SigningPrivateKey(type);
    4445            signingPrivKey.readBytes(in);
     46
     47            // set it a Destination, so we may call validateKeyPairs()
     48            // or other methods
     49            dest = new Destination();
     50            dest.setPublicKey(ri.getPublicKey());
     51            dest.setSigningPublicKey(ri.getSigningPublicKey());
     52            dest.setCertificate(ri.getCertificate());
     53
    4554            return ri;
    4655        } finally {
  • router/java/src/net/i2p/router/startup/LoadRouterInfoJob.java

    rf83007e rc5c158e  
    1616import java.util.concurrent.atomic.AtomicBoolean;
    1717
     18import net.i2p.crypto.KeyGenerator;
    1819import net.i2p.crypto.SigType;
    1920import net.i2p.data.Certificate;
     
    211212            RouterPrivateKeyFile pkf = new RouterPrivateKeyFile(rkf2);
    212213            ri = pkf.getRouterIdentity();
     214            if (!pkf.validateKeyPairs())
     215                throw new DataFormatException("Key pairs invalid");
    213216            privkey = pkf.getPrivKey();
    214217            signingPrivKey = pkf.getSigningPrivKey();
     
    225228                SigningPublicKey signingPubKey = new SigningPublicKey();
    226229                signingPubKey.readBytes(fis);
     230
     231                // validate
     232                try {
     233                    if (!pubkey.equals(KeyGenerator.getPublicKey(privkey)))
     234                        throw new DataFormatException("Key pairs invalid");
     235                    if (!signingPubKey.equals(KeyGenerator.getSigningPublicKey(signingPrivKey)))
     236                        throw new DataFormatException("Key pairs invalid");
     237                } catch (IllegalArgumentException iae) {
     238                    throw new DataFormatException("Key pairs invalid", iae);
     239                }
     240
    227241                ri = new RouterIdentity();
    228242                ri.setPublicKey(pubkey);
Note: See TracChangeset for help on using the changeset viewer.