//+------------------------------------------------------------------+ //| 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_PADDING_PKCS1V15_MAIN_MQH #define CRYPTOBYLEO_SRC_PADDING_PKCS1V15_MAIN_MQH //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ #include "..\\..\\Hash\\All.mqh" //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ namespace TSN { //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class CPKCS1v15 { public: CPKCS1v15(void) {} ~CPKCS1v15(void) {} //--- // msg= mensaje a firmar // longitud_k= ceil(longitud_k/8)... logintud de la clave en bytes // f=funcion de hash // out=salida static int FirmarEncode(const uchar& msg[], int longitud_k, TSN::CCryptoHashMeta::ENUM_TSN_CRYPTO_HASH f, uchar& out[]); }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ static int CPKCS1v15::FirmarEncode(const uchar &msg[], int longitud_k, TSN::CCryptoHashMeta::ENUM_TSN_CRYPTO_HASH f, uchar& out[]) { //--- const int hlen = TSN::CCryptoHashMeta::g_crytpo_hash_meta[f].outl; // tamañao de salida const int tsize = (hlen + CRYPTOBYLEO_HASFUNC_FIXED_MAX_SIZE_DIGINFO); if(longitud_k < tsize + 11) return -1; //--- // final_size = 2 + ps + 1 + dig_info + hlen // final_size = 2 + (longitud_k - (dig_info + hlen) - 3) + 1 + dig_info + hlen // final_size = 2 + longitud_k - dig_info - hlen - 3 + 1 + dig_info + hlen // final_size = 2 + longitud_k - 3 + 1 // final_size = longitud_k //--- if(longitud_k > ArraySize(out)) ArrayResize(out, longitud_k); //--- out[0] = 0x0; out[1] = 0x1; //--- // -1 = -3 + 2 = -1 (por el start) // es como haces esto ps += start para poder apuntar al fin const int ps = longitud_k - tsize - 1; int i = 2; for(; i < ps; i++) { out[i] = 0xff; } //--- out[i++] = 0x0; //--- agregamos digest info for(int k = 0; k < CRYPTOBYLEO_HASFUNC_FIXED_MAX_SIZE_DIGINFO; k++) out[i++] = TSN::CCryptoHashMeta::g_crytpo_diges_info[f].bytes[k]; //--- ahora agregamos el hash del mensaje // empeiza a esceibri desde i TSN::CCryptoHashMeta::g_crypto_fhash_fixed[f](msg, ArraySize(msg), out, i); i += hlen; //--- return i; // apunta al tamaño final } } //--- #endif // CRYPTOBYLEO_SRC_PADDING_PKCS1V15_MAIN_MQH