GordianKnot Asymmetric Encryptors
Overview
Encryptors are supported via the GordianEncryptorFactory interface.
Algorithms are represented by GordianEncryptorSpec. A GordianEncryptor is obtained via the encryptorSpec, and then messages are encrypted/decrypted by the encryptor.
Sample
/* Access factory */
final GordianFactory myBaseFactory = GordianGenerator.createFactory();
final GordianAsyncFactory myAsyncFactory = myBase.getAsyncFactory();
final GordianDigestFactory myDigestFactory = myBase.getDigestFactory();
final GordianKeyPairFactory myKeyPairFactory = myAsyncFactory.getKeyPairFactory();
final GordianEncryptorFactory myEncryptorFactory = myAsyncFactory.getEncryptorFactory();
final GordianKeyPairSpecBuilder myKeyPairBuilder = myKeyPairFactory.newKeyPairSpecBuilder()
final GordianEncryptorSpecBuilder myEncryptorBuilder = myEncryptorFactory.newEncryptorSpecBuilder()
final GordianDigestSpecBuilder myDigestBuilder = myDigestFactory.newDigestSpecBuilder()
/* Access keyPairGenerator */
final GordianKeyPairSpec mySpec = myKeyPairBuilder.rsa(GordianRSASpec.MOD2048);
final GordianKeyPairGenerator myGenerator = myKeyPairFactory.getKeyPairGenerator(mySpec);
final GordianKeyPair myPair = myGenerator.generateKeyPair();
/* Access encryptor */
final GordianEncryptorSpec myEncryptSpec = myEncryptorBuilder.rsa(myDigestBuilder.sha2(GordianLength.LEN_256));
final GordianEncryptor myEncryptor = myEncryptorFactory.createEncryptor(myEncryptSpec);
/* Encrypt message */
final byte[] message = ....;
myEncryptor.initForEncrypt(myPair);
final byte[] myEncrypted = myEncryptor.encrypt(myMessage);
/* Decrypt message */
myEncryptor.initForDecrypt(myPair);
final byte[] myResult = myEncryptor.decrypt(myEncrypted);
Composite Encryptors
Composite encryptions may be created by a composite keyPair, as long as each element of the composite keyPair is assigned a valid encryptorSpec.
Sample
/* Access factory */
final GordianFactory myBaseFactory = GordianGenerator.createFactory();
final GordianAsyncFactory myAsyncFactory = myBase.getAsyncFactory();
final GordianKeyPairFactory myKeyPairFactory = myAsyncFactory.getKeyPairFactory();
final GordianEncryptorFactory myEncryptorFactory = myAsyncFactory.getEncryptorFactory();
final GordianKeyPairSpecBuilder myKeyPairBuilder = myKeyPairFactory.newKeyPairSpecBuilder()
final GordianEncryptorSpecBuilder myEncryptorBuilder = myEncryptorFactory.newEncryptorSpecBuilder()
/* Access keyPairGenerator */
final GordianKeyPairSpec mySpec = GordianKeyPairSpecBuilder.composite(myKeyPairBuilder.rsa(GordianRSASpec.MOD2048),
myKeyPairBuilder.elGamal(GordianDHSpec.FFDHE2048));
final GordianKeyPairGenerator myGenerator = myKeyPairFactory.getKeyPairGenerator(mySpec);
final GordianKeyPair myPair = myGenerator.generateKeyPair();
/* Access encryptor */
final GordianEncryptorSpec myEncryptSpec = myEncryptorBuilder.composite(myEncryptorBuilder.rsa(myDigestBuilder.sha2(GordianLength.LEN_256)),
myEncryptorBuilder.elGamal(myDigestBuilder.sha2(GordianLength.LEN_256)));
final GordianEncryptor myEncryptor = myEncryptorFactory.createEncryptor(myEncryptSpec);
/* Encrypt message */
final byte[] message = ....;
myEncryptor.initForEncrypt(myPair);
final byte[] myEncrypted = myEncryptor.encrypt(myMessage);
/* Decrypt message */
myEncryptor.initForDecrypt(myPair);
final byte[] myResult = myEncryptor.decrypt(myEncrypted);
Algorithms
The following encryptor algorithms are supported
| Algorithm | Variants | Notes |
|---|---|---|
| RSA | SHA224, SHA256, SHA384, SHA512 | |
| ElGamal | SHA224, SHA256, SHA384, SHA512 | |
| EC | Available for EC, GOST2012 and SM2 keys, Not available for JCA | |
| SM2 | C1C2C3, C1C3C2 | Available for EC, GOST2012 and SM2 keys |
