stdlib-point-at-infinity

Canonicalize point-at-infinity in stdlib circuits via conditional_assign.

Updated May 14, 2026
One-click install
npx skills add https://github.com/HabibTorjmen/Blockchain --skill stdlib-point-at-infinity
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: stdlib-point-at-infinity
Source: https://github.com/HabibTorjmen/Blockchain/tree/main/aztec-packages/barretenberg/.claude/skills/stdlib-point-at-infinity
Command: npx skills add https://github.com/HabibTorjmen/Blockchain --skill stdlib-point-at-infinity

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve?

Prevents incorrect handling of point-at-infinity representations in stdlib circuit types, avoiding broken serialization, hashing, public inputs, and recursive verification when infinity may appear with non-canonical coordinates.

Core Features & Use Cases

  • Canonically normalize infinity at circuit boundaries: Ensures grumpkin_commitment infinity is converted to the (0,0) convention via conditional_assign where it can be produced non-canonically.
  • Differentiate representation models across element types: Guides correct usage for bn254 element_default (explicit infinity flag) vs goblin_element (infinity encoded as (0,0)).
  • Handle recursion safely: Recommends conditional_assign instead of BB_ASSERT on values potentially influenced by a malicious prover during recursive verifier circuit construction.
  • Use correct comparison/serialization touchpoints: Identifies observation boundaries (serialize_to_fields, set_public, operator==/assert_equal) where canonicalization must occur for correctness.

Quick Start

Use this guidance when implementing stdlib serialization/public-input wiring for cycle_group and bn254 commitment types so infinity is treated as (0,0) at boundaries and normalized with conditional_assign where needed.

Frequently Asked Questions about stdlib-point-at-infinity

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I canonically serialize a point at infinity in zk circuits?

To canonically serialize a point at infinity in zk circuits, normalize non-canonical coordinates to the (0,0) convention at observation boundaries like serialize_to_fields using conditional_assign.

Why does recursive verification break with non-canonical infinity points?

Recursive verification breaks with non-canonical infinity points because malicious provers can exploit arithmetic-produced non-canonical representations, bypassing standard assertions and corrupting recursive full_verify paths.

When do I need conditional_assign versus BB_ASSERT for cycle_group infinity handling?

Use conditional_assign for cycle_group infinity handling when values are potentially influenced by a malicious prover, and reserve BB_ASSERT only for invariants guaranteed across all existing non-adversarial code paths.

Does bn254 commitment use the same infinity encoding as grumpkin_commitment?

No, bn254 element_default uses an explicit infinity flag while goblin_element and grumpkin_commitment encode infinity as the (0,0) coordinate convention, requiring distinct normalization touchpoints.

What are the boundaries where point at infinity canonicalization must occur during public input exposure?

Point at infinity canonicalization must occur at observation boundaries including serialize_to_fields, set_public, and operator== or assert_equal comparisons to ensure correct public input exposure.