//+------------------------------------------------------------------+ //| Main.mqh | //| Copyright 2026, Niquel Mendoza | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2026, Niquel Mendoza" #property link "https://www.mql5.com" #property strict #ifndef CRYPTOBYLEO_SRC_PSEALE_MAIN_MQH #define CRYPTOBYLEO_SRC_PSEALE_MAIN_MQH //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ #include #include "..\\Simetric\\AES\\Defines.mqh" //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ namespace TSN { //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ /* Una clase para generar seeds random pseudo... para OAEP La idea es combinar varias fuentes de "entropia" Y juntarlas.. Ahora mismo solo hay una R1 quizas aƱada mas. Esto no es seguro criptograficamente pero para OAEP quizas este bien Para las key no */ //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ // pseudo para crypto class CPseudoAleatorio { private: static Xoshiro256 s_rand; public: CPseudoAleatorio(void) {} ~CPseudoAleatorio(void) {} //--- // out=array don de se ponen los datos // otl=numero de datos // i=indice donde se mepzian a poiner los datos static void Random(uchar& out[], int olt, int i); //--- // out=array don de se ponen los datos // otl=numero de datos // i=indice donde se mepzian a poiner los datos static void Random(ulong& out[], int olt, int i); }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ static void CPseudoAleatorio::Random(uchar& out[], int olt, int i) { olt += i; for(; i + 7 < olt;) { ulong ul = 0; const ulong s = s_rand.RandomUlong(); switch(uchar(s & 7)) // % 8 = & 7 { case 0: { ul = s_rand.RandomUlong(); break; } case 1: { ul = (ulong)TerminalInfoInteger(TERMINAL_PING_LAST) << 16; break; } case 2: { ul = (ulong)TerminalInfoInteger(TERMINAL_MEMORY_USED) << 16; break; } case 3: { ul = ulong(TerminalInfoDouble(TERMINAL_RETRANSMISSION) * 100) << 16; break; } case 4: { ul = GetMicrosecondCount(); break; } case 5: { ul = GetTickCount64(); break; } case 6: { ul = ulong(SymbolInfoDouble(_Symbol, SYMBOL_BID) * SymbolInfoDouble(_Symbol, SYMBOL_LAST)); break; } case 7: { ul = (s_rand.RandomUlong() ^ s_rand.RandomUlong()) << (s_rand.RandomUlong() & 31); break; } default: break; } //-- if((s << 16) > 0) { ul = (ul << 32) | (ul >> 32); } //--- const ulong t = s_rand.RandomUlong(); out[i++] = g_aes_sbox[uchar(ul) ^ uchar(t)]; out[i++] = g_aes_sbox[uchar(ul >> 8) ^ uchar(t >> 8)]; out[i++] = g_aes_sbox[uchar(ul >> 16) ^ uchar(t >> 16)]; out[i++] = g_aes_sbox[uchar(ul >> 24) ^ uchar(t >> 24)]; out[i++] = g_aes_sbox[uchar(ul >> 32) ^ uchar(t >> 32)]; out[i++] = g_aes_sbox[uchar(ul >> 40) ^ uchar(t >> 40)]; out[i++] = g_aes_sbox[uchar(ul >> 48) ^ uchar(t >> 48)]; out[i++] = g_aes_sbox[uchar(ul >> 56) ^ uchar(t >> 56)]; } //--- for(; i < olt; i++) { out[i] = g_aes_sbox[s_rand.RandomUlong() & 255]; } } //+------------------------------------------------------------------+ static void CPseudoAleatorio::Random(ulong &out[], int olt, int i) { olt += i; for(; i < olt; i++) { ulong ul = 0; const ulong s = s_rand.RandomUlong(); switch(uchar(s & 7)) // % 8 = & 7 { case 0: { ul = s_rand.RandomUlong(); break; } case 1: { ul = (ulong)TerminalInfoInteger(TERMINAL_PING_LAST) << 16; break; } case 2: { ul = (ulong)TerminalInfoInteger(TERMINAL_MEMORY_USED) << 16; break; } case 3: { ul = ulong(TerminalInfoDouble(TERMINAL_RETRANSMISSION) * 100) << 16; break; } case 4: { ul = GetMicrosecondCount(); break; } case 5: { ul = GetTickCount64(); break; } case 6: { ul = ulong(SymbolInfoDouble(_Symbol, SYMBOL_BID) * SymbolInfoDouble(_Symbol, SYMBOL_LAST)); break; } case 7: { ul = (s_rand.RandomUlong() ^ s_rand.RandomUlong()) << (s_rand.RandomUlong() & 31); break; } default: break; } //-- if((s << 16) > 0) { ul = (ul << 32) | (ul >> 32); } //--- const ulong t = s_rand.RandomUlong(); // 32 bajos combinado con gaes 32 altos ul out[i] = g_aes_sbox[(uchar(ul) ^ uchar(t))] | g_aes_sbox[(uchar(ul >> 8) ^ uchar(t >> 8))] << 8 | g_aes_sbox[(uchar(ul >> 16) ^ uchar(t >> 16))] << 16 | g_aes_sbox[(uchar(ul >> 24) ^ uchar(t >> 24))] << 24 | (ul & 0xffffffff) << 32; } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ Xoshiro256 CPseudoAleatorio::s_rand; } //+------------------------------------------------------------------+ #endif // CRYPTOBYLEO_SRC_PSEALE_MAIN_MQH