Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
 public AesKey(AesManaged initializedAes)
 {
     aesManaged = initializedAes;
     IV         = KeySerializer.ByteArrayToString(initializedAes.IV);
     Key        = KeySerializer.ByteArrayToString(initializedAes.Key);
 }