public IActionResult LfsrGenerate([FromBody] LfsrGeneratorsViewModel viewModel) { var numOfRegisters = viewModel.Registers.Length; Lfsr[] registers = new Lfsr[numOfRegisters]; for (int i = 0; i < numOfRegisters; i++) { registers[i] = new Lfsr(viewModel.Registers[i]); registers[i].SetFeedbackFunction(viewModel.FeedbackFunctions[i]); } LfsrGenerator generator = new LfsrGenerator(registers); SeriesMode mode = (SeriesMode)viewModel.Mode; switch (mode) { case SeriesMode.Binary: { var data = generator.GenerateBitsAsChars(viewModel.Length); var r = LfsrHelper.GetRegisterAsStringArray(generator.Registers); return(Json(new { data = new string(data), registers = r })); } case SeriesMode.Hex: { var data = generator.GenerateBytes(viewModel.Length); var r = LfsrHelper.GetRegisterAsStringArray(generator.Registers); return(Json(new { data = BitConverter.ToString(data), registers = r })); } case SeriesMode.Base64: { var data = generator.GenerateBytes(viewModel.Length); var r = LfsrHelper.GetRegisterAsStringArray(generator.Registers); return(Json(new { data = data, registers = r })); } } return(Json("")); }
private void GenerateBtn_Click(object sender, RoutedEventArgs e) { string r1 = r1State.Content as string; Lfsr[] lfsrs = new Lfsr[1]; lfsrs[0] = new Lfsr(r1); //setting custom feedback function ChangeLfsrFeedbackFunctions(lfsrs); for (int i = 0; i < lfsrs.Length; i++) { generator.ChangeRegister(lfsrs[i], i); } var format = outputFormatComboBox.SelectedIndex; int seriesLength = 0; if (outputLength.Text != "") { seriesLength = int.Parse(outputLength.Text); } uint period = 0; bool checkPeriod = false; if (calculatePeriodCheckbox.IsChecked == true) { checkPeriod = true; } ClearOutput(); Task.Run(() => { SetLoadingCircle(true); disableButtons(); ResetFipsIcons(); byte[] generatedBytes = null; switch (format) { case 0: { lastGeneratedFormat = format; try { if (checkPeriod) { lastGeneratedString = new string(generator.GenerateBitsAsCharsWithPeriodCheck(seriesLength, lfsrs[0])); period = generator.Period; } else { lastGeneratedString = new string(generator.GenerateBitsAsChars(seriesLength)); } } catch (Exception ex) { SetLoadingCircle(false); MessageBox.Show(ex.Message); return; } SetOutputText(lastGeneratedString); SetLoadingCircle(false); break; } case 1: { try { if (checkPeriod) { generatedBytes = generator.GenerateBytesWithPeriodCheck(seriesLength, lfsrs[0]); period = generator.Period; } else { generatedBytes = generator.GenerateBytes(seriesLength); } } catch (Exception ex) { SetLoadingCircle(false); MessageBox.Show(ex.Message); return; } lastGeneratedFormat = format; lastGeneratedString = Convert.ToBase64String(generatedBytes); SetOutputText(lastGeneratedString); SetLoadingCircle(false); break; } default: break; } UpdateRegisterState(generator); setPeriodInfo(period); enableButtons(); if (seriesLength >= 20000) { SingleBitTestResult singleBitResult = null; SeriesTestResult seriesResult = null; LongSeriesTestResult longSeriesResult = null; PokerTestResult pokerResult = null; if (format == 0) { FipsTests fipsTests = new FipsTests(); var testInput = lastGeneratedString.Substring(0, 20000); singleBitResult = fipsTests.SingleBitTest(testInput); seriesResult = fipsTests.SeriesTest(testInput); longSeriesResult = fipsTests.LongSeriesTests(testInput); pokerResult = fipsTests.PokerTest(testInput); } else if (format == 1) { FipsTests fipsTests = new FipsTests(); byte[] testArray = new byte[2500]; Array.Copy(generatedBytes, testArray, 2500); if (generatedBytes != null) { singleBitResult = fipsTests.SingleBitTest(testArray); seriesResult = fipsTests.SeriesTest(testArray); longSeriesResult = fipsTests.LongSeriesTests(testArray); pokerResult = fipsTests.PokerTest(testArray); } } if (singleBitResult.TestPassed) { singleBitSuccess(); } else { singleBitFail(); } if (seriesResult.TestPassed) { seriesSuccess(); } else { seriesFail(); } if (longSeriesResult.TestPassed) { longSeriesSuccess(); } else { longSeriesFail(); } if (pokerResult.TestPassed) { pokerSuccess(); } else { pokerFail(); } } }); }