java - Creating a JAR file from code and calling a function -


i'm learning java , running trouble trying convert following code victor angelier (link victor's post) jar file , make calls functions groovy.

problem is, being new java, i'm not sure if errors mean i'm building .jar incorrectly of making calls incorrectly. guess it's both.

thanks patience , help

when making calls functions in jar groovy script, example, receive message "groovy.lang.missingmethodexception: no signature of method: ecencryption.ecencryptdecrypt.encrypt() applicable argument types: (java.lang.string) values: 1"

i'm taking following steps create jar

  1. creating class file javac ecencryptdecrypt.java, apache.commons , bouncycastle source included.

  2. move .class file subdirectory called ecencryption

  3. create jar jar cf ecc.jar ecencryption/ecencryptdecrypt.class

  4. from groovy making call see if can find function

    import ecencryption.*; result = new ecencryptdecrypt().encrypt('1') 

the code i'm trying convert .jar :

/*  * coder: victor angelier  * e-mail: vangelier@hotmail.com  */  package ecencryption;  import java.math.biginteger; import java.security.*; import java.security.interfaces.ecprivatekey; import java.security.interfaces.ecpublickey; import java.security.spec.ecfieldfp; import java.security.spec.ecparameterspec; import java.security.spec.ellipticcurve; import java.security.spec.keyspec; import java.security.spec.pkcs8encodedkeyspec; import java.security.spec.x509encodedkeyspec; import javax.crypto.cipher; import javax.crypto.keyagreement; import javax.crypto.secretkeyfactory; import javax.crypto.spec.deskeyspec; import org.apache.commons.codec.binary.base64; import org.bouncycastle.jce.ecpointutil; import org.bouncycastle.util.encoders.hex;  /**  *  * @author linus  */ public class ecencryptdecrypt {  keypairgenerator kpg;  ellipticcurve curve;  ecparameterspec ecspec;  keypair akeypair;  keyagreement akeyagree;  keypair bkeypair;  keyagreement bkeyagree;  keyfactory keyfac;   public ecencryptdecrypt(){   try{    this.kpg = keypairgenerator.getinstance("ecdh", "bc");         this.curve = new ellipticcurve(      new ecfieldfp(       new biginteger(        "883423532389192164791648750360308885314476597252960362792450860609699839")), // q      new biginteger(       "7fffffffffffffffffffffff7fffffffffff8000000000007ffffffffffc",       16), //      new biginteger(       "6b016c3bdcf18941d0d654921475ca71a9db2fb27d1d37796185c2942c0a",       16) //b     );     this.ecspec = new ecparameterspec(      curve,      ecpointutil.decodepoint(       curve,       hex.decode("020ffa963cdca8816ccc33b8642bedf905c3d358573d3f27fbbd3b3cb9aaaf")), // g      new biginteger(       "883423532389192164791648750360308884807550341691627752275345424702807307"), // n       1); // h     this.kpg.initialize(ecspec, new securerandom());    generatekeypair();    }catch(exception err){    log(err.tostring());   }  }   public void generatekeypair(){   try   {    //    // side    //    akeypair = this.kpg.generatekeypair();    akeyagree = keyagreement.getinstance("ecdh", "bc");    akeyagree.init(akeypair.getprivate());     //    // b side    //       bkeypair = this.kpg.generatekeypair();    bkeyagree = keyagreement.getinstance("ecdh", "bc");    bkeyagree.init(bkeypair.getprivate());     akeyagree.dophase(bkeypair.getpublic(), true);    bkeyagree.dophase(akeypair.getpublic(), true);   }   catch(exception err){    log(err.tostring());   }  }   public void log(string data){   system.out.println(data);  }   public string encrypt(byte[] data){   try   {     log(base64.encodebase64string(bkeyagree.generatesecret()));    log(base64.encodebase64string(akeyagree.generatesecret()));     biginteger k1 = new biginteger(akeyagree.generatesecret());    biginteger k2 = new biginteger(bkeyagree.generatesecret());    if (!k1.equals(k2)) {     log(" 2-way test failed");    }     byte[] abys = akeyagree.generatesecret();     keyspec akeyspec = new deskeyspec(abys);    secretkeyfactory afactory = secretkeyfactory.getinstance("des");    key asecretkey = afactory.generatesecret(akeyspec);     cipher acipher = cipher.getinstance(asecretkey.getalgorithm());       acipher.init(cipher.encrypt_mode, asecretkey);      byte[] enctext = acipher.dofinal(data);     log(base64.encodebase64string(enctext));    return base64.encodebase64string(enctext);   }   catch(exception err){    log(err.tostring());    return "";   }  }   public string decrypt(byte[] data){   try   {    byte[] bbys = bkeyagree.generatesecret();     keyspec bkeyspec = new deskeyspec(bbys);    secretkeyfactory bfactory = secretkeyfactory.getinstance("des");    key bsecretkey = bfactory.generatesecret(bkeyspec);     cipher bcipher = cipher.getinstance(bsecretkey.getalgorithm());       bcipher.init(cipher.decrypt_mode, bsecretkey);        byte[] dectext =  bcipher.dofinal(base64.decodebase64(data));     string text = new string(dectext);    log(text);    return text;      }   catch(exception err){    log(err.tostring());    return "";   }  }   public void pubkeyencodingtest(){   try   {    //    // public key encoding test    //    byte[] pubenc = akeypair.getpublic().getencoded();    keyfac = keyfactory.getinstance("ecdh", "bc");    x509encodedkeyspec pubx509 = new x509encodedkeyspec(pubenc);    ecpublickey pubkey = (ecpublickey) keyfac.generatepublic(pubx509);     if (!pubkey.getw().equals(((ecpublickey) akeypair.getpublic()).getw())) {      system.out.println(" expected " + pubkey.getw().getaffinex()       + " got "       + ((ecpublickey) akeypair.getpublic()).getw().getaffinex());      system.out.println(" expected " + pubkey.getw().getaffiney()       + " got "       + ((ecpublickey) akeypair.getpublic()).getw().getaffiney());      log("ecdh" + " public key encoding (w test) failed");    }     if (!pubkey.getparams().getgenerator()     .equals(      ((ecpublickey) akeypair.getpublic()).getparams()       .getgenerator())) {      log("ecdh" + " public key encoding (g test) failed");    }   }   catch(exception err){    log(err.tostring());   }  }   public void privatekeyencodingtest(){   try   {    //    // private key encoding test    //    byte[] privenc = akeypair.getprivate().getencoded();    pkcs8encodedkeyspec privpkcs8 = new pkcs8encodedkeyspec(privenc);    ecprivatekey privkey = (ecprivatekey) keyfac.generateprivate(privpkcs8);     if (!privkey.gets().equals(     ((ecprivatekey) akeypair.getprivate()).gets())) {      log("ecdh" + " private key encoding (s test) failed");    }     if (!privkey.getparams().getgenerator().equals(     ((ecprivatekey) akeypair.getprivate()).getparams()      .getgenerator())) {      log("ecdh" + " private key encoding (g test) failed");    }   }   catch(exception err){    }  } } 

the signature of encrypt method is

public string encrypt(byte[] data) 

you trying call using string '1', hence error. according signature ought using byte array. invocation become:

result = new ecencryptdecrypt().encrypt([1] byte[]) 

note: string '1' not translate byte 1. in ascii 1 translates 49, didn't want confuse much.


Comments

Popular posts from this blog

node.js - Bad Request - node js ajax post -

Why does Ruby on Rails generate add a blank line to the end of a file? -

keyboard - Smiles and long press feature in Android -