//+------------------------------------------------------------------+ //| BCrypt.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_URANDOM_BCRYPT_MQH #define CRYPTOBYLEO_SRC_URANDOM_BCRYPT_MQH //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ #include "..\\BCrypt\\Main.mqh" #include //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ namespace TSN { //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class CURandom { public: CURandom(void) {} ~CURandom(void) {} //---- static __forceinline void RandomCryptoBytes(uchar& out[], int oult, int o_s = 0); static __forceinline void RandomUlongArr(ulong& out[], int oult, int o_s = 0); static void RandomUlongArrRange(ulong& out[], int oult, ulong last, int o_s = 0); }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ static __forceinline void CURandom::RandomCryptoBytes(uchar &out[], int oult, int o_s = 0) { BCryptRandomWOffset(out, o_s, oult); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ static __forceinline void CURandom::RandomUlongArr(ulong& out[], int oult, int o_s = 0) { BCryptRandomWOffset(out, sizeof(ulong) * o_s, sizeof(ulong) * oult); } //+------------------------------------------------------------------+ static void CURandom::RandomUlongArrRange(ulong& out[], int oult, ulong last, int o_s = 0) { // completos BCryptRandomWOffset(out, sizeof(ulong) * o_s, sizeof(ulong) * oult); //resto o_s += (oult - 1); //--- // genermaos una mascarac que cobra el rango de [0 - last] ulong mask = last; mask |= mask >> 1; mask |= mask >> 2; mask |= mask >> 4; mask |= mask >> 8; mask |= mask >> 16; mask |= mask >> 32; //--- ulong candidate = out[o_s] & mask; while(candidate > last) { BCryptRandomWOffset(out, sizeof(ulong) * o_s, sizeof(ulong)); candidate = out[o_s] & mask; } out[o_s] = candidate; } } //+------------------------------------------------------------------+ #endif // CRYPTOBYLEO_SRC_URANDOM_BCRYPT_MQH