Offline License Distribution Device

According some aspects, a user may purchase licenses from a vendor and receive a first code that was generated by a license management device and indicates a first quantity of licenses. The user may manually enter the first code into a license distribution device, which may be a handheld device with no connections to the license management device or a licensee device, in order to replenish licenses on the license distribution device. A user may attempt to perform a task that requires one or more licenses on a licensee device. The user may obtain a second code from the licensee device and manually enter the code into the license distribution device. The user may obtain a third code from the license distribution device and manually enter the third code into the licensee device to perform the task for which licenses were sought.

FIELD OF USE

Aspects of the disclosure relate generally to computer software and computer-aided design and manufacturing applications. More specifically, aspects of the disclosure provide methods and techniques for users of computer-aided design and manufacturing applications to obtain licenses.

BACKGROUND

Hardware tools and other components are an essential part of many trades. Organizing a set of tools can be important in many industries. For example, computer-aided design and manufacturing (CAD/CAM) software may be used to design and manufacture foam inlays (also referred to as “shadow boards”) for storing a hardware tool set. The vendor of such software may choose to charge its customer by the number of products that are actually manufactured through the software. Thus, the vendor may wish to sell individual licenses (e.g., software licenses) to its end users and keep track of the use of these licenses.

The licenses may be distributed to a remotely located machine via network communications such as the Internet. In other words, the vendor's server that issues licenses and the end user's device that consumes the licenses may need to be able to communicate with each other through a network. However, this solution may not be feasible in an environment where a high level of security is maintained and communications to an outside network is limited or restricted. For example, the defense industry and the government intelligence community may have stricter standards for allowing their devices to communicate with a non-secure device. This may make the distribution of licenses difficult or impossible. Aspects described herein may address these and other problems, and generally improve the ease, efficiency, and speed of license distribution especially in an offline or isolated environment.

SUMMARY

The following presents a simplified summary of various aspects described herein. This summary is not an extensive overview, and is not intended to identify key or critical elements or to delineate the scope of the claims. The following summary merely presents some concepts in a simplified form as an introductory prelude to the more detailed description provided below. A license distribution device may be communicatively disconnected from a license manager device and a licensee device. In other words, there may not be any wired or wireless communication channel available to the license distribution device with the license manager device or the licensee device. A user may purchase one or more licenses from the operator of the license manager device enter a first code into the license distribution device. The user may obtain a second code from the licensee device in order to perform a task for which one or more licenses are required. The user may enter the second code into the license distribution device and obtain a third code from the license distribution device. The user may enter the third code into the licensee device to perform the task.

Aspects discussed herein may relate to methods and techniques for distributing licenses. A license distribution device may receive a first code from a user where the first code that includes a validation code and an indication of a first quantity of licenses. The first code may be generated by a license manager device. The license distribution device may be communicatively disconnected form the license manager device when the first code is received by the license distribution device. The license distribution device may increase a license counter by the first quantity of licenses based on a determination that the validation code in the first code matches a predetermined validation code stored in the license distribution device. The user may acquire a second code generated by a licensee device and enter the second code into the license distribution device. Alternatively, the second code may be sent by the licensee device to the license distribution device via a communication channel. The second code may include a request for a second quantity of licenses. The license distribution device may generate a third code indicating the second quantity of licenses. The license counter of the license distribution device may be decreased by the second quantity of licenses. The license distribution device may cause output of the third code. The third code may be operable to enable the licensee device to prepare one or more products corresponding to the second quantity of licenses. In some embodiments, such as where the license distribution device and the licensee device are not in electronic communication (e.g., where they are “air gapped”), the user may input the third code into the licensee device. Alternatively, the third code may be sent by the license distribution device to the licensee device via a communication channel, in implementations where the license distribution device and the licensee device are in electronic communication.

In some implementations, the generation of the third code and the decreasing of the license counter may be performed atomically.

