2026-08-20 22:31:48 -05:00 | | | //+------------------------------------------------------------------+
|
| | | //| 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
|
| | | {
|
| | | //+------------------------------------------------------------------+
|
| | | //| |
|
| | | //+------------------------------------------------------------------+
|
2026-08-20 22:32:40 -05:00 | | | class CPKCS1v15
|
2026-08-20 22:31:48 -05:00 | | | {
|
| | | public:
|
2026-08-20 22:32:40 -05:00 | | | CPKCS1v15(void) {}
|
| | | ~CPKCS1v15(void) {}
|
2026-08-20 22:31:48 -05:00 | | |
|
| | | //---
|
2026-08-23 19:36:33 -05:00 | | | // msg= mensaje a firmar
|
| | | // longitud_k= ceil(longitud_k/8)... logintud de la clave en bytes
|
| | | // f=funcion de hash
|
| | | // out=salida
|
2026-08-21 07:35:16 -05:00 | | | static int FirmarEncode(const uchar& msg[], int longitud_k, TSN::CCryptoHashMeta::ENUM_TSN_CRYPTO_HASH f, uchar& out[]);
|
2026-08-20 22:31:48 -05:00 | | | };
|
| | |
|
| | | //+------------------------------------------------------------------+
|
| | | //| |
|
| | | //+------------------------------------------------------------------+
|
2026-08-21 07:35:16 -05:00 | | | static int CPKCS1v15::FirmarEncode(const uchar &msg[], int longitud_k, TSN::CCryptoHashMeta::ENUM_TSN_CRYPTO_HASH f, uchar& out[])
|
2026-08-20 22:31:48 -05:00 | | | {
|
| | | //---
|
| | | 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;
|
| | |
|
2026-08-21 07:35:16 -05:00 | | | //---
|
2026-08-23 19:36:33 -05:00 | | | // 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
|
2026-08-21 07:35:16 -05:00 | | |
|
| | | //---
|
2026-08-21 07:46:28 -05:00 | | | if(longitud_k > ArraySize(out))
|
| | | ArrayResize(out, longitud_k);
|
2026-08-21 07:35:16 -05:00 | | |
|
2026-08-20 22:31:48 -05:00 | | | //---
|
| | | 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
|