forked from nique_372/CryptoByLeo
94 lines
3.2 KiB
MQL5
94 lines
3.2 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| 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
|