sagemath

Run SageMath computations through the existing Anaconda environment named `sage`. Use when Codex needs Sage for CTF and cryptography work such as asymmetric cryptography, finite fields, elliptic curve

SKILL.md

GitHub

OpenCROW Runner - SageMath

Runtime preflight

Probe required commands with command -v and Python modules with importlib.util.find_spec before use. Prefer a PATH-resolved OpenCROW MCP helper or the ctf/sage environment when available, then the managed helper or system Python. If a capability is missing, stop that path safely and report the exact missing command or module.

Use this skill to execute SageMath reliably from the best detected Sage runtime.

Quick Start

Use the bundled runner:

python3 scripts/run_sage.py --code 'print(factor(2^20 - 1))'

Or execute an existing .sage file:

python3 scripts/run_sage.py --file /absolute/path/to/script.sage

Workflow

  1. Decide whether the task is best expressed as inline code or a .sage file.
  2. For small one-off computations, pass the code with --code.
  3. For longer programs or reusable work, create a .sage file and pass it with --file.
  4. For CTF crypto tasks, prefer Sage when the problem involves polynomial rings, finite fields, matrices over modular domains, lattices, or symbolic number theory operations.
  5. Review stdout/stderr from SageMath and report the meaningful result back to the user.

Runner Notes

  • The runner probes OPENCROW_SAGE, a Conda environment named sage, and then a PATH-resolved sage command. If all are missing it reports that exact capability gap.
  • For --code, the runner writes the code into a temporary .sage file first. This avoids quoting issues and keeps behavior aligned with file execution.
  • Pass --timeout SECONDS when a computation may hang or run too long.
  • Pass --keep-temp only when debugging generated Sage code.

Patterns

For inline calculations:

python3 scripts/run_sage.py --code '
R.<x> = QQ[]
f = x^4 - 1
print(f.factor())
'

For file-based workflows:

  1. Create a .sage file in the workspace.
  2. Run it with the bundled runner.
  3. If the script generates files, verify the outputs before replying.

For CTF cryptography workflows:

  • Use Sage integer and modular arithmetic for RSA attacks, CRT reconstruction, inverses, and exponent relations.
  • Use polynomial rings and small_roots() for Coppersmith-style attacks when the instance is suitable.
  • Use GF(p) or extension fields for ECC, finite-field equations, and structured algebraic recovery.
  • Use Matrix, vector, and LLL for lattice-based recovery problems and hidden-number style attacks.
  • Use recurrence solving, modular equations, and matrix lifting for LCG, xorshift, and related PRNG state recovery when Sage algebra is useful.

References

  • For CTF-oriented patterns and starter snippets, read references/ctf-crypto.md when the task involves RSA, ECC, lattices, or PRNG cryptanalysis.

Templates

Resource

scripts/run_sage.py

Use this script instead of calling SageMath manually unless there is a specific reason not to. It standardizes environment selection, timeout handling, and inline-code execution.