private static List <SKUCheckData> GetSKUCheckData(bool reversed, ref byte[] data, ref Common.TypeData checkdata) { var ret = new List <SKUCheckData>(); foreach (var skuDataEntry in checkdata.SKUDataList.Value) { var skuCheckDataEntry = new SKUCheckData { Type = skuDataEntry.Type }; var tmpdata = new byte[skuDataEntry.Size]; Buffer.BlockCopy(data, (int)skuDataEntry.Offset, tmpdata, 0, tmpdata.Length); if (reversed) { if (skuDataEntry.Size == 1) { if ((skuDataEntry.Offset % 2) == 0) { if (data.Length < skuDataEntry.Offset + 1) { Logger.WriteLine2("FAILED! Offset is at end of image!"); tmpdata[0] = 0; } else { tmpdata[0] = data[skuDataEntry.Offset + 1]; } } else { tmpdata[0] = data[skuDataEntry.Offset - 1]; } } else { Common.SwapBytes(ref tmpdata); } } if (skuDataEntry.Type.Equals("bootldrsize", StringComparison.CurrentCultureIgnoreCase)) { if (tmpdata.Length == 2) { skuCheckDataEntry.Size = Common.GetLdrSize(ref tmpdata); } else { throw new ArgumentException("The bootloader argument size should be 2"); } } else { skuCheckDataEntry.Data = Common.GetDataForTest(tmpdata); } ret.Add(skuCheckDataEntry); } return(ret); }
private static bool CheckDataPart(ref byte[] srcdata, Common.DataCheck checkdata, bool reversed) { GC.Collect(); if (checkdata.Offset >= srcdata.Length) { Logger.WriteLine2("FAILED! Faulty configuration (Bad Offset)!"); return(false); } long size; if (checkdata.LdrSize != 0) { var tmpdata = new byte[2]; Buffer.BlockCopy(srcdata, (int)checkdata.LdrSize, tmpdata, 0, tmpdata.Length); if (reversed) { Common.SwapBytes(ref tmpdata); } size = Common.GetLdrSize(ref tmpdata); } else { size = checkdata.Size; } var tmp = new byte[size]; if (checkdata.Offset >= srcdata.Length + tmp.Length) { Logger.WriteLine2("FAILED! Faulty configuration (Bad Offset/Data length)!"); return(false); } Buffer.BlockCopy(srcdata, (int)checkdata.Offset, tmp, 0, tmp.Length); var statlist = GetStatistics(ref tmp); var isok = CheckStatistics(statlist, checkdata, tmp.Length); return(isok); }