private static AesGcmParameters parseParameters(ProtoParametersSerialization serialization)
      throws GeneralSecurityException {
    if (!serialization.getKeyTemplate().getTypeUrl().equals(TYPE_URL)) {
      throw new IllegalArgumentException(
          "Wrong type URL in call to AesGcmProtoSerialization.parseParameters: "
              + serialization.getKeyTemplate().getTypeUrl());
    }
    com.google.crypto.tink.proto.AesGcmKeyFormat format;
    try {
      format =
          com.google.crypto.tink.proto.AesGcmKeyFormat.parseFrom(
              serialization.getKeyTemplate().getValue(), ExtensionRegistryLite.getEmptyRegistry());
    } catch (InvalidProtocolBufferException e) {
      throw new GeneralSecurityException("Parsing AesGcmParameters failed: ", e);
    }
    if (format.getVersion() != 0) {
      throw new GeneralSecurityException("Only version 0 parameters are accepted");
    }
    return AesGcmParameters.builder()
        .setKeySizeBytes(format.getKeySize())
        /**
         * Currently, the Tink subtle implementation has the following restrictions: IV is a
         * uniformly random initialization vector of length 12 and the tag is restricted to 16
         * bytes.
         */
        .setIvSizeBytes(12)
        .setTagSizeBytes(16)
        .setVariant(toVariant(serialization.getKeyTemplate().getOutputPrefixType()))
        .build();
  }
Current implementation restricts IV size to 12 bytes
java_src/src/main/java/com/google/crypto/tink/aead/internal/AesGcmProtoSerialization.java