| | |
| | | #include <licensecc_properties.h> |
| | | |
| | | #include "license_verifier.hpp" |
| | | #include "../pc_identifier_facade.hpp" |
| | | #include "../os/signature_verifier.h" |
| | | #include "../pc_identifier/pc_identifier_facade.hpp" |
| | | #include "../base/StringUtils.h" |
| | | #include "../os/signature_verifier.hpp" |
| | | |
| | | namespace license { |
| | | using namespace std; |
| | |
| | | FUNCTION_RETURN LicenseVerifier::verify_signature(const FullLicenseInfo& licInfo) { |
| | | const string licInfoData(licInfo.printForSign()); |
| | | |
| | | FUNCTION_RETURN ret = license::verify_signature(licInfoData, licInfo.license_signature); |
| | | FUNCTION_RETURN ret = license::os::verify_signature(licInfoData, licInfo.license_signature); |
| | | |
| | | if (ret == FUNC_RET_OK) { |
| | | m_event_registry.addEvent(SIGNATURE_VERIFIED, licInfo.source); |
| | |
| | | } |
| | | |
| | | // TODO: split in different classes |
| | | FUNCTION_RETURN LicenseVerifier::verify_limits(const FullLicenseInfo& licInfo) { |
| | | bool is_valid = VERIFY_MAGIC; |
| | | FUNCTION_RETURN LicenseVerifier::verify_limits(const FullLicenseInfo& lic_info) { |
| | | bool is_valid = LCC_VERIFY_MAGIC; |
| | | if (!is_valid) { |
| | | m_event_registry.addEvent(LICENSE_CORRUPTED, licInfo.source.c_str()); |
| | | m_event_registry.addEvent(LICENSE_CORRUPTED, lic_info.source.c_str()); |
| | | } |
| | | const const time_t now = time(nullptr); |
| | | auto expiry = licInfo.m_limits.find(PARAM_EXPIRY_DATE); |
| | | if (is_valid && expiry != licInfo.m_limits.end()) { |
| | | const time_t now = time(nullptr); |
| | | auto expiry = lic_info.m_limits.find(PARAM_EXPIRY_DATE); |
| | | if (is_valid && expiry != lic_info.m_limits.end()) { |
| | | if (seconds_from_epoch(expiry->second) < now) { |
| | | /* |
| | | eventRegistryOut.addEvent(PRODUCT_EXPIRED, source.c_str(), |
| | | string("Expired on: " + this->to_date).c_str());*/ |
| | | m_event_registry.addEvent(PRODUCT_EXPIRED, licInfo.source.c_str(), ("Expired " + expiry->second).c_str()); |
| | | m_event_registry.addEvent(PRODUCT_EXPIRED, lic_info.source.c_str(), ("Expired " + expiry->second).c_str()); |
| | | is_valid = false; |
| | | } |
| | | } |
| | | const auto start_date = licInfo.m_limits.find(PARAM_BEGIN_DATE); |
| | | if (is_valid && start_date != licInfo.m_limits.end()) { |
| | | const auto start_date = lic_info.m_limits.find(PARAM_BEGIN_DATE); |
| | | if (is_valid && start_date != lic_info.m_limits.end()) { |
| | | if (seconds_from_epoch(start_date->second) > now) { |
| | | /*eventRegistryOut.addEvent(PRODUCT_EXPIRED, source.c_str(), |
| | | string("Valid from " + this->from_date).c_str());*/ |
| | | m_event_registry.addEvent(PRODUCT_EXPIRED, licInfo.source.c_str(), |
| | | m_event_registry.addEvent(PRODUCT_EXPIRED, lic_info.source.c_str(), |
| | | ("Valid from " + start_date->second).c_str()); |
| | | is_valid = false; |
| | | } |
| | | } |
| | | const auto client_sig = licInfo.m_limits.find(PARAM_CLIENT_SIGNATURE); |
| | | if (is_valid && client_sig != licInfo.m_limits.end()) { |
| | | const EVENT_TYPE event = PcIdentifierFacade::validate_pc_signature(client_sig->second); |
| | | m_event_registry.addEvent(event, licInfo.source); |
| | | const auto client_sig = lic_info.m_limits.find(PARAM_CLIENT_SIGNATURE); |
| | | if (is_valid && client_sig != lic_info.m_limits.end()) { |
| | | const LCC_EVENT_TYPE event = pc_identifier::PcIdentifierFacade::validate_pc_signature(client_sig->second); |
| | | m_event_registry.addEvent(event, lic_info.source); |
| | | is_valid = is_valid && (event == LICENSE_OK); |
| | | } |
| | | return is_valid ? FUNC_RET_OK : FUNC_RET_ERROR; |
| | |
| | | |
| | | LicenseInfo LicenseVerifier::toLicenseInfo(const FullLicenseInfo& fullLicInfo) const { |
| | | LicenseInfo info; |
| | | info.license_type = LOCAL; |
| | | info.license_type = LCC_LOCAL; |
| | | |
| | | const auto expiry = fullLicInfo.m_limits.find(PARAM_EXPIRY_DATE); |
| | | if (expiry != fullLicInfo.m_limits.end()) { |
| | |
| | | |
| | | const auto proprietary_data = fullLicInfo.m_limits.find(PARAM_EXTRA_DATA); |
| | | if (proprietary_data != fullLicInfo.m_limits.end()) { |
| | | strncpy(info.proprietary_data, proprietary_data->second.c_str(), PROPRIETARY_DATA_SIZE); |
| | | strncpy(info.proprietary_data, proprietary_data->second.c_str(), LCC_API_PROPRIETARY_DATA_SIZE); |
| | | } |
| | | return info; |
| | | } |