Skip to content

feat: LogEncryption trait#12942

Merged
benesjan merged 19 commits intomasterfrom
03-21-feat_logencryption_trait
Mar 27, 2025
Merged

feat: LogEncryption trait#12942
benesjan merged 19 commits intomasterfrom
03-21-feat_logencryption_trait

Conversation

@benesjan
Copy link
Contributor

@benesjan benesjan commented Mar 21, 2025

In this PR I introduce and use a LogEncryption trait.

Copy link
Contributor Author

benesjan commented Mar 21, 2025

@benesjan benesjan marked this pull request as ready for review March 21, 2025 19:56
@benesjan benesjan force-pushed the 03-21-feat_logencryption_trait branch from 1300799 to 9a711c6 Compare March 21, 2025 20:51
@benesjan benesjan marked this pull request as draft March 21, 2025 21:57
@benesjan benesjan force-pushed the 03-21-feat_logencryption_trait branch from 9a711c6 to ac1f8a1 Compare March 21, 2025 21:57
@benesjan benesjan marked this pull request as ready for review March 22, 2025 01:43
}
}

// These utils got copied here because note encryption diverged from the event one. The encryption functionality
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copied these over here as they diverged from the note ones due to the shrunk header (no longer contains contract address).

};
use std::aes128::aes128_encrypt;

global HEADER_CIPHERTEXT_SIZE_IN_BYTES: u32 = 48;
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copied this over here as header size diverged from the note one (no longer contains contract address).

};