In some implementations, the license distribution device may include a display, and the third code may be displayed on the display of the license distribution device.

In some implementations, the second code may include an identifier associated with the licensee device. The third code may be generated based on the identifier.

In some implementations, the second code may be generated and encrypted by the licensee device. The license distribution device may be communicatively disconnected from the licensee device while the license distribution device receives the second code.

Corresponding apparatus, systems, and computer-readable media are also within the scope of the disclosure. These features, along with many others, are discussed in greater detail below.

DETAILED DESCRIPTION

By way of introduction, aspects discussed herein may relate to methods and techniques for distribution of licenses especially in an offline environment. Before discussing these concepts in greater detail, however, several examples of a computing device that may be used in implementing and/or otherwise providing various aspects of the disclosure will first be discussed with respect toFIG. 1.

FIG. 1illustrates one example of a computing device101that may be used to implement one or more illustrative aspects discussed herein. For example, computing device101may, in some embodiments, implement one or more aspects of the disclosure by reading and/or executing instructions and performing one or more actions based on the instructions. In some embodiments, computing device101may represent, be incorporated in, and/or include various devices such as a desktop computer, a computer server, a mobile device (e.g., a laptop computer, a tablet computer, a smart phone, any other types of mobile computing devices, and the like), and/or any other type of data processing device. Computing device101may include more components or fewer components than what is described inFIG. 1.

Computing device101may, in some embodiments, operate in a networked environment. As shown inFIG. 1, various network nodes101,105,107, and109may be interconnected via a network103, such as the Internet. Other networks may also or alternatively be used, including private intranets, corporate networks, LANs, wireless networks, personal networks (PAN), and the like. Network103is for illustration purposes and may be replaced with fewer or additional computer networks. A local area network (LAN) may have one or more of any known LAN topology and may use one or more of a variety of different protocols, such as Ethernet. Devices101,105,107,109and other devices (not shown) may be connected to one or more of the networks via twisted pair wires, coaxial cable, fiber optics, radio waves or other communication media.

In some embodiments, as in the case of a license distribution device, computing device101may operate in a standalone environment. In other words, computing device101may not be connected to any other devices or any networks including the various types of networks described above. Thus, computing device101may not have any wired or wireless communication channels established with any other devices. In such embodiments, network interface117may be disabled or computing device101may lack network interface117entirely.

As seen inFIG. 1, computing device101may include a processor111, random access memory (RAM)113, read-only memory (ROM)115, network interface117, input/output interfaces119, and memory121. I/O119may include a variety of interface units and drives for reading, writing, displaying, and/or printing data or files. For example, input/output interfaces119may include one or more of a keyboard, a mouse, a keypad, a touchscreen, a touchpad, a button, a microphone, a display, a printer, a speaker, etc. Input/output interfaces119may be integrated into computing device101or may be an external device that is connected to computing device101through a wired connection or wirelessly. Computing device101may be powered by a power grid and/or a battery.

Memory121may store software for configuring computing device101into a special purpose computing device in order to perform one or more of the various functions discussed herein. Memory121may be permanent or semi-permanent storage such as a hard disk drive (HDD), flash memory, a solid-state drive (SSD), an optical drive (e.g., a compact disc read-only memory (CD-ROM) drive, a digital versatile drive read-only memory (DVD-ROM) drive, a Blu-ray Drive, etc.), etc. Memory121may store operating system software123for controlling overall operation of computing device101, control logic125for instructing computing device101to perform aspects discussed herein, one or more applications127, and license token storage129. Applications127may include computer-aided design (CAD) application. License token storage129may be a database. License token storage129may store a license token counter and/or license tokens. Computing device101may include two or more of any and/or all of these components (e.g., two or more processors, two or more memories, etc.) and/or other components and/or subsystems not illustrated here. All of the components illustrated inFIG. 1are optional and computing devices101, in some embodiments, may lack one or more of the components illustrated inFIG. 1.

