Commit da80eda4 authored by Mathieu Valois's avatar Mathieu Valois
Browse files

some cleanup

parent c9c432d2
Loading
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -21,7 +21,7 @@ $(OBJ)/statsgen.o: $(SRC)/core/statsgen.cpp $(INC)/statsgen.h $(INC)/utils.h
	$(CXX) $(CXXFLAGS) $< -c -o $@

clean:
	-rm -rf $(OBJ)/*
	-rm -rf $(OBJ)/* $(BIN) $(BINGUI)

$(BINGUI):
	qmake -o qmakefile
+14 −20
Original line number Diff line number Diff line
@@ -23,7 +23,8 @@

#define MAX_THREADS 32


typedef std::unordered_map<std::string, uint64_t> StringOccurrence;
typedef std::unordered_map<int, uint64_t> IntOccurrence;

/**
 * @brief Simplify number of arguments for functions
@@ -88,10 +89,10 @@ struct thread_data {
	uint64_t total_counter = 0;
	uint64_t total_filter = 0;

	std::unordered_map<int, uint64_t> length;
	std::unordered_map<std::string, uint64_t> simplemasks;
	std::unordered_map<std::string, uint64_t> advancedmasks;
	std::unordered_map<std::string, uint64_t> charactersets;
	IntOccurrence length;
	StringOccurrence simplemasks;
	StringOccurrence advancedmasks;
	StringOccurrence charactersets;
	std::queue<std::string> password_queue;

	minMax minMaxValue;
@@ -113,20 +114,13 @@ struct thread_data {
 */
class Statsgen {
public:
	Statsgen() {};
	Statsgen(const std::string& name);

	/**
	 * @brief show all options for the command
	 */
	void showHelp();

	/**
	 * @brief Initialise the name of the database
	 * @param name: name of the file
	 */
	void setFilename(const std::string& name);


