chore(text): source code format
This commit is contained in:
@@ -68,8 +68,7 @@ class AesTest {
|
||||
private final ZeroEchoSession zeroEchoSession = new ZeroEchoSession();
|
||||
|
||||
SecretKey generateAesKey() throws GeneralSecurityException {
|
||||
SecretKey key = zeroEchoSession.keyBuilders().symmetric()
|
||||
.generate("AES", AesKeyGenSpec.aes256());
|
||||
SecretKey key = zeroEchoSession.keyBuilders().symmetric().generate("AES", AesKeyGenSpec.aes256());
|
||||
LOG.log(Level.INFO, "AES256 key generated");
|
||||
|
||||
return key;
|
||||
@@ -203,7 +202,8 @@ class AesTest {
|
||||
// Sample message to encrypt
|
||||
byte[] msg = randomBytes(100);
|
||||
|
||||
AesDataContentBuilder aesBuilder = AesDataContentBuilder.builder(new zeroecho.sdk.ZeroEchoSession()).generateKey(256).modeGcm(128).withHeader();
|
||||
AesDataContentBuilder aesBuilder = AesDataContentBuilder.builder(new zeroecho.sdk.ZeroEchoSession())
|
||||
.generateKey(256).modeGcm(128).withHeader();
|
||||
|
||||
// The builder stores generated IV and AAD inside the stream header
|
||||
DataContent dccb = DataContentChainBuilder.encrypt().add(PlainBytesBuilder.builder().bytes(msg)).add(aesBuilder)
|
||||
@@ -220,7 +220,8 @@ class AesTest {
|
||||
|
||||
dccb = DataContentChainBuilder.decrypt().add(PlainBytesBuilder.builder().bytes(encrypted))
|
||||
// Use the same AES key for decryption; IV and AAD are restored from the header
|
||||
.add(AesDataContentBuilder.builder(new zeroecho.sdk.ZeroEchoSession()).importKeyRaw(key.getEncoded()).modeGcm(128).withHeader())
|
||||
.add(AesDataContentBuilder.builder(new zeroecho.sdk.ZeroEchoSession()).importKeyRaw(key.getEncoded())
|
||||
.modeGcm(128).withHeader())
|
||||
// Build the pipeline
|
||||
.build();
|
||||
byte[] decrypted;
|
||||
|
||||
@@ -140,8 +140,7 @@ class AgreementVariantsTest {
|
||||
void kemAdapter_mlKem_roundTrip() throws Exception {
|
||||
LOG.info("kemAdapter_mlKem_roundTrip - KEM_ADAPTER (ML-KEM)");
|
||||
|
||||
KeyPair recipient = session.keyBuilders().asymmetric()
|
||||
.generateKeyPair("ML-KEM", KyberKeyGenSpec.kyber1024());
|
||||
KeyPair recipient = session.keyBuilders().asymmetric().generateKeyPair("ML-KEM", KyberKeyGenSpec.kyber1024());
|
||||
|
||||
MessageAgreementContext initiator = null;
|
||||
MessageAgreementContext responder = null;
|
||||
@@ -150,8 +149,7 @@ class AgreementVariantsTest {
|
||||
initiator = session.createContext("ML-KEM", KeyUsage.AGREEMENT, recipient.getPublic(), VoidSpec.INSTANCE);
|
||||
|
||||
// Responder: constructed with recipient's private key (decapsulation side).
|
||||
responder = session.createContext("ML-KEM", KeyUsage.AGREEMENT, recipient.getPrivate(),
|
||||
VoidSpec.INSTANCE);
|
||||
responder = session.createContext("ML-KEM", KeyUsage.AGREEMENT, recipient.getPrivate(), VoidSpec.INSTANCE);
|
||||
|
||||
// One-shot outbound message: KEM ciphertext / encapsulation payload.
|
||||
byte[] enc = initiator.getPeerMessage();
|
||||
|
||||
@@ -75,24 +75,21 @@ class CombinedDeliveryTest {
|
||||
}
|
||||
|
||||
KeyPair generateKyberKeys() throws GeneralSecurityException {
|
||||
KeyPair kp = session.keyBuilders().asymmetric()
|
||||
.generateKeyPair("ML-KEM", KyberKeyGenSpec.kyber1024());
|
||||
KeyPair kp = session.keyBuilders().asymmetric().generateKeyPair("ML-KEM", KyberKeyGenSpec.kyber1024());
|
||||
LOG.log(Level.INFO, "ML-KEM key pair generated");
|
||||
|
||||
return kp;
|
||||
}
|
||||
|
||||
KeyPair generateRsaKeys() throws GeneralSecurityException {
|
||||
KeyPair kp = session.keyBuilders().asymmetric()
|
||||
.generateKeyPair("RSA", RsaKeyGenSpec.rsa4096());
|
||||
KeyPair kp = session.keyBuilders().asymmetric().generateKeyPair("RSA", RsaKeyGenSpec.rsa4096());
|
||||
LOG.log(Level.INFO, "RSA key pair generated");
|
||||
|
||||
return kp;
|
||||
}
|
||||
|
||||
KeyPair generateElGamalKeys() throws GeneralSecurityException {
|
||||
KeyPair kp = session.keyBuilders().asymmetric()
|
||||
.generateKeyPair("ElGamal", ElgamalParamSpec.ffdhe2048());
|
||||
KeyPair kp = session.keyBuilders().asymmetric().generateKeyPair("ElGamal", ElgamalParamSpec.ffdhe2048());
|
||||
LOG.log(Level.INFO, "ElGamal key pair generated");
|
||||
|
||||
return kp;
|
||||
|
||||
@@ -116,8 +116,7 @@ class HybridDerivedAesDemoTest {
|
||||
|
||||
// ...Generate PQC key pair for ML-KEM-768 (recipient; used by Bob side to
|
||||
// decapsulate).
|
||||
KeyPair bobPqc = session.keyBuilders().asymmetric()
|
||||
.generateKeyPair("ML-KEM", KyberKeyGenSpec.kyber768());
|
||||
KeyPair bobPqc = session.keyBuilders().asymmetric().generateKeyPair("ML-KEM", KyberKeyGenSpec.kyber768());
|
||||
|
||||
// ...Build Alice initiator: classic agreement (out-of-band peer pub) + PQC
|
||||
// encapsulation.
|
||||
@@ -279,8 +278,7 @@ class HybridDerivedAesDemoTest {
|
||||
KeyPair bobClassic = session.keyBuilders().asymmetric().generateKeyPair("Xdh", XdhSpec.X25519);
|
||||
|
||||
// ...Generate PQC key pair for ML-KEM-768.
|
||||
KeyPair bobPqc = session.keyBuilders().asymmetric()
|
||||
.generateKeyPair("ML-KEM", KyberKeyGenSpec.kyber768());
|
||||
KeyPair bobPqc = session.keyBuilders().asymmetric().generateKeyPair("ML-KEM", KyberKeyGenSpec.kyber768());
|
||||
|
||||
// ...Build Alice initiator in a step-by-step manner.
|
||||
HybridKexBuilder aliceBuilder = HybridKexBuilder.builder(session);
|
||||
@@ -461,8 +459,7 @@ class HybridDerivedAesDemoTest {
|
||||
KeyPair selfClassic = session.keyBuilders().asymmetric().generateKeyPair("Xdh", XdhSpec.X25519);
|
||||
|
||||
// ...Generate PQC identity keys (ML-KEM-768).
|
||||
KeyPair selfPqc = session.keyBuilders().asymmetric()
|
||||
.generateKeyPair("ML-KEM", KyberKeyGenSpec.kyber768());
|
||||
KeyPair selfPqc = session.keyBuilders().asymmetric().generateKeyPair("ML-KEM", KyberKeyGenSpec.kyber768());
|
||||
|
||||
// ...Build local initiator (encapsulation) against our own public keys.
|
||||
HybridKexContext encKex = HybridKexBuilder.builder(session)
|
||||
|
||||
@@ -128,8 +128,7 @@ class HybridKexDemoTest {
|
||||
KeyPair bobClassic = session.keyBuilders().asymmetric().generateKeyPair("Xdh", XdhSpec.X25519);
|
||||
|
||||
// PQC leg: Bob is the KEM recipient (has ML-KEM keypair).
|
||||
KeyPair bobPqc = session.keyBuilders().asymmetric()
|
||||
.generateKeyPair("ML-KEM", KyberKeyGenSpec.kyber768());
|
||||
KeyPair bobPqc = session.keyBuilders().asymmetric().generateKeyPair("ML-KEM", KyberKeyGenSpec.kyber768());
|
||||
|
||||
// Hybrid profile: default HKDF label, 32-byte output suitable for symmetric
|
||||
// keys.
|
||||
@@ -142,14 +141,14 @@ class HybridKexDemoTest {
|
||||
// Alice (initiator): classic uses Alice private + Bob classic public
|
||||
// (out-of-band).
|
||||
// ...PQC uses Bob PQC public and will produce a KEM ciphertext.
|
||||
alice = HybridKexContexts.initiator(session, profile, "Xdh", aliceClassic.getPrivate(), bobClassic.getPublic(),
|
||||
XdhSpec.X25519, "ML-KEM", bobPqc.getPublic(), null);
|
||||
alice = HybridKexContexts.initiator(session, profile, "Xdh", aliceClassic.getPrivate(),
|
||||
bobClassic.getPublic(), XdhSpec.X25519, "ML-KEM", bobPqc.getPublic(), null);
|
||||
|
||||
// Bob (responder): classic uses Bob private + Alice classic public
|
||||
// (out-of-band).
|
||||
// ...PQC uses Bob PQC private and will consume Alice's ciphertext.
|
||||
bob = HybridKexContexts.responder(session, profile, "Xdh", bobClassic.getPrivate(), aliceClassic.getPublic(),
|
||||
XdhSpec.X25519, "ML-KEM", bobPqc.getPrivate(), null);
|
||||
bob = HybridKexContexts.responder(session, profile, "Xdh", bobClassic.getPrivate(),
|
||||
aliceClassic.getPublic(), XdhSpec.X25519, "ML-KEM", bobPqc.getPrivate(), null);
|
||||
|
||||
// Alice -> Bob: hybrid message carries PQC ciphertext; classic part is empty.
|
||||
byte[] msgA = alice.getPeerMessage();
|
||||
@@ -183,8 +182,7 @@ class HybridKexDemoTest {
|
||||
KeyPair bobClassic = session.keyBuilders().asymmetric().generateKeyPair("Xdh", XdhSpec.X25519);
|
||||
|
||||
// PQC leg: Bob is the KEM recipient (has ML-KEM keypair).
|
||||
KeyPair bobPqc = session.keyBuilders().asymmetric()
|
||||
.generateKeyPair("ML-KEM", KyberKeyGenSpec.kyber768());
|
||||
KeyPair bobPqc = session.keyBuilders().asymmetric().generateKeyPair("ML-KEM", KyberKeyGenSpec.kyber768());
|
||||
|
||||
HybridKexProfile profile = HybridKexProfile.defaultProfile(32);
|
||||
|
||||
@@ -195,15 +193,15 @@ class HybridKexDemoTest {
|
||||
// Alice classic leg is message-based (PAIR_MESSAGE): it will emit her public
|
||||
// key as SPKI bytes.
|
||||
// ...PQC leg (KEM initiator) will emit ciphertext.
|
||||
alice = HybridKexContexts.initiatorPairMessage(session, profile, "Xdh", new KeyPairKey(aliceClassic), XdhSpec.X25519,
|
||||
"ML-KEM", bobPqc.getPublic(), null);
|
||||
alice = HybridKexContexts.initiatorPairMessage(session, profile, "Xdh", new KeyPairKey(aliceClassic),
|
||||
XdhSpec.X25519, "ML-KEM", bobPqc.getPublic(), null);
|
||||
|
||||
// Bob classic leg is message-based (PAIR_MESSAGE): it will emit his public key
|
||||
// as SPKI bytes.
|
||||
// ...PQC leg (KEM responder) consumes ciphertext and typically does not emit a
|
||||
// PQC message.
|
||||
bob = HybridKexContexts.responderPairMessage(session, profile, "Xdh", new KeyPairKey(bobClassic), XdhSpec.X25519,
|
||||
"ML-KEM", bobPqc.getPrivate(), null);
|
||||
bob = HybridKexContexts.responderPairMessage(session, profile, "Xdh", new KeyPairKey(bobClassic),
|
||||
XdhSpec.X25519, "ML-KEM", bobPqc.getPrivate(), null);
|
||||
|
||||
// Alice -> Bob: hybrid message carries classic SPKI + PQC ciphertext.
|
||||
byte[] msgA = alice.getPeerMessage();
|
||||
@@ -355,8 +353,7 @@ class HybridKexDemoTest {
|
||||
KeyPair bobClassic = session.keyBuilders().asymmetric().generateKeyPair("Xdh", XdhSpec.X25519);
|
||||
|
||||
// ...Generate PQC (recipient) keys (ML-KEM-768).
|
||||
KeyPair bobPqc = session.keyBuilders().asymmetric()
|
||||
.generateKeyPair("ML-KEM", KyberKeyGenSpec.kyber768());
|
||||
KeyPair bobPqc = session.keyBuilders().asymmetric().generateKeyPair("ML-KEM", KyberKeyGenSpec.kyber768());
|
||||
|
||||
// ...Create a profile for HKDF (output length 32 bytes).
|
||||
HybridKexProfile profile = HybridKexProfile.defaultProfile(32);
|
||||
|
||||
@@ -102,7 +102,8 @@ class HybridSigningAesTest {
|
||||
byte[] msg = randomBytes(100);
|
||||
|
||||
// AES-GCM with header, runtime params are stored in header
|
||||
AesDataContentBuilder aesBuilder = AesDataContentBuilder.builder(new zeroecho.sdk.ZeroEchoSession()).generateKey(256).modeGcm(128).withHeader();
|
||||
AesDataContentBuilder aesBuilder = AesDataContentBuilder.builder(new zeroecho.sdk.ZeroEchoSession())
|
||||
.generateKey(256).modeGcm(128).withHeader();
|
||||
|
||||
// Hybrid signature: Ed25519 + SPHINCS+ (AND)
|
||||
HybridSignatureProfile profile = new HybridSignatureProfile("Ed25519", "SPHINCS+", null, null,
|
||||
@@ -111,10 +112,10 @@ class HybridSigningAesTest {
|
||||
KeyPair ed = generateKeyPair("Ed25519");
|
||||
KeyPair spx = generateKeyPair("SPHINCS+");
|
||||
|
||||
SignatureContext tagEnc = HybridSignatureContexts.sign(new zeroecho.sdk.ZeroEchoSession(), profile, ed.getPrivate(), spx.getPrivate(),
|
||||
2 * 1024 * 1024);
|
||||
SignatureContext tagDec = HybridSignatureContexts.verify(new zeroecho.sdk.ZeroEchoSession(), profile, ed.getPublic(), spx.getPublic(),
|
||||
2 * 1024 * 1024);
|
||||
SignatureContext tagEnc = HybridSignatureContexts.sign(new zeroecho.sdk.ZeroEchoSession(), profile,
|
||||
ed.getPrivate(), spx.getPrivate(), 2 * 1024 * 1024);
|
||||
SignatureContext tagDec = HybridSignatureContexts.verify(new zeroecho.sdk.ZeroEchoSession(), profile,
|
||||
ed.getPublic(), spx.getPublic(), 2 * 1024 * 1024);
|
||||
|
||||
// For verification, make mismatch behavior explicit (builder also supports
|
||||
// throwOnMismatch()).
|
||||
@@ -144,7 +145,8 @@ class HybridSigningAesTest {
|
||||
// encrypted input
|
||||
.add(PlainBytesBuilder.builder().bytes(ciphertext))
|
||||
// AES-GCM decryption
|
||||
.add(AesDataContentBuilder.builder(new zeroecho.sdk.ZeroEchoSession()).importKeyRaw(aesKey.getEncoded()).modeGcm(128).withHeader())
|
||||
.add(AesDataContentBuilder.builder(new zeroecho.sdk.ZeroEchoSession()).importKeyRaw(aesKey.getEncoded())
|
||||
.modeGcm(128).withHeader())
|
||||
// hybrid signature verification
|
||||
.add(new TagTrailerDataContentBuilder<Signature>(tagDec).bufferSize(8192).throwOnMismatch()).build();
|
||||
|
||||
@@ -164,7 +166,8 @@ class HybridSigningAesTest {
|
||||
byte[] msg = randomBytes(100);
|
||||
|
||||
// AES-GCM with header, runtime params are stored in header
|
||||
AesDataContentBuilder aesBuilder = AesDataContentBuilder.builder(new zeroecho.sdk.ZeroEchoSession()).generateKey(256).modeGcm(128).withHeader();
|
||||
AesDataContentBuilder aesBuilder = AesDataContentBuilder.builder(new zeroecho.sdk.ZeroEchoSession())
|
||||
.generateKey(256).modeGcm(128).withHeader();
|
||||
|
||||
// Hybrid signature: Ed25519 + SPHINCS+ (AND)
|
||||
HybridSignatureProfile profile = new HybridSignatureProfile("Ed25519", "SPHINCS+", null, null,
|
||||
@@ -173,10 +176,10 @@ class HybridSigningAesTest {
|
||||
KeyPair ed = generateKeyPair("Ed25519");
|
||||
KeyPair spx = generateKeyPair("SPHINCS+");
|
||||
|
||||
SignatureContext tagEnc = HybridSignatureContexts.sign(new zeroecho.sdk.ZeroEchoSession(), profile, ed.getPrivate(), spx.getPrivate(),
|
||||
2 * 1024 * 1024);
|
||||
SignatureContext tagDec = HybridSignatureContexts.verify(new zeroecho.sdk.ZeroEchoSession(), profile, ed.getPublic(), spx.getPublic(),
|
||||
2 * 1024 * 1024);
|
||||
SignatureContext tagEnc = HybridSignatureContexts.sign(new zeroecho.sdk.ZeroEchoSession(), profile,
|
||||
ed.getPrivate(), spx.getPrivate(), 2 * 1024 * 1024);
|
||||
SignatureContext tagDec = HybridSignatureContexts.verify(new zeroecho.sdk.ZeroEchoSession(), profile,
|
||||
ed.getPublic(), spx.getPublic(), 2 * 1024 * 1024);
|
||||
|
||||
tagDec.setVerificationApproach(tagDec.getVerificationCore().getThrowOnMismatch());
|
||||
|
||||
@@ -208,7 +211,8 @@ class HybridSigningAesTest {
|
||||
// hybrid signature verification
|
||||
.add(new TagTrailerDataContentBuilder<Signature>(tagDec).bufferSize(8192).throwOnMismatch())
|
||||
// AES-GCM decryption
|
||||
.add(AesDataContentBuilder.builder(new zeroecho.sdk.ZeroEchoSession()).importKeyRaw(aesKey.getEncoded()).modeGcm(128).withHeader())
|
||||
.add(AesDataContentBuilder.builder(new zeroecho.sdk.ZeroEchoSession()).importKeyRaw(aesKey.getEncoded())
|
||||
.modeGcm(128).withHeader())
|
||||
.build();
|
||||
|
||||
byte[] decrypted;
|
||||
@@ -224,10 +228,10 @@ class HybridSigningAesTest {
|
||||
private static KeyPair generateKeyPair(String algId) throws GeneralSecurityException {
|
||||
ZeroEchoSession session = new ZeroEchoSession();
|
||||
return switch (algId) {
|
||||
case "Ed25519" -> session.keyBuilders().asymmetric().generateKeyPair(algId,
|
||||
Ed25519KeyGenSpec.defaultSpec());
|
||||
case "SPHINCS+" -> session.keyBuilders().asymmetric().generateKeyPair(algId,
|
||||
SphincsPlusKeyGenSpec.defaultSpec());
|
||||
case "Ed25519" ->
|
||||
session.keyBuilders().asymmetric().generateKeyPair(algId, Ed25519KeyGenSpec.defaultSpec());
|
||||
case "SPHINCS+" ->
|
||||
session.keyBuilders().asymmetric().generateKeyPair(algId, SphincsPlusKeyGenSpec.defaultSpec());
|
||||
default -> throw new IllegalArgumentException("Unsupported sample signature algorithm: " + algId);
|
||||
};
|
||||
}
|
||||
|
||||
@@ -70,8 +70,7 @@ class PostQuantumTest {
|
||||
}
|
||||
|
||||
KeyPair generateKyberKeys() throws GeneralSecurityException {
|
||||
KeyPair kp = session.keyBuilders().asymmetric()
|
||||
.generateKeyPair("ML-KEM", KyberKeyGenSpec.kyber1024());
|
||||
KeyPair kp = session.keyBuilders().asymmetric().generateKeyPair("ML-KEM", KyberKeyGenSpec.kyber1024());
|
||||
|
||||
LOG.log(Level.INFO, "ML-KEM key public={0} private={1}",
|
||||
new Object[] { Strings.toShortHexString(kp.getPublic().getEncoded()),
|
||||
|
||||
@@ -66,8 +66,7 @@ class SigningAesTest {
|
||||
private static final Logger LOG = Logger.getLogger(SigningAesTest.class.getName());
|
||||
|
||||
KeyPair generateRsaKeys() throws GeneralSecurityException {
|
||||
KeyPair kp = session.keyBuilders().asymmetric()
|
||||
.generateKeyPair("RSA", RsaKeyGenSpec.rsa4096());
|
||||
KeyPair kp = session.keyBuilders().asymmetric().generateKeyPair("RSA", RsaKeyGenSpec.rsa4096());
|
||||
|
||||
LOG.log(Level.INFO, "RSA key public={0} private={1}",
|
||||
new Object[] { Strings.toShortHexString(kp.getPublic().getEncoded()),
|
||||
@@ -85,7 +84,8 @@ class SigningAesTest {
|
||||
// Configure AES in GCM mode with a 128-bit authentication tag. A fresh 256-bit
|
||||
// AES key will be generated automatically, and runtime parameters (IV, AAD)
|
||||
// will be written into the header.
|
||||
AesDataContentBuilder aesBuilder = AesDataContentBuilder.builder(new zeroecho.sdk.ZeroEchoSession()).generateKey(256).modeGcm(128).withHeader();
|
||||
AesDataContentBuilder aesBuilder = AesDataContentBuilder.builder(new zeroecho.sdk.ZeroEchoSession())
|
||||
.generateKey(256).modeGcm(128).withHeader();
|
||||
|
||||
// Generate RSA-4096 key pair (retrieved via algorithm registry for convenience)
|
||||
KeyPair rsa = generateRsaKeys();
|
||||
@@ -93,9 +93,11 @@ class SigningAesTest {
|
||||
// Configure PSS signature parameters: SHA-256 hash, salt length = 32 bytes
|
||||
RsaSigSpec pss = RsaSigSpec.pss(RsaSigSpec.Hash.SHA256, 32);
|
||||
// Create signing engine (RSA-PSS with private key)
|
||||
TagEngine<Signature> tagEnc = TagEngineBuilder.rsaSign(new zeroecho.sdk.ZeroEchoSession(), rsa.getPrivate(), pss).get();
|
||||
TagEngine<Signature> tagEnc = TagEngineBuilder
|
||||
.rsaSign(new zeroecho.sdk.ZeroEchoSession(), rsa.getPrivate(), pss).get();
|
||||
// Create verification engine (RSA-PSS with public key)
|
||||
TagEngine<Signature> tagDec = TagEngineBuilder.rsaVerify(new zeroecho.sdk.ZeroEchoSession(), rsa.getPublic(), pss).get();
|
||||
TagEngine<Signature> tagDec = TagEngineBuilder
|
||||
.rsaVerify(new zeroecho.sdk.ZeroEchoSession(), rsa.getPublic(), pss).get();
|
||||
|
||||
// Build the encryption pipeline
|
||||
DataContent dccb = DataContentChainBuilder.encrypt()
|
||||
@@ -123,7 +125,8 @@ class SigningAesTest {
|
||||
.add(PlainBytesBuilder.builder().bytes(encrypted))
|
||||
// AES-GCM decryption using the same key; IV and AAD are restored automatically
|
||||
// from the header
|
||||
.add(AesDataContentBuilder.builder(new zeroecho.sdk.ZeroEchoSession()).importKeyRaw(key.getEncoded()).modeGcm(128).withHeader())
|
||||
.add(AesDataContentBuilder.builder(new zeroecho.sdk.ZeroEchoSession()).importKeyRaw(key.getEncoded())
|
||||
.modeGcm(128).withHeader())
|
||||
// Verify the RSA-PSS signature trailer at the end of the stream (configured to
|
||||
// throw on mismatch)
|
||||
.add(new TagTrailerDataContentBuilder<>(tagDec).bufferSize(8192).throwOnMismatch())
|
||||
@@ -146,15 +149,18 @@ class SigningAesTest {
|
||||
// Create a random sample message to be encrypted
|
||||
byte[] msg = randomBytes(100);
|
||||
|
||||
AesDataContentBuilder aesBuilder = AesDataContentBuilder.builder(new zeroecho.sdk.ZeroEchoSession()).generateKey(256).modeGcm(128).withHeader();
|
||||
AesDataContentBuilder aesBuilder = AesDataContentBuilder.builder(new zeroecho.sdk.ZeroEchoSession())
|
||||
.generateKey(256).modeGcm(128).withHeader();
|
||||
|
||||
// Generate RSA-4096 key pair (retrieved via algorithm registry for convenience)
|
||||
KeyPair rsa = generateRsaKeys();
|
||||
|
||||
// Configure PSS signature parameters: SHA-256 hash, salt length = 32 bytes
|
||||
RsaSigSpec pss = RsaSigSpec.pss(RsaSigSpec.Hash.SHA256, 32);
|
||||
TagEngine<Signature> tagEnc = TagEngineBuilder.rsaSign(new zeroecho.sdk.ZeroEchoSession(), rsa.getPrivate(), pss).get();
|
||||
TagEngine<Signature> tagDec = TagEngineBuilder.rsaVerify(new zeroecho.sdk.ZeroEchoSession(), rsa.getPublic(), pss).get();
|
||||
TagEngine<Signature> tagEnc = TagEngineBuilder
|
||||
.rsaSign(new zeroecho.sdk.ZeroEchoSession(), rsa.getPrivate(), pss).get();
|
||||
TagEngine<Signature> tagDec = TagEngineBuilder
|
||||
.rsaVerify(new zeroecho.sdk.ZeroEchoSession(), rsa.getPublic(), pss).get();
|
||||
|
||||
// Build the encryption pipeline
|
||||
DataContent dccb = DataContentChainBuilder.encrypt()
|
||||
@@ -187,7 +193,8 @@ class SigningAesTest {
|
||||
.add(new TagTrailerDataContentBuilder<>(tagDec).bufferSize(8192).throwOnMismatch())
|
||||
// AES-GCM decryption using the same key; IV and AAD are restored automatically
|
||||
// from the header
|
||||
.add(AesDataContentBuilder.builder(new zeroecho.sdk.ZeroEchoSession()).importKeyRaw(key.getEncoded()).modeGcm(128).withHeader())
|
||||
.add(AesDataContentBuilder.builder(new zeroecho.sdk.ZeroEchoSession()).importKeyRaw(key.getEncoded())
|
||||
.modeGcm(128).withHeader())
|
||||
// Build the pipeline
|
||||
.build();
|
||||
byte[] decrypted;
|
||||
|
||||
Reference in New Issue
Block a user