Applied PQC GitHub Home Playground Blog @AppliedPQC

SageMath Basics for Post-Quantum Cryptography

Every code listing from this chapter of Applied Post-Quantum Cryptography: 27 in total, 27 runnable here. Edit any cell and press Run.

The book's snippets build on each other down the chapter, but a Sage Cell kernel runs one cell and keeps no state afterwards, so each cell replays the earlier listings with apqc_book. That call is the only thing added to the book's own code.

← the playground

Listing 1: SageMath and Python

SageMath is built on top of Python, but it adds richer mathematical types and objects. A plain Python integer and a Sage integer are not the same thing.

Listing 2: SageMath and Python

In Python, the result is an ordinary integer. In Sage, the corresponding object may carry algebraic meaning.

Listing 3: SageMath and Python

To inspect the type, use:

Listing 4: Integers ℤ

The integer ring is available as ZZ.

Listing 5: Integers ℤ

You can create integers explicitly:

Listing 6: Integers ℤ

Basic arithmetic works as expected:

Listing 7: Integers ℤ

Division behaves more carefully than in Python because Sage keeps symbolic and exact arithmetic whenever possible:

Listing 8: Integers ℤ

The result is the rational number 10/3. Integer division is available through:

Listing 9: Integers ℤ

and modular arithmetic through:

Listing 10: Rationals ℚ

The rational field is QQ.

Listing 11: Reals ℝ and complexes ℂ

SageMath also supports real and complex domains.

Listing 12: Reals ℝ and complexes ℂ

For example:

Listing 13: Creating a finite field

For example, the field with seven elements is:

Listing 14: Creating a finite field

Elements are created by coercing values into the field:

Listing 15: Creating a finite field

Arithmetic is performed modulo the prime:

Listing 16: Inverses

In cryptography, inverses appear constantly. For a field element a, the inverse a^-1 satisfies a a^-1 = 1.

Listing 17: Linear algebra over a finite field

Finite-field linear algebra is the starting point for many lattice-based constructions.

Listing 18: Linear algebra over a finite field

The inverse can be computed as:

Listing 19: Linear algebra over a finite field

and one can verify the identity matrix:

Listing 20: Vectors and matrices

Vectors are convenient for representing secret values and noise terms.

Listing 21: Vectors and matrices

Matrix-vector multiplication is then straightforward:

Listing 22: Building a polynomial ring

Listing 23: Building a polynomial ring

Now x is a formal variable in the ring.

Listing 24: Building a polynomial ring

Addition and multiplication are performed in the usual algebraic way:

Listing 25: Quotient rings

A quotient ring is created by imposing a polynomial relation. For example:

Listing 26: A first cryptographic experiment

As a first experiment, we can verify the behavior of modular inverses.

Listing 27: A first LWE-style example

To foreshadow later chapters, we can create a simple linear system over a finite field: