License File Schema

XML Formatting

Protection PLUS 5 SDK license files are simply XML documents that have been encrypted and digitally signed to secure the contents and prevent unauthorized modification. The encrypted license file is still an XML document. Once the license file has been decrypted and verified, you can read the various license fields to determine the state of the application's license. The XML schema, or general structure, of the license file is shown below. This schema differs from the encrypted license file, which is what you would normally see if you opened the license file in a text editor, to the decrypted license file, which is found in the application's memory. Several tables outline the many fields and provide a description of what these fields contain.

Encrypted License File

The following depicts the contents of an encrypted license file:

XML

<SoftwareKey>
<EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#" Id="PrivateData" Type="http://www.w3.org/2001/04/xmlenc#Element">
<CipherData>
<CipherValue>CEtwIAD3IhUUA1csp6IKqkwlzGoM78Ffq/SMs9lK3EayA2R9WPC3Pzk...</CipherValue>
</CipherData>
</EncryptedData>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignatureValue>iehRwDe5eVNGZI+w/b/BnM7IxqK7MvK9t2t1zzyHwp+0gS06k...</SignatureValue>
</Signature>
</SoftwareKey>

The <CipherValue> and <SignatureValue> node's content has been included to illustrate what the data might look like in an actual license file, but the data has been truncated.

Decrypted License File

The following depicts the contents of a decrypted license file. The links in comments, such as <!-- License Fields -->, are simply placeholders for the various nodes found in the corresponding tables below.

Important

If a LicenseGroup or LicenseValidationOptions setting has not been configured for the license in SOLO Server, the node will not be present in the license file data.

XML

<SoftwareKey>
<PrivateData>
<License>
<!-- License Fields -->
<ActivationData>
<Identifiers>
<SystemIdentifier name="..." type="..." value="..." />
</Identifiers>
</ActivationData>
<Author>
<!-- Author Fields -->
</Author>
<Customer>
<!-- Customer Fields -->
</Customer>
<Distributor>
</Distributor>
<LicenseGroup>
</LicenseGroup>
<LicenseValidationOptions>
</LicenseValidationOptions>
<Product>
<!-- Product Fields -->
</Product>
<ProductOption>
</ProductOption>
</License>
</PrivateData>
</SoftwareKey>

The <Identifiers> node above may contain one or more <SystemIdentifier> child nodes. The name, type and value attributes would contain data based on the specific system identifier algorithm used, the number of identifiers present, and a unique hashed value. The "..." for the values are used to depict that this data is variable.

Field Listings

License Fields

In SOLO Server, all licenses are created from one Product Option record, and always belong to a customer.

