Files
rsa/Testing.md
2026-06-24 16:33:39 +02:00

45 lines
3.1 KiB
Markdown

### The coverage report of the unit tests.
```
Name Stmts Miss Cover
--------------------------------------------------
test/__init__.py 0 0 100%
test/test_eea.py 105 1 99%
test/test_encrypt_decrypt.py 18 1 94%
test/test_generator.py 14 1 93%
test/test_primality_test.py 51 1 98%
--------------------------------------------------
TOTAL 188 4 98%
```
### What has been tested and how?
\- The Extended Euclidean Algorithm has been tested to make sure that given `a` and `b`, it correctly returns a tuple `(gcd, x, y)` such that `a * x + b * y = gcd`, with `gcd` being the greatest common divisor of `a` and `b`. The following cases were tested:
\+ Both `a`, `b` are positive integers.
\+ Either `a` or `b` is zero.
\+ Both `a` and `b` are zero.
\+ Either `a` or `b` is negative, the other is positive.
\+ Both `a` and `b` are negative integers.
\- The implementation of the Miller-Rabin primality test has been tested. The implementation correctly works as the test theoretically envisioned. The test is only probabilistic, so it might occassionally mistake a composite number as a prime. However, for our purposes, it is good enough.
\- The key generator has been tested to make sure it correctly returns the public key components `n` and `e` as well as the private key `d`.
\- The encrypt and decrypt functions have been tested to make sure that:
\+ The encrypted string is not the same as the original string.
\+ The decrypted string is the same as the original string.
### What kind of inputs were used for the testing?
\- For the Extended Euclidean Algorithm, we inputted different values of `a` and `b`.
\- For the Miller-Rabin test, we inputted some prime numbers, non-prime numbers, as well as edge cases. Specifically, we used:
\+ 10 prime numbers, including 5 small prime numbers and 5 verified large prime numbers found on Wikipedia
\+ 10 non-prime numbers, including 4 small non-prime numbers and 6 large non-prime numbers. The 6 large non-prime numbers were generated by:
\* Adding 1 to a verified large prime number
\* Multiplying two verified large prime numbers together
\* Multiplying a verified large prime number with a random number in the range $[1, 10^{1000})$
\* Multiplying another verified large prime number with a random number in the range $[1, 7^{750})$
\* Multiplying two random numbers in the range $[1, 10^{1000})$ together
\* Multiplying two verified large prime numbers together, again
\+ 5 edge cases: 0, 1, 2, 3, 5
\- For the key generator, no input is required.
\- For the encrypt and decrypt functions, we inputted a few sample strings in several different languages, including a 257-character string to ensure that the algorithm can at least encrypt and decrypt strings of length up to 256 characters.
### How can the tests be repeated?
Running `./coverage.sh` on the terminal should execute all the written tests. New tests can also be written to the files inside the [test](./test) folder.