Devices105,107,109may have similar or different architecture as described with respect to computing device101. Those of skill in the art will appreciate that the functionality of computing device101(or device105,107,109) as described herein may be spread across multiple data processing devices, for example, to distribute processing load across multiple computers, to segregate transactions based on geographic location, user access level, quality of service (QoS), etc.

Having discussed several examples of computing devices which may be used to implement some aspects as discussed further below, discussion will now turn to a method for offline distribution of license tokens.

FIG. 2depicts an example license management system, including a license manager device, a license distribution device, and a licensee device that may be used in implementing one or more aspects of the disclosure. License management system200may include license manager device201, license distribution device203, and licensee device205. Each of license manager device201, license distribution device203, and licensee device205may be implemented with software and/or hardware such as computing device101ofFIG. 1. License manager device201, license distribution device203, and license device205may be operated by one or more users such as license purchaser207and operator209. License manager device201may issue one or more licenses to licensee device205via license distribution device203. Licensee device205may require one or more licenses for partial or full operation. For example, without sufficient quantity of licenses, licensee device205may be unable (e.g., locked out) to perform one or more functions or may lose its functionality entirely. The licenses may be consumable. For example, licensee device205may be a device that utilizes computer-aided design (CAD) and/or computer-aided manufacturing (CAM) to manufacture a product (e.g., a foam inlay, also known as a shadow board, for organizing a hardware toolset). In this example, licensee device205may require one license to produce one manufactured item. The licenses may have an expiration date, after which licensee device205can no longer perform its intended function. Thus, in order for licensee device205to continue to function, operator209may need to replenish licenses issued by license manager device201. A license may be represented by or embodied in a code, a token, a key, etc.

License manager device201, license distribution device203, and licensee device205need not be communicatively connected with each other. For example, license distribution device203may not be connected to any communication network (e.g., LAN, a cellular network, Bluetooth, Zigbee, Wi-Fi, the Internet, etc.) and thus may be incapable of communicating with license manager device201or licensee device205via wired or wireless communication. Similarly, licensee device may not be communicatively connected to license manager device201and/or license distribution device203, and may be incapable of communicating with license manager device201and/or license distribution device203via wired or wireless communication. For example, licensee device205may be located in a high-security location (e.g., a government agency, a military facility, etc.) where “air gapping” (i.e., a network security measure employed to ensure that its network is physically isolated from unsecured networks) is mandated. Thus, in such an environment, licensee device205may not be able to obtain licenses from license manager device by means of direct electronic communication.

License manager device201may be software and/or hardware (e.g., BluePOD License Manager developed by OSAAP America of Chelmsford, Mass.) that is operated by a license issuer such as a manufacturer and/or vendor of licensee device205. License manager device201may be one or more servers. License manager device201may create, issue, monitor, and/or deprecate licenses associated with one or more licensee devices such as licensee device205. License manager device201may also set one or more expiration dates on the issued license(s). License purchaser207may obtain (e.g., purchase) one or more licenses from license manager device201. The one or more licenses may be embedded in first code211. A code (e.g., first code211, second code213, third code215, etc.) may also be referred to as a token, a key, a token code, etc. The obtaining of first code211may be automated (e.g., license purchaser207may obtain the license(s) from license manager device201without additional human intervention) or alternatively license manager device201may be operated by a human operator and license purchaser207may obtain first code211from the human operator of license manager device201. For example, license purchaser207, who wishes to purchase bulk licenses to operate licensee device205may contact a license issuer (e.g., an enterprise that owns and/or control license manager device201) by phone, email, letter, website, etc. and request a specific amount of licenses. Optionally, license manager device201may verify that payment for the license(s) has been made by license purchaser207before issuing first code211. License manager device201may generate and issue first code211by displaying first code211on a display device. License purchaser207may obtain first code211by reading first cod211off the display device. License purchaser207may also obtain first code211by phone, email, letter, web site, etc. First code211may be human-readable alphanumeric string of text. For example, first code211may comprise decimal numbers, hexadecimal numbers, and/or letters. First code211may be encoded by license manager device201to prevent unauthorized use or counterfeiting. First code211may include information, which may be encoded, that indicates an index (e.g., a finder code), an identifier (e.g., a binding code, a device identifier, etc.), a quantity of license(s), an expiration date, an error detection code, etc. Each request to purchase additional licenses may result in a different unique code in order to prevent reuse of a code.