	/**
	 * @brief useful to hide statistics below 1%
	 * @param hr: 1 to hide, else 0
@@ -218,8 +212,8 @@ public:
	uint64_t getTotalCounter();
	uint64_t getTotalFilter();
	uint64_t getNbSecurePasswords();
	std::unordered_map<int, uint64_t> getStatsLength();
	std::unordered_map<std::string, uint64_t> getStatsCharsets();
	IntOccurrence getStatsLength();
	StringOccurrence getStatsCharsets();



@@ -245,10 +239,10 @@ private:

	// Dictionary

	std::unordered_map<int, uint64_t> stats_length;					// Passwords' length linked to their occurrence
	std::unordered_map<std::string, uint64_t> stats_simplemasks;	// Passwords' simple mask linked to their occurrence
	std::unordered_map<std::string, uint64_t> stats_advancedmasks;	// Passwords' advanced mask linked to their occurrence
	std::unordered_map<std::string, uint64_t> stats_charactersets;	// Passwords' characterset linked to their occurrence
	IntOccurrence stats_length;					// Passwords' length linked to their occurrence
	StringOccurrence stats_simplemasks;	// Passwords' simple mask linked to their occurrence
	StringOccurrence stats_advancedmasks;	// Passwords' advanced mask linked to their occurrence
	StringOccurrence stats_charactersets;	// Passwords' characterset linked to their occurrence


	// Counters
@@ -298,7 +292,7 @@ void analyse_charset(std::string & charset, const Policy & policy);
 * @param limitAdvancedmask: define the limit for the size of advanced masks
 * @param limitSimplemask: define the limit for the size of simple masks
 */
void analyze_password(const std::string & password, Container & c, SecurityRules & sr, const int & limitAdvancedmask, const int & limitSimplemask);
Container analyze_password(const std::string & password, SecurityRules & sr, const int & limitAdvancedmask, const int & limitSimplemask);

/**
 * @brief Update minima and maxima of all general data from analysed passwords
+11 −16
Original line number Diff line number Diff line
@@ -19,17 +19,12 @@
#include <unordered_map>
#include <iomanip>

using namespace std;




template<typename K, typename V>
using UnorderedMapIterator = typename unordered_map<K, V>::const_iterator;
using UnorderedMapIterator = typename std::unordered_map<K, V>::const_iterator;


template<typename K, typename V>
using MapIterator = typename map<K, V>::const_iterator;
using MapIterator = typename std::map<K, V>::const_iterator;



@@ -39,8 +34,8 @@ using MapIterator = typename map<K, V>::const_iterator;
 * @return ordered map
 */
template<typename A>
multimap<uint64_t, A> flip_map(const std::unordered_map<A, uint64_t> & src) {
	multimap<uint64_t, A> dst;
std::multimap<uint64_t, A> flip_map(const std::unordered_map<A, uint64_t> & src) {
	std::multimap<uint64_t, A> dst;

	for(UnorderedMapIterator<A, uint64_t> it = src.begin(); it != src.end(); ++it)
		dst.insert(std::pair<uint64_t, A>(it->second, it->first));
@@ -59,7 +54,7 @@ multimap<uint64_t, A> flip_map(const std::unordered_map<A, uint64_t> & src) {
 * @param hiderare: flag to hide statistics under 1%
 */
template<typename Type>
void readResult(uint64_t res, Type carac, int & count, const uint64_t & total_counter, const int & hiderare) {
void readResult(const uint64_t & res, const Type& carac, int & count, const uint64_t & total_counter, const int & hiderare) {
	float percentage;
	std::ostringstream ss;
	percentage = (float) (100*res) / total_counter;
@@ -69,9 +64,9 @@ void readResult(uint64_t res, Type carac, int & count, const uint64_t & total_co
		std::string value(ss.str());
		value = value.substr(0,5);

		cout << setw(40) << right << carac << ":  "
			<< setw(5) << right << value << "%"
			<< setw(5) << right << "(" << res << ")" << endl;
		std::cout << std::setw(40) << std::right << carac << ":  "
			<< std::setw(5) << std::right << value << "%"
			<< std::setw(5) << std::right << "(" << res << ")" << std::endl;

		count++;
	}
@@ -87,9 +82,9 @@ void readResult(uint64_t res, Type carac, int & count, const uint64_t & total_co
 * @param count: number of shown results
 */
template<typename Type>
void showMap(const unordered_map<Type, uint64_t> & stats, const int & top, const uint64_t & total_counter, const int & hiderare, int & count) {
void showMap(const std::unordered_map<Type, uint64_t> & stats, const int & top, const uint64_t & total_counter, const int & hiderare, int & count) {
	count = 0;
	multimap<uint64_t, Type> reverse = flip_map<Type>(stats);
	std::multimap<uint64_t, Type> reverse = flip_map<Type>(stats);

	MapIterator<uint64_t, Type> it;
	for(it = reverse.end(); it != reverse.begin(); it--) {
@@ -112,5 +107,5 @@ void showMap(const unordered_map<Type, uint64_t> & stats, const int & top, const
 * @param filename: name of the file
 * @return number of line
 */
uint64_t nbline_file(const string & filename);
uint64_t nbline_file(const std::string & filename);
#endif
 No newline at end of file
+9 −5
Original line number Diff line number Diff line
@@ -70,8 +70,16 @@ void showHelp() {

int main(int argc,char* argv[]) {
	locale::global(locale(""));
	Statsgen statsgen;
	
	string filename;
	if(argc > 1){
		filename = argv[optind];
	}
	else {
		showHelp();
	}

	Statsgen statsgen(filename);

	int opt;
	while ((opt = getopt_long(argc, argv, "hwHt:r:o:dA:S:p:s", long_options, NULL)) != -1){
@@ -104,10 +112,6 @@ int main(int argc,char* argv[]) {

	}
	
	if(argc > 1) filename = argv[optind];
	else showHelp();

	statsgen.setFilename(filename);
	if (statsgen.generate_stats()) {
		statsgen.print_stats();
	}
+15 −15
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@
using namespace std;


void Statsgen::setFilename(const std::string& name) {
Statsgen::Statsgen(const std::string& name) {
	if (name == "-"){
		is_stdin = true;
		warn("reading from stdin enabled, loading the whole list in memory");
@@ -47,12 +47,7 @@ void Statsgen::setTop(int val) {


void Statsgen::setRegex(const string& expr) {
	string tmp(expr.length(),' ');
	copy(expr.begin(), expr.end(), tmp.begin());

	regex tmp_reg(tmp);
	current_regex = tmp_reg;

	current_regex = string(expr);
	use_regex = true;
}

@@ -408,7 +403,8 @@ void analyse_letter(const char & letter, char & last_simplemask, string & simple
}


void analyse_charset(string & charset, const Policy & policy) {
string analyse_charset(const Policy & policy) {
	string charset;
	if (policy.digit && !policy.lower && !policy.upper && !policy.special) {
		charset = "numeric";
	}
@@ -456,10 +452,12 @@ void analyse_charset(string & charset, const Policy & policy) {
	else {
		charset = "all";
	}
	return charset;
}


void analyze_password(const string & password, Container & c, SecurityRules & sr, const int & limitAdvancedmask, const int & limitSimplemask) {
Container analyze_password(const string & password, SecurityRules & sr, const int & limitAdvancedmask, const int & limitSimplemask) {
	Container c;
	c.pass_length = password.size();

	char last_simplemask = 'a';
@@ -472,7 +470,7 @@ void analyze_password(const string & password, Container & c, SecurityRules & sr
		analyse_letter(letter, last_simplemask, c.simplemask_string, c.advancedmask_string, c.pol, sizeAdvancedMask, sizeSimpleMask);
	}

	analyse_charset(c.characterset, c.pol);
	c.characterset = analyse_charset(c.pol);

	if ( (c.pass_length >= sr.minLength) &&
		 (c.pol.digit >= sr.minDigit) &&
@@ -489,6 +487,8 @@ void analyze_password(const string & password, Container & c, SecurityRules & sr
	if (sizeSimpleMask > limitSimplemask) {
		c.simplemask_string = "othermasks";
	}

	return c;
}


@@ -543,7 +543,7 @@ void * generate_stats_thread_queue(void * threadarg) {

		my_data->total_counter++;
		if ( !my_data->use_regex || (my_data->use_regex && regex_match(line,my_data->current_regex)) ) {
			analyze_password(line, c, my_data->sr, my_data->limitAdvancedmask, my_data->limitSimplemask);
			c = analyze_password(line, my_data->sr, my_data->limitAdvancedmask, my_data->limitSimplemask);

			my_data->total_filter++;

@@ -602,7 +602,7 @@ void * generate_stats_thread(void * threadarg) {

			if ( !my_data->use_regex || (my_data->use_regex && regex_match(password,my_data->current_regex)) ) {
				my_data->total_filter += nbPasswords;
				analyze_password(password, c, my_data->sr,my_data->limitAdvancedmask, my_data->limitSimplemask);
				c = analyze_password(password, my_data->sr,my_data->limitAdvancedmask, my_data->limitSimplemask);

				my_data->length[ c.pass_length ] += nbPasswords;
				my_data->charactersets[ c.characterset ] += nbPasswords;
@@ -613,7 +613,7 @@ void * generate_stats_thread(void * threadarg) {
		else {
			my_data->total_counter++;
			if ( !my_data->use_regex || (my_data->use_regex && regex_match(line,my_data->current_regex)) ) {
				analyze_password(line, c, my_data->sr, my_data->limitAdvancedmask, my_data->limitSimplemask);
				c = analyze_password(line, my_data->sr, my_data->limitAdvancedmask, my_data->limitSimplemask);

				my_data->total_filter++;

@@ -643,11 +643,11 @@ uint64_t Statsgen::getNbSecurePasswords() {
	return nbSecurePassword;
}

std::unordered_map<int, uint64_t> Statsgen::getStatsLength(){
IntOccurrence Statsgen::getStatsLength(){
	return stats_length;
}

std::unordered_map<std::string, uint64_t> Statsgen::getStatsCharsets(){
StringOccurrence Statsgen::getStatsCharsets(){
	return stats_charactersets;
}

Loading