Skip to content
Snippets Groups Projects
MyAuthCA.py 2.91 KiB
Newer Older
#!/usr/bin/python3
Dmitriy A. Gerasimov's avatar
Dmitriy A. Gerasimov committed
from CellFrame import init, Cert, CryptoKeyType
Dmitriy A. Gerasimov's avatar
Dmitriy A. Gerasimov committed
# from string import Template
# import os
import sys
Dmitriy A. Gerasimov's avatar
Dmitriy A. Gerasimov committed
import json
import MyAuthConf
Dmitriy A. Gerasimov's avatar
Dmitriy A. Gerasimov committed
import random
import string
Dmitriy A. Gerasimov's avatar
Dmitriy A. Gerasimov committed

# ---- Vars ----
# App name
appName = "MyAuth"
Dmitriy A. Gerasimov's avatar
Dmitriy A. Gerasimov committed
jsonCfg = MyAuthConf.getJsonString(appName, "CRITICAL")
try:
Dmitriy A. Gerasimov's avatar
Dmitriy A. Gerasimov committed
    init(jsonCfg)
except json.decoder.JSONDecodeError as jex:
    sys.stderr.write("load_json_config JSONdecode :%s" % jex)
    exit(-1)


Dmitriy A. Gerasimov's avatar
Dmitriy A. Gerasimov committed
# Produce random string
Dmitriy A. Gerasimov's avatar
Dmitriy A. Gerasimov committed
def randomString(stringLength=10):
    """Generate a random string of fixed length """
    letters = string.ascii_lowercase
    return ''.join(random.choice(letters) for i in range(stringLength))

Dmitriy A. Gerasimov's avatar
Dmitriy A. Gerasimov committed
# Action Help
def help():
    print("CA managment script usage: ")
    print("")
    print("To get this help")
    print("\t"+cmdName+" [help]")
    print("")
    print("Generate <Root nodes number> certificates (5 by default)" +
          "for selected <Algorythm> (\"sig_dil\" by default)")
    print("\t"+cmdName+" init_root_ca [<Root nodes number>] [<Algorythm>] [<Restore string>]")
    print("")


counter = 0
action = "help"
action_arg = {}
for arg in sys.argv:
Dmitriy A. Gerasimov's avatar
Dmitriy A. Gerasimov committed
    counter += 1
    # Extract command name
    if counter == 1:
    # Extract subcommand
    if counter == 2:
        action = arg
    elif counter > 2:
Dmitriy A. Gerasimov's avatar
Dmitriy A. Gerasimov committed
        action_arg[counter-2] = arg
# Process actions
if action == "help":
    help()
# Action init root CAs
elif action == "init_root_ca":
    # Default params
    rootCaNumber = 5
    rootCaAlgoName = "sig_dil"
Dmitriy A. Gerasimov's avatar
Dmitriy A. Gerasimov committed
    restoreString = randomString(12)

    # Set default algo Dilithium
Dmitriy A. Gerasimov's avatar
Dmitriy A. Gerasimov committed
    rootCaAlgo = CryptoKeyType.DAP_ENC_KEY_TYPE_SIG_DILITHIUM()

    # Read action args
    if len(action_arg) > 0:
        rootCaNumber = action_arg[1]
    if len(action_arg) > 1:
        rootCaAlgoName = action_arg[2]
Dmitriy A. Gerasimov's avatar
Dmitriy A. Gerasimov committed
    if len(action_arg) > 2:
        restoreString = action_arg[3]

    # Parse algo name
    if rootCaAlgoName == "sig_bliss":
Dmitriy A. Gerasimov's avatar
Dmitriy A. Gerasimov committed
        rootCaAlgo = CryptoKeyType.DAP_ENC_KEY_TYPE_SIG_BLISS()
    elif rootCaAlgoName == "sig_tesla":
Dmitriy A. Gerasimov's avatar
Dmitriy A. Gerasimov committed
        rootCaAlgo = CryptoKeyType.DAP_ENC_KEY_TYPE_SIG_TESLA()
    elif rootCaAlgoName == "sig_picnic":
Dmitriy A. Gerasimov's avatar
Dmitriy A. Gerasimov committed
        rootCaAlgo = CryptoKeyType.DAP_ENC_KEY_TYPE_SIG_PICNIC()
    elif rootCaAlgoName == "sig_dil":
Dmitriy A. Gerasimov's avatar
Dmitriy A. Gerasimov committed
        rootCaAlgo = CryptoKeyType.DAP_ENC_KEY_TYPE_SIG_DILITHIUM()
    else:
        # Process error case
        print("(!) Wrong algo name \""+rootCaAlgoName+"\", possible names: sig_bliss, sig_tesla, sig_picnic, sig_dil")
        help()
        exit(-1)

    # Create certs
Dmitriy A. Gerasimov's avatar
Dmitriy A. Gerasimov committed
    print("Init root "+str(rootCaNumber)+" certificates with algo "
          + rootCaAlgoName)
    print("Record somewhere the restore string(without braces): \""
          + restoreString+"\"")
    for cur in range(int(rootCaNumber)):
Dmitriy A. Gerasimov's avatar
Dmitriy A. Gerasimov committed
        cname = MyAuthConf.getNetworkName(appName, "_") + "_root_" + str(cur)
        cert = Cert.generate(cname, rootCaAlgo, restoreString)
        cert.save()