Field Description XPath
ActivationData Contains the system identifiers used to identify the system which is authorized to use the license file. /SoftwareKey/PrivateData/License/ActivationData
ActivationPassword A password, usually randomly generated by SOLO Server, which may be used with the corresponding License ID to activate or perform other licensing related functions. /SoftwareKey/PrivateData/License/ActivationPassword
CurrentVersion Corresponds with the "Version" field on the SOLO Server license. /SoftwareKey/PrivateData/License/CurrentVersion
EffectiveEndDate Corresponds with the "Download Until" date on the SOLO Server license, and typically reflects the date in which the license expires (for time-limited licenses). However, it is also possible for your application to use this date for other purposes when the license is not time-limited, such as notifying customers when support/maintenance subscription periods are about to expire. /SoftwareKey/PrivateData/License/EffectiveEndDate
EffectiveStartDate The date in which the license is effective. This is typically the date in which the license was added in SOLO Server. /SoftwareKey/PrivateData/License/EffectiveStartDate
ExternalReference1 An external reference number/string, typically generated by a third-party system or service. /SoftwareKey/PrivateData/License/ExternalReference1
ExternalReference1Source The name or description of the source of the ExternalReference1 value. /SoftwareKey/PrivateData/License/ExternalReference1Source
ExternalReference2 An external reference number/string, typically generated by a third-party system or service. /SoftwareKey/PrivateData/License/ExternalReference1
ExternalReference2Source The name or description of the source of the ExternalReference2 value. /SoftwareKey/PrivateData/License/ExternalReference2Source
FormatVersion The format version of the License File. /SoftwareKey/PrivateData/License/FormatVersion
InstallationID When an application is activated (typically using a License ID and password), an Installation ID is created so that Electronic License Management (ELM) may be leveraged on the individual system which was activated. /SoftwareKey/PrivateData/License/InstallationID
InstallationName An optional, human-readable description of an Installation ID (SOLO Server allows a maximum of 50 characters for this field).  This is typically specified by the user to help describe which of several systems he or she owns is being activated (a user could enter something like "Home Desktop" or "Work Laptop"). /SoftwareKey/PrivateData/License/InstallationName
IsTestLicense Identifies if the license is a test license signified by a value of 1. Test licenses are deleted from SOLO Server at the beginning of each month. /SoftwareKey/PrivateData/License/IsTestLicense
LastUpdated * Only available when using writable license files, this reflects the last date and time in which the application was run. /SoftwareKey/PrivateData/License/LastUpdated
LatestVersion The latest version of the product or application available (at the time the license file was issued). This corresponds to the "Latest Version" field of the SOLO Server Product. /SoftwareKey/PrivateData/License/LatestVersion
LicenseCounter An arbitrary, numeric value which may be used to track a number or count for a license requirement. This can be used for noting the number of feature or application uses allowed, the number of network seats allowed, etc.. /SoftwareKey/PrivateData/License/LicenseCounter
LicenseeEmail The email address of the licensee, or the person for whom the license has been assigned. /SoftwareKey/PrivateData/License/LicenseeEmail
LicenseeName The name of the licensee, or the person for whom the license has been assigned. /SoftwareKey/PrivateData/License/LicenseeName
LicenseCustomData

Custom string or XML formatted data specific to the license.

All strings in the license file use UTF-8 encoding. Unless included in nested XML in this field, any Unicode characters in this field will be formatted with XML escape sequences.

/SoftwareKey/PrivateData/License/LicenseCustomData
LicenseID A unique, numeric identifier for the license issued (typically issued by SOLO Server). /SoftwareKey/PrivateData/License/LicenseID
LicenseUpdate A small, arbitrary string which may be used for sending customized license status updates. /SoftwareKey/PrivateData/License/LicenseUpdate
ProductID A unique, numeric identifier used to identify the Product for which a license was issued. This value is typically generated by SOLO Server. /SoftwareKey/PrivateData/License/ProductID
ProdOptionID A unique, numeric identifier used to identify the Product Option for which a license was issued. This value is typically generated by SOLO Server. /SoftwareKey/PrivateData/License/ProdOptionID
QuantityOrdered The quantity of the product ordered (usually 1).

When using the E-Commerce features in SOLO Server, it is possible to configure your Product Option so that ordering more than one quantity generates a single license with extra activations.  So for example, if you had a Product Option configured with 2 activations, you can configure the Product Option to create a single license with 6 activations when a customer orders a quantity of 3 (instead of creating 3 separate licenses, each with 2 activations).
/SoftwareKey/PrivateData/License/QuantityOrdered
SerialNumber The serial number assigned to the license, usually defined in SOLO Server. /SoftwareKey/PrivateData/License/SerialNumber
SignatureDate The date in which the license file itself was created and signed by SOLO Server. /SoftwareKey/PrivateData/License/SignatureDate
TriggerCode The Trigger Code number issued by SOLO Server. This is a numeric value between 1 and 50, and is typically used to reflect the type of license being issued (i.e. non-expiring, time-limited, etc...). This value is configured on the Product Option in SOLO Server. /SoftwareKey/PrivateData/License/TriggerCode
TriggerCodeFixedValue The Trigger Code Fixed Value issued by SOLO Server. This is a numeric value up to 14 bits in size (or a maximum value of 16383), which is typically used to conditionally enable application features, or distinguish between different product or application editions (i.e. "Express Edition" and "Enterprise Edition", etc...). This value is configured on the Product Option in SOLO Server. /SoftwareKey/PrivateData/License/TriggerCodeFixedValue
UserDefinedDate1 - UserDefinedDate5 User defined date fields 1 through 5, which may be used for arbitrary dates when needed for additional, customized license data. /SoftwareKey/PrivateData/License/UserDefinedDateN
UserDefinedFloat1 - UserDefinedFloat5 User defined float fields 1 through 5, which may be used for arbitrary decimal values when needed for additional, customized license data. /SoftwareKey/PrivateData/License/UserDefinedFloatN
UserDefinedNumber1 - UserDefinedNumber5 User defined number fields 1 through 5, which may be used for arbitrary integer values when needed for additional, customized license data. /SoftwareKey/PrivateData/License/UserDefinedNumberN
UserDefinedString1 -UserDefinedString10         User defined string fields 1 through 10, which may be used for arbitrary alpha-numeric values when needed for additional, customized license data. /SoftwareKey/PrivateData/License/UserDefinedStringN

