Search in sources :

Example 26 with SigningPrivateKey

use of net.i2p.data.SigningPrivateKey in project i2p.i2p by i2p.

the class SAMUtils method checkPrivateDestination.

/**
 * Check whether a base64-encoded dest is valid
 *
 * @param dest The base64-encoded destination to be checked
 *
 * @return True if the destination is valid, false otherwise
 */
/**
 **
 *    public static boolean checkDestination(String dest) {
 *        try {
 *            Destination d = new Destination();
 *            d.fromBase64(dest);
 *
 *            return true;
 *        } catch (DataFormatException e) {
 *            return false;
 *        }
 *    }
 ***
 */
/**
 * Check whether a base64-encoded {dest,privkey,signingprivkey} is valid
 *
 * @param dest The base64-encoded destination and keys to be checked (same format as PrivateKeyFile)
 * @return true if valid
 */
public static boolean checkPrivateDestination(String dest) {
    byte[] b = Base64.decode(dest);
    if (b == null || b.length < 663)
        return false;
    ByteArrayInputStream destKeyStream = new ByteArrayInputStream(b);
    try {
        Destination d = Destination.create(destKeyStream);
        new PrivateKey().readBytes(destKeyStream);
        SigningPrivateKey spk = new SigningPrivateKey(d.getSigningPublicKey().getType());
        spk.readBytes(destKeyStream);
    } catch (DataFormatException e) {
        return false;
    } catch (IOException e) {
        return false;
    }
    return destKeyStream.available() == 0;
}
Also used : SigningPrivateKey(net.i2p.data.SigningPrivateKey) Destination(net.i2p.data.Destination) PrivateKey(net.i2p.data.PrivateKey) SigningPrivateKey(net.i2p.data.SigningPrivateKey) DataFormatException(net.i2p.data.DataFormatException) ByteArrayInputStream(java.io.ByteArrayInputStream) IOException(java.io.IOException)

Example 27 with SigningPrivateKey

use of net.i2p.data.SigningPrivateKey in project i2p.i2p by i2p.

the class DSABench method main.

public static void main(String[] args) {
    int times = 100;
    long keygentime = 0;
    long signtime = 0;
    long verifytime = 0;
    long maxKey = 0;
    long minKey = 0;
    long maxS = 0;
    long minS = 0;
    long maxV = 0;
    long minV = 0;
    Object[] keys = KeyGenerator.getInstance().generateSigningKeypair();
    byte[] message = new byte[32 + 32];
    for (int i = 0; i < message.length; i++) message[i] = (byte) ((i % 26) + 'a');
    for (int x = 0; x < times; x++) {
        long startkeys = System.currentTimeMillis();
        keys = KeyGenerator.getInstance().generateSigningKeypair();
        SigningPublicKey pubkey = (SigningPublicKey) keys[0];
        SigningPrivateKey privkey = (SigningPrivateKey) keys[1];
        long endkeys = System.currentTimeMillis();
        long startsign = System.currentTimeMillis();
        Signature s = DSAEngine.getInstance().sign(message, privkey);
        Signature s1 = DSAEngine.getInstance().sign(new ByteArrayInputStream(message), privkey);
        long endsignstartverify = System.currentTimeMillis();
        boolean v = DSAEngine.getInstance().verifySignature(s, message, pubkey);
        boolean v1 = DSAEngine.getInstance().verifySignature(s1, new ByteArrayInputStream(message), pubkey);
        boolean v2 = DSAEngine.getInstance().verifySignature(s1, message, pubkey);
        boolean v3 = DSAEngine.getInstance().verifySignature(s, new ByteArrayInputStream(message), pubkey);
        long endverify = System.currentTimeMillis();
        System.out.print(".");
        keygentime += endkeys - startkeys;
        signtime += endsignstartverify - startsign;
        verifytime += endverify - endsignstartverify;
        if (!v) {
            throw new RuntimeException("Holy crap, did not verify");
        }
        if (!(v1 && v2 && v3))
            throw new RuntimeException("Stream did not verify");
        if ((minKey == 0) && (minS == 0) && (minV == 0)) {
            minKey = endkeys - startkeys;
            maxKey = endkeys - startkeys;
            minS = endsignstartverify - startsign;
            maxS = endsignstartverify - startsign;
            minV = endverify - endsignstartverify;
            maxV = endverify - endsignstartverify;
        } else {
            if (minKey > endkeys - startkeys)
                minKey = endkeys - startkeys;
            if (maxKey < endkeys - startkeys)
                maxKey = endkeys - startkeys;
            if (minS > endsignstartverify - startsign)
                minS = endsignstartverify - startsign;
            if (maxS < endsignstartverify - startsign)
                maxS = endsignstartverify - startsign;
            if (minV > endverify - endsignstartverify)
                minV = endverify - endsignstartverify;
            if (maxV < endverify - endsignstartverify)
                maxV = endverify - endsignstartverify;
        }
    }
    System.out.println();
    System.out.println("Key Generation Time Average: " + (keygentime / times) + "\ttotal: " + keygentime + "\tmin: " + minKey + "\tmax: " + maxKey + "\tKeygen/second: " + (keygentime == 0 ? "NaN" : "" + (times * 1000) / keygentime));
    System.out.println("Signing Time Average       : " + (signtime / times) + "\ttotal: " + signtime + "\tmin: " + minS + "\tmax: " + maxS + "\tSigning Bps: " + (times * message.length * 1000) / signtime);
    System.out.println("Verification Time Average  : " + (verifytime / times) + "\ttotal: " + verifytime + "\tmin: " + minV + "\tmax: " + maxV + "\tDecryption Bps: " + (times * message.length * 1000) / verifytime);
}
Also used : SigningPrivateKey(net.i2p.data.SigningPrivateKey) SigningPublicKey(net.i2p.data.SigningPublicKey) ByteArrayInputStream(java.io.ByteArrayInputStream) Signature(net.i2p.data.Signature)

