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
creating class file
javac ecencryptdecrypt.java, apache.commons , bouncycastle source included.move .class file subdirectory called ecencryption
create jar
jar cf ecc.jar ecencryption/ecencryptdecrypt.classfrom 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
Post a Comment