


import os
import random
import sys

from . import cryptomath_module as cryptoMath  # noqa: N812
from . import rabin_miller as rabinMiller  # noqa: N812
def   _UpperCamelCase				(						)						->None:
   print("""Making key files..."""   )
   make_key_files("""rsa"""  ,						1_0_2_4   )
   print("""Key files generation successful."""   )
def   _UpperCamelCase				(						lowerCAmelCase_   )						->tuple[tuple[int, int], tuple[int, int]]:
   print("""Generating prime p..."""   )
   UpperCAmelCase							=     rabinMiller.generate_large_prime(lowerCAmelCase_   )
   print("""Generating prime q..."""   )
   UpperCAmelCase							=     rabinMiller.generate_large_prime(lowerCAmelCase_   )
   UpperCAmelCase							=     p * q

   print("""Generating e that is relatively prime to (p - 1) * (q - 1)..."""   )
   while True:
      UpperCAmelCase							=     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..."""   )
   UpperCAmelCase							=     cryptoMath.find_mod_inverse(lowerCAmelCase_  ,						(p - 1) * (q - 1)   )

   UpperCAmelCase							=     (n, e)
   UpperCAmelCase							=     (n, d)
   return (public_key, private_key)
def   _UpperCamelCase				(						lowerCAmelCase_  ,						lowerCAmelCase_   )						->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()

   UpperCAmelCase				,  UpperCAmelCase							=     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()







__a     =			[
    (1000, """M"""),
    (900, """CM"""),
    (500, """D"""),
    (400, """CD"""),
    (100, """C"""),
    (90, """XC"""),
    (50, """L"""),
    (40, """XL"""),
    (10, """X"""),
    (9, """IX"""),
    (5, """V"""),
    (4, """IV"""),
    (1, """I"""),
]
def   _UpperCamelCase				(						lowerCAmelCase_   )						->int:
   UpperCAmelCase							=     {"""I""": 1, """V""": 5, """X""": 1_0, """L""": 5_0, """C""": 1_0_0, """D""": 5_0_0, """M""": 1_0_0_0}
   UpperCAmelCase							=     0
   UpperCAmelCase							=     0
   while place < len(lowerCAmelCase_   ):
      if (place + 1 < len(lowerCAmelCase_   )) and (vals[roman[place]] < vals[roman[place + 1]]):
         total += vals[roman[place + 1]] - vals[roman[place]]
         place += 2
      else:
         total += vals[roman[place]]
         place += 1
   return total
def   _UpperCamelCase				(						lowerCAmelCase_   )						->str:
   UpperCAmelCase							=     []
   for arabic, roman in ROMAN:
      ((UpperCAmelCase)				,  (UpperCAmelCase))							=     divmod(lowerCAmelCase_  ,						lowerCAmelCase_   )
      result.append(roman * factor   )
      if number == 0:
         break
   return "".join(lowerCAmelCase_   )


if __name__ == "__main__":
 import doctest

 doctest.testmod()