Example 28 with SigningPrivateKey

use of net.i2p.data.SigningPrivateKey in project i2p.i2p by i2p.

the class RouterInfoTest method createDataStructure.

@SuppressWarnings("deprecation")
public DataStructure createDataStructure() throws DataFormatException {
    RouterInfo info = new RouterInfo();
    HashSet<RouterAddress> addresses = new HashSet<RouterAddress>();
    DataStructure structure = (new RouterAddressTest()).createDataStructure();
    addresses.add((RouterAddress) structure);
    info.setAddresses(addresses);
    PublicKey pubKey = null;
    SigningPublicKey signingPubKey = null;
    PrivateKey privKey = null;
    SigningPrivateKey signingPrivKey = null;
    Object[] obj = KeyGenerator.getInstance().generatePKIKeypair();
    pubKey = (PublicKey) obj[0];
    privKey = (PrivateKey) obj[1];
    obj = KeyGenerator.getInstance().generateSigningKeypair();
    signingPubKey = (SigningPublicKey) obj[0];
    signingPrivKey = (SigningPrivateKey) obj[1];
    _log.debug("SigningPublicKey: " + signingPubKey);
    _log.debug("SigningPrivateKey: " + signingPrivKey);
    RouterIdentity ident = new RouterIdentity();
    ident.setCertificate(new Certificate(Certificate.CERTIFICATE_TYPE_NULL, null));
    ident.setPublicKey(pubKey);
    ident.setSigningPublicKey(signingPubKey);
    info.setIdentity(ident);
    Properties options = new Properties();
    for (int i = 0; i < 16; i++) {
        options.setProperty("option." + i, "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890$:." + i);
    }
    options.setProperty("netConnectionSpeed", "OC12");
    info.setOptions(options);
    HashSet<Hash> peers = new HashSet<Hash>();
    structure = (new HashTest()).createDataStructure();
    peers.add((Hash) structure);
    info.setPeers(peers);
    info.setPublished(System.currentTimeMillis());
    // info.setVersion(69);
    info.sign(signingPrivKey);
    return info;
}
Also used : SigningPublicKey(net.i2p.data.SigningPublicKey) PrivateKey(net.i2p.data.PrivateKey) SigningPrivateKey(net.i2p.data.SigningPrivateKey) SigningPublicKey(net.i2p.data.SigningPublicKey) PublicKey(net.i2p.data.PublicKey) DataStructure(net.i2p.data.DataStructure) Properties(java.util.Properties) Hash(net.i2p.data.Hash) HashTest(net.i2p.data.HashTest) SigningPrivateKey(net.i2p.data.SigningPrivateKey) HashSet(java.util.HashSet) Certificate(net.i2p.data.Certificate)

