private byte[] Encryption(byte[] data, string aesKey) { var discarded = 0; byte[] iv = new byte[16]; SecureRandom random = new SecureRandom(); random.NextBytes(iv); var key = HexEncoding.GetBytes(aesKey, out discarded); return(HexEncoding.GetBytes(BitConverter.ToString(iv) + BitConverter.ToString(EncryptAES(iv, key, data)), out discarded)); }
public void UpdateBalanceTask() { CancellationTokenSource cts = this.cancellation; Device.StartTimer(TimeSpan.FromSeconds(30), () => { if (cts.IsCancellationRequested) { return(false); } if (BleDevice == null) { return(true); } if (BleDevice.Status != ConnectionStatus.Connected) { //Interlocked.Exchange(ref this.cancellation, new CancellationTokenSource()).Cancel(); UserDialogs.Instance.Toast("Can't find the badge near you.."); Task.Run(async() => { await Reconnect(); }); return(true); } Task.Run(async() => { var badgeSetting = App.Database.BadgeDAO.GetItemsAsync().Result.Last(); var aesKey = badgeSetting.AESKey; var discard = 0; var hexOfContractBalance = BitConverter.ToString(BitConverter.GetBytes((double)(await EthService.Instance.GetTokenBalance("0x" + badgeSetting.Address, EthService.Instance.HitConCoinContract)) / 1000000000000000000)).Replace("-", string.Empty); var hexOfEthBalance = BitConverter.ToString(BitConverter.GetBytes((double)(await EthService.Instance.GetBalance("0x" + badgeSetting.Address)) / 1000000000000000000)).Replace("-", string.Empty); //var contractAddress = EthService.Instance.HitConCoinContract.Remove(0, 2);//string.Format("{0:X2}", balance.ToString("X2").Length / 2) + balance.ToString("X2") var contractAddress = EthService.Instance.HitConCoinContract.Remove(0, 2); var plainData = HexEncoding.GetBytes("01" + string.Format("{0:X2}", contractAddress.Length / 2) + contractAddress + "02" + "08" + hexOfContractBalance + "01" + string.Format("{0:X2}", badgeSetting.Address.Length / 2) + badgeSetting.Address + "02" + "08" + hexOfEthBalance, out discard); byte[] encrypteddata = Encryption(plainData, aesKey); await Badge.Instance.DoWrite(Badge.Instance.CharacteristicUpdateBalance, true, encrypteddata); }); return(true); }); }