package com.amazonaws.encryptionsdk.model; import com.amazonaws.encryptionsdk.CryptoAlgorithm; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; public final class DecryptionMaterialsRequest { private final CryptoAlgorithm algorithm; private final Map encryptionContext; private final List encryptedDataKeys; private DecryptionMaterialsRequest(Builder b) { this.algorithm = b.getAlgorithm(); this.encryptionContext = b.getEncryptionContext(); this.encryptedDataKeys = b.getEncryptedDataKeys(); } public CryptoAlgorithm getAlgorithm() { return algorithm; } public Map getEncryptionContext() { return encryptionContext; } public List getEncryptedDataKeys() { return encryptedDataKeys; } public static Builder newBuilder() { return new Builder(); } public Builder toBuilder() { return new Builder(this); } public static DecryptionMaterialsRequest fromCiphertextHeaders(CiphertextHeaders headers) { return newBuilder() .setAlgorithm(headers.getCryptoAlgoId()) .setEncryptionContext(headers.getEncryptionContextMap()) .setEncryptedDataKeys(headers.getEncryptedKeyBlobs()) .build(); } public static final class Builder { private CryptoAlgorithm algorithm; private Map encryptionContext; private List encryptedDataKeys; private Builder(DecryptionMaterialsRequest request) { this.algorithm = request.getAlgorithm(); this.encryptionContext = request.getEncryptionContext(); this.encryptedDataKeys = request.getEncryptedDataKeys(); } private Builder() {} public DecryptionMaterialsRequest build() { return new DecryptionMaterialsRequest(this); } public CryptoAlgorithm getAlgorithm() { return algorithm; } public Builder setAlgorithm(CryptoAlgorithm algorithm) { this.algorithm = algorithm; return this; } public Map getEncryptionContext() { return encryptionContext; } public Builder setEncryptionContext(Map encryptionContext) { this.encryptionContext = Collections.unmodifiableMap(new HashMap<>(encryptionContext)); return this; } public List getEncryptedDataKeys() { return encryptedDataKeys; } public Builder setEncryptedDataKeys(List encryptedDataKeys) { this.encryptedDataKeys = Collections.unmodifiableList(new ArrayList<>(encryptedDataKeys)); return this; } } }