Example 29 with SigningPrivateKey

use of net.i2p.data.SigningPrivateKey in project i2p.i2p by i2p.

the class DSAEngine method altSignRaw.

/**
 *  Generic raw sign any type.
 *
 *  Warning, nonstandard for EdDSA, double-hashes, not recommended.
 *
 *  @param hash SHA1Hash, Hash, Hash384, or Hash512
 *  @throws GeneralSecurityException if algorithm unvailable or on other errors
 *  @since 0.9.9
 */
private Signature altSignRaw(SimpleDataStructure hash, SigningPrivateKey privateKey) throws GeneralSecurityException {
    SigType type = privateKey.getType();
    String algo = getRawAlgo(type);
    PrivateKey privKey = SigUtil.toJavaKey(privateKey);
    return altSignRaw(algo, hash, privKey, type);
}
Also used : SigningPrivateKey(net.i2p.data.SigningPrivateKey) PrivateKey(java.security.PrivateKey)

Example 30 with SigningPrivateKey

use of net.i2p.data.SigningPrivateKey in project i2p.i2p by i2p.

the class DSAEngine method altSign.

/**
 *  Generic sign any type.
 *
 *  @throws GeneralSecurityException if algorithm unvailable or on other errors
 *  @since 0.9.9 added off/len 0.9.12
 */
private Signature altSign(byte[] data, int offset, int len, SigningPrivateKey privateKey) throws GeneralSecurityException {
    SigType type = privateKey.getType();
    if (type == SigType.DSA_SHA1)
        return altSignSHA1(data, offset, len, privateKey);
    PrivateKey privKey = SigUtil.toJavaKey(privateKey);
    byte[] sigbytes;
    if (type.getBaseAlgorithm() == SigAlgo.EdDSA) {
        // take advantage of one-shot mode
        EdDSAEngine jsig = new EdDSAEngine(type.getDigestInstance());
        jsig.initSign(privKey);
        sigbytes = jsig.signOneShot(data, offset, len);
    } else {
        java.security.Signature jsig = java.security.Signature.getInstance(type.getAlgorithmName());
        jsig.initSign(privKey, _context.random());
        jsig.update(data, offset, len);
        sigbytes = jsig.sign();
    }
    return SigUtil.fromJavaSig(sigbytes, type);
}
Also used : EdDSAEngine(net.i2p.crypto.eddsa.EdDSAEngine) SigningPrivateKey(net.i2p.data.SigningPrivateKey) PrivateKey(java.security.PrivateKey)

Aggregations

SigningPrivateKey (net.i2p.data.SigningPrivateKey)31 SigningPublicKey (net.i2p.data.SigningPublicKey)14 DataFormatException (net.i2p.data.DataFormatException)11 IOException (java.io.IOException)10 PrivateKey (net.i2p.data.PrivateKey)10 GeneralSecurityException (java.security.GeneralSecurityException)8 PublicKey (net.i2p.data.PublicKey)7 File (java.io.File)6 PrivateKey (java.security.PrivateKey)6 SigType (net.i2p.crypto.SigType)6 SimpleDataStructure (net.i2p.data.SimpleDataStructure)6 FileInputStream (java.io.FileInputStream)5 Properties (java.util.Properties)5 Destination (net.i2p.data.Destination)5 Signature (net.i2p.data.Signature)5 ByteArrayInputStream (java.io.ByteArrayInputStream)4 BigInteger (java.math.BigInteger)4 RouterInfo (net.i2p.data.router.RouterInfo)4 BufferedInputStream (java.io.BufferedInputStream)3 InputStream (java.io.InputStream)3