=Changes=

==1.9.0== 2026-06-03
  * Added   - KeyzyLicenseValidator::getDealerName(). For dealer-distributed licenses the SDK now exposes the issuing dealer's name, so the partner application can display it. Non-dealer licenses return an empty string.
  * Added   - Finer-grained network failure statuses on LicenseStatus: NETWORK_DNS_FAILED, NETWORK_REFUSED, NETWORK_TIMEOUT, NETWORK_TLS_FAILED, NETWORK_PROXY_REQUIRED, NETWORK_HOSTS_TAMPERED. Integrations can now tell connectivity problems apart and show a more specific message instead of a single CONNECTION_ERROR.
  * Changed - CONNECTION_ERROR is now the fallback for network failures that do not match a specific NETWORK_* status. Existing switch(status) code keeps working unchanged; the new statuses are reached only when partner code adds explicit cases.

==1.8.0== 2026-05-07
  * Changed - registerTrial() and registerOfflineDistributedLicense() now require a non-empty email parameter. Server-side hardening on 2026-04-20 made email mandatory; the client mirrors this and rejects empty-email calls early with LicenseStatus::EMAIL_VALIDATION (no network round-trip).
  * Added   - SERIAL_VALIDATION, CODE_VALIDATION error codes to LicenseStatus, mapped from per-field 422 server responses on register-trial and register-offline-distributed.
  * Deprecated - LicenseStatus::NAME_OR_EMAIL_VALIDATION. The server no longer emits the underlying message after 2026-04-20 hardening. Kept for ABI compatibility.

==1.7.1== 2026-04-16
  * Fixed   - Windows dynamic runtime (MD) library configuration corrected for all build variants. Static runtime (MT) builds were not affected.

==1.7.0== 2026-03-17
  * Added   - Single-parameter upgradeLicense(targetSerial) in KeyzyLicenseActivator. Uses the stored serial as the source automatically.
  * Changed - Improved HTTP networking layer.
  * Added   - Multiple security hardening improvements.
  * Changed - Linux TLS backend switched from OpenSSL to mbedTLS (no system dependency needed).
  * Changed - Platform TLS backends: Secure Transport (macOS), Schannel (Windows), mbedTLS (Linux).

==1.6.1== 2026-02-18
  * Removed - Deprecated validateLicenseSerial() and validateLicenseFile() functions. Use validateOnline() and validateOffline() instead.
  * Fixed   - Security improvements.

==1.6.0== 2023-09-29
  * Added   - LicenseDepositHandler::registerOfflineDistributedLicense() function. Now, the client-side can register an offline license.
  * Fixed   - LicenseStatus::CONNECTION_ERROR bug. It was blocked in the 1.5.0 version and cannot be used.
  * Added   - New errors to the LicenseStatus Enum.

==1.5.0== 2023-06-20
  * Added   - LicenseDepositHandler class with registerTrial() function. Now, the client-side can request a trial license using the registerTrial() function.
  * Added   - std::uint64_t getDaysLeft() and std::uint64_t getDaysTotal() to the KeyzyLicenseValidator class. They are meaningful for Trial and Subscription licenses. getDaysLeft() also works for the Offline License Life parameter of Perpetual licenses.
  * Added   - std::uint64_t getDaysLeft() and std::uint64_t getDaysTotal() to the KeyzyLicenseValidator class.
  * Added   - A new constructor to the ProductData struct. It can now be created using the constructor.
  * Added   - LicenseType getLicenseTypeEnum() to the KeyzyLicenseValidator class.
  * Added   - LicenseInfo struct to the KeyzyTypes.h file.
  * Added   - LicenseType enum class to the KeyzyTypes.h file.
  * Added   - NO_FREE_LICENSES error code to the LicenseStatus enum class.
  * Added   - SKU_NUMBER_VALIDATION, PRODUCT_CODE_VALIDATION, NAME_VALIDATION, EMAIL_VALIDATION error codes to the LicenseStatus enum class.
  * Added   - ANOTHER_TRIAL_LICENSE_ALREADY_ACTIVATED error code to the LicenseStatus enum class.

==1.4.0== 2022-10-10
  * Added   - Info parameter (KeyzyLicenseValidator::getInfo())

