public IEnumerable <byte> GetDataCopy(DataWord offsetData, DataWord lengthData) { var offset = offsetData.GetValue().IntValue; var length = lengthData.GetValue().IntValue; byte[] data = new byte[length]; if (_msgDataRaw == null) { return(data); } if (offset > _msgDataRaw.Count()) { return(data); } var res = _msgDataRaw.Skip(offset).Take(length).ToList(); var mod = res.Count % _size; if (mod != 0) { for (int i = 0; i < (_size - mod); i++) { res.Add(0); } } return(res); }
public DataWord GetDataValue(DataWord indexData) { byte[] data = new byte[_size]; var index = indexData.GetValue().IntValue; int size = _size; if (_msgDataRaw == null) { return(new DataWord(data)); } if (index > _msgDataRaw.Count()) { return(new DataWord(data)); } if (index + _size > _msgDataRaw.Count()) { size = _msgDataRaw.Count() - index; } var res = _msgDataRaw.Skip(index).Take(size).ToList(); for (int i = res.Count(); i < _size; i++) { res.Add(0); } return(new DataWord(res.ToArray())); }
public void Div(DataWord word) { if (word.IsZero()) { this.And(ZERO); return; } BigInteger result = GetValue().Divide(word.GetValue()); _data = ByteUtil.CopyToArray(result.And(MAX_VALUE)); }
private static BigInteger MemNeeded(DataWord offset, DataWord size) { return(size.IsZero() ? BigInteger.Zero : offset.GetValue().Add(size.GetValue())); }
public void Exp(DataWord word) { var result = GetValue().ModPow(word.GetValue(), _2_256); _data = ByteUtil.CopyToArray(result); }
public void Sub(DataWord word) { BigInteger result = GetValue().Subtract(word.GetValue()); _data = ByteUtil.CopyToArray(result.And(MAX_VALUE)); }
public void Mul(DataWord word) { BigInteger result = GetValue().Multiply(word.GetValue()); _data = ByteUtil.CopyToArray(result.And(MAX_VALUE)); }