Files
EgtLock/NetDongleId.cpp
T
Dario Sassi cc7630fa70 EgtLock 2.5j1 :
- aggiunta gestione chiavi di rete esposte su Internet (tramite inirizzo:porta).
2023-10-09 10:35:39 +02:00

205 lines
7.0 KiB
C++

//----------------------------------------------------------------------------
// EgalTech 2022-2022
//----------------------------------------------------------------------------
// File : NetDongleId.cpp Data : 16.05.22 Versione : 2.4e3
// Contenuto : Funzioni per gestione/calcolo Id chiave di rete OxySec.
//
//
//
// Modifiche : 16.05.22 DS Creazione modulo.
//
//
//
//----------------------------------------------------------------------------
//------------------ Include -------------------------------------------------
#include "stdafx.h"
#include "Obfuscate.h"
#include "NetDongleId.h"
#include "/EgtDev/Extern/OxySec/Include/xnd.h"
using namespace std ;
//----------------------------------------------------------------------------
static string s_sAddrPort = "seriate.egalware.com:15678" ;
static XND_XLT_ENV s_env = nullptr ;
static XND_NET_DATA s_net_data = nullptr ;
static XND_DEVICE_CONTEXT s_dev_ctx = nullptr ;
//----------------------------------------------------------------------------
static const char* xnodus_key_blob = "CW6vKd80xDCR_n4048UsW88BFhwxU0vBdAv-SmgK3VJczR_YqmsCTxpcVTqk3LKU3KCTkAWN"\
"u5BgL4VU6WM-JvxW-eZHNWaiy5gfNPBVFyoMTI0BbfOF_gQDKe-nvdlMyCZW5gWL6CPUvr3ejSPkyl8atj"\
"OZrUUzGSbHuig27z_6NVb2gyVFZJrUUioApP6b96qMIwQS2ME2v99w84pMSids1Okcrl3_aKHRwAH0hMJQ" ;
static const char* user1_data_blob = "DHn2Cq9uYJKBJUYCRuVyQI_oQ7qenvAqHuBKhabdZb9mwJwDTCmoiTxqBgYxT5t0Q"\
"M7A3hGZfYyr-awKBgExnp_AQ4BygFh-cnghDt2g7A33WxsXKNwK_hHSuYCQ5Smv_6ua_T6TdN4g"\
"DDWnaeY0jy5ad_OAzLgtPN0_zXXF9zFiyouqzwnQyCboeT7jJoU_L8zzSdnDFUbLxU-P_OnJ_e2"\
"UaD47FiEwQLWzjhTz_-VIgrY7XImgmc-eQsby5xoEkIVt9S0Cc5hrmGt_0uGtdc" ;
static const char* user2_data_blob = "DHn2Cq9uYJKBJUYCRuVyQIz9JWqyWVZUjw3zdhJQh0UBbIhfWJBRzZG2l3fRk83Yw"\
"dyFMPUWdRN6TwYzvn_t1ie1WnX20_3VC1pEMfwUyM8SKT_QU38DqhNhh2GSzAQoeU9GxzyUptxX"\
"t9AGjs0G6e0IuDQHvhRMo3tY2bNNyqitBkhZl35PnaIr8G1vqiWfUMIdNQKmKLRMxzVwfphnb65"\
"-3jSoQhjm8qDwWJuiKGlqcLeX0DTvEsW5Oe1EZTUHoAAPSdgz65Wj2H6T0hmPAF" ;
//----------------------------------------------------------------------------
bool
GetNetDongleId( int nNetUserId, const string& sAddrPort, string& sDongleId)
{
if ( s_env == nullptr) {
if ( ! NetDongleConnect( nNetUserId, sAddrPort))
return false ;
}
// richiamo funzioni di verifica chiave con decifratura RSA 512 di dati generati al volo
// ... DA FARE ...
// leggo l'identificativo della chiave dal banco 0
unsigned char pwd[XLT_PASSWORD_SIZE] ;
unsigned char data[XLT_BANK_SIZE] ;
// M0nt3ReC@st3llo1985
pwd[ 0] = 'M' ;
pwd[ 2] = 'n' ;
pwd[ 4] = '3' ;
pwd[ 6] = 'e' ;
pwd[ 8] = '@' ;
pwd[10] = 't' ;
pwd[12] = 'l' ;
pwd[14] = 'o' ;
pwd[16] = '9' ;
pwd[18] = '5' ;
pwd[20] = '\0' ;
pwd[22] = '\0' ;
pwd[24] = '\0' ;
pwd[26] = '\0' ;
pwd[28] = '\0' ;
pwd[30] = '\0' ;
pwd[ 1] = '0' ;
pwd[ 3] = 't' ;
pwd[ 5] = 'R' ;
pwd[ 7] = 'C' ;
pwd[ 9] = 's' ;
pwd[11] = '3' ;
pwd[13] = 'l' ;
pwd[15] = '1' ;
pwd[17] = '8' ;
pwd[19] = '\0' ;
pwd[21] = '\0' ;
pwd[23] = '\0' ;
pwd[25] = '\0' ;
pwd[27] = '\0' ;
pwd[29] = '\0' ;
pwd[31] = '\0' ;
int nRes = xnd_xlt_read( s_dev_ctx, pwd, 0, data) ;
bool bOk = ( nRes == XLT_ERROR_SUCCESS) ;
if ( bOk)
sDongleId = (char*) data ;
return bOk ;
}
//----------------------------------------------------------------------------
bool
NetDongleConnect( int nNetUserId, const string& sAddrPort)
{
// se connessione già aperta, la chiudo per poi riaprirla
if ( s_env != nullptr)
NetDongleClose() ;
// creo ambiente
s_env = xnd_xlt_env_create() ;
if ( s_env == nullptr)
return false ;
// cerco la chiave di rete
unsigned char label[XLT_LABEL_SIZE] ;
string sLabel{ "EgalTech s.r.l. - CAD/CAM/CIM Software Solutions"} ;
strcpy_s( (char*)label, XLT_LABEL_SIZE, sLabel.c_str()) ;
memset( label + sLabel.size(), 0x00, sizeof( label) - sLabel.size()) ;
int nStatusND = 0 ;
if ( &sAddrPort == nullptr || sAddrPort.empty() ||
sAddrPort.find_first_not_of( " \t\r\n") == std::string::npos)
s_net_data = xnd_net_data_create_resolving_local_search( s_env, XND_DEFAULT_PORT, label, 30000, 0, 0, &nStatusND) ;
else
s_net_data = xnd_net_data_create_resolving_addr_port( s_env, s_sAddrPort.c_str(), 0, 30000, &nStatusND) ;
if ( s_net_data == nullptr) {
xnd_xlt_env_release( s_env) ;
return false ;
}
// cerco la chiave Xlight virtuale dell'utente anonimo
char XnBase[16] ;
// WE5LAQAAAA
XnBase[6] = 'A' ;
XnBase[0] = 'W' ;
XnBase[10] = '\0' ;
XnBase[1] = 'E' ;
XnBase[14] = '\0' ;
XnBase[9] = 'A' ;
XnBase[2] = '5' ;
XnBase[15] = '\0' ;
XnBase[7] = 'A' ;
XnBase[4] = 'A' ;
XnBase[12] = '\0' ;
XnBase[5] = 'Q' ;
XnBase[13] = '\0' ;
XnBase[3] = 'L' ;
XnBase[11] = '\0' ;
XnBase[8] = 'A' ;
char UsBase[16] ;
// WE5VAQAAAA
UsBase[6] = 'A' ;
UsBase[0] = 'W' ;
UsBase[10] = '\0' ;
UsBase[1] = 'E' ;
UsBase[14] = '\0' ;
UsBase[9] = 'A' ;
UsBase[2] = '5' ;
UsBase[15] = '\0' ;
UsBase[7] = 'A' ;
UsBase[4] = 'A' ;
UsBase[12] = '\0' ;
UsBase[5] = 'Q' ;
UsBase[13] = '\0' ;
UsBase[3] = 'V' ;
UsBase[11] = '\0' ;
UsBase[8] = 'A' ;
string sXnKB = string{ XnBase} + xnodus_key_blob ;
int nStatusDC = 0 ;
switch ( nNetUserId) {
default :
s_dev_ctx = xnd_xlt_devctx_xnodus_create2( s_env, s_net_data, sXnKB.c_str(), nullptr, 0, XND_XLT_DEVCTX_FLAG_XNODUS_MULTI_INSTANCE, 0, &nStatusDC) ;
break ;
case 1 : {
string sUsDB = string{ UsBase} + user1_data_blob ;
s_dev_ctx = xnd_xlt_devctx_xnodus_create2( s_env, s_net_data, sXnKB.c_str(), sUsDB.c_str(), 0, XND_XLT_DEVCTX_FLAG_XNODUS_MULTI_INSTANCE, 0, &nStatusDC) ;
break ;
}
case 2 : {
string sUsDB = string{ UsBase} + user2_data_blob ;
s_dev_ctx = xnd_xlt_devctx_xnodus_create2( s_env, s_net_data, sXnKB.c_str(), sUsDB.c_str(), 0, XND_XLT_DEVCTX_FLAG_XNODUS_MULTI_INSTANCE, 0, &nStatusDC) ;
break ;
}
}
if ( s_dev_ctx == nullptr) {
xnd_xlt_env_release( s_env) ;
s_env = nullptr ;
s_net_data = nullptr ;
return false ;
}
// apro la sessione
int nStatOP = xnd_xlt_session_open( s_dev_ctx, 0) ;
if ( nStatOP != 0) {
xnd_xlt_devctx_release( s_dev_ctx) ;
xnd_xlt_env_release( s_env) ;
s_env = nullptr ;
s_net_data = nullptr ;
s_dev_ctx = nullptr ;
return false ;
}
return true ;
}
//----------------------------------------------------------------------------
bool
NetDongleClose( void)
{
xnd_xlt_devctx_release( s_dev_ctx) ; // this close also the session!
xnd_xlt_env_free( s_env) ;
s_dev_ctx = nullptr ;
s_net_data = nullptr ;
s_env = nullptr ;
return true ;
}