45 lines
3.1 KiB
Markdown
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.
|