# Cryptography and Computer Security

This repository contains materials for the Cryptography and Computer Security course at the Faculty of Computer Science and Informatics, University of Ljubljana.

## Notebooks

Currently, the following Jupyter notebooks for Python/Sage are available:

## `algorithms`

To use the algorithms in Python, make sure that the root of the repository is visible to Python. Then you may import them with

``````import algorithms
``````

or

``````from algorithms import *
``````

Currently, the following functions are available:

• `gcd` (from `euclidean.py`)
• `inverse` (from `euclidean.py`)
• `eea` (from `euclidean.py`)
• `crt` (from `modular.py`)
• `jacobi` (from `modular.py`)
• `solovayStrassen` (from `primality.py`)
• `millerRabin` (from `primality.py`)
• `pollardP1`(from `factorization.py`)
• `pollardRho`(from `factorization.py`)
• `totalFactorization` (from `factorization.py`)
• `factorizeByBase` (from `factorization.py`)
• `babyStepGiantStep` (from `discreteLogarithm.py`)
• `pohligHellman` (from `discreteLogarithm.py`)
• `logarithmTable` (from `discreteLogarithm.py`)
• `indexCalculus` (from `discreteLogarithm.py`)
• `points` (from `ellipticCurves.py`)
• `pointSum` (from `ellipticCurves.py`)
• `pointMultiply` (from `ellipticCurves.py`)

See sources for the documentation.

Note that `logarithmTable` requires Sage and will therefore not work with plain Python. `indexCalculus` calls `logarithmTable` if a table of logarithms is not specified. If it is given, the function can be used with plain Python.