diff --git a/README.adoc b/README.adoc
index 46882605..0133b773 100644
--- a/README.adoc
+++ b/README.adoc
@@ -246,6 +246,7 @@ The following scripts need to be run prior to building the project for the tests
$ ./src/test/bash/install_vault.sh
$ ./src/test/bash/create_certificates.sh
+ $ ./src/test/bash/env.sh
$ ./src/test/bash/local_run_vault.sh
Changes to the documentation should be made to the adocs found under `src/main/asciidoc/`
diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTransitOperations.java b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTransitOperations.java
index 41c5d51f..1c0b6136 100644
--- a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTransitOperations.java
+++ b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTransitOperations.java
@@ -17,18 +17,23 @@ package org.springframework.vault.core;
import java.util.List;
+import org.springframework.vault.support.RawTransitKey;
import org.springframework.vault.support.TransitKeyType;
+import org.springframework.vault.support.VaultDecryptionPayload;
+import org.springframework.vault.support.VaultDecryptionResult;
+import org.springframework.vault.support.VaultEncryptionPayload;
+import org.springframework.vault.support.VaultEncryptionResult;
import org.springframework.vault.support.VaultTransitContext;
import org.springframework.vault.support.VaultTransitKey;
import org.springframework.vault.support.VaultTransitKeyConfiguration;
import org.springframework.vault.support.VaultTransitKeyCreationRequest;
-import org.springframework.vault.support.RawTransitKey;
/**
* Interface that specifies operations using the {@code transit} backend.
*
* @author Mark Paluch
* @author Sven Schürmann
+ * @author Praveendra Singh
* @see Transit
* Secret Backend
*/
@@ -122,6 +127,19 @@ public interface VaultTransitOperations {
*/
String encrypt(String keyName, byte[] plaintext, VaultTransitContext transitRequest);
+ /**
+ * Encrypts the provided list of plaintext using the named key and context.
+ * The encryption is done using transit backend's batch operation.
+ *
+ * works with Vault 0.6.5 and later.
+ *
+ * @param keyName must not be empty or {@literal null}.
+ * @param batchRequest a list of VaultEncryptionPayload which includes plaintext and optional context
+ * @return list of cipher text in the same order as in plaintexts.
+ * throws VaultException in case of not matching context found.
+ */
+ List encrypt(String keyName, List batchRequest);
+
/**
* Decrypts the provided plaintext using the named key.
*
@@ -141,6 +159,19 @@ public interface VaultTransitOperations {
*/
byte[] decrypt(String keyName, String ciphertext, VaultTransitContext transitRequest);
+ /**
+ * Decrypts the provided list of ciphertext using the named key and context.
+ * The decryption is done using transit backend's batch operation.
+ *
+ * works with Vault 0.6.5 and later.
+ *
+ * @param keyName must not be empty or {@literal null}.
+ * @param batchRequest a list of VaultDecryptionPayload which includes plaintext and optional context
+ * @return list of plain text in the same order as in ciphertexts.
+ * throws VaultException in case of not matching context found.
+ */
+ List decrypt(String keyName, List batchRequest);
+
/**
* Rewrap the provided ciphertext using the latest version of the named key. Because
* this never returns plaintext, it is possible to delegate this functionality to
diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTransitTemplate.java b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTransitTemplate.java
index 96383ae9..19353e37 100644
--- a/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTransitTemplate.java
+++ b/spring-vault-core/src/main/java/org/springframework/vault/core/VaultTransitTemplate.java
@@ -15,30 +15,38 @@
*/
package org.springframework.vault.core;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.Data;
-
import org.springframework.util.Assert;
import org.springframework.util.Base64Utils;
+import org.springframework.vault.support.RawTransitKey;
import org.springframework.vault.support.TransitKeyType;
+import org.springframework.vault.support.VaultDecryptionPayload;
+import org.springframework.vault.support.VaultDecryptionResult;
+import org.springframework.vault.support.VaultEncryptionDecryptionResultHelper;
+import org.springframework.vault.support.VaultEncryptionPayload;
+import org.springframework.vault.support.VaultEncryptionResult;
import org.springframework.vault.support.VaultResponse;
import org.springframework.vault.support.VaultResponseSupport;
import org.springframework.vault.support.VaultTransitContext;
import org.springframework.vault.support.VaultTransitKey;
import org.springframework.vault.support.VaultTransitKeyConfiguration;
import org.springframework.vault.support.VaultTransitKeyCreationRequest;
-import org.springframework.vault.support.RawTransitKey;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import lombok.Data;
/**
* Default implementation of {@link VaultTransitOperations}.
*
* @author Mark Paluch
* @author Sven Schürmann
+ * @author Praveendra Singh
*/
public class VaultTransitTemplate implements VaultTransitOperations {
@@ -152,7 +160,7 @@ public class VaultTransitTemplate implements VaultTransitOperations {
.write(String.format("%s/encrypt/%s", path, keyName), request).getData()
.get("ciphertext");
}
-
+
@Override
public String encrypt(String keyName, byte[] plaintext,
VaultTransitContext transitRequest) {
@@ -173,6 +181,37 @@ public class VaultTransitTemplate implements VaultTransitOperations {
.get("ciphertext");
}
+ @Override
+ public List encrypt(String keyName, List batchRequest) {
+
+ Assert.hasText(keyName, "KeyName must not be empty");
+ Assert.notEmpty(batchRequest, "batchRequest must not be null and should have at least one entry");
+
+ List