
"""simple docstring"""
import os
import random
import sys

from . import cryptomath_module as cryptoMath  # noqa: N812
from . import rabin_miller as rabinMiller  # noqa: N812





def    _lowerCAmelCase    (     )  ->    None:
  print("Making key files..."				)
  make_key_files("rsa",						1_0_2_4				)
  print("Key files generation successful."				)





def    _lowerCAmelCase    (     lowerCamelCase__							:							int				)  ->    tuple[tuple[int, int], tuple[int, int]]:
  print("Generating prime p..."				)
  _SCREAMING_SNAKE_CASE   :				Any							    = rabinMiller.generate_large_prime(__lowerCAmelCase				)
  print("Generating prime q..."				)
  _SCREAMING_SNAKE_CASE   :				List[Any]							    = rabinMiller.generate_large_prime(__lowerCAmelCase				)
  _SCREAMING_SNAKE_CASE   :				int							    = p * q

  print("Generating e that is relatively prime to (p - 1) * (q - 1)..."				)
  while True:
    _SCREAMING_SNAKE_CASE   :				List[Any]							    = random.randrange(2 ** (key_size - 1),						2 ** (key_size)				)
    if cryptoMath.gcd(__lowerCAmelCase,						(p - 1) * (q - 1)				) == 1:
      break

  print("Calculating d that is mod inverse of e..."				)
  _SCREAMING_SNAKE_CASE   :				int							    = cryptoMath.find_mod_inverse(__lowerCAmelCase,						(p - 1) * (q - 1)				)

  _SCREAMING_SNAKE_CASE   :				str							    = (n, e)
  _SCREAMING_SNAKE_CASE   :				Tuple							    = (n, d)
  return (public_key, private_key)





def    _lowerCAmelCase    (     lowerCamelCase__							:							Any,						lowerCamelCase__							:							Any				)  ->    None:
  if os.path.exists(f'''{name}_pubkey.txt'''				) or os.path.exists(f'''{name}_privkey.txt'''				):
    print("\nWARNING:"				)
    print(
        f'''"{name}_pubkey.txt" or "{name}_privkey.txt" already exists. \n'''
        "Use a different name or delete these files and re-run this program."				)
    sys.exit()

  _SCREAMING_SNAKE_CASE   :				List[str]							    = generate_key(__lowerCAmelCase				)
  print(f'''\nWriting public key to file {name}_pubkey.txt...'''				)
  with open(f'''{name}_pubkey.txt''',						"w"				) as out_file:
    out_file.write(f'''{key_size},{public_key[0]},{public_key[1]}'''				)

  print(f'''Writing private key to file {name}_privkey.txt...'''				)
  with open(f'''{name}_privkey.txt''',						"w"				) as out_file:
    out_file.write(f'''{key_size},{private_key[0]},{private_key[1]}'''				)


if __name__ == "__main__":
    main()





"""simple docstring"""
def    _lowerCAmelCase    (     lowerCamelCase__							:							str,						lowerCamelCase__							:							str				)  ->    Union[str, Any]:
  print("\nThe shortest path matrix using Floyd Warshall algorithm\n"				)
  for i in range(lowerCamelCase__				):
    for j in range(lowerCamelCase__				):
      if dist[i][j] != float("inf"				):
        print(int(dist[i][j]				),						end="\t"				)
      else:
        print("INF",						end="\t"				)
    print()





def    _lowerCAmelCase    (     lowerCamelCase__							:							Dict,						lowerCamelCase__							:							Any				)  ->    List[str]:
  _SCREAMING_SNAKE_CASE   :				List[Any]							    = [[float("inf"				) for _ in range(lowerCamelCase__				)] for _ in range(lowerCamelCase__				)]

  for i in range(lowerCamelCase__				):
    for j in range(lowerCamelCase__				):
      _SCREAMING_SNAKE_CASE   :				List[Any]							    = graph[i][j]

      # check vertex k against all other vertices (i, j)
  for k in range(lowerCamelCase__				):
    # looping through rows of graph array
    for i in range(lowerCamelCase__				):
      # looping through columns of graph array
      for j in range(lowerCamelCase__				):
        if (
            dist[i][k] != float("inf"				)
            and dist[k][j] != float("inf"				)
            and dist[i][k] + dist[k][j] < dist[i][j]
        ):
          _SCREAMING_SNAKE_CASE   :				List[Any]							    = dist[i][k] + dist[k][j]

  _print_dist(lowerCamelCase__,						lowerCamelCase__				)
  return dist, v


if __name__ == "__main__":
      lowercase_       :						Tuple     					=	int(input('''Enter number of vertices: '''))
      lowercase_       :						List[Any]     					=	int(input('''Enter number of edges: '''))

      lowercase_       :						Optional[Any]     					=	[[float('''inf''') for i in range(v)] for j in range(v)]

      for i in range(v):
            lowercase_       :						Tuple     					=	0.0

            # src and dst are indices that must be within the array size graph[e][v]
            # failure to follow this will result in an error
      for i in range(e):
            print('''\nEdge ''', i + 1)
            lowercase_       :						str     					=	int(input('''Enter source:'''))
            lowercase_       :						Optional[Any]     					=	int(input('''Enter destination:'''))
            lowercase_       :						Union[str, Any]     					=	float(input('''Enter weight:'''))
            lowercase_       :						str     					=	weight

      floyd_warshall(graph, v)

      # Example Input
      # Enter number of vertices: 3
      # Enter number of edges: 2

      # # generated graph from vertex and edge inputs
      # [[inf, inf, inf], [inf, inf, inf], [inf, inf, inf]]
      # [[0.0, inf, inf], [inf, 0.0, inf], [inf, inf, 0.0]]

      # specify source, destination and weight for edge #1
      # Edge  1
      # Enter source:1
      # Enter destination:2
      # Enter weight:2

      # specify source, destination and weight for edge #2
      # Edge  2
      # Enter source:2
      # Enter destination:1
      # Enter weight:1

      # # Expected Output from the vertice, edge and src, dst, weight inputs!!
      # 0		INF	INF
      # INF	0	2
      # INF	1	0



