Package io.conducive.client.crypt

Source Code of io.conducive.client.crypt.Forge

package io.conducive.client.crypt;

import com.google.gwt.core.client.Callback;
import com.google.gwt.core.client.JavaScriptObject;
import com.googlecode.gwt.crypto.bouncycastle.AsymmetricCipherKeyPair;
import com.googlecode.gwt.crypto.bouncycastle.params.RSAKeyParameters;
import com.googlecode.gwt.crypto.bouncycastle.params.RSAPrivateCrtKeyParameters;

import java.math.BigInteger;

/**
*
*/
public class Forge {

    public final static int DEFAULT_WORKERS = 2;

    private Callback<AsymmetricCipherKeyPair, String> callback;
    private int numWorkers;
    private int strength;

    public Forge(int numWorkers, RSA.Strength strength, Callback<AsymmetricCipherKeyPair, String> callback) {
        this.callback = callback;
        this.numWorkers = numWorkers;
        this.strength = strength.getStrength();
    }

    public void generateKeys() {
        generateKey(numWorkers, strength, callbackFunction(this));
    }

    public static native void generateKey(int numWorkers, int strength, JavaScriptObject callback) /*-{
        var rsa = $wnd.forge.pki.rsa;

        // generate an RSA key pair asynchronously (uses web workers if available)
        rsa.generateKeyPair({bits: strength, workers: numWorkers, workerScript:'/js/forge/prime.worker.js'},
            function(err, keypair) {
                pub = keypair.publicKey;
                priv = keypair.privateKey;
                callback(pub.n.toString(), pub.e.toString(),
                    priv.d.toString(), priv.p.toString(), priv.q.toString(), priv.dP.toString(), priv.dQ.toString(), priv.qInv.toString());
            });
    }-*/;

    public static native JavaScriptObject callbackFunction(Forge forge) /*-{
        return forge == null ? null : $entry(function(m, pub, priv, p, q, dP, dQ, qInv) {
            forge.@io.conducive.client.crypt.Forge::callback(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)
                (m, pub, priv, p, q, dP, dQ, qInv)
        });
    }-*/;

    public void callback(String modulus, String publicExponent, String privateExponent,
                         String p, String q, String dP, String dQ, String qInv)
    {
        RSAPrivateCrtKeyParameters priv = RSA.deserialize(modulus, publicExponent, privateExponent,
                p, q, dP, dQ, qInv);
        RSAKeyParameters pub = new RSAKeyParameters(false, new BigInteger(modulus), new BigInteger(publicExponent));

        // TODO handle error from forge

        AsymmetricCipherKeyPair keyPair = new AsymmetricCipherKeyPair(pub, priv);
        callback.onSuccess(keyPair);
    }
}
TOP

Related Classes of io.conducive.client.crypt.Forge

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.