docs: private ObjectMetadata toObjectMetadata(ObjectMetadata metadata) {
          // If we generated a symmetric key to encrypt the data, store it in the
          // object metadata.
          byte[] encryptedCEK = getEncryptedCEK();
          metadata.addUserMetadata(Headers.CRYPTO_KEY_V2,
                                   Base64.encodeAsString(encryptedCEK));
          // Put the cipher initialization vector (IV) into the object metadata
          byte[] iv = cipherLite.getIV();
          metadata.addUserMetadata(Headers.CRYPTO_IV, Base64.encodeAsString(iv));
          // Put the materials description into the object metadata as JSON
          metadata.addUserMetadata(Headers.MATERIALS_DESCRIPTION,
                                   kekMaterialDescAsJson());
          // The CRYPTO_CEK_ALGORITHM, CRYPTO_TAG_LENGTH and
          // CRYPTO_KEYWRAP_ALGORITHM were not available in the Encryption Only
          // (EO) implementation
          ContentCryptoScheme scheme = getContentCryptoScheme();
          metadata.addUserMetadata(Headers.CRYPTO_CEK_ALGORITHM,
                                   scheme.getCipherAlgorithm());
          int tagLen = scheme.getTagLengthInBits();
          if (tagLen > 0)
              metadata.addUserMetadata(Headers.CRYPTO_TAG_LENGTH,
                                       String.valueOf(tagLen));
          String keyWrapAlgo = getKeyWrappingAlgorithm();
          if (keyWrapAlgo != null)
              metadata.addUserMetadata(Headers.CRYPTO_KEYWRAP_ALGORITHM,
                                       keyWrapAlgo);
          return metadata;
      }