The license key generator is part of a licensing application. It takes a registration number as an input along with a public key and generates a license number which is then encrypted with the provided public key and signed with a private key. This is the license file. The key pair are openssl RSA keys.
The application will have an easy to use GUI and will be coded in python. It will also have nogui option to allow it to be used from the command line and to be scripted. The application is meant to be cross platform. The encryption can either be done with openssl python library or using Python/C bindings and code from a provided companion application.
The registration number is provided in the form of an encrypted file. The application will decrypt the file using a private RSA key (no passphrase), and the resulting ascii string will be as follows:
Nr ethernet interfaces:MAC0:...:MACn:Nr CPUS:CPU0 family,model:CPUn family,modelNr PCI devices::PCI0 device id:PCIn device id
License number generator
The application will add to this string the number of licensed channels and the number of days the license is valid for:
Nr ethernet interfaces:MAC0:...:MACn:Nr CPUS:CPU0 family,model:CPUn family,modelNr PCI devices::PCI0 device id:PCIn device id:Nr channels:Nr validity days
This string will then be encrypted with the application's public key. Once signed this becomes the license file.
The encryption will happen using some provided C code from a companion application. It is important that the license file can be decrypted by this companion application.
Optionally, the application needs to have a way to manage key pairs, generation, addition, deletion, revocation (through the generation of a key generation certificate), export and selection of the default key pair. The only key pairs supported are openssl style RSA style. The companion C application uses openssl as encryption library, so either a compatible library or Python/C bindings need to be used. This optional element can be quoted separately.
An example usage follows:
Usage : ldlicensor [-n] [-r reg_number] [-k public_key] [-g key_name] [-R key_name] [-e key_name] [-o output_path] [-v] [-h]
Generates an encryped system fingerprint.
-n Run without the GUI and parse command line options
-r Registration number file.
-k Absolute path to the provided public key.
-g Generate a new key pair with the provided name.
-R Revoke the specified key.
-e Export the specified key.
-d Delete the specified key.
-o Optional absolute output path.
-v enable verbose mode.
-h This help
Deleted keys are deleted from the application but are not deleted from the backend database so that they can be retrieved is needed. Features not implemented will need to be stubbed out.
All operation on keys require a passphrase. The revocation certificate is created when the key pair is created and the revocation of a key is the only operation that is allowed without a passphrase.
The backend database must be open source, MySQL, SQLite or similar. Probably a lightweight database is better suited for this than MySQL.
[url removed, login to view] tested source code in python.
[url removed, login to view] mysqldump equivalent of the database structure.
3.A short design document including information regarding the design decisions made and the test process undertaken. It will include a database schema including relationships.
Installation on Linux is compulsory, and Windows installion needs to be considered and quoted separately. As part of the installation the chosen database will be installed (if not in the system already) and the database created.
Python libraries and the choice of database needs to be agreed in terms of documentation, stability and maintenance.
It is desirable that the source code is well documented and formatted with a code formatter.
The application will be developed prioritizing design, simplicity, cleanness and quality.
The development will take place on [url removed, login to view]
On delivery, Lindus Embedded will test the application reviewing it against this specification. Deviations from the specification will be corrected at no extra charge.
The quoted price will be effective on project acceptance.