Changeset 3a72b0c


Ignore:
Timestamp:
Jan 28, 2016 2:57:07 PM (5 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
79450bc
Parents:
f200d5c
Message:

Crypto: Move I2PProvider initialization
Add ElGamal? SigAlgo? type

Location:
core/java/src/net/i2p/crypto
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • core/java/src/net/i2p/crypto/KeyGenerator.java

    rf200d5c r3a72b0c  
    3535import net.i2p.crypto.eddsa.EdDSAPublicKey;
    3636import net.i2p.crypto.eddsa.spec.EdDSAPublicKeySpec;
     37import net.i2p.crypto.provider.I2PProvider;
    3738import net.i2p.data.Hash;
    3839import net.i2p.data.PrivateKey;
     
    5859public final class KeyGenerator {
    5960    private final I2PAppContext _context;
     61
     62    static {
     63        I2PProvider.addProvider();
     64    }
    6065
    6166    public KeyGenerator(I2PAppContext context) {
  • core/java/src/net/i2p/crypto/KeyStoreUtil.java

    rf200d5c r3a72b0c  
    1010import java.security.KeyStore;
    1111import java.security.PrivateKey;
    12 import java.security.Security;
    1312import java.security.cert.Certificate;
    1413import java.security.cert.CertificateExpiredException;
     
    4443
    4544    static {
    46         try {
    47             Security.addProvider(new I2PProvider());
    48         } catch (SecurityException se) {
    49             System.out.println("WARN: Could not install I2P provider: " + se);
    50         }
     45        I2PProvider.addProvider();
    5146    }
    5247
     
    491486        a.add("-keysize");   a.add(Integer.toString(keySize));
    492487        a.add("-keypass");   a.add(keyPW);
    493         if (keyAlg.equals("Ed") || keyAlg.equals("EdDSA")) {
     488        if (keyAlg.equals("Ed") || keyAlg.equals("EdDSA") || keyAlg.equals("ElGamal")) {
    494489            File f = I2PAppContext.getGlobalContext().getBaseDir();
    495490            f = new File(f, "lib");
     
    839834        String pw = args[3];
    840835        boolean ok = createKeys(ksf, DEFAULT_KEYSTORE_PASSWORD, alias, "test cname", "test ou",
    841                                 DEFAULT_KEY_VALID_DAYS, "EdDSA", 256, pw);
     836                                //DEFAULT_KEY_VALID_DAYS, "EdDSA", 256, pw);
     837                                DEFAULT_KEY_VALID_DAYS, "ElGamal", 2048, pw);
    842838        System.out.println("genkey ok? " + ok);
    843839    }
     
    845841    private static void testKeygen2(String[] args) throws Exception {
    846842        // keygen test using the I2PProvider
    847         SigType type = SigType.EdDSA_SHA512_Ed25519;
     843        //SigType type = SigType.EdDSA_SHA512_Ed25519;
     844        SigType type = SigType.ElGamal_SHA256_MODP2048;
    848845        java.security.KeyPairGenerator kpg = java.security.KeyPairGenerator.getInstance(type.getBaseAlgorithm().getName());
    849846        kpg.initialize(type.getParams());
     
    857854        System.out.println(net.i2p.util.HexDump.dump(jpub.getEncoded()));
    858855
    859         java.security.Signature jsig = java.security.Signature.getInstance("SHA512withEdDSA");
     856        java.security.Signature jsig = java.security.Signature.getInstance(type.getAlgorithmName());
    860857        jsig.initSign(jpriv);
    861         jsig.update(new byte[111]);
    862         net.i2p.data.Signature sig = SigUtil.fromJavaSig(jsig.sign(), type);
     858        byte[] data = new byte[111];
     859        net.i2p.util.RandomSource.getInstance().nextBytes(data);
     860        jsig.update(data);
     861        byte[] bsig = jsig.sign();
     862        System.out.println("Encoded signature:");
     863        System.out.println(net.i2p.util.HexDump.dump(bsig));
     864        jsig.initVerify(jpub);
     865        jsig.update(data);
     866        boolean ok = jsig.verify(bsig);
     867        System.out.println("verify passed? " + ok);
     868
     869        net.i2p.data.Signature sig = SigUtil.fromJavaSig(bsig, type);
    863870        System.out.println("Signature test: " + sig);
    864871    }
  • core/java/src/net/i2p/crypto/SigAlgo.java

    rf200d5c r3a72b0c  
    1111    EC("EC"),
    1212    EdDSA("EdDSA"),
    13     RSA("RSA")
     13    /**
     14     *  For local use only, not for use in the network.
     15     */
     16    RSA("RSA"),
     17    /**
     18     *  For local use only, not for use in the network.
     19     *  @since 0.9.25
     20     */
     21    ElGamal("ElGamal")
    1422    ;
    1523
  • core/java/src/net/i2p/crypto/provider/I2PProvider.java

    rf200d5c r3a72b0c  
    44import java.security.PrivilegedAction;
    55import java.security.Provider;
     6import java.security.Security;
    67
    78/**
     
    1213    private static final String INFO = "I2P Security Provider v0.1, implementing" +
    1314            "several algorithms used by I2P.";
     15    private static boolean _installed;
    1416
    1517    /**
     
    7981        put("Alg.Alias.Signature.OID.1.3.14.7.2.1.1", "SHA256withElGamal");
    8082    }
     83
     84    /**
     85     *  Install the I2PProvider.
     86     *  Harmless to call multiple times.
     87     *  @since 0.9.25
     88     */
     89    public static void addProvider() {
     90        synchronized(I2PProvider.class) {
     91            if (!_installed) {
     92                try {
     93                    Provider us = new I2PProvider();
     94                    // put ours ahead of BC, if installed, because our ElGamal
     95                    // implementation may not be fully compatible with BC
     96                    Provider[] provs = Security.getProviders();
     97                    for (int i = 0; i < provs.length; i++) {
     98                        if (provs[i].getName().equals("BC")) {
     99                            Security.insertProviderAt(us, i);
     100                            _installed = true;
     101                            return;
     102                        }
     103                    }
     104                    Security.addProvider(us);
     105                    _installed = true;
     106                } catch (SecurityException se) {
     107                    System.out.println("WARN: Could not install I2P provider: " + se);
     108                }
     109            }
     110        }
     111    }
    81112}
Note: See TracChangeset for help on using the changeset viewer.