License distribution device203may be a device capable of storing licenses, receiving request for licenses, and distributing licenses. License distribution device203may be a mobile device such as a handheld device (e.g., BluePOD developed by OSAAP America of Chelmsford, Mass.). License distribution device203may be a battery-powered device. License distribution device203may be air gapped from license manager device201and licensee device205, that is license distribution device203may be communicatively isolated (e.g., disconnected) from license manager device201and licensee device205. Alternatively, a communication channel (e.g., LAN, Internet, Wi-Fi, Bluetooth, Universal Serial Bus (USB), Zigbee, Infrared Data Association (IrDA), cellular network, IEEE 1394, etc.) may be established between license distribution device203and licensee device205. License distribution device203may comprise a user input interface (e.g., a keyboard, a keypad, a touchpad, a touchscreen, a button, a microphone, etc.) for entering codes such as first code211and second code213. License distribution device203may comprise an output interface such as a display, a printer, a speaker, etc.

License distribution device203may have a unique binding code assigned that is used to validate communications between license manager device201and license distribution device203. A binding code may provide the validation means to add licenses and communicate other support requests. In order for license distribution device203to accept licenses from license manager device201, license distribution device203may require binding with license manager device201first. For example, binding may involve registration (e.g., license distribution device203registering its identifier such as a serial number with license manager device201) and/or sharing of a binding code that links license distribution device203to license manager device201. The binding code may be entered into license distribution device203at the time of the binding, or it may be preloaded onto license distribution device203prior to deployment (e.g., when license distribution device203is manufactured).

License distribution device203may also be paired with licensee device205. For example, license distribution device203may be uniquely paired with one licensee device205and one device only. License distribution device203and licensee device205may not be permitted to transfer licenses until the two have been paired. The pairing may be based on the binding code of license distribution device203. A unique pairing code may be created and shared between license distribution device203and licensee device205. The binding and pairing codes may provide protection against unauthorized use, attempts to copy and reuse codes, and theft of license distribution device203. A unique pairing reset token (also referred to as an un-pairing token) may be required to allow license distribution device203to be paired with a new licensee device. The pairing reset token may be issued by license manager device201and be only valid for a one-time use.

After license purchaser207obtains first code211, the code may be entered into license distribution device203. First code211may be, for example, manually entered into license distribution device203via a user input interface. License distribution device203may decode first code211and retrieve data that is embedded in first code211. License distribution device203may store a randomly generated encryption table that functions as a certificate. The encryption table itself may be encrypted and may be unique to license distribution device203(e.g., if there are multiple license distribution devices, each license distribution device may have its own unique encryption table). License manager device201that is bound to license distribution device203and licensee device205that is paired with license distribution device may also each store an identical copy of the encryption table. The encryption table may be, for example, 32 kilobytes or 64 kilobytes in size. The encryption table may include multiple entries of decoding keys used to decode codes that are exchanged among license manager device201, license distribution device203, and licensee device205. License distribution device203may use the encryption table to decode first code211.

License distribution device203may keep track of licenses that the device is authorized to disburse. For example, license distribution device203may store blocks of licenses that are obtained (e.g., purchased) from license manager device201via first code211. License distribution device203may store a counter that keeps track of how many licenses that license distribution device203is currently authorized to give out. Thus, for example, when additional licenses are purchased and first code211is entered into license distribution device203, the counter may be increased by the quantity of purchased licenses. Conversely, when a certain quantity of licenses are disbursed by the license distribution device203(e.g., as when license distribution device203issues third code215), then the counter may be decreased by the quantity of licenses that were disbursed.

