/**
  * Key Derivation Function for client.dat: Use the database key as an HMAC key to an HMAC of the
  * key plus some constant plus the storeIdentifier.
  *
  * @return An encryption key, as byte[].
  */
 public byte[] getKeyForClientLayer() {
   byte[] full = new byte[databaseKey.length + CLIENT_LAYER.length];
   int x = 0;
   System.arraycopy(databaseKey, 0, full, 0, databaseKey.length);
   x += databaseKey.length;
   System.arraycopy(CLIENT_LAYER, 0, full, x, CLIENT_LAYER.length);
   return HMAC.macWithSHA256(databaseKey, full);
 }
 /**
  * Key Derivation Function for plugin stores: Use the database key as an HMAC key to an HMAC of
  * the key plus some constant plus the storeIdentifier.
  *
  * @param storeIdentifier The classname of the plugin, used as part of a filename.
  * @return An encryption key, as byte[].
  */
 public byte[] getPluginStoreKey(String storeIdentifier) {
   try {
     byte[] id = storeIdentifier.getBytes("UTF-8");
     byte[] full = new byte[databaseKey.length + PLUGIN.length + id.length];
     int x = 0;
     System.arraycopy(databaseKey, 0, full, 0, databaseKey.length);
     x += databaseKey.length;
     System.arraycopy(PLUGIN, 0, full, x, PLUGIN.length);
     x += PLUGIN.length;
     System.arraycopy(id, 0, full, x, id.length);
     return HMAC.macWithSHA256(databaseKey, full);
   } catch (UnsupportedEncodingException e) {
     throw new Error(e);
   }
 }