예제 #1
0
/**
 * mega_aes_ctr_encryptor_set_key:
 * @aes_ctr_encryptor: a #MegaAesCtrEncryptor
 * @key: a #MegaFileKey that will be used for encryption/decryption.
 *
 * Set file key that will be used for encryption/decryption.
 */
void mega_aes_ctr_encryptor_set_key(MegaAesCtrEncryptor* aes_ctr_encryptor, MegaFileKey* key)
{
  g_return_if_fail(MEGA_IS_AES_CTR_ENCRYPTOR(aes_ctr_encryptor));
  g_return_if_fail(MEGA_IS_FILE_KEY(key));

  g_clear_object(&aes_ctr_encryptor->priv->key);
  aes_ctr_encryptor->priv->key = g_object_ref(key);
}
예제 #2
0
/**
 * mega_aes_ctr_encryptor_set_mac:
 * @aes_ctr_encryptor: a #MegaAesCtrEncryptor
 * @mac: a #MegaChunkedCbcMac calculator
 *
 * Add calculator for mac's.
 */
void mega_aes_ctr_encryptor_set_mac(MegaAesCtrEncryptor* aes_ctr_encryptor, MegaChunkedCbcMac* mac, MegaAesCtrEncryptorDirection dir)
{
  MegaAesCtrEncryptorPrivate* priv;
  guchar mac_iv[16];

  g_return_if_fail(MEGA_IS_AES_CTR_ENCRYPTOR(aes_ctr_encryptor));
  g_return_if_fail(MEGA_IS_CHUNKED_CBC_MAC(mac));
  g_return_if_fail(aes_ctr_encryptor->priv->key != NULL);

  priv = aes_ctr_encryptor->priv;
  priv->direction = dir;

  g_clear_object(&priv->mac);
  priv->mac = g_object_ref(mac);

  // mac iv is nonce + nonce

  mega_file_key_get_nonce(priv->key, mac_iv);
  mega_file_key_get_nonce(priv->key, mac_iv + 8);

  mega_chunked_cbc_mac_setup(mac, MEGA_AES_KEY(priv->key), mac_iv);
}
예제 #3
0
/**
 * mega_aes_ctr_encryptor_set_position:
 * @aes_ctr_encryptor: a #MegaAesCtrEncryptor
 * @position: Starting position for encryption/decryption.
 *
 * When decrypting the stream, decryptor needs to know position within the file
 * that we are starting from, so that AES-CTR counter is set correctly.
 */
void mega_aes_ctr_encryptor_set_position(MegaAesCtrEncryptor* aes_ctr_encryptor, guint64 position)
{
  g_return_if_fail(MEGA_IS_AES_CTR_ENCRYPTOR(aes_ctr_encryptor));

  aes_ctr_encryptor->priv->position = position;
}