CryptoByLeo/Src/ASN1/Main.mqh

99 lines
3.4 KiB
MQL5

2026-08-30 10:39:49 -05:00
//+------------------------------------------------------------------+
//| DER.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_ASN1_MAIN_MQH
#define CRYPTOBYLEO_SRC_ASN1_MAIN_MQH
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
#include "Def.mqh"
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
namespace TSN
{
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
class CASN1Utils
{
public:
CASN1Utils(void) {}
~CASN1Utils(void) {}
//---
static int ContentTotalBytes(int content_len, uchar& lenw);
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
// retonra el tamaño total
// lenw=byte luego del tag a escribir..
static int CASN1Utils::ContentTotalBytes(int content_len, uchar& lenw)
{
uchar count = 1;
if(content_len > 127)
{
// en cuantos bytes reqeurrimos (extra)
do
{
content_len >>= 8;
count++;
}
while(content_len > 0);
lenw = CBL_ASN1_MASK_BYTEALTO | count;
}
else
{
lenw = uchar(content_len);
}
// tag + byteslen + contentlen
return 1 + count + content_len;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
// en caso este acitvo el alto long form (saltaomos el numero de bytes que menciona)
// de lo contraio solo saltmaos.. 1
#define CBL_ASN1_U_SALTAR_LEN(buf, r) \
{ \
if((buf[r] & CBL_ASN1_MASK_BYTEALTO) != 0) \
r += (buf[r] & CBL_ASN1_MASK_CLEAN_BYTEALTO); \
else \
r++; \
}
//+------------------------------------------------------------------+
#define CBL_ASN1_U_WRITELEN(buf, w, lenw, total) \
{ \
buf[w++] = lenw; \
if((lenw & CBL_ASN1_MASK_BYTEALTO) != 0) \
{ \
lenw &= CBL_ASN1_MASK_CLEAN_BYTEALTO; \
total -= 1 + lenw; \
2026-08-30 13:43:59 -05:00
do \
2026-08-30 10:39:49 -05:00
{ \
buf[w++] = uchar(total); \
total >>= 8; \
} \
2026-08-30 13:43:59 -05:00
while(total > 0); \
2026-08-30 10:39:49 -05:00
} \
}
}
#endif // CRYPTOBYLEO_SRC_ASN1_MAIN_MQH
//+------------------------------------------------------------------+