mirror of
https://github.com/eried/portapack-mayhem.git
synced 2024-10-01 01:26:06 -04:00
user another methods to generate
This commit is contained in:
parent
14ef1332aa
commit
193545b6da
@ -2,6 +2,7 @@
|
||||
* Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc.
|
||||
* Copyright (C) 2017 Furrtek
|
||||
* copyleft zxkmm
|
||||
* Copyright (C) 2024 HToToo
|
||||
*
|
||||
* This file is part of PortaPack.
|
||||
*
|
||||
@ -72,7 +73,8 @@ RandomPasswordView::RandomPasswordView(NavigationView& nav)
|
||||
&button_send,
|
||||
&field_digits,
|
||||
&check_allow_confusable_chars,
|
||||
&text_seed});
|
||||
&text_seed,
|
||||
&progressbar});
|
||||
|
||||
// no idea what's these, i copied from afsk rx app and they seems needed'
|
||||
auto def_bell202 = &modem_defs[0];
|
||||
@ -84,6 +86,8 @@ RandomPasswordView::RandomPasswordView(NavigationView& nav)
|
||||
serial_format.bit_order = LSB_FIRST;
|
||||
persistent_memory::set_serial_format(serial_format);
|
||||
|
||||
progressbar.set_max(30);
|
||||
|
||||
check_log.set_value(logging);
|
||||
check_log.on_select = [this](Checkbox&, bool v) {
|
||||
if (v) {
|
||||
@ -160,6 +164,7 @@ RandomPasswordView::RandomPasswordView(NavigationView& nav)
|
||||
};
|
||||
|
||||
field_digits.on_change = [this](int32_t) {
|
||||
clean_buffer();
|
||||
this->new_password();
|
||||
};
|
||||
|
||||
@ -191,12 +196,27 @@ void RandomPasswordView::on_data(uint32_t value, bool is_data) {
|
||||
if (is_data) {
|
||||
seed = static_cast<unsigned int>(value);
|
||||
text_seed.set(to_string_dec_uint(check_show_seeds.value() ? seed : 0));
|
||||
|
||||
/// v feed deque
|
||||
seeds_deque.push_back(value);
|
||||
if (seeds_deque.size() > MAX_DIGITS) {
|
||||
seeds_deque.pop_front();
|
||||
}
|
||||
///^ feed deque
|
||||
|
||||
progressbar.set_value(seeds_deque.size());
|
||||
|
||||
} else {
|
||||
text_generated_passwd.set("Baudrate estimation: ~");
|
||||
text_char_type_hints.set(to_string_dec_uint(value));
|
||||
}
|
||||
}
|
||||
|
||||
void RandomPasswordView::clean_buffer() {
|
||||
seeds_deque = {0};
|
||||
char_deque = {""};
|
||||
}
|
||||
|
||||
void RandomPasswordView::on_freqchg(int64_t freq) {
|
||||
field_frequency.set_value(freq);
|
||||
}
|
||||
@ -233,22 +253,31 @@ void RandomPasswordView::new_password() {
|
||||
if (charset.empty()) {
|
||||
text_generated_passwd.set("generate failed,");
|
||||
text_char_type_hints.set("select at least 1 type");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (seed == 0) {
|
||||
text_generated_passwd.set("generate failed,");
|
||||
text_char_type_hints.set("random seed exception");
|
||||
} else {
|
||||
std::srand(seed); // extern void srand (unsigned int __seed) __THROW;
|
||||
if (seeds_deque.size() < MAX_DIGITS) {
|
||||
seeds_buffer_not_full = true;
|
||||
text_generated_passwd.set("wait seeds buffer full");
|
||||
text_char_type_hints.set("then press generate");
|
||||
return;
|
||||
}
|
||||
|
||||
int password_length = field_digits.value();
|
||||
|
||||
/*the seeds_buffer were feed streaming by AFSK,
|
||||
* and when generate, it use each seed for each char, and uint seeds totally can generate UINT_MAX result,
|
||||
* which already cover the 10+26+25+4 (123+abc+abc+.!)
|
||||
* so total possible password would be PW_LENGTH ^ (10+26+25+4), which already covered all the possible solution
|
||||
* (assume AFSK data is averaged in chaotic space, which maybe no one can garentee but I hope so)
|
||||
* */
|
||||
|
||||
for (int i = 0; i < password_length; i++) {
|
||||
unsigned int seed = seeds_deque[i];
|
||||
std::srand(seed);
|
||||
char c = charset[std::rand() % charset.length()];
|
||||
password += c;
|
||||
char_deque.push_back(std::string(1, c));
|
||||
|
||||
if (std::isdigit(c)) {
|
||||
char_type_hints += "1";
|
||||
|
@ -2,6 +2,7 @@
|
||||
* Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc.
|
||||
* Copyright (C) 2017 Furrtek
|
||||
* copyleft zxkmm
|
||||
* Copyright (C) 2024 HToToo
|
||||
*
|
||||
* This file is part of PortaPack.
|
||||
*
|
||||
@ -24,6 +25,8 @@
|
||||
#ifndef __UI_RANDOM_PASSWORD_H__
|
||||
#define __UI_RANDOM_PASSWORD_H__
|
||||
|
||||
#define MAX_DIGITS 30
|
||||
|
||||
#include "ui.hpp"
|
||||
#include "ui_language.hpp"
|
||||
#include "ui_navigation.hpp"
|
||||
@ -36,12 +39,13 @@
|
||||
#include "utility.hpp"
|
||||
#include "ui_qrcode.hpp"
|
||||
#include "usb_serial_asyncmsg.hpp"
|
||||
#include <deque>
|
||||
|
||||
using namespace ui;
|
||||
|
||||
namespace ui::external_app::random_password {
|
||||
|
||||
class RandomPasswordLogger {
|
||||
class RandomPasswordLogger { // TODO: log is broken after introduced the buffer thing
|
||||
public:
|
||||
Optional<File::Error> append(const std::filesystem::path& filename) {
|
||||
return log_file.append(filename);
|
||||
@ -65,8 +69,12 @@ class RandomPasswordView : public View {
|
||||
private:
|
||||
unsigned int seed = 0; // extern void srand (unsigned int __seed) __THROW;
|
||||
std::string password = "";
|
||||
std::deque<unsigned int> seeds_deque = {0};
|
||||
std::deque<std::string> char_deque = {""};
|
||||
bool seeds_buffer_not_full = true;
|
||||
|
||||
void on_data(uint32_t value, bool is_data);
|
||||
void clean_buffer();
|
||||
void new_password();
|
||||
std::string generate_log_line();
|
||||
void paint_password_hints();
|
||||
@ -110,6 +118,9 @@ class RandomPasswordView : public View {
|
||||
{0, 2 * 16, screen_width / 2, 16},
|
||||
"0000000000"};
|
||||
|
||||
ProgressBar progressbar{
|
||||
{screen_width / 2 + 1, 2 * 16, screen_width - 96 - (0 * 8 + screen_width / 2 + 1) - 1, 16}};
|
||||
|
||||
Text text_generated_passwd{
|
||||
{0, 4 * 16, screen_width, 28},
|
||||
"000000000000000000000000000000"};
|
||||
|
Loading…
Reference in New Issue
Block a user