Removed redundant greatest_common_divisor code (#9358)
* Deleted greatest_common_divisor def from many files and instead imported the method from Maths folder * Deleted greatest_common_divisor def from many files and instead imported the method from Maths folder, also fixed comments * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Deleted greatest_common_divisor def from many files and instead imported the method from Maths folder, also fixed comments * Imports organized * recursive gcd function implementation rolledback * more gcd duplicates removed * more gcd duplicates removed * Update maths/carmichael_number.py * updated files * moved a file to another location --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Tianyi Zheng <tianyizheng02@gmail.com>
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
import random
|
||||
import sys
|
||||
|
||||
from maths.greatest_common_divisor import gcd_by_iterative
|
||||
|
||||
from . import cryptomath_module as cryptomath
|
||||
|
||||
SYMBOLS = (
|
||||
@@ -26,7 +28,7 @@ def check_keys(key_a: int, key_b: int, mode: str) -> None:
|
||||
"Key A must be greater than 0 and key B must "
|
||||
f"be between 0 and {len(SYMBOLS) - 1}."
|
||||
)
|
||||
if cryptomath.gcd(key_a, len(SYMBOLS)) != 1:
|
||||
if gcd_by_iterative(key_a, len(SYMBOLS)) != 1:
|
||||
sys.exit(
|
||||
f"Key A {key_a} and the symbol set size {len(SYMBOLS)} "
|
||||
"are not relatively prime. Choose a different key."
|
||||
@@ -76,7 +78,7 @@ def get_random_key() -> int:
|
||||
while True:
|
||||
key_b = random.randint(2, len(SYMBOLS))
|
||||
key_b = random.randint(2, len(SYMBOLS))
|
||||
if cryptomath.gcd(key_b, len(SYMBOLS)) == 1 and key_b % len(SYMBOLS) != 0:
|
||||
if gcd_by_iterative(key_b, len(SYMBOLS)) == 1 and key_b % len(SYMBOLS) != 0:
|
||||
return key_b * len(SYMBOLS) + key_b
|
||||
|
||||
|
||||
|
||||
@@ -1,11 +1,8 @@
|
||||
def gcd(a: int, b: int) -> int:
|
||||
while a != 0:
|
||||
a, b = b % a, a
|
||||
return b
|
||||
from maths.greatest_common_divisor import gcd_by_iterative
|
||||
|
||||
|
||||
def find_mod_inverse(a: int, m: int) -> int:
|
||||
if gcd(a, m) != 1:
|
||||
if gcd_by_iterative(a, m) != 1:
|
||||
msg = f"mod inverse of {a!r} and {m!r} does not exist"
|
||||
raise ValueError(msg)
|
||||
u1, u2, u3 = 1, 0, a
|
||||
|
||||
@@ -39,19 +39,7 @@ import string
|
||||
|
||||
import numpy
|
||||
|
||||
|
||||
def greatest_common_divisor(a: int, b: int) -> int:
|
||||
"""
|
||||
>>> greatest_common_divisor(4, 8)
|
||||
4
|
||||
>>> greatest_common_divisor(8, 4)
|
||||
4
|
||||
>>> greatest_common_divisor(4, 7)
|
||||
1
|
||||
>>> greatest_common_divisor(0, 10)
|
||||
10
|
||||
"""
|
||||
return b if a == 0 else greatest_common_divisor(b % a, a)
|
||||
from maths.greatest_common_divisor import greatest_common_divisor
|
||||
|
||||
|
||||
class HillCipher:
|
||||
|
||||
@@ -2,6 +2,8 @@ import os
|
||||
import random
|
||||
import sys
|
||||
|
||||
from maths.greatest_common_divisor import gcd_by_iterative
|
||||
|
||||
from . import cryptomath_module, rabin_miller
|
||||
|
||||
|
||||
@@ -27,7 +29,7 @@ def generate_key(key_size: int) -> tuple[tuple[int, int], tuple[int, int]]:
|
||||
# Generate e that is relatively prime to (p - 1) * (q - 1)
|
||||
while True:
|
||||
e = random.randrange(2 ** (key_size - 1), 2 ** (key_size))
|
||||
if cryptomath_module.gcd(e, (p - 1) * (q - 1)) == 1:
|
||||
if gcd_by_iterative(e, (p - 1) * (q - 1)) == 1:
|
||||
break
|
||||
|
||||
# Calculate d that is mod inverse of e
|
||||
|
||||
Reference in New Issue
Block a user