mirror of
https://github.com/eried/portapack-mayhem.git
synced 2024-10-01 01:26:06 -04:00
Compare commits
2 Commits
44c49b9bb9
...
193545b6da
Author | SHA1 | Date | |
---|---|---|---|
|
193545b6da | ||
|
14ef1332aa |
@ -2,6 +2,7 @@
|
|||||||
* Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc.
|
* Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc.
|
||||||
* Copyright (C) 2017 Furrtek
|
* Copyright (C) 2017 Furrtek
|
||||||
* copyleft zxkmm
|
* copyleft zxkmm
|
||||||
|
* Copyright (C) 2024 HToToo
|
||||||
*
|
*
|
||||||
* This file is part of PortaPack.
|
* This file is part of PortaPack.
|
||||||
*
|
*
|
||||||
@ -72,7 +73,8 @@ RandomPasswordView::RandomPasswordView(NavigationView& nav)
|
|||||||
&button_send,
|
&button_send,
|
||||||
&field_digits,
|
&field_digits,
|
||||||
&check_allow_confusable_chars,
|
&check_allow_confusable_chars,
|
||||||
&text_seed});
|
&text_seed,
|
||||||
|
&progressbar});
|
||||||
|
|
||||||
// no idea what's these, i copied from afsk rx app and they seems needed'
|
// no idea what's these, i copied from afsk rx app and they seems needed'
|
||||||
auto def_bell202 = &modem_defs[0];
|
auto def_bell202 = &modem_defs[0];
|
||||||
@ -84,6 +86,8 @@ RandomPasswordView::RandomPasswordView(NavigationView& nav)
|
|||||||
serial_format.bit_order = LSB_FIRST;
|
serial_format.bit_order = LSB_FIRST;
|
||||||
persistent_memory::set_serial_format(serial_format);
|
persistent_memory::set_serial_format(serial_format);
|
||||||
|
|
||||||
|
progressbar.set_max(30);
|
||||||
|
|
||||||
check_log.set_value(logging);
|
check_log.set_value(logging);
|
||||||
check_log.on_select = [this](Checkbox&, bool v) {
|
check_log.on_select = [this](Checkbox&, bool v) {
|
||||||
if (v) {
|
if (v) {
|
||||||
@ -160,6 +164,7 @@ RandomPasswordView::RandomPasswordView(NavigationView& nav)
|
|||||||
};
|
};
|
||||||
|
|
||||||
field_digits.on_change = [this](int32_t) {
|
field_digits.on_change = [this](int32_t) {
|
||||||
|
clean_buffer();
|
||||||
this->new_password();
|
this->new_password();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -191,12 +196,27 @@ void RandomPasswordView::on_data(uint32_t value, bool is_data) {
|
|||||||
if (is_data) {
|
if (is_data) {
|
||||||
seed = static_cast<unsigned int>(value);
|
seed = static_cast<unsigned int>(value);
|
||||||
text_seed.set(to_string_dec_uint(check_show_seeds.value() ? seed : 0));
|
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 {
|
} else {
|
||||||
text_generated_passwd.set("Baudrate estimation: ~");
|
text_generated_passwd.set("Baudrate estimation: ~");
|
||||||
text_char_type_hints.set(to_string_dec_uint(value));
|
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) {
|
void RandomPasswordView::on_freqchg(int64_t freq) {
|
||||||
field_frequency.set_value(freq);
|
field_frequency.set_value(freq);
|
||||||
}
|
}
|
||||||
@ -212,8 +232,8 @@ void RandomPasswordView::set_random_freq() {
|
|||||||
|
|
||||||
void RandomPasswordView::new_password() {
|
void RandomPasswordView::new_password() {
|
||||||
password = "";
|
password = "";
|
||||||
std::string charset;
|
std::string charset = "";
|
||||||
std::string char_type_hints;
|
std::string char_type_hints = "";
|
||||||
|
|
||||||
if (check_digits.value())
|
if (check_digits.value())
|
||||||
charset += "0123456789";
|
charset += "0123456789";
|
||||||
@ -233,22 +253,31 @@ void RandomPasswordView::new_password() {
|
|||||||
if (charset.empty()) {
|
if (charset.empty()) {
|
||||||
text_generated_passwd.set("generate failed,");
|
text_generated_passwd.set("generate failed,");
|
||||||
text_char_type_hints.set("select at least 1 type");
|
text_char_type_hints.set("select at least 1 type");
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (seed == 0) {
|
if (seeds_deque.size() < MAX_DIGITS) {
|
||||||
text_generated_passwd.set("generate failed,");
|
seeds_buffer_not_full = true;
|
||||||
text_char_type_hints.set("random seed exception");
|
text_generated_passwd.set("wait seeds buffer full");
|
||||||
} else {
|
text_char_type_hints.set("then press generate");
|
||||||
std::srand(seed); // extern void srand (unsigned int __seed) __THROW;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int password_length = field_digits.value();
|
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++) {
|
for (int i = 0; i < password_length; i++) {
|
||||||
|
unsigned int seed = seeds_deque[i];
|
||||||
|
std::srand(seed);
|
||||||
char c = charset[std::rand() % charset.length()];
|
char c = charset[std::rand() % charset.length()];
|
||||||
password += c;
|
password += c;
|
||||||
|
char_deque.push_back(std::string(1, c));
|
||||||
|
|
||||||
if (std::isdigit(c)) {
|
if (std::isdigit(c)) {
|
||||||
char_type_hints += "1";
|
char_type_hints += "1";
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
* Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc.
|
* Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc.
|
||||||
* Copyright (C) 2017 Furrtek
|
* Copyright (C) 2017 Furrtek
|
||||||
* copyleft zxkmm
|
* copyleft zxkmm
|
||||||
|
* Copyright (C) 2024 HToToo
|
||||||
*
|
*
|
||||||
* This file is part of PortaPack.
|
* This file is part of PortaPack.
|
||||||
*
|
*
|
||||||
@ -24,6 +25,8 @@
|
|||||||
#ifndef __UI_RANDOM_PASSWORD_H__
|
#ifndef __UI_RANDOM_PASSWORD_H__
|
||||||
#define __UI_RANDOM_PASSWORD_H__
|
#define __UI_RANDOM_PASSWORD_H__
|
||||||
|
|
||||||
|
#define MAX_DIGITS 30
|
||||||
|
|
||||||
#include "ui.hpp"
|
#include "ui.hpp"
|
||||||
#include "ui_language.hpp"
|
#include "ui_language.hpp"
|
||||||
#include "ui_navigation.hpp"
|
#include "ui_navigation.hpp"
|
||||||
@ -36,12 +39,13 @@
|
|||||||
#include "utility.hpp"
|
#include "utility.hpp"
|
||||||
#include "ui_qrcode.hpp"
|
#include "ui_qrcode.hpp"
|
||||||
#include "usb_serial_asyncmsg.hpp"
|
#include "usb_serial_asyncmsg.hpp"
|
||||||
|
#include <deque>
|
||||||
|
|
||||||
using namespace ui;
|
using namespace ui;
|
||||||
|
|
||||||
namespace ui::external_app::random_password {
|
namespace ui::external_app::random_password {
|
||||||
|
|
||||||
class RandomPasswordLogger {
|
class RandomPasswordLogger { // TODO: log is broken after introduced the buffer thing
|
||||||
public:
|
public:
|
||||||
Optional<File::Error> append(const std::filesystem::path& filename) {
|
Optional<File::Error> append(const std::filesystem::path& filename) {
|
||||||
return log_file.append(filename);
|
return log_file.append(filename);
|
||||||
@ -65,8 +69,12 @@ class RandomPasswordView : public View {
|
|||||||
private:
|
private:
|
||||||
unsigned int seed = 0; // extern void srand (unsigned int __seed) __THROW;
|
unsigned int seed = 0; // extern void srand (unsigned int __seed) __THROW;
|
||||||
std::string password = "";
|
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 on_data(uint32_t value, bool is_data);
|
||||||
|
void clean_buffer();
|
||||||
void new_password();
|
void new_password();
|
||||||
std::string generate_log_line();
|
std::string generate_log_line();
|
||||||
void paint_password_hints();
|
void paint_password_hints();
|
||||||
@ -110,6 +118,9 @@ class RandomPasswordView : public View {
|
|||||||
{0, 2 * 16, screen_width / 2, 16},
|
{0, 2 * 16, screen_width / 2, 16},
|
||||||
"0000000000"};
|
"0000000000"};
|
||||||
|
|
||||||
|
ProgressBar progressbar{
|
||||||
|
{screen_width / 2 + 1, 2 * 16, screen_width - 96 - (0 * 8 + screen_width / 2 + 1) - 1, 16}};
|
||||||
|
|
||||||
Text text_generated_passwd{
|
Text text_generated_passwd{
|
||||||
{0, 4 * 16, screen_width, 28},
|
{0, 4 * 16, screen_width, 28},
|
||||||
"000000000000000000000000000000"};
|
"000000000000000000000000000000"};
|
||||||
|
Loading…
Reference in New Issue
Block a user