def create()

in source/core-api/custom_resources/generate_keys.py [0:0]


def create(event, _):
    """
    This function is responsible for generating public and private keys.
    Keys generated are stored in Secrets Manager.
    """
    print(event)

    # key id
    kid = uuid.uuid4().hex

    # create JWK format keys
    keypair = jwk.JWK.generate(kid=kid, alg='RS256', kty='RSA', size=2048)

    # get the private and public JWK from the pair
    private_jwk = keypair.export_private(as_dict=True)
    print("Private key generated.")

    public_jwk = keypair.export_public(as_dict=True)
    print("Public key generated")
    print(f"{json.dumps(public_jwk, indent=4)}")

    # store pub/private keys in secrets manager
    try:
        response = secrets_client.create_secret(
            Name=f"{SECRET_NAME_PREFIX}/jwk-private",
            Description="Private JWK",
            SecretString=json.dumps(private_jwk))
        if response["ResponseMetadata"]["HTTPStatusCode"] ==  200:
            print("Private key saved in secrets manager.")
        response = secrets_client.create_secret(
            Name=f"{SECRET_NAME_PREFIX}/jwk-public",
            Description="Public JWK",
            SecretString=json.dumps(public_jwk))
        if response["ResponseMetadata"]["HTTPStatusCode"] ==  200:
            print("Public key saved in secrets manager.")
            
    except Exception as exception:
        print(exception)
        raise exception