Licensee device205may be software and/or hardware that consumes licenses issued by license manager device201. For example, licensee device205may be CAD/CAM software and/or hardware that is authorized to manufacture a product on a per-license basis. In other words, in order for licensee device205to manufacture 150 items, the device may require at least 150 licenses to perform the task. Operator209may be a human end user who operates licensee device205. Operator209may or may not be the same person as license purchaser207. When operator209attempts to use licensee device205to perform a task (e.g., manufacture items), license device205may generate second code213. Second code213may be a request for licenses. Second code213may be similar to first code211as described above. For example, second code213may be encrypted and include information indicating an identifier, a pairing code, a requested quantity of licenses, an error detection code, etc. Licensee device205may present second code213to operator209via, for example, a display, a speaker, etc.

After operator209obtains second code213, the code may be entered into license distribution device203. Second code213may be, for example, manually entered into license distribution device203via a user input interface. Alternatively, second code213may be sent by licensee device205to license distribution device203via a communication channel. License distribution device203may decode second code213and retrieve data that is embedded in second code213. License distribution device203may use the encryption table to decode second code213. License distribution device203may determine whether the device is storing enough licenses to fulfill the request for licenses as indicated in second code213. If a requested quantity of licenses does not exceed the quantity of licenses that license distribution device203is authorized to disburse (e.g., as indicated by the counter), then license distribution device203may generate and issue third code215. If, however, the requested quantity of licenses exceeds the quantity of licenses that license distribution device203is authorized to disburse, license distribution device203may refuse to issue third code215and output an appropriate error message instead.

Third code215may be similar to first code211as described above. For example, third code215may be encrypted and include information indicating an identifier, a pairing code, a quantity of licenses, an error detection code, etc. License distribution device203may present third code215to operator209via, for example, a display, a speaker, etc. The quantity of licenses indicated by third code215may coincide with the quantity of licenses indicated by second code213. License distribution device203may not generate the same code twice to prevent replay attack (e.g., reuse of codes). License distribution device203may decrease its counter by the quantity of licenses that were requested by and disbursed to licensee device205. The decreasing of the counter may take place before, after, or substantially at the same time as the generation of third code215. For example, license distribution device203may decrease the counter and generate third code215atomically such that one could never happen without the other also happening even under unexpected circumstances (e.g., a sudden power loss, a device malfunction, a system crash, etc.).

After operator209obtains third code215, the code may be entered into licensee device205. Third code215may be, for example, manually entered into licensee device205via a user input interface. Alternatively, third code215may be sent by license distribution device203to licensee device205via a communication channel. Licensee device205may decode third code215and retrieve data that is embedded in third code215. Licensee device205may use the encryption table to decode third code215. Licensee device205may use the licenses that are embedded in third code215to perform a task (e.g., manufacture products).

FIG. 3Adepicts an example code that is generated in a license management system. Code300may be first code211, second code213, or third code215as described with respect toFIG. 2. Code300may have a variable length. Code300may include finder code301, data payload303(also referred to as a data block), and error detection code305of variable lengths. The sizes and locations of these components within code300as well as the order in which they appear in may be kept secret to prevent unauthorized use and tampering. Code300inFIG. 3Ais represented as a hexadecimal value, but code300may be any human-readable alphanumeric string.

Finder301may be of any size and located anywhere within code300and be used as an index for looking up decoding keys in an encryption table to decode payload303. For example, finder code301may be the first two bytes (e.g., 0xFE08) of code300. In another example, finder code301may be second, fifth, and eighth bytes of code300.