==1.3.0== 2022-06-03
  * Added   - StartTime parameter (KeyzyLicenseValidator::getStartTime()) for Trial and Subscription licenses
  * Added   - EndTime parameter (KeyzyLicenseValidator::getEndTime()) for Trial and Subscription licenses
  * Added   - LicenseType parameter (KeyzyLicenseValidator::getLicenseType())

==1.0.1== 2022-01-28
  * Fixed   - Crash for some VirtualBox images.

==1.0.0== 2021-12-03
  * Added   - Upgrade license functionality (KeyzyLicenseActivator::upgradeLicense()).
  * Removed - All asserts were removed. Those make problems in Windows Debug mode.

==0.0.20== 2021-07-08
  * Added - SKU information (KeyzyLicenseValidator::getSku()) to the license file (Semi-Online, Offline). Please look at the examples.
  * Added - Licensee's Name (KeyzyLicenseValidator::getLicenseeName()) and Licensee's Email (KeyzyLicenseValidator::getLicenseeEmail()) to the library. Please look at the examples.
  * Added - Apple Slicon Support.
  * Added - iOS Support.
  * Fixed - Minor bugs.

==0.0.19== 2021-01-08
  * Added - Versioning Feature.
  * Updated - Validation object should be get from Activation object. Please look at the examples.
  * Fixed - Minor bugs.
  * Added  - NO_ACTIVE_SUBSCRIPTION error was added.

==0.0.18== 2020-05-08
  * Fixed a very rare OSX system only bug.

==0.0.17== 2020-01-29
  * Added CONNECTION_ERROR enum to LicenseStatus. 
  * Added TOO_MANY_REQUESTS enum to LicenseStatus. 
  * Added trim function to serial number input processes. 

==0.0.16== 2019-12-06
  * Added online and semi-online deactivations which were connected to KEYZE servers. Now, your user can deactivate the license in your software.
  * KeyzyLicenseActivator class was added.
  * Added CANNOT_KEEP_SERIAL, CANNOT_KEEP_LICENSE_FILE, ACTIVATION_DELETED, CLIENT_SERIAL_DOES_NOT_EXIST enums to LicenseStatus
  * KeyzyLicenseValidator::validateLicenseFile() is deprecated. Use KeyzyLicenseValidator::validateOffline()
  * KeyzyLicenseValidator::validateLicenseSerial() is deprecated. Use KeyzyLicenseValidator::validateOnline()
  * Documentation is updated.
  * Sample code is updated.

==0.0.15== 2019-10-15
  * Documentation is updated. 
  * Sample code is updated. 

==0.0.14== 2019-09-18
  * BIG UPDATE
  * Operating system information with bits is sent to KEYZY servers.
  * HostID generation was changed. KeyzyLicenseValidator::getHostIdHash() gives a longer string. Now, it's stronger and more secure. BE CAREFUL, YOUR USERS' OLD ACTIVATIONS WILL BE INVALID.
  * KeyzyLicenseValidator::getHostIdHashLegacy() was added to support backward compatibility If you ever use it for yourself.

==0.0.13== 2019-07-19
  * Added new error codes for subscription and trial licenses.
  * Added LicenseStatus::SUBSCRIPTION_LICENSE_EXPIRED
  * Added LicenseStatus::SUBSCRIPTION_LICENSE_NOT_STARTED
  * Added LicenseStatus::TRIAL_LICENSE_EXPIRED
  * Added LicenseStatus::TRIAL_LICENSE_NOT_STARTED

==0.0.12== 2019-07-02
  * Added VS2019 static libraries.
  * Fix for documentation in semi-online activation sample.

==0.0.11== 2019-05-15
  * Added KeyzyLicenseManager::downloadLicenseFile() with empty arguments to call with the serial already in the system. 

==0.0.10== 
  * Added compability with the new license file - subscription and offline license life features.

==0.0.9==
  * Added KeyzyLicenseManager::downloadLicenseFile() member funtion.
  * Added LicenseStatus::PRODUCT_NOT_EXIST_FOR_SKU validation error code.
  * Added LicenseStatus::ACTIVATION_DEACTIVATED validation error code.
  * Documentation has a main page with information and sample codes.
  * Changed ProductData::_appID with ProductData::_appId (Be careful).