/*
* WHY IS THERE LOTS OF CODE DUPLICATION BETWEEN event.nr and note.nr?
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This was stale and felt unnecessary now.

let final_plaintext = compute_note_plaintext_for_this_strategy(note, storage_slot);
let plaintext = compute_note_plaintext_for_this_strategy(note, storage_slot);

let ciphertext = AES128::encrypt_log(plaintext, recipient);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As agreed upon the encrypt_log function no longer deals with tags.

Note: NoteType + Packable<N>,
{
compute_log(context, note, storage_slot, recipient, sender)
compute_log(note, storage_slot, recipient, sender)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The context was passed in only because of the contract address for the header and is now unnecessary.

encrypted_logs::log_assembly_strategies::default_aes128::{
event::encode_and_encrypt_event_unconstrained,
// TODO(benesjan): uncomment this once the events are updated.
// event::encode_and_encrypt_event_unconstrained,
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have no clue why but event logs suddenly became fed to the process_log function. Didn't bother recalling why this is the case as soon the event logs stuff will use the standard encryption and will be expected to be passed there. So I just disabled event emission and will re-enable it up the stack.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So I just disabled event emission and will re-enable it up the stack.

This will mean we'll break events in master until we fix them though. I think we need to understand what happened to them.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What do you mean they became fed to process_log? That was happening already, we were simply ignoring those log type ids.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I had this idea that before the event logs never managed to travel all the way to the process_log function but with the changes in this PR it started happening and it started erroring out.

But anyway it doesn't matter because in the 3rd PR of the stack I uncomment these emissions.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will mean we'll break events in master until we fix them though. I think we need to understand what happened to them.

Correct. I was thinking of merging the stack of 3 PRs at once. Would you be in that case fine with me just ignoring this?

Comment on lines +611 to +617
// We don't perform tagging in Noir and for this reason we pass the log into `process_log` without the tag.
const logFieldsWithoutTag = scopedLog.log.toFields().slice(1);

// This will trigger calls to the deliverNote oracle
await this.callProcessLog(
contractAddress,
scopedLog.log.toFields(),
logFieldsWithoutTag,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not a fan of this, I'd pas the entire log with the tag. We are not really using the tag right now, but there's no need to special case this.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes this was a mistake because after all I had to revert this change in the 3rd PR up the stack because the tag started to be needed to determine whether a given [tag, log_content] pair was already stored in the DB.

Are you fine with me keeping this change here given that it's reverted up or do you want me to clean the diff?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You know the answer in your heart 🙃

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cleaned this up.

encrypted_logs::log_assembly_strategies::default_aes128::{
event::encode_and_encrypt_event_unconstrained,
// TODO(benesjan): uncomment this once the events are updated.
// event::encode_and_encrypt_event_unconstrained,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So I just disabled event emission and will re-enable it up the stack.

This will mean we'll break events in master until we fix them though. I think we need to understand what happened to them.

encrypted_logs::log_assembly_strategies::default_aes128::{
event::encode_and_encrypt_event_unconstrained,
// TODO(benesjan): uncomment this once the events are updated.
// event::encode_and_encrypt_event_unconstrained,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What do you mean they became fed to process_log? That was happening already, we were simply ignoring those log type ids.

@benesjan benesjan marked this pull request as draft March 25, 2025 20:33
@benesjan benesjan force-pushed the 03-21-feat_logencryption_trait branch from 07d0922 to ca370cc Compare March 25, 2025 20:46
@benesjan benesjan marked this pull request as ready for review March 25, 2025 21:02
benesjan and others added 5 commits March 25, 2025 21:09
@benesjan benesjan force-pushed the 03-21-feat_logencryption_trait branch from ffb9962 to 353caf7 Compare March 25, 2025 21:10
@benesjan benesjan requested a review from nventuro March 25, 2025 22:00
@benesjan benesjan marked this pull request as draft March 26, 2025 01:07
@benesjan benesjan marked this pull request as ready for review March 26, 2025 02:15
@benesjan
Copy link
Contributor Author

benesjan commented Mar 26, 2025

@nventuro the header change was responsible for the event log to suddenly cause reverts because now the plaintext length extracted from the header would be some random number and that then caused revert in the subvec function call in decryption.

Ensured that this will not happen by setting an incorrect tag for the event logs in this commit.

To re-review just check the diff since your last review. Think all should be good now.

@benesjan benesjan mentioned this pull request Mar 26, 2025
@benesjan benesjan enabled auto-merge (squash) March 27, 2025 01:39
@benesjan benesjan merged commit 0b7e564 into master Mar 27, 2025
8 checks passed
@benesjan benesjan deleted the 03-21-feat_logencryption_trait branch March 27, 2025 02:00
DanielKotov pushed a commit that referenced this pull request Mar 27, 2025
DanielKotov pushed a commit that referenced this pull request Mar 27, 2025
PhilWindle pushed a commit that referenced this pull request Mar 27, 2025
🤖 I have created a new Aztec Packages release
---


##
[0.82.3](v0.82.2...v0.82.3)
(2025-03-27)


### Features

* `msgpack` encoding for `Program` and `WitnessStack`
([#12841](#12841))
([1e58eb1](1e58eb1))
* 64 bit log type id, 64 bit log metadata
([#12956](#12956))
([20d734a](20d734a))
* AVM parsing tag validation
([#12936](#12936))
([56b1f0d](56b1f0d))
* **avm:** add calldata & returndata to context
([#13008](#13008))
([f03b2e5](f03b2e5))
* **avm:** merkle db hints (part 1)
([#12922](#12922))
([34ec9e8](34ec9e8))
* **avm:** merkle hints (part 2)
([#13077](#13077))
([fbbc6c7](fbbc6c7))
* **avm:** vm2 initial context
([#12972](#12972))
([e2b1361](e2b1361))
* benchmark avm simulator
([#12985](#12985))
([00fae1b](00fae1b))
* client flows benchmarks
([#13007](#13007))
([9bf7568](9bf7568))
* gas benchmark for "normal usage"
([#13073](#13073))
([4eb1156](4eb1156))
* Implement merkle writes in the merkle check gadget
([#13050](#13050))
([c94fe50](c94fe50))
* LogEncryption trait
([#12942](#12942))
([0b7e564](0b7e564))
* Node snapshot sync
([#12927](#12927))
([afde851](afde851)),
closes
[#12926](#12926)
* **p2p:** capture all gossipsub metrics
([#12930](#12930))
([cc940cb](cc940cb))
* Prover node snapshot sync
([#13097](#13097))
([1e77efb](1e77efb))
* staking asset handler
([#12968](#12968))
([af48184](af48184)),
closes
[#12932](#12932)
* stream crs data to disk
([#12996](#12996))
([d016e4d](d016e4d)),
closes
[#12948](#12948)
* track failed tests. add flake.
([f4936d7](f4936d7))
* Track test history.
([#13037](#13037))
([036bb32](036bb32))
* track total tx fee
([#12601](#12601))
([9612a4e](9612a4e))
* Validators sentinel
([#12818](#12818))
([770695c](770695c))


### Bug Fixes

* added #[derive(Eq)] to EcdsaPublicKeyNote
([#12966](#12966))
([0c21c74](0c21c74))
* Allow use of local blob sink client
([#13025](#13025))
([ba8d654](ba8d654))
* **avm:** semicolons are hard
([#12999](#12999))
([8871c83](8871c83))
* bootstrap network and sponsored fpc devnet
([#13044](#13044))
([8a47d8b](8a47d8b))
* Bump tsc target
([#13052](#13052))
([985e83b](985e83b))
* cycle_group fuzzer
([#12921](#12921))
([69f426e](69f426e))
* **docs:** Fix import errors in aztec.js tutorial
([#12969](#12969))
([856208a](856208a))
* **docs:** Load token artifact from the compiled source in the sample
dapp tutorial
([#12802](#12802))
([0838084](0838084)),
closes
[#12810](#12810)
* **docs:** Update sponsored fpc docs to use 82.2 syntax
([#13054](#13054))
([e5d425b](e5d425b))
* **e2e:** p2p
([#13002](#13002))
([1ece539](1ece539))
* extend e2e 2 pxes timeout. strip color codes for error_regex.
([73820e4](73820e4))
* flake
([6cc9e81](6cc9e81))
* fuzzer on staking asset handler constructor test
([#13101](#13101))
([d936285](d936285))
* invalid getCommittee function
([#13072](#13072))
([327341f](327341f))
* mac publish should use clang 18 like x-compiler, and use it
([#12983](#12983))
([7b83c45](7b83c45))
* make circuit parsing deterministic
([#11772](#11772))
([76ef873](76ef873))
* parse away trailing slash from consensus host
([#12577](#12577))
([6701806](6701806))
* prerelease versions should be pushed to install.aztec.network
([#13086](#13086))
([c4e6039](c4e6039))
* smoke
([#13060](#13060))
([7756b15](7756b15))
* some flake additions
([58638f1](58638f1))
* sponsored fpc arg parsed correctly
([#12976](#12976))
([#12977](#12977))
([a85f530](a85f530))
* starting the sandbox with no pxe should still deploy initial test
accounts
([#13047](#13047))
([d92d895](d92d895))
* Syntax error when running tests via jest after tsc build
([#13051](#13051))
([f972db9](f972db9))
* Use the correct image in aztec start
([#13058](#13058))
([06285cd](06285cd))
* yolo fix
([91e2f4b](91e2f4b))
* yolo fix nightly
([b3b3259](b3b3259))
* yolo fix obvious thing to track fails.
([2fee630](2fee630))
* yolo flakes
([e3b030a](e3b030a))
* yolo set -x
([bfd3205](bfd3205))
* yolo we suspect the halt is making tests fail that would have passed
([04e3fa2](04e3fa2))


### Miscellaneous

* `getIndexedTaggingSecretAsSender` oracle cleanup
([#13015](#13015))
([8e71e55](8e71e55))
* Add a script to generate cpp files for AVM2
([#13091](#13091))
([7bb43a9](7bb43a9))
* add default native proving for cli wallet
([#12855](#12855))
([c0f773c](c0f773c))
* add default native proving for cli wallet retry
([#13028](#13028))
([b2f4785](b2f4785))
* Alpha testnet into master
([#13033](#13033))
([d98fdbd](d98fdbd))
* AVM TS - move tag validation outside of instruction constructors
([#13038](#13038))
([45548ab](45548ab)),
closes
[#12934](#12934)
* **avm:** final codegen nuking
([#13089](#13089))
([9c82f3f](9c82f3f))
* **avm:** remove codegen (all but flavor)
([#13079](#13079))
([e1f2bdd](e1f2bdd))
* **bb:** minor acir buf C++ improvements
([#13042](#13042))
([1ebd044](1ebd044))
* boxes dep cleanup
([#12979](#12979))
([6540b7c](6540b7c))
* **ci:** less catch all e2e_p2p flakes
([#12737](#12737))
([2134634](2134634))
* comprehensive cleanup of translator flavor and use inheritance
properly in flavors
([#13041](#13041))
([dc5f78f](dc5f78f))
* compress storage footprint
([#12871](#12871))
([58c110f](58c110f))
* display warning when installing bb versions &lt; 0.82.0
([#13027](#13027))
([7247fe7](7247fe7))
* **docs:** Update docs on fees and various other updates
([#12929](#12929))
([1dec907](1dec907))
* dump dmesg/net/cpu/mem usage at end of ci run
([#12967](#12967))
([8877792](8877792))
* fix governance util issue
([#13043](#13043))
([d768d26](d768d26))
* redundant if in affine from projective constructor
([#13045](#13045))
([3a7ba2d](3a7ba2d))
* remove addition of dummy ops in mock circuit producer
([#13003](#13003))
([a64d1dc](a64d1dc))
* remove dummy ops in decider pk
([#13049](#13049))
([da6d021](da6d021))
* replace relative paths to noir-protocol-circuits
([e1b88f6](e1b88f6))
* replace relative paths to noir-protocol-circuits
([849b4b0](849b4b0))
* replace relative paths to noir-protocol-circuits
([18a02d6](18a02d6))
* Revert "chore: add default native proving for cli wallet
([#12855](#12855))"
([#13013](#13013))
([98e2576](98e2576))
* Speed up and deflake sentinel test
([#13078](#13078))
([27f1eca](27f1eca))
* **testnet:** making consensus host mandatory input
([#12716](#12716))
([d47c74a](d47c74a))
* towards no more mock op_queues
([#12984](#12984))
([fefffa7](fefffa7))
* update bb version for noir 1.0.0-beta.0+
([#13026](#13026))
([dd68074](dd68074))
* update CODEOWNERS to reflect new sync method
([#12998](#12998))
([a3d1915](a3d1915))


### Documentation

* Add fees to cli reference
([#12884](#12884))
([4a0fd58](4a0fd58))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants