public async Task GenerateSplitedSecret(SecureString hsmSecret, int electionId)
        {
            using (var initializedHsm = await hsmFactory.GetHsm(hsmSecret))
            {
                var keys = keyManager.GenerateNewSerializedKeyPair();

                var handle             = initializedHsm.GenerateMasterKey();
                var encryptedSecretKey = initializedHsm.Encrypt(handle, keys.Secretkey);

                var totalNumberOfShares = (int)ShareHolders.Sum(s => s.NumberOfShares);
                var splitedSecret       = SecretSplitter.SplitMessage(KeySerializer.ByteArrayToString(encryptedSecretKey), Treshold, totalNumberOfShares);
                int index = 0;

                foreach (var shareHolder in ShareHolders)
                {
                    var shares = splitedSecret.Skip(index).Take((int)shareHolder.NumberOfShares);
                    index += (int)shareHolder.NumberOfShares;
                    var bytes = SerializeShares(shares.ToArray());
                    await shareHolder.SaveShares(bytes);
                }

                await centralDbRepository.SaveCryptoDetailsAsync(electionId, handle, keys.PublicKey);
            }
        }