Используя библиотеку jPBC (2.0.0), я попытался использовать эллиптические кривые типа G для подписи:
http://gas.dia.unisa.it/projects/jpbc/docs/ecpg.html#TypeG.
I Использовал код, найденный на сайте "http://gas.dia.unisa.it/projects/jpbc/schemes/ss_bls01.html" для справки.
В результате получается следующий исходный код Java:
//keys generation
BLS01ParametersGenerator setup = new BLS01ParametersGenerator();
setup.init(PairingFactory.getPairingParameters("g149.properties"));
BLS01Parameters bls01Parameters = setup.generateParameters();
BLS01KeyPairGenerator keyGen = new BLS01KeyPairGenerator();
BLS01KeyGenerationParameters KeyGenPar = new BLS01KeyGenerationParameters(null,
bls01Parameters);
keyGen.init(KeyGenPar);
AsymmetricCipherKeyPair keyPair = keyGen.generateKeyPair();
//sign
String message = "Help?";
byte[] bytes = message.getBytes();
BLS01Signer signer = new BLS01Signer(new SHA256Digest());
signer.init(true, keyPair.getPrivate());
signer.update(bytes, 0, bytes.length);
byte[] signature = null;
try
{
signature = signer.generateSignature();
}
catch (CryptoException e)
{
throw new RuntimeException(e);
}
//bytes[0] = (byte)(bytes[0] + 1);
//verify
BLS01Signer verifier = new BLS01Signer(new SHA256Digest());
verifier.init(false, keyPair.getPublic());
verifier.update(bytes, 0, bytes.length);
boolean result = verifier.verifySignature(signature);
//
System.out.println("Signature len = " + signature.length);
System.out.println("Result = " + result);
До этого момента все работало правильно, по крайней мере, я так думаю.
Следующим шагом, которого я хочу достичь, является хранение и получение открытых и закрытых ключей с использованием файлов.
Я обнаружил, что можно получить закрытые и открытые ключи в виде байтовых массивов, используя код:
...
byte[] PublicKeyBytes = ((BLS01PublicKeyParameters)(keyPair.getPublic())).getPk().toBytes()
...
Но как мне сделать обратный процесс, чтобы установить открытый и закрытый ключи, начиная с байтов?
Это правильный способ хранения / получения ключей в / из файлов?