CodeMeter 6 introduced the new type of Firm Code for different CmContainers, which can be stored either in CodeMeter hardware (CmDongle) or in a soft license (CmActLicense). The new Universal Firm Code allows licenses to be transferred, temporarily or permanently, without having to involve the original software vendor in the process. Licenses can also be nested within each other to make it easier to move or borrow multiple licenses in a single step.
Universal Firm Code
In order to transfer licenses between CodeMeter hardware and software license containers, both sides need the same cryptographic capabilities. This is why a new type of Firm Code was developed: The licenses of the Universal Firm Code (Firm Code from 6.000.000 and higher) are produced as certificates modeled after the X.509 standard. All keys are stored with asymmetrical cryptographic keys in the certificate so that they can only be decrypted by the right CmContainer. Usually, licenses are not transferrable. The software vendor has to allow the transfer explicitly. In order to be able to transfer a license from one CmContainer to another, the option has to be approved in the license by the original vendor. The vendor determines which types of CmContainers can receive the license and whether the key for further transfers down the line is also passed onto the new CmContainer.
Moving and Borrowing
Currently, two types of license transfers are supported: moving and borrowing. When a license is borrowed, it is transferred by a sender to a receiver for a defined period of time. When that time has elapsed, the license automatically becomes invalid for the receiver and reverts back to the original sender. When moving licenses, they remain permanently with the receiver. If the software vendor allows the option, this can be done several times. The licenses can also be returned back to the sender.
Certificates are also used when transferring licenses. If the transfer is legitimate, the CmContainer with the original license (associated with the sender) will have a private key that confirms to the new recipient of the license (the receiver) that he has transferred the correct license. All keys contained in this process are encrypted for this specific receiver and cannot be read or used by any other CmContainer.
In order to transfer all licenses required for an application in one step, Nested Product Items are defined for the Universal Firm Code. Any license (Product Item) can now have several other licenses allocated to it, forming a permanent unit that can only be borrowed or transferred together. The receiver automatically gets all the licenses he needs. Nested licenses inherit the attributes of their parent licenses. If a time limit is set for the parent license, it applies to all licenses nested in it. The license counter also behaves according to the new system: If a nested license is not given a dedicated license quantity, using it will mark one license from the pool of the parent license as used.