====== License generator - Technical Specification ====== * This project is currently in the informational stage. Ideas presented here are subject to change or delete. ====== Key Manager ====== ====== License Data ====== * The content of the license depend of the version used ===== Version 1 ===== * This license is a text file - we will count number of jump line (\n) ^ Content ^ Line ^ | Owner | 1 | | Max NetWeaver | 2 | | Ip | 3 | | Expiration Date (dd/MM/YYYY) | 4 | | Edit/Dev Mode | 5 | | Perpetual License| 6 | | Max Hana Connector| 7 | ===== Version 2 ===== * This license is a text file - we will count number of jump line (\n) ^ Content ^ Line ^ | Owner | 1 | | Max System | 2 | | Ip | 3 | | Expiration Date (dd/MM/YYYY) | 4 | | License Type | 5 | | Perpetual License| 6 | ===== Version 3 ===== * This license is Json with hashed Key > Main table ^ Key ^ Value type ^ Description ^ | uId | long | ClientID used internaly on Key Generator | | devMode | int | Special flag for dev Mode | | licenseList| JSON | Every license packed | > This is the content of eatch **licenseList** ^ Key ^ Value type ^ Description ^ | productId | long | ProductID ( NETWEAVER / HANA / BUSINESSOBJECTS / AGENT / DATADOG ) | | trustIp | string | List of ip allowed to use can be list or mask | | licenseType | int | Type of License used (Trial/Perpetual/Expiration/OnUseBilling)| | internalMode | int | Special flag for internal Mode | | endTime | LocalDate | Expiration Date (dd-MM-YYYY) | | postCount| int | Number of system/users/agent allowed to run| ====== License Security ====== * Only Private key distribued (License v1/v2) ===== Version Management ===== * New Version will be started by special symbol who not exist in base64 > V1 : None > V2 : None > V3 : $ ^Caption ^Effect ^ |Invalid |Error showed to user as invalid Key| |Error |Error showed to user as typing error| ^Step by Step ^Valid ^Error ^ | Check if empty | next | return 01 | | Trim Space (In start and in end) | next | NaN | | Check Length correct | next | return 02 | → Version 1/2 (sKey.Length % 4) ^Step by Step v1/2 ^Valid ^Error ^ | Check v3+ header | Goto V3 | next | | Decrypt License Probe | Valid | Invalid | → Version 3+ ^Step by Step v3+ ^Valid ^Error ^ | Check Valid header | next | return 03 | | Remove header | next | NaN | | Decrypt License NG | Valid | Invalid | ===== Decrypt License Probe ===== ^Step by Step ^Valid ^Error ^ | Base64 to char | next | Invalid 001 | | Use RSA/ECB/PKCS1Padding | next | Invalid 002 | | Extract hash(Sha-256) | next | Invalid 003 | | Extract seed | next | NaN | | Create Hash from data | next | Invalid 004 | | Compare Hash to DataHash | next | Invalid 005 | | Count number of line (More than 6) | next| Invalid 006 | | Parse License - ASCII | Valid | Invalid 007 | ===== Decrypt License NG ===== ^Step by Step ^Valid ^Error ^ | Base64 to char | next | Invalid 001 | | Extract Key decrypt-key | next | Invalid 008 | | Decrypt key RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING| next | Invalid 009 | | Use key AES/GCM/NoPadding for decrypt Data | next | Invalid 010 | | Check Valid Json Data | next | Invalid 010 | | Check valid Key exist (HashedName) | next | Invalid 012 | | Parse License - JSON | next | Invalid 013 | WIP