5490eaa2dd
- aggiunta lettura Serial Number anche per chiavi di rete.
295 lines
12 KiB
C++
295 lines
12 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" ;
|
|
static const char* user3_data_blob = "DHn2Cq9uYJKBJUYCRuVyQIW1HNpulC8Ae0eSrxQZoIP1UorXSxEa7T05SncGa7xym"\
|
|
"RjJUZSfLfSh2dc7Jv1sUNbMLUpiga4YZ_F6k7c1nAvd5xZEk9abhlyUcxFKIWQ2_cr3cRv5m5Iu"\
|
|
"5jQjQndR0ZpTKIE00itXLarSn4_iyIq4EnveH2fZ81TnyQvXk2XCg5EaS2DVMrlDr4f034CPDw5"\
|
|
"XncjkeeNsQhACpnfvMLVfIW557CxUMKkeE5259NVb8AtOhGM0DY0KtOlZJG9Ap1" ;
|
|
static const char* user4_data_blob = "DHn2Cq9uYJKBJUYCRuVyQIFWU_1cR02fpTFyK2rpiZDQPjSyiFBjwcuXzNPDsBRVb"\
|
|
"yLOmr34-iYzs_Uo1IflcOJejXaYmePjgt8lzoeXFDSDjXgolN3f-SB5dCKYpFp_kfuk8sX9wIoz"\
|
|
"sZtI5aCLU_rt-by1rn57ommIEqKsHVvVXE07hFRjDk6ocF0JSY09Yp74NLw934nfX5JPbESkAc7"\
|
|
"mpRFTIff5f-TVR0Xq9826Yv7bIwuOsJqm9HtRNheTanjA3B2NlLX11ZWOqDdy7i" ;
|
|
static const char* user5_data_blob = "DHn2Cq9uYJKBJUYCRuVyQIoMFpbVWHwzzO5cMRfcIBXfrNDpME4MNTjdfuRzRX1kV"\
|
|
"2SPVEwBZCfS6pFXbYuYBQHLH7H_cGP26tE5x-EyxPEjqMwIzLlo81orex9B1ZI10nRZ16sFEEHX"\
|
|
"wosxMhAa7H30vWfq70YgAmHKwks-76W1hYuF5pXYVixJUsG2RSY5CwTzUE6BSMElto9hxHD52K9"\
|
|
"onHP8juJ8UHw0z-riibH-5bgiAWDE6qiFSikf-HB5EKMwmaTzkR2hWNoz7kfkWz" ;
|
|
static const char* user6_data_blob = "DHn2Cq9uYJKBJUYCRuVyQIf69IY1tbJvTzrHWcNzicRrLhiFq8aqPkit2wwGE6e57"\
|
|
"ecv3CH7fu5-0uui1Qdx9jHfs1pKTcO_scPC3KUboUSUl9pmknn6tjKXFmwyXMKYi74kR_brOy5F"\
|
|
"uAI8dhNfN56M6uIlyHbqJ-RcErC2ZEdjKCtznrbaUJpeH1ztr-FMCYBn4zx23wvi15sosmmaN3e"\
|
|
"2_uKGXAyhCqtivi9QNRlLDgQEv9ZcwageZ8KUCycUYgGNngx1ZiNFswsI-YXPSs" ;
|
|
static const char* user7_data_blob = "DHn2Cq9uYJKBJUYCRuVyQInD31qNrhc0_zj4cN8i9cVBgK_TXRCWgPNXf94qAzYr6"\
|
|
"HUiu3y4cqzTwtfGcQFsHrmvXPbp-NOC-Ge_JBtSb_yz2phREuoYdIyWQirZMIZx51EPBAwTnjTZ"\
|
|
"ts6QxZHfgPKiByZoCSsLP3cTS-vOZ2YRUsw7S6bswiz6AyArUnpj0nWCOVgvYk5YqEWs-vicYYQ"\
|
|
"sL8ZwZZWETfZSjIY-oNTViSdqU4nhVEFytwyHWcEVE0_hHMZASpJAG0PlIxujyN" ;
|
|
static const char* user8_data_blob = "DHn2Cq9uYJKBJUYCRuVyQI8I6EFK2sRnyORhqUDtkiOHF3RQz8F0iIGWewMaaz4sT"\
|
|
"ewTDo78183qXrAld2r9NsV8VndXCM42rkzgkLWAYKk5NKbtcMgT0ojajbFg5q8yjrrSbJ9jRvUj"\
|
|
"eExgZjwm-RcvHQpVdHuIgjVvNva2qipgyM7EeCtVCSJ1DuYNtTkGLJuyvG75XQ7iQMymV_YXeul"\
|
|
"TxDa6HGCgQSaAiz_hBrA-ojjQxUh9pJhCwr0dXJVBi4Ugpv_IHcO2d_JHolKQJ6" ;
|
|
static const char* user9_data_blob = "DHn2Cq9uYJKBJUYCRuVyQI9ZLGhVgBSQAjUXHm-k0T1SY0SK1pq2mHdosAUUz-CEs"\
|
|
"s510O3YynKN42QBWrM01CTknvirL5NWCp9QQ_0j4QftwdwVB_EIIBy8IaeirFpttCbn7Z0acIwi"\
|
|
"ojAEDQK4an_VyVFHhvaX50Ab5mXg8Fqa9VjvI7S_JK-ay8YOEcKuoi0izmFafAP4QexavrLPwc3"\
|
|
"Qzu3d29a4mXT3boWupXo3YBCNUpV6829KFHN7aXRcDF0Uc8qUUvmrmQc-4at_X8" ;
|
|
|
|
//----------------------------------------------------------------------------
|
|
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.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, 10000, 0, 0, &nStatusND) ;
|
|
else {
|
|
s_sAddrPort = sAddrPort ;
|
|
s_net_data = xnd_net_data_create_resolving_addr_port( s_env, s_sAddrPort.c_str(), 0, 0, &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 ;
|
|
}
|
|
case 3 : {
|
|
string sUsDB = string{ UsBase} + user3_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 4 : {
|
|
string sUsDB = string{ UsBase} + user4_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 5 : {
|
|
string sUsDB = string{ UsBase} + user5_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 6 : {
|
|
string sUsDB = string{ UsBase} + user6_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 7 : {
|
|
string sUsDB = string{ UsBase} + user7_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 8 : {
|
|
string sUsDB = string{ UsBase} + user8_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 9 : {
|
|
string sUsDB = string{ UsBase} + user9_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) ;
|
|
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) ; // this close also the session!
|
|
xnd_xlt_env_release( s_env) ;
|
|
s_dev_ctx = nullptr ;
|
|
// collegamento con la chiave non riuscito, imposto opportunamente lo stato
|
|
if ( nStatOP == XND_ERROR_NET_RECV_FAILURE)
|
|
s_net_data = nullptr ;
|
|
return false ;
|
|
}
|
|
return true ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
GetNetDongleSN( int& nDongleSN)
|
|
{
|
|
// default
|
|
nDongleSN = 0 ;
|
|
// verifico validità contesto
|
|
if ( s_dev_ctx == nullptr)
|
|
return false ;
|
|
// recupero informazioni sulla chiave
|
|
XND_INFO xInfo ;
|
|
int nStatIF = xnd_get_info( s_dev_ctx, &xInfo) ;
|
|
if ( nStatIF != 0)
|
|
return false ;
|
|
// ricavo il SN
|
|
nDongleSN = *((unsigned int*)&xInfo.sn[12]) ;
|
|
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 ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
NetDongleNotFound( void)
|
|
{
|
|
return ( s_env != nullptr && s_net_data == nullptr) ;
|
|
}
|