You've already forked lazarus-ccr
77 lines
2.4 KiB
ObjectPascal
77 lines
2.4 KiB
ObjectPascal
unit uni_RegCommon;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
OnGuard, OgUtil, Classes;
|
|
|
|
var
|
|
MachineModifier : longint;
|
|
MachineKey : TKey;
|
|
Expires : TDateTime;
|
|
RegistrationInfo : TStringList;
|
|
|
|
function IsReleaseCodeValid (ReleaseCodeString: string; const SerialNumber : longint) : boolean;
|
|
procedure SaveRegistrationInformation (const ReleaseCodeString: string; const SerialNumber : longint);
|
|
procedure GetRegistrationInformation (var ReleaseCodeString: string; var SerialNumber : longint);
|
|
|
|
implementation
|
|
|
|
uses
|
|
SysUtils;
|
|
|
|
const
|
|
RegistrationFile = 'REGISTRATION.DAT';
|
|
|
|
function IsReleaseCodeValid (ReleaseCodeString: string; const SerialNumber : longint) : boolean;
|
|
var
|
|
CalculatedReleaseCode : TCode;
|
|
begin
|
|
// Remove spaces from the Release code
|
|
while pos(' ', ReleaseCodeString) > 0 do
|
|
System.Delete(ReleaseCodeString, pos(' ', ReleaseCodeString), 1);
|
|
|
|
// Calculate the release code based on the serial number and the calculated machine modifier
|
|
InitSerialNumberCode(MachineKey, SerialNumber, Expires, CalculatedReleaseCode);
|
|
|
|
// Compare the two release codes
|
|
result := AnsiUpperCase(ReleaseCodeString) = AnsiUpperCase(BufferToHex(CalculatedReleaseCode, sizeof(CalculatedReleaseCode)));
|
|
end;
|
|
|
|
procedure SaveRegistrationInformation (const ReleaseCodeString: string; const SerialNumber : longint);
|
|
begin
|
|
// Save the information for the application
|
|
RegistrationInfo := TStringList.Create;
|
|
RegistrationInfo.Add(format('%d',[SerialNumber]));
|
|
RegistrationInfo.Add(ANSIUpperCase(ReleaseCodeString));
|
|
RegistrationInfo.SaveToFile(RegistrationFile);
|
|
RegistrationInfo.Free;
|
|
end;
|
|
|
|
procedure GetRegistrationInformation (var ReleaseCodeString: string; var SerialNumber : longint);
|
|
begin
|
|
// Save the information for the application
|
|
if FileExists(RegistrationFile) then begin
|
|
RegistrationInfo := TStringList.Create;
|
|
RegistrationInfo.LoadFromFile(RegistrationFile);
|
|
SerialNumber := StrToInt(RegistrationInfo[0]);
|
|
ReleaseCodeString := RegistrationInfo[1];
|
|
RegistrationInfo.Free;
|
|
end else begin
|
|
SerialNumber := 0;
|
|
ReleaseCodeString := '';
|
|
end;
|
|
end;
|
|
|
|
const
|
|
Key : TKey = ($3E,$C9,$18,$78,$7D,$AC,$AF,$D3,$64,$E0,$BC,$0A,$43,$68,$2C,$F2);
|
|
initialization
|
|
Expires := 0;
|
|
MachineKey := Key;
|
|
MachineModifier := ABS(CreateMachineID([midUser, midSystem, {midNetwork,} midDrives]));
|
|
ApplyModifierToKeyPrim(MachineModifier,MachineKey,sizeof(MachineKey));
|
|
end.
|
|
|