/** * 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); }
/** * 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); }
/** * 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; }