* - The LastUpdated field is only present in self-signed writable license files.

Author Fields

You or your company is the "Author" of the software or application being licensed.

Field Description XPath
AuthorID Numeric value which uniquely identifies your SOLO Server author account. /SoftwareKey/PrivateData/License/Author/AuthorID
CompanyName Your company name, as configured in your SOLO Server author account. /SoftwareKey/PrivateData/License/Author/CompanyName
CustomData

Custom string or XML formatted data shared with all licenses created in your SOLO Server author account.

All strings in the license file use UTF-8 encoding. Unless included in nested XML in this field, any Unicode characters in this field will be formatted with XML escape sequences.

/SoftwareKey/PrivateData/License/Author/CustomData
SupportEmail Your company's support email address, which your customers may use to obtain technical support. /SoftwareKey/PrivateData/License/Author/SupportEmail
SupportPhone Your company's support phone number, which your customers may use to obtain technical support. /SoftwareKey/PrivateData/License/Author/SupportPhone
SupportSite Your company's support web site, which your customers may use to obtain technical support and resources. /SoftwareKey/PrivateData/License/Author/SupportSite

Customer Fields

The Customer represents your customer, for whom one or more licenses have been issued.

Field Description XPath
Address1 The customer's street address (line 1). /SoftwareKey/PrivateData/License/Customer/Address1
Address2 The customer's street address (line 2, optional). /SoftwareKey/PrivateData/License/Customer/Address2
City The city where the customer is located. /SoftwareKey/PrivateData/License/Customer/City
CompanyName The customer's company name. /SoftwareKey/PrivateData/License/Customer/CompanyName
Country The country where the customer is located. /SoftwareKey/PrivateData/License/Customer/Country
CustomerID The unique SOLO Server Customer ID for this customer. /SoftwareKey/PrivateData/License/Customer/CustomerID
Email The customer's email address. /SoftwareKey/PrivateData/License/Customer/Email
ExcludeFromAll Whether the customer is excluded from all email marketing. /SoftwareKey/PrivateData/License/Customer/ExcludeFromAll
Fax The customer's fax number. /SoftwareKey/PrivateData/License/Customer/Fax
FirstName The customer's first name. /SoftwareKey/PrivateData/License/Customer/FirstName
LastName The customer's last name. /SoftwareKey/PrivateData/License/Customer/LastName
NotifyPartners Whether the customer will receive email alerts from trusted partners. /SoftwareKey/PrivateData/License/Customer/NotifyPartners
NotifyProducts Whether the customer will receive email alerts for products updates. /SoftwareKey/PrivateData/License/Customer/NotifyProducts
Phone The customer's phone number. /SoftwareKey/PrivateData/License/Customer/Phone
PostalCode The postal code where the customer is located. /SoftwareKey/PrivateData/License/Customer/PostalCode
StateProvince The state or province where the customer is located. /SoftwareKey/PrivateData/License/Customer/StateProvince
Unregistered Whether or not the customer is unregistered. /SoftwareKey/PrivateData/License/Customer/Unregistered

Distributor Fields

In SOLO Server, a distributor represents a company or individual that either resells your products or applications, or an affiliate which refers customers and prospects to your web site. The distributor information can be particularly useful in scenarios when the distributor acts like a reseller, and also provides its customers with technical support.

