#!/usr/bin/python3 from CellFrame import init, Cert, CryptoKeyType # from string import Template # import os import sys import json import MyAuthConf import random import string # ---- Vars ---- # App name appName = "MyAuth" # Generate config jsonCfg = MyAuthConf.getJsonString(appName, "CRITICAL") # Init SDK try: init(jsonCfg) except json.decoder.JSONDecodeError as jex: sys.stderr.write("load_json_config JSONdecode :%s" % jex) exit(-1) # Produce random string 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)) # 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" cmdName = "" action_arg = {} # Parse input arguments for arg in sys.argv: counter += 1 # Extract command name if counter == 1: cmdName = arg # Extract subcommand if counter == 2: action = arg elif counter > 2: 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" restoreString = randomString(12) # Set default algo Dilithium 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] if len(action_arg) > 2: restoreString = action_arg[3] # Parse algo name if rootCaAlgoName == "sig_bliss": rootCaAlgo = CryptoKeyType.DAP_ENC_KEY_TYPE_SIG_BLISS() elif rootCaAlgoName == "sig_tesla": rootCaAlgo = CryptoKeyType.DAP_ENC_KEY_TYPE_SIG_TESLA() elif rootCaAlgoName == "sig_picnic": rootCaAlgo = CryptoKeyType.DAP_ENC_KEY_TYPE_SIG_PICNIC() elif rootCaAlgoName == "sig_dil": 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 print("Init root "+str(rootCaNumber)+" certificates with algo " + rootCaAlgoName) print("Record somewhere the restore string(without braces): \"" + restoreString+"\"") for cur in range(int(rootCaNumber)): cname = MyAuthConf.getNetworkName(appName, "_") + "_root_" + str(cur) cert = Cert.generate(cname, rootCaAlgo, restoreString) cert.save()