Data payload303may be of any size and located anywhere within code300. Data payload303may be encoded and/or encrypted to prevent unauthorized use and tampering. Data payload303may include validation code307and other data309. Validation code307may be, for example, a binding code or a pairing code. Validation code307(e.g., a binding code, a pairing code, etc.) may be of a predetermined size and located at predetermined locations within code300. For example, validation code307may be the first three bytes (e.g., 0x8AC611) of payload303, but validation code307can be of any length and located anywhere within code300. Other data309may include information indicating, for example, a license quantity, expiration date(s), an identifier (e.g., an identifier of license manager device201, license distribution device203, or licensee device205), etc.

Error detection code305may be of any size and located anywhere within code300. When code300is generated, error detection code305may be calculated, based on the rest code300, and appended to code300to protect the integrity of code300and prevent tampering. For example, a device that receive code300may use error detection code305to detect any single-bit or multiple-bit error within code300. Code300that is found to contain an error may be rejected and discarded by the receiving device. Error detection code305may be a checksum but any other error detection algorithm may be used.

A device that receives code300may verify it by decoding finder code301and validation code307using an encryption table. Once decoded, validation code307may be compared to a known binding code of a bound device or a known pairing code of a paired device. If a match is found, code300may be validated. If no match is found, code300may be considered invalid and the request embedded in code300may be rejected. Code300may include additional salt and/or utilize table offsetting schemes to further obfuscate its data content.

FIG. 3Bdepicts an example encryption table entry. An encryption table may be stored in license manager device,201, license distribution device203, and/or licensee device205. The encryption table may include multiple entries such as encryption table entry310. The entries may be non-duplicative (e.g., no two entries are the same) and/or arranged randomly (e.g., not arranged in any specific order) within the table. The encryption table may be, for example, 32 kilobytes, 64 kilobytes, etc. in size. The entire encryption table may be encrypted for an extra layer of protection and security. Encryption table entry310may include finder code311and decoding keys313. Encryption table entry310and its components may have variable lengths and be arranged in any order.

Finder code311in encryption table entry310may have the same size as finder code301included in code300. A device (e.g., license distribution device203, licensee device205, etc.) that is trying to decode code300may look up its encryption table to identify entry310with matching finder code311(e.g., 0xFE08) that matches finder code301(e.g., 0xFE08) from code300. The device may then retrieve decoding keys313from encryption table entry310and apply it to data payload303of code300to obtain decoded data. For example, decoding keys 0xDD9A10 may be applied to validation code307of code300to obtain the decoded binding code. Applying decoding keys313to data303may involve, for example, XORing, but other methods may be used. For example, decoding keys313may be used as a secret key for decrypting data303in accordance with one or more encryption/decryption algorithms.

FIG. 4depicts an example system flow diagram that illustrates a method of distributing one or more license tokens without the use of a network. The steps in this flow diagram need not all be performed in the order specified and some steps may be omitted or changed in order. License management device401, license distribution device403, and licensee device405may respectively correspond to license management device201, license distribution device203, and licensee device205ofFIG. 2. License management device401, license distribution device,403, and licensee device405may each be communicatively disconnected (e.g., isolated) from each other. For example, the devices may lack wireless connections (e.g., Wi-Fi, Bluetooth, Zigbee, Infrared Data Association (IrDA), cellular network, etc.) and wired connections (e.g., Universal Serial Bus (USB), IEEE 1394, etc.) to each other. Alternatively, a communication channel may be established between license distribution device403and licensee device405.

At step407, license management device401may generate a first code. The first code may include information that authorizes a device such as license distribution device405to distribute a first quantity of licenses. The first code may be encoded and/or encrypted by license management device401using an encryption table. The first code may also include a validation code such as a binding code that binds license distribution device403to license management device401. The first code may include identifier(s) of license management device401and/or license distribution device403. The first code may include expiration date(s), after which the licenses would be no longer valid. The first code may include an error detection code. License management device401may output (e.g., display) the first code after generating the code for a user.

