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.