BSOne.SFC/Tocsg.Module/Snaptag4BS1/STLabGuardModule.pas

274 lines
15 KiB
Plaintext

{*******************************************************}
{ }
{ STLabGuardModule }
{ }
{ Copyright (C) 2024 kku }
{ }
{*******************************************************}
unit STLabGuardModule;
interface
uses
Winapi.Windows, System.SysUtils;
const
{$IFDEF Win64}
DLL_ST = 'LabGuard_Layer_x64.dll';
{$ELSE}
DLL_ST = 'LabGuard_Layer_x86.dll';
{$ENDIF}
// poc_labcurity_S.txt - for 현대자동차 TEST
// 2024-05-21 ~ 2024-06-31
// ST_Key_S = 'ISD5vgWXTGX0tJw+7U/HkoVG7CbZuQ0aH4BRTBsuR21HRpNEPOgCZ21f5BETa3vJxM' +
// 'KCsVZJcUmZQAx5g8lz2WFS/nXP5kInSpmkiIYGmnNL7u3Ug85Zr0aEyLW9XruSt1Lb' +
// 'jXoCz3JEyS2r5ot6M41HLCecrB9Ma98wdzJHe7/vHWW9JlRrc297VkdFgVrBIt60pb' +
// 'XCxT6JNQV4/PN5bvppAJ9ZH9ku3OhZ2cBQ39W0GbhSp5v5t/hpuptxiohDkpoWtjYQ' +
// 'xrwOLDnqeK1IYNQ/d2z1jkao4Qk2deME4QgxJGZ6T62J9srVXhVWVPJMwejWUHtbLt' +
// '8LOS8e3JXBG0vn8dJlM6Gkhr97+UM9++xneUq756h0Om/fOyd1OK/AyGwKqC1uLZNk' +
// 'XN65O/UZjg/7ZhPdhPJetfoaG9MZI+olghbot4qfHQy3Skqjj9nr1/fpT6E/4M0evk' +
// 'rJRkoBFx1w0u35vbzWGUD4R3x6nvPA34xu1d5Uh+4PIMHiArlYXUVTBoxALa0VIWwE' +
// 'Bu0LUZgXU8jDsimrhQ6o/1l+QXJI+Tv+OfJj09nImN05Y7rzVAM/gjrjLmBsoy4VUP' +
// 'KAHzQnOetAGJ2y/W5Y7ZJr6NF02i6SVWmvDxnnE/sq6/tpB45D5emp5H6TJJII7vXv' +
// 'aWifP0iCIOb5OY/+UYD+5Bt7GY+BOHPoWf4R7WzBlDY9RVvX0Z77Of8PxRIdH9SgGz' +
// '1TaDF/wchBsegWN6U6S6iLI5TzCiPB2vsEHIx/iYa8E6WT8MtdbM5YoSmJHjXcDj1Y' +
// 'Pa33ZwZEiDjEtO4LErwKp9P1ZjbdfE4zeFyX+p5oNLwAUxADyPLM3eWYcWxs4Q==';
// SK하이닉스 PoC 2024-05-21 ~ 2024-10-07 ~ ?
// ST_Key_S = 'ISD5vgWXTGX0tJw+7U/HkoVG7CbZuQ0aH4BRTBsuR21HRpNEPOgCZ21f5BETa3vJ+w' +
// 'rapbTKSMChvHUSlhprcvZMPM/WGOP+M+Ip+372IPzrCTO2hcTw1txOiH6UN3WyHMNi' +
// 'L9KDdDJt4NsUJT417nbItjP/epctTBXlRloRmUyG00pH/S6eY0JmWXmW/qkmxfsVp+' +
// 'GkASmohf8nsRk9ZCHNM1E6NZ9sLNrB+LgF+pysyTcypuV1qoRDEfU/TG0zqb/MGjoS' +
// 'bL6t3+bYKaheORqyo9NAuTDFArc6y2T5gU+nktS2LeUASVm7ZleXsd0opDWpqfo1ks' +
// 'hM2/0lS9C58nhVdO67O2TZfvQdRh3oZCbosCUzEHRz9UnscjewnKP5IfAttn8iCm2k' +
// '46DmTVEstpidwHV9zBN1BIxVnQtSBpUDMWIRcCQP48Q7vgg//mTOTPnsUeVdIvUocX' +
// 'mW4y0DjwPERiWIiWM9GtBNoBHB5LBx1F2yZRmF+tgeYgXYT/b47zVQAhb8Pb/C7oSo' +
// 'JMl2QTH/dj/XE6hv+qZLVbeJaKsoEZl66VKzqj9X4VBpOfEoGBGld2Z9jXN3JTDBtK' +
// 'veNoV/0fZx1d89Ppkab1gN+ztWWWlTo6EihCdZA/UD0p+WwFY5eRvh22PfQQ+IfJDA' +
// 'TwWz6Rb2G/84bjrToS7OBYGoD+H2O4C6Vsw3i6rg8UJFCnc6Ape8Odqoy/8Bp5X9ht' +
// '+LSddJjALA9Rbhyzlkfdi9k3SGyRHHodZ8KrCypEnlVorMG3GVWavEfVzWGpExZXSu' +
// 'KzJBABfru4odgEpa+tcbcqqnhM222Iij5IBpn6Nf';
// ??
// ST_Key_S = 'ISD5vgWXTGX0tJw+7U/HkglGMoHrmlmdZwcGzmrVJ4BKdt4mJgTaJjBHBiGwwcaElgmx' +
// '9M+S1TsmbrN4f3mulZSad1ArstMpp0pCrhurTZ4gAfxN2ul8Ol4gt2q0rPocyAN6roMw' +
// 'laA5uItr2p114R7pxF1OErHXLY1GP3UfeFAQ0oYdPc7uX2Dh4UySkP1Mi7pSgEBd5/Rq' +
// 'fQzCS04OqxLt3L65MgM5k3+NuFhFfPN7Ct99YWQdAfbspVbb35R6en8mmWZdVx9uC4UI' +
// 'TjvtO2eV4FlW5lCziBpOqvbDJMyve7CamioUgQNfZvN0mKTKtT1eQ4TyVyUb+bXPWATE' +
// 'VKNh4WmHItDE9FYiqjwBWvJmZ25hoNm9e8HvFvUNEm56jfsW7EzITOoARt0ilDk99fLX' +
// 'WNG5z4+RFfDJ+p6+iqpKkZWOElzVercx+zlKkExB6tu/5bcGgITOW8wLSX33vMnoXNGR' +
// 'xp+8aq7WFHV92BLHGltVWFiVitxzXW8CR3+KPHwWbB8PmWNCeIr3T1bpKciOmJ1nuBrk' +
// 'md8dLdTtGq0tt9g6aUe7rk9xq+tkd7tUyLnwaddrnuR5Yw13zrttPgsAIjyHnq8gu2I7' +
// 'ZTnJNbo0Qoz1ZpK/oeCUm5Ohn7BDk795PcC5DrAkg0YV3I2WRuUhKl9/ksIRCV4OzntG' +
// 'ZQxWtEg4zyeSOyQp/QYKIVPO5hJ7JvGgYuNhsy22Vemj1onHpFqdxq/aoGlFad2BREOl' +
// '9ZXmX0u1qFIZ0DU/1P4XLiegCclX14LQUUox0/sjY003BjE7fF2s8Y2LI0dM6Q58UsSX' +
// 'QXvxl0tdUrVnfrwrLBxsab5Pa016h2WAvgLSgPcdHgGlECTe/wqPpnhpmCVH2vO3UoC4' +
// '5X05bKjjqB4Q';
// HD조선해양 PoC 25_1031
ST_Key_S = 'ISD5vgWXTGX0tJw+7U/HkglGMoHrmlmdZwcGzmrVJ4BKdt4mJgTaJjBHBiGwwcaElgmx9M' +
'+S1TsmbrN4f3mulZSad1ArstMpp0pCrhurTZ4gAfxN2ul8Ol4gt2q0rPocyAN6roMwlaA5' +
'uItr2p114R7pxF1OErHXLY1GP3UfeFAQ0oYdPc7uX2Dh4UySkP1Mi7pSgEBd5/RqfQzCS0' +
'4OqxLt3L65MgM5k3+NuFhFfPN7Ct99YWQdAfbspVbb35R6en8mmWZdVx9uC4UITjvtO2eV' +
'4FlW5lCziBpOqvbDJMyve7CamioUgQNfZvN0mKTKtT1eQ4TyVyUb+bXPWATEVKNh4WmHIt' +
'DE9FYiqjwBWvJmZ25hoNm9e8HvFvUNEm56jfsW7EzITOoARt0ilDk99fLXWNG5z4+RFfDJ' +
'+p6+iqpKkZWOElzVercx+zlKkExB6tu/5bcGgITOW8wLSX33vMnoXNGRxp+8aq7WFHV92B' +
'LHGltVWFiVitxzXW8CR3+KPHwWbB8PmWNCeIr3T1bpKciOmJ1nuBrkmd8dLdTtGq0tt9g6' +
'aUe7rk9xq+tkd7tUyLnwaddrnuR5Yw13zrttPgsAIjyHnq8gu2I7ZTnJNbo0Qoz1ZpK/oe' +
'CUm5Ohn7BDk795PcC5DrAkg0YV3I2WRuUhKl9/ksIRCV4OzntGZQxWtEg4zyeSOyQp/QYK' +
'IVPO5hJ7JvGgYuNhsy22Vemj1onHpFqdxq/aoGlFad2BREOl9ZXmX0u1qFIZ0DU/1P4XLi' +
'egCclX14LQUUox0/sjY003BjE7fF2s8Y2LI0dM6Q58UsSXQXvxl0tdUrVnfrwrLBxsab5P' +
'a016h2WAvgLSgPcdHgGlECTe/wqPpnhpmCVH2vO3UoC45X05bKjjqB4Q';
// poc_labcurity_P.txt - for 현대자동차 TEST
// 2024-05-21 ~ 2024-06-31
// ST_Key_P = 'ISD5vgWXTGX0tJw+7U/HkoVG7CbZuQ0aH4BRTBsuR21HRpNEPOgCZ21f5BETa3vJxM' +
// 'KCsVZJcUmZQAx5g8lz2WFS/nXP5kInSpmkiIYGmnNL7u3Ug85Zr0aEyLW9XruSt1Lb' +
// 'jXoCz3JEyS2r5ot6M41HLCecrB9Ma98wdzJHe7/vHWW9JlRrc297VkdFgVrBIt60pb' +
// 'XCxT6JNQV4/PN5bvppAJ9ZH9ku3OhZ2cBQ39W0GbhSp5v5t/hpuptxiohDkpoWtjYQ' +
// 'xrwOLDnqeK1IYNQ/d2z1jkao4Qk2deME4QgxJGZ6T62J9srVXhVWVPJMwejWUHtbLt' +
// '8LOS8e3JXBG0vn8dJlM6Gkhr97+UM9++xneUq756h0Om/fOyd1OK/AyGwKqC1uLZNk' +
// 'XN65O/UZjg/7ZhPdhPJetfoaG9MZI+olghbot4qfHQy3Skqjj9nr1/fpT6E/4M0evk' +
// 'rJRkoBFx1w0u35vbzWGUD4R3x6nvPA34xu1d5Uh+4PIMHiArlYXUVTBoxALa0VIWwE' +
// 'Bu0LUZgXU8jDsimrhQ6o/1l+QXIVs+q87nzBJ7EcfuCGt+KZqjG1V76dJFxTdCuTs0' +
// '0gPK6EV/L6wyH7MuRu3dxbmb0vrhQDn1I/wB1MZM8NXSS7A86rRjgSKj92FI0CeX4E' +
// 'kfGROBAS2KQjjYimfqJIT1KvaR1HvGGCVWwF0IzkoJDKPV5OBBzXtwQPxlyoe/+BVY' +
// 'tSldrdpkTrQIN+QOzhGcmKKlZtLciPB9z0a383W+TU0feofo9lrmruYIuRv64jkZYY' +
// 'cNZnc2Xc8DkNphr/+tC2K7CIGeqehLr5rPEOEwkwqqGqrOJy7lxa/0SmIFQwRQ==';
// ST_Key_P = 'ISD5vgWXTGX0tJw+7U/HkoVG7CbZuQ0aH4BRTBsuR21HRpNEPOgCZ21f5BETa3vJ+w' +
// 'rapbTKSMChvHUSlhprcvZMPM/WGOP+M+Ip+372IPzrCTO2hcTw1txOiH6UN3WyHMNi' +
// 'L9KDdDJt4NsUJT417nbItjP/epctTBXlRloRmUyG00pH/S6eY0JmWXmW/qkmJPsWUX' +
// 'Aemv6DMV/3LKO0igjt1XLSlyPoMZSmQbsSBmSpELLCQNUe/9ymTi9K6IL7fx7p2q6A' +
// 'bvdIKq7BuiNrOMZxB8hkfEY5T3cgt32y3T2bOuiQGb03j0i6txy5wcIMxWn8G28bdU' +
// 'KUvNrvbqbyF5dVTqeC1WQsfZWkYxzko5hyn90W+i4OGgS+zSTAOEDKCgOjp5NPPumf' +
// '6igtZ7HFjQ+L0k0wJSOlmRlf4+wDk30GnJEqqjAct8Dxv5yEXjCosFeTS6KLvdR1ef' +
// '/zg8FRXRhJJQKh28NOEi2k/+NBgjUruK5I4+J1C4atIJyC4XFg2yNSJvgw241pLSFY' +
// 'EVrnHe2tvW9NUANqLkrvFSSckB1GnsnniuqrSSF/mBMhI2sh6wDr8HiQI6uQRduhJJ' +
// 'MEm4qjPIq/SqeIm+YfMx0xKJFILjVQZKbk8gj8N2oEGdLtfcs8eTFY5nbjNnsgAeWj' +
// 'yDtSkefxWGYb4IhzGa/cIMFIJigqE/XO1CNWrCeum297wvG7YqwGQpB8J6tHqU1kjX' +
// 'uIwCtpOgo1rre98Why1IS8CZ0xHFUKHIvr0RCGqSMH5YP4uK9IDVWXcP0DxJD/5sKQ' +
// 'mUNs287F6PquZS7nSfa7g2izrqm799RxYng1GfCsqr5K1PhEc3Ot+RvaWWOwKQ==';
// ??
// ST_Key_P = 'ISD5vgWXTGX0tJw+7U/HkglGMoHrmlmdZwcGzmrVJ4BKdt4mJgTaJjBHBiGwwcaEOXFv' +
// 'WJOP5NAmC/GDK5jE0MJ+sQj8d5xIfWo23Bw+SikBlAgDD1gjEbuIzZOjxFx1XnFtPAMem6LLNWqDBQM' +
// 'o41yG8UMV7HHTHV117aGIRnuYZrYyHBWV1nURp8CEOQupQY14fK7pLrMftAZ8wFbnkUoV3a15Q7q29/' +
// 'iXNrCnxmK4bq19hkPaaWncwb9u+9DtL8Bn+fnzVqjxWfJIN1OB7Sdmq+K9YzQaV/eVli45yoAQTkh9/' +
// 'tIz9OBGQFK9jaJv/TqUoRXYdNuLFCKDT/u9fmK3QZ8jS+jPfEhfX31ep6BvS2IImhYp+J0TDrsccG8v' +
// 'nuirUdnvFIGCVYE09U74wMuy8YrxounUTL3z8gZ2S8ES2qrxlB6XmilOqETuGZeqBkL7xsaW00/itUA' +
// 'VWRNyMoC/hNY7Z85AcbjiBUvxIqUdttBZOfnYYEVq7IdfKAB7/HaEqWnTXET41W2Fn6YnGcmxqoORPa' +
// 'kFPluBE6k4tknj5m9dAgdHOlR2TdDNKGz2TfOWgrrba6c1CBopRgAFXhdoBFHm243hvQkv2poNZka9P' +
// 'MlU7Hhl9dZ6LPD46bl+96rGZJodMaflW/32xiUH+oD72XNRsq9UGchkorEy+X+mgErsA1B0OfVti83K' +
// 'OCEWO3ekqc4hRBwSfN2RMbQ9RwC1jOVzsIA22iQsAdo2eymxgQbqjSzR434MCaAfSgM/nohaUDTjt1f' +
// 'k1u7yKV12bREw9Oo78t0lqFMv+xxIg3fR1oUsQ3tWYKb/yG6EUSeX+ngiUyZq1+BRplzwWkGrphQgpb' +
// 'qIcNEoMbv8eS+GhITL+YpC1nZgZu/JCon5Yy89';
// HD조선해양 PoC 25_1031
ST_Key_P = 'ISD5vgWXTGX0tJw+7U/HkglGMoHrmlmdZwcGzmrVJ4BKdt4mJgTaJjBHBiGwwcaEOXFvWJOP5NAmC/GDK' +
'5jE0MJ+sQj8d5xIfWo23Bw+SikBlAgDD1gjEbuIzZOjxFx1XnFtPAMem6LLNWqDBQMo41yG8UMV7HHTHV' +
'117aGIRnuYZrYyHBWV1nURp8CEOQupQY14fK7pLrMftAZ8wFbnkUoV3a15Q7q29/iXNrCnxmK4bq19hkP' +
'aaWncwb9u+9DtL8Bn+fnzVqjxWfJIN1OB7Sdmq+K9YzQaV/eVli45yoAQTkh9/tIz9OBGQFK9jaJv/TqU' +
'oRXYdNuLFCKDT/u9fmK3QZ8jS+jPfEhfX31ep6BvS2IImhYp+J0TDrsccG8vnuirUdnvFIGCVYE09U74w' +
'Muy8YrxounUTL3z8gZ2S8ES2qrxlB6XmilOqETuGZeqBkL7xsaW00/itUAVWRNyMoC/hNY7Z85AcbjiBU' +
'vxIqUdttBZOfnYYEVq7IdfKAB7/HaEqWnTXET41W2Fn6YnGcmxqoORPakFPluBE6k4tknj5m9dAgdHOlR' +
'2TdDNKGz2TfOWgrrba6c1CBopRgAFXhdoBFHm243hvQkv2poNZka9PMlU7Hhl9dZ6LPD46bl+96rGZJod' +
'MaflW/32xiUH+oD72XNRsq9UGchkorEy+X+mgErsA1B0OfVti83KOCEWO3ekqc4hRBwSfN2RMbQ9RwC1j' +
'OVzsIA22iQsAdo2eymxgQbqjSzR434MCaAfSgM/nohaUDTjt1fk1u7yKV12bREw9Oo78t0lqFMv+xxIg3' +
'fR1oUsQ3tWYKb/yG6EUSeX+ngiUyZq1+BRplzwWkGrphQgpbqIcNEoMbv8eS+GhITL+YpC1nZgZu/JCon5Yy89';
type
TFn_getEPapyrusImage = function(sOutPath: PAnsiChar; nSize: Integer; ullProduct: ULONGLONG): Integer; cdecl;
TFn_getLabGuardImage = function(nModuleType, nPartner, nCustomer: Integer; ullSeq: ULONGLONG; sOutPath: PAnsiChar; nSize, nType: Integer): Integer; cdecl;
TFn_labGuardPS = function(sKeyPath, sWritePath: PAnsiChar; nSize, nType, nUser: Integer; sDate, sSeq: PAnsiChar): Integer;
function getEPapyrusImage(sOutPath: AnsiString; nSize: Integer; ullProduct: ULONGLONG): Integer;
function getLabGuardImage(nModuleType, nPartner, nCustomer: Integer; ullSeq: ULONGLONG; sOutPath: AnsiString; nSize, nType: Integer): Integer;
function labGuardPS(sKeyPath, sWritePath: AnsiString; nSize, nType,
nUser: Integer; sDate: AnsiString; var sSeq: AnsiString): Integer;
implementation
uses
Tocsg.Path;
var
_hST: THandle = 0;
Fn_getEPapyrusImage: TFn_getEPapyrusImage = nil;
Fn_getLabGuardImage: TFn_getLabGuardImage = nil;
Fn_labGuardPS: TFn_labGuardPS = nil;
function InitProcedure: Boolean;
var
sDllPath: String;
begin
begin
if _hST = 0 then
begin
sDllPath := GetRunExePathDir + DLL_ST;
if not FileExists(sDllPath) then
begin
sDllPath := GetRunExePathDir + 'conf\' + DLL_ST;
if not FileExists(sDllPath) then
exit;
end;
_hST := LoadLibrary(PChar(sDllPath));
if _hST <> 0 then
begin
@Fn_getEPapyrusImage := GetProcAddress(_hST, 'getEPapyrusImage');
@Fn_getLabGuardImage := GetProcAddress(_hST, 'getLabGuardImage');
@Fn_labGuardPS := GetProcAddress(_hST, 'labGuardPS');
end;
end;
Result := _hST <> 0;
end;
end;
function getEPapyrusImage(sOutPath: AnsiString; nSize: Integer; ullProduct: ULONGLONG): Integer;
begin
Result := -1;
if InitProcedure and Assigned(Fn_getEPapyrusImage) then
Result := Fn_getEPapyrusImage(PAnsiChar(sOutPath), nSize, ullProduct);
end;
function getLabGuardImage(nModuleType, nPartner, nCustomer: Integer; ullSeq: ULONGLONG; sOutPath: AnsiString; nSize, nType: Integer): Integer;
begin
Result := -1;
if InitProcedure and Assigned(Fn_getLabGuardImage) then
Result := Fn_getLabGuardImage(nModuleType, nPartner, nCustomer, ullSeq, PAnsiChar(sOutPath), nSize, nType);
end;
{
Function
int labGuardPS(const char* keyPath, const char* writePath, int size, int type, int user, const char* date, char* data);
Parameter
1) const char* keyPath
- 압축 파일 내에 존재하는 라이센스 키 파일에 대한 경로이며, labcurity.txt 파일을 위치시키신 경로를 입력해주시면 됩니다. ("/your/path/keyName.txt")
2) const char* writePath
- 생성될 단위 워터마크 이미지가 저장될 경로입니다. ("/your/path/output.png")
3) int size
- 생성될 단위 워터마크 이미지의 사이즈를 지정하는 Parameter 이며, 2 또는 4를 입력하실 수 있습니다. LAB Guard-S는 2, LAB Guard-P는 4입니다.
- 해당 Parameter 값에는 2를 입력해주시면 됩니다.
4) int type -> Watermark Shape (0 ~ 3)
0 -> gray base dot data
1 -> gray base data
2 -> blue base dot data
3 -> blue base data
- 고객사의 니즈에 따라 다양한 워터마크 Shape을 사용하게 됩니다.
- 권장 옵션은 3 -> blue base data 입니다.
- 3번 값 기준 권장 투명도는 MFC 옵션 값 기준( 0-투명 ~ 255-불투명) 38 입니다.
- 해당 parameter의 옵션에 따라 권장드리는 투명도가 다를 수 있습니다.
5) int user
- 현재 제공드리는 SDK는 테스트 버전이기 때문에 1~100까지 입력할 수 있습니다.
- POC 또는 실 계약시 계약 인원에 따라 늘어날 수 있습니다.
6) const char* date
- 워터마크에 담을 시간 정보 입니다.
- 분 단위로 입력이 가능하며, 워터마크를 생성하는 시점에 대한 시간 정보를 입력하시면 됩니다.
- (format -> yyyy/MM/dd HH:mm) (2023/01/01 00:00 ~ )
7) char* data
- LAB Guard 검출 모듈에서 보여지는 워터마크 일련번호를 생성해서 포인터에 저장합니다.
- user와 date 값 조합으로 생성되며, 보통 해당 워터마크 일련번호를 화면 워터마크 생성시 남긴 로그 또는 출력물 워터마크 로그에 연동하여 구현하게 됩니다.
- 크기 할당 필요. ex) char data[100]
Return
0 -> Success to Save
1 -> Unavailable KeyFile
2 -> Expired
3 -> No permission
5 -> Failed to Save
6 -> Product out of range
}
function labGuardPS(sKeyPath, sWritePath: AnsiString; nSize, nType,
nUser: Integer; sDate: AnsiString; var sSeq: AnsiString): Integer;
var
arrData: array [0..99] of AnsiChar;
begin
Result := -1;
if InitProcedure and Assigned(Fn_labGuardPS) then
begin
sSeq := '';
ZeroMemory(@arrData, Length(arrData));
// FormatDateTime('yyyy/mm/dd hh:nn', Now) 이렇게 해도 2024-05-31... 이렇게 반환되서 강제로 바꿔줌 24_0531 10:45:14 kku
sDate := StringReplace(sDate, '-', '/', [rfReplaceAll]);
Result := Fn_labGuardPS(PAnsiChar(sKeyPath), PAnsiChar(sWritePath),
nSize, nType, nUser, PAnsiChar(sDate), arrData);
if Result = 0 then
sSeq := AnsiString(arrData);
end;
end;
end.