





sudo apt update sudo apt install openjdk-11-jdk java -version 
在JPBC库官网点击下载下载以下压缩包,本地解压以jar包

直接使用7-zip进行提取
在我们连接的窗口这里,打开xftp的图标
打开xftp,左边为本地,右边为云服务器,在右边右键新建文件夹 repository
所有jar包选择拖到右边,这里右边多了一个opencsv.jar的jar包,用来将数据写入csv表格的

至此,运行jpbc库的工作准备完毕
BLS01做演示import it.unisa.dia.gas.crypto.jpbc.signature.bls01.engines.BLS01Signer; import it.unisa.dia.gas.crypto.jpbc.signature.bls01.generators.BLS01KeyPairGenerator; import it.unisa.dia.gas.crypto.jpbc.signature.bls01.generators.BLS01ParametersGenerator; import it.unisa.dia.gas.crypto.jpbc.signature.bls01.params.BLS01KeyGenerationParameters; import it.unisa.dia.gas.crypto.jpbc.signature.bls01.params.BLS01Parameters; import it.unisa.dia.gas.plaf.jpbc.pairing.PairingFactory; import org.bouncycastle.crypto.AsymmetricCipherKeyPair; import org.bouncycastle.crypto.CipherParameters; import org.bouncycastle.crypto.CryptoException; import org.bouncycastle.crypto.digests.SHA256Digest; public class BLS01 { public BLS01() { } public BLS01Parameters setup() { BLS01ParametersGenerator setup = new BLS01ParametersGenerator(); setup.init(PairingFactory.getPairingParameters("a.properties")); return setup.generateParameters(); } public AsymmetricCipherKeyPair keyGen(BLS01Parameters parameters) { BLS01KeyPairGenerator keyGen = new BLS01KeyPairGenerator(); keyGen.init(new BLS01KeyGenerationParameters(null, parameters)); return keyGen.generateKeyPair(); } public byte[] sign(String message, CipherParameters privateKey) { byte[] bytes = message.getBytes(); BLS01Signer signer = new BLS01Signer(new SHA256Digest()); signer.init(true, privateKey); signer.update(bytes, 0, bytes.length); byte[] signature = null; try { signature = signer.generateSignature(); } catch (CryptoException e) { throw new RuntimeException(e); } return signature; } public boolean verify(byte[] signature, String message, CipherParameters publicKey) { byte[] bytes = message.getBytes(); BLS01Signer signer = new BLS01Signer(new SHA256Digest()); signer.init(false, publicKey); signer.update(bytes, 0, bytes.length); return signer.verifySignature(signature); } public static void main(String[] args) { BLS01 bls01 = new BLS01(); // Setup AsymmetricCipherKeyPair keyPair = bls01.keyGen(bls01.setup()); // Test same message String message = "Hello World!"; System.out.println((bls01.verify(bls01.sign(message, keyPair.getPrivate()), message, keyPair.getPublic()))); // Test different messages System.out.println((bls01.verify(bls01.sign(message, keyPair.getPrivate()), "Hello Italy!", keyPair.getPublic()))); } } 该方案用的是A曲线,需要新建a.properties这样一个文件,用于对称的双线性映射
type a q 8780710799663312522437781984754049815806883199414208211028653399266475630880222957078625179422662221423155858769582317459277713367317481324925129998224791 h 12016012264891146079388821366740534204802954401251311822919615131047207289359704531102844802183906537786776 r 730750818665451621361119245571504901405976559617 exp2 159 exp1 107 sign1 1 sign0 1 如果是非对称的双线性映射则使用F曲线,新建一个f.properties的文件
type f q 205523667896953300194896352429254920972540065223 r 205523667896953300194895899082072403858390252929 b 40218105156867728698573668525883168222119515413 beta 115334401956802802075595682801335644058796914268 alpha0 191079354656274778837764015557338301375963168470 alpha1 71445317903696340296199556072836940741717506375 

javac -cp ~/repository/*:. BLS01.java 用ls查看,有一个BLS01.class文件,编译成功
执行运行命令,得到结果
java -cp ~/repository/*:. BLS01 