Как я могу хранить и получать открытые и закрытые ключи (BLS01 Type G) для подписи, сгенерированные с использованием jPBC (java)? - PullRequest
0 голосов
/ 13 марта 2019

Используя библиотеку 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()
...

Но как мне сделать обратный процесс, чтобы установить открытый и закрытый ключи, начиная с байтов? Это правильный способ хранения / получения ключей в / из файлов?

...