At step409, license distribution device403may receive the first code. For example, the first code may be manually entered by a user (e.g., a license purchaser) to license distribution device403via a user interface such as a keyboard, a keypad, a touchpad, a touchscreen, a microphone, a button, etc. License distribution device403may decode and/or decrypt the first code using, for example, an encryption table. License distribution device403may reject and/or discard the first code if the validation code (e.g., a binding code) included in the first code does not match a predetermined validation code and/or if the error detection code indicates that the integrity of the first code has been compromised.

At step411, license distribution device may increase a license count of license distribution device403. The license count may be a total number of licenses that license distribution device403is authorized to distribute to other devices such as licensee device405. The license count may be increased by a quantity of licenses as indicated by the first code. The license count may be represented as a counter or one or more license tokens stored in license distribution device403. For example, if the first code indicated that 200 new licenses were to be added to license distribution device403, then license distribution device403may increase its license counter by 200 and/or create 200 new license tokens in license distribution device403.

At step413, licensee device405may generate a second code for requesting a second quantity of licenses. The generation of the second quantity may be triggered by a user entering a command for licensee device405to perform a task such as manufacturing one or more products. For example, the second code may be generated when a user tries to manufacture a product in accordance with a CAD design. Performing the task may require one or more licenses. The second code may be encoded and/or encrypted by licensee device405using an encryption table and include information indicating a second quantity of licenses (e.g., how many licenses are being requested), a validation code (e.g., a pairing code), an identifier (e.g., an identifier of licensee device405and/or license distribution device403), an error detection code, etc. Licensee device405may output (e.g., display) the second code to a user (e.g., an operator of licensee device405).

At step415, license distribution device403may receive the second code. For example, the second code may be manually entered by a user (e.g., an operator) to license distribution device403via a user interface such as a keyboard, a keypad, a touchpad, a touchscreen, a microphone, a button, etc. Alternatively, second code213may be sent by licensee device205to license distribution device203via a communication channel. License distribution device403may decode and/or decrypt the second code using, for example, an encryption table. License distribution device403may reject and/or discard the second code if the validation code (e.g., a pairing code) included in the second code does not match a predetermined validation code and/or if the error detection code indicates that the integrity of the second code has been compromised. License distribution device403may also reject and/or discard the second code if the requested quantity of licenses, as indicated in the second code, exceed the quantity of licenses that license distribution device is currently authorized to distribute (e.g., as indicated by the license counter).

At step417, license distribution device403may decrease a license count. For example, distribution device403may decrease a license counter by the second quantity and/or delete the second quantity of license tokens stored in license distribution device. At step419, license distribution device403may generate a third code that grants licensee device405the second quantity of licenses. Step417and step419may be performed substantially at the same time (e.g., atomically). The third code may be encoded and/or encrypted by license distribution device403using an encryption table and include information indicating the second quantity of licenses (e.g., how many licenses are being granted), a validation code (e.g., a pairing code), expiration date(s), an error detection code, etc. License distribution device403may output (e.g., display) the third code to a user (e.g., an operator of licensee device405).

At step421, licensee device405may receive the third code. For example, the third code may be manually entered by a user (e.g., an operator) to licensee device405via a user interface such as a keyboard, a keypad, a touchpad, a touchscreen, a microphone, a button, etc. Alternatively, the third code may be sent by license distribution device403to licensee device405via a communication channel. Licensee distribution device405may decode and/or decrypt the third code using, for example, an encryption table. Licensee device405may reject and/or discard the third code if the validation code (e.g., a pairing code) included in the third code does not match a predetermined validation code and/or if the error detection code indicates that the integrity of the third code has been compromised. At step423, licensee device405may perform the task for which the licenses were sought. For example, licensee device405may consume the licenses received via the third code by preparing (e.g., manufacturing) one or more products. The task may be, for example, displaying data, printing, 3D printing, permitting use of software and/or hardware functionality, manufacturing, etc.