Field Description XPath
Address1 The distributor's street address (line 1). /SoftwareKey/PrivateData/License/Distributor/Address1
Address2 The distributor's street address (line 2). /SoftwareKey/PrivateData/License/Distributor/Address2
Address3 The distributor's street address (line 3). /SoftwareKey/PrivateData/License/Distributor/Address3
CompanyName The distributor's company name. /SoftwareKey/PrivateData/License/Distributor/CompanyName
Country The country where the distributor is located. /SoftwareKey/PrivateData/License/Distributor/Country
DistributorID The distributor's unique ID. /SoftwareKey/PrivateData/License/Distributor/DistributorID
Email The distributor's email address. /SoftwareKey/PrivateData/License/Distributor/Email
Phone The distributor's phone number. /SoftwareKey/PrivateData/License/Distributor/DistributorID
Type The type of distributor. /SoftwareKey/PrivateData/License/Distributor/Type
WebSite The distributor's web site. /SoftwareKey/PrivateData/License/Distributor/WebSite

LicenseGroup Fields

A License Group allows licenses for a customer to be grouped together by an ID number.

Field Description XPath
LicenseGroupID

The ID number of the LicenseGroup. Licenses configured to be grouped together will have the same ID number.

/SoftwareKey/PrivateData/License/LicenseGroup/LicenseGroupID
LicenseGroupName The name of the LicenseGroup. /SoftwareKey/PrivateData/License/LicenseGroup/LicenseGroupName

LicenseValidationOptions Fields

The LicenseValidationOptions contain settings for the frequency to refresh/validate the license withSOLO Server. More information on implementing LicenseValidationOptions is available for PLUSManaged and PLUSNative.

Field Description XPath
LicenseValidationOptionsID

The ID number of the LicenseValidationOptions.

/SoftwareKey/PrivateData/License/LicenseValidationOptions/LicenseValidationOptionsID
LicenseValidationOptionName The name of the LicenseValidationOptions. /SoftwareKey/PrivateData/License/LicenseValidationOptions/LicenseValidationOptionName
RefreshLicenseAlwaysRequired

Signifies whether a license refresh is always required when the application starts.

/SoftwareKey/PrivateData/License/LicenseValidationOptions/RefreshLicenseAlwaysRequired
RefreshLicenseAttemptFrequency The frequency of a license refresh attempt. /SoftwareKey/PrivateData/License/LicenseValidationOptions/RefreshLicenseAttemptFrequency
RefreshLicenseRequireFrequency

The frequency a license refresh is required.

/SoftwareKey/PrivateData/License/LicenseValidationOptions/RefreshLicenseRequireFrequency
RefreshLicenseRequireWarningPeriod The number of days before a license refresh is required in which to begin warning the user. /SoftwareKey/PrivateData/License/LicenseValidationOptions/RefreshLicenseRequireWarningPeriod

Product Fields

Each product defined typically represents the product or application being licensed (i.e. "XYZ Product"). Products must contain one or more Product Options, as all licenses are created from Product Options.

Field Description XPath
CustomData

Custom string or XML formatted data shared by all licenses which are created with the any of the Product Options which belong to the Product.

All strings in the license file use UTF-8 encoding. Unless included in nested XML in this field, any Unicode characters in this field will be formatted with XML escape sequences.

/SoftwareKey/PrivateData/License/Product/CustomData
ProductName The name of the Product or application. /SoftwareKey/PrivateData/License/Product/ProductName

Product Option Fields

Product Options define licensing or purchasing options available under a product. These can reflect any number of unique licensing and/or purchasing options, for example: "1 Year Subscription", "1 Year Subscription with Backup CD", or "1 Year Subscription Renewal".

Field Description XPath
CustomData

Custom string or XML formatted data shared by all licenses which are created with the Product Option.

All strings in the license file use UTF-8 encoding. Unless included in nested XML in this field, any Unicode characters in this field will be formatted with XML escape sequences.

/SoftwareKey/PrivateData/License/ProductOption/CustomData
OptionName The name of the Product Option, which typically reflects the varying licensing or purchasing options available for your application/product. /SoftwareKey/PrivateData/License/ProductOption/OptionName
OptionType The Product Option Type, which describes the type of license being issued (i.e. a license which uses standard activation, volume license, etc...) /SoftwareKey/PrivateData/License/ProductOption/OptionType