Add some tests for KmsEnvelopeAeadKeyManager#createKeyTemplate" and rework the documentation of it.

Let me know if the documentation is confusing -- and ideas how to make it less confusing in particular are welcome.

PiperOrigin-RevId: 564643609
Change-Id: I8c943bc627ba234a1687fcda3309968190bd80ff
diff --git a/src/main/java/com/google/crypto/tink/aead/KmsEnvelopeAeadKeyManager.java b/src/main/java/com/google/crypto/tink/aead/KmsEnvelopeAeadKeyManager.java
index 81cf5da..9e45636 100644
--- a/src/main/java/com/google/crypto/tink/aead/KmsEnvelopeAeadKeyManager.java
+++ b/src/main/java/com/google/crypto/tink/aead/KmsEnvelopeAeadKeyManager.java
@@ -120,12 +120,16 @@
   }
 
   /**
-   * Returns a new {@link KeyTemplate} that can generate a {@link
-   * com.google.crypto.tink.proto.KmsEnvelopeAeadKey} whose key encrypting key (KEK) is pointing to
-   * {@code kekUri} and DEK template is {@code dekTemplate}. Keys generated by this key template
-   * uses RAW output prefix to make them compatible with the remote KMS' encrypt/decrypt operations.
-   * Unlike other templates, when you call {@link KeysetHandle#generateNew} with this template, Tink
-   * does not generate new key material, but only creates a reference to the remote KEK.
+   * Returns a new {@link KeyTemplate} that can generate a {@link LegacyKmsEnvelopeAeadKey} whose
+   * key encrypting key (KEK) is pointing to {@code kekUri} and DEK template is {@code dekTemplate}
+   * (or a derived version of it).
+   *
+   * <p><b>Note: </b> Unlike other templates, when you call {@link KeysetHandle#generateNew} with
+   * this template Tink does not generate new key material, but instead creates a reference to the
+   * remote KEK.
+   *
+   * <p>The second argument of the passed in template is used ignoring the Variant, and assuming
+   * NO_PREFIX instead.
    */
   public static KeyTemplate createKeyTemplate(String kekUri, KeyTemplate dekTemplate) {
     try {
diff --git a/src/test/java/com/google/crypto/tink/aead/BUILD.bazel b/src/test/java/com/google/crypto/tink/aead/BUILD.bazel
index 601ed83..c9461a0 100644
--- a/src/test/java/com/google/crypto/tink/aead/BUILD.bazel
+++ b/src/test/java/com/google/crypto/tink/aead/BUILD.bazel
@@ -106,12 +106,15 @@
         "//proto:tink_java_proto",
         "//src/main/java/com/google/crypto/tink:aead",
         "//src/main/java/com/google/crypto/tink:key_template",
+        "//src/main/java/com/google/crypto/tink:key_templates",
         "//src/main/java/com/google/crypto/tink:kms_clients",
         "//src/main/java/com/google/crypto/tink:registry_cluster",
         "//src/main/java/com/google/crypto/tink/aead:aead_config",
         "//src/main/java/com/google/crypto/tink/aead:aes_ctr_hmac_aead_key_manager",
         "//src/main/java/com/google/crypto/tink/aead:aes_gcm_key_manager",
+        "//src/main/java/com/google/crypto/tink/aead:aes_gcm_parameters",
         "//src/main/java/com/google/crypto/tink/aead:kms_envelope_aead_key_manager",
+        "//src/main/java/com/google/crypto/tink/aead:legacy_kms_envelope_aead_parameters",
         "//src/main/java/com/google/crypto/tink/internal:key_template_proto_converter",
         "//src/main/java/com/google/crypto/tink/internal:key_type_manager",
         "//src/main/java/com/google/crypto/tink/mac:hmac_key_manager",
diff --git a/src/test/java/com/google/crypto/tink/aead/KmsEnvelopeAeadKeyManagerTest.java b/src/test/java/com/google/crypto/tink/aead/KmsEnvelopeAeadKeyManagerTest.java
index b140599..c890890 100644
--- a/src/test/java/com/google/crypto/tink/aead/KmsEnvelopeAeadKeyManagerTest.java
+++ b/src/test/java/com/google/crypto/tink/aead/KmsEnvelopeAeadKeyManagerTest.java
@@ -22,6 +22,7 @@
 
 import com.google.crypto.tink.Aead;
 import com.google.crypto.tink.KeyTemplate;
+import com.google.crypto.tink.KeyTemplates;
 import com.google.crypto.tink.KeysetHandle;
 import com.google.crypto.tink.KmsClients;
 import com.google.crypto.tink.internal.KeyTemplateProtoConverter;
@@ -234,6 +235,41 @@
   }
 
   @Test
+  public void createKeyTemplate_ignoresOutputPrefix() throws Exception {
+    // When we create LegacyKmsEnvelopeAeadParameters, the underlying OutputPrefixType in the
+    // passed in dek Template is ignored.
+    KeyTemplate template1 =
+        KmsEnvelopeAeadKeyManager.createKeyTemplate(
+            "some URI", KeyTemplates.get("AES128_CTR_HMAC_SHA256"));
+    KeyTemplate template2 =
+        KmsEnvelopeAeadKeyManager.createKeyTemplate(
+            "some URI", KeyTemplates.get("AES128_CTR_HMAC_SHA256_RAW"));
+    assertThat(template1.toParameters()).isEqualTo(template2.toParameters());
+  }
+
+  @Test
+  public void createKeyTemplate_aesGcm_works() throws Exception {
+    LegacyKmsEnvelopeAeadParameters parameters =
+        LegacyKmsEnvelopeAeadParameters.builder()
+            .setKekUri("SomeMatchingKekUri")
+            .setDekParsingStrategy(
+                LegacyKmsEnvelopeAeadParameters.DekParsingStrategy.ASSUME_AES_GCM)
+            .setDekParametersForNewKeys(
+                AesGcmParameters.builder()
+                    .setIvSizeBytes(12)
+                    .setKeySizeBytes(16)
+                    .setTagSizeBytes(16)
+                    .setVariant(AesGcmParameters.Variant.NO_PREFIX)
+                    .build())
+            .build();
+
+    KeyTemplate template1 =
+        KmsEnvelopeAeadKeyManager.createKeyTemplate(
+            "SomeMatchingKekUri", KeyTemplates.get("AES128_GCM"));
+    assertThat(template1.toParameters()).isEqualTo(parameters);
+  }
+
+  @Test
   public void multipleAeadsWithSameKekAndSameDekTemplate_canDecryptEachOther() throws Exception {
     String kekUri = FakeKmsClient.createFakeKeyUri();
     KeyTemplate dekTemplate = AesCtrHmacAeadKeyManager.aes128CtrHmacSha256Template();