Skip to content

Commit c1649c8

Browse files
Works!
1 parent 24378fc commit c1649c8

File tree

2 files changed

+12
-10
lines changed

2 files changed

+12
-10
lines changed

plugins/repository-encrypted/src/main/java/org/elasticsearch/repositories/encrypted/EncryptedRepository.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import java.security.InvalidAlgorithmParameterException;
3333
import java.security.InvalidKeyException;
3434
import java.security.NoSuchAlgorithmException;
35-
import java.security.NoSuchProviderException;
3635
import java.security.spec.InvalidKeySpecException;
3736
import java.util.HashMap;
3837
import java.util.Map;
@@ -112,6 +111,13 @@ public ByteSizeValue chunkSize() {
112111
* Returns a new encrypted repository factory
113112
*/
114113
public static Repository.Factory newRepositoryFactory(final Settings settings) {
114+
final Map<String, char[]> cachedRepositoryPasswords = new HashMap<>();
115+
for (String repositoryName : ENCRYPTION_PASSWORD_SETTING.getNamespaces(settings)) {
116+
Setting<SecureString> encryptionPasswordSetting = ENCRYPTION_PASSWORD_SETTING
117+
.getConcreteSettingForNamespace(repositoryName);
118+
SecureString encryptionPassword = encryptionPasswordSetting.get(settings);
119+
cachedRepositoryPasswords.put(repositoryName, encryptionPassword.getChars());
120+
}
115121
return new Repository.Factory() {
116122

117123
@Override
@@ -125,15 +131,11 @@ public Repository create(RepositoryMetaData metaData, Function<String, Repositor
125131
if (Strings.hasLength(delegateType) == false) {
126132
throw new IllegalArgumentException(DELEGATE_TYPE.getKey() + " must be set");
127133
}
128-
Setting<SecureString> encryptionPasswordSetting = ENCRYPTION_PASSWORD_SETTING
129-
.getConcreteSettingForNamespace(metaData.name());
130-
final SecretKey secretKey;
131-
try (SecureString encryptionPassword = encryptionPasswordSetting.get(settings)) {
132-
if (encryptionPassword.length() == 0) {
133-
throw new IllegalArgumentException(encryptionPasswordSetting.getKey() + " must be set");
134-
}
135-
secretKey = generateSecretKeyFromPassword(encryptionPassword.getChars());
134+
if (false == cachedRepositoryPasswords.containsKey(metaData.name())) {
135+
throw new IllegalArgumentException(
136+
ENCRYPTION_PASSWORD_SETTING.getConcreteSettingForNamespace(metaData.name()).getKey() + " must be set");
136137
}
138+
SecretKey secretKey = generateSecretKeyFromPassword(cachedRepositoryPasswords.get(metaData.name()));
137139
Repository.Factory factory = typeLookup.apply(delegateType);
138140
Repository delegatedRepository = factory.create(new RepositoryMetaData(metaData.name(),
139141
delegateType, metaData.settings()));

plugins/repository-encrypted/src/main/plugin-metadata/plugin-security.policy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,5 @@
1818
*/
1919

2020
grant {
21-
permission java.security.SecurityPermission "putProviderProperty.BC"
21+
permission java.security.SecurityPermission "putProviderProperty.BC";
2222
};

0 commit comments

Comments
 (0)