Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Actually compute selectors #2686

Merged
merged 6 commits into from
Oct 5, 2023
Merged

feat: Actually compute selectors #2686

merged 6 commits into from
Oct 5, 2023

Conversation

sirasistant
Copy link
Contributor

Please provide a paragraph or two giving a summary of the change, including relevant motivation and context.

Checklist:

Remove the checklist to signal you've completed it. Enable auto-merge if the PR is ready to merge.

  • If the pull request requires a cryptography review (e.g. cryptographic algorithm implementations) I have added the 'crypto' tag.
  • I have reviewed my diff in github, line by line and removed unexpected formatting changes, testing logs, or commented-out code.
  • Every change is related to the PR description.
  • I have linked this pull request to relevant issues (if any exist).


fn compute_selector<N>(signature: str<N>) -> Field {
let bytes = signature.as_bytes();
let hash = dep::std::hash::keccak256(bytes, bytes.len() as u32);
Copy link
Member

Choose a reason for hiding this comment

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

proving a keccak scares me

Copy link
Contributor Author

Choose a reason for hiding this comment

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

One selector compute:

fn main(signature: str<10>) -> pub Field {
    compute_selector(signature)
}

is

+---------+------------------------+--------------+----------------------+
| Package | Language               | ACIR Opcodes | Backend Circuit Size |
+---------+------------------------+--------------+----------------------+
| test    | PLONKCSat { width: 3 } | 17           | 54830                |
+---------+------------------------+--------------+----------------------+
%                                                                                      

Copy link
Contributor Author

Choose a reason for hiding this comment

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

It's not great, maybe we should switch to a different hash for selectors? But the computation needs to be proven, else a malicious PXE could call other function in the target

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Note: this will only be executed in-circuit for non-constant signatures. For constant signatures the keccak gets simplified away:

fn main() -> pub Field {
    compute_selector("foo and bar")
}
+---------+------------------------+--------------+----------------------+
| Package | Language               | ACIR Opcodes | Backend Circuit Size |
+---------+------------------------+--------------+----------------------+
| test    | PLONKCSat { width: 3 } | 1            | 7                    |
+---------+------------------------+--------------+----------------------+

@sirasistant sirasistant enabled auto-merge (squash) October 4, 2023 16:52
Copy link
Contributor

@LeilaWang LeilaWang left a comment

Choose a reason for hiding this comment

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

LGTM!

@sirasistant sirasistant merged commit dcb65e1 into master Oct 5, 2023
80 checks passed
@sirasistant sirasistant deleted the arv/compute_selectors branch October 5, 2023 09:24
critesjosh pushed a commit that referenced this pull request Oct 9, 2023
🤖 I have created a release *beep* *boop*
---


<details><summary>aztec-packages: 0.8.8</summary>

##
[0.8.8](aztec-packages-v0.8.7...aztec-packages-v0.8.8)
(2023-10-09)


### Features

* Actually compute selectors
([#2686](#2686))
([dcb65e1](dcb65e1))
* Add otterscan to sandbox
([#2648](#2648))
([6986649](6986649))
* **aztec.js:** Remove attach method
([#2715](#2715))
([c03c654](c03c654))
* Create .gitattributes in aztec-nr
([#2661](#2661))
([8084fc3](8084fc3))
* GCC 13 preset
([#2623](#2623))
([4881414](4881414))
* Update noir to v0.16
([#2718](#2718))
([e8d0675](e8d0675))


### Bug Fixes

* Avoid ambiguity on blank and blank-react (prefix issue)
([#2729](#2729))
([68cdb3f](68cdb3f))
* Block encoding
([#2719](#2719))
([c4796ac](c4796ac))
* Canary tests to use a fork
([#2739](#2739))
([4906142](4906142))
* Challenge generation update
([#2628](#2628))
([68c1fab](68c1fab))
* Docs: Sandbox version numbers
([#2708](#2708))
([34b0209](34b0209))
* Docs: Update Sandbox page to use #include_aztec_version
([#2703](#2703))
([d5b78af](d5b78af))
* Remove npx from extract_tag_version
([#2697](#2697))
([fe4484a](fe4484a))
* Version in sandbox deployment
([#2730](#2730))
([b1d8efd](b1d8efd))


### Miscellaneous

* `foundation/src/serialization` tech debt
([#2722](#2722))
([e92154b](e92154b))
* Add node10 entrypoint to Foundation
([#2706](#2706))
([30c7935](30c7935))
* Add storage slot to docs
([#2601](#2601))
([a7710f0](a7710f0))
* Add visibility modifiers
([#2728](#2728))
([d9ae189](d9ae189))
* **benchmark:** Measure time to decrypt notes in pxe
([#2714](#2714))
([33a230a](33a230a))
* Build boxes as part of workspace
([#2725](#2725))
([d18349f](d18349f))
* Bump ACIR deserializer
([#2675](#2675))
([502ee87](502ee87))
* **circuits:** Delete old code that set a different generator index per
vector entry in pedersen commitment
([#2700](#2700))
([4eabfd1](4eabfd1))
* **log:** Show log level in debug logs
([#2717](#2717))
([2b87381](2b87381))
* Move { Fr } imports to foundation/fields
([#2712](#2712))
([f6fc7f2](f6fc7f2))
* **uniswap_tests:** Test edge cases around uniswap flow
([#2620](#2620))
([7a58fe9](7a58fe9))
* Use `serialize` functions in `getInitialWitness`
([#2713](#2713))
([93cc668](93cc668))
</details>

<details><summary>barretenberg.js: 0.8.8</summary>

##
[0.8.8](barretenberg.js-v0.8.7...barretenberg.js-v0.8.8)
(2023-10-09)


### Miscellaneous

* **barretenberg.js:** Synchronize aztec-packages versions
</details>

<details><summary>barretenberg: 0.8.8</summary>

##
[0.8.8](barretenberg-v0.8.7...barretenberg-v0.8.8)
(2023-10-09)


### Features

* GCC 13 preset
([#2623](#2623))
([4881414](4881414))


### Bug Fixes

* Challenge generation update
([#2628](#2628))
([68c1fab](68c1fab))


### Miscellaneous

* Bump ACIR deserializer
([#2675](#2675))
([502ee87](502ee87))
</details>

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
AztecBot added a commit to AztecProtocol/barretenberg that referenced this pull request Oct 10, 2023
🤖 I have created a release *beep* *boop*
---


<details><summary>aztec-packages: 0.8.8</summary>

##
[0.8.8](AztecProtocol/aztec-packages@aztec-packages-v0.8.7...aztec-packages-v0.8.8)
(2023-10-09)


### Features

* Actually compute selectors
([#2686](AztecProtocol/aztec-packages#2686))
([dcb65e1](AztecProtocol/aztec-packages@dcb65e1))
* Add otterscan to sandbox
([#2648](AztecProtocol/aztec-packages#2648))
([6986649](AztecProtocol/aztec-packages@6986649))
* **aztec.js:** Remove attach method
([#2715](AztecProtocol/aztec-packages#2715))
([c03c654](AztecProtocol/aztec-packages@c03c654))
* Create .gitattributes in aztec-nr
([#2661](AztecProtocol/aztec-packages#2661))
([8084fc3](AztecProtocol/aztec-packages@8084fc3))
* GCC 13 preset
([#2623](AztecProtocol/aztec-packages#2623))
([4881414](AztecProtocol/aztec-packages@4881414))
* Update noir to v0.16
([#2718](AztecProtocol/aztec-packages#2718))
([e8d0675](AztecProtocol/aztec-packages@e8d0675))


### Bug Fixes

* Avoid ambiguity on blank and blank-react (prefix issue)
([#2729](AztecProtocol/aztec-packages#2729))
([68cdb3f](AztecProtocol/aztec-packages@68cdb3f))
* Block encoding
([#2719](AztecProtocol/aztec-packages#2719))
([c4796ac](AztecProtocol/aztec-packages@c4796ac))
* Canary tests to use a fork
([#2739](AztecProtocol/aztec-packages#2739))
([4906142](AztecProtocol/aztec-packages@4906142))
* Challenge generation update
([#2628](AztecProtocol/aztec-packages#2628))
([68c1fab](AztecProtocol/aztec-packages@68c1fab))
* Docs: Sandbox version numbers
([#2708](AztecProtocol/aztec-packages#2708))
([34b0209](AztecProtocol/aztec-packages@34b0209))
* Docs: Update Sandbox page to use #include_aztec_version
([#2703](AztecProtocol/aztec-packages#2703))
([d5b78af](AztecProtocol/aztec-packages@d5b78af))
* Remove npx from extract_tag_version
([#2697](AztecProtocol/aztec-packages#2697))
([fe4484a](AztecProtocol/aztec-packages@fe4484a))
* Version in sandbox deployment
([#2730](AztecProtocol/aztec-packages#2730))
([b1d8efd](AztecProtocol/aztec-packages@b1d8efd))


### Miscellaneous

* `foundation/src/serialization` tech debt
([#2722](AztecProtocol/aztec-packages#2722))
([e92154b](AztecProtocol/aztec-packages@e92154b))
* Add node10 entrypoint to Foundation
([#2706](AztecProtocol/aztec-packages#2706))
([30c7935](AztecProtocol/aztec-packages@30c7935))
* Add storage slot to docs
([#2601](AztecProtocol/aztec-packages#2601))
([a7710f0](AztecProtocol/aztec-packages@a7710f0))
* Add visibility modifiers
([#2728](AztecProtocol/aztec-packages#2728))
([d9ae189](AztecProtocol/aztec-packages@d9ae189))
* **benchmark:** Measure time to decrypt notes in pxe
([#2714](AztecProtocol/aztec-packages#2714))
([33a230a](AztecProtocol/aztec-packages@33a230a))
* Build boxes as part of workspace
([#2725](AztecProtocol/aztec-packages#2725))
([d18349f](AztecProtocol/aztec-packages@d18349f))
* Bump ACIR deserializer
([#2675](AztecProtocol/aztec-packages#2675))
([502ee87](AztecProtocol/aztec-packages@502ee87))
* **circuits:** Delete old code that set a different generator index per
vector entry in pedersen commitment
([#2700](AztecProtocol/aztec-packages#2700))
([4eabfd1](AztecProtocol/aztec-packages@4eabfd1))
* **log:** Show log level in debug logs
([#2717](AztecProtocol/aztec-packages#2717))
([2b87381](AztecProtocol/aztec-packages@2b87381))
* Move { Fr } imports to foundation/fields
([#2712](AztecProtocol/aztec-packages#2712))
([f6fc7f2](AztecProtocol/aztec-packages@f6fc7f2))
* **uniswap_tests:** Test edge cases around uniswap flow
([#2620](AztecProtocol/aztec-packages#2620))
([7a58fe9](AztecProtocol/aztec-packages@7a58fe9))
* Use `serialize` functions in `getInitialWitness`
([#2713](AztecProtocol/aztec-packages#2713))
([93cc668](AztecProtocol/aztec-packages@93cc668))
</details>

<details><summary>barretenberg.js: 0.8.8</summary>

##
[0.8.8](AztecProtocol/aztec-packages@barretenberg.js-v0.8.7...barretenberg.js-v0.8.8)
(2023-10-09)


### Miscellaneous

* **barretenberg.js:** Synchronize aztec-packages versions
</details>

<details><summary>barretenberg: 0.8.8</summary>

##
[0.8.8](AztecProtocol/aztec-packages@barretenberg-v0.8.7...barretenberg-v0.8.8)
(2023-10-09)


### Features

* GCC 13 preset
([#2623](AztecProtocol/aztec-packages#2623))
([4881414](AztecProtocol/aztec-packages@4881414))


### Bug Fixes

* Challenge generation update
([#2628](AztecProtocol/aztec-packages#2628))
([68c1fab](AztecProtocol/aztec-packages@68c1fab))


### Miscellaneous

* Bump ACIR deserializer
([#2675](AztecProtocol/aztec-packages#2675))
([502ee87](AztecProtocol/aztec-packages@502ee87))
</details>

---
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
Archived in project
Development

Successfully merging this pull request may close these issues.

3 participants