Project Provider Framework
The Project Provider Framework is an unsupported API used to extend LabVIEW in various ways, mostly relating to the project interface. While NI does not provide official support for Project Providers, nor guarantee their stability in future versions, they have provided some documentation as well as a community forum for the framework; this was originally only available to NI-approved developers, but has since been opened to the general public.
A Project Provider is defined by an INI file located in the resource/Framework/Providers/GProviders
directory in the LabVIEW installation directory. This file contains paths to "interface VI's", which determine the locations of other VI's that implement the plugin's functionality.
Signature
For LabVIEW to load a project provider, its INI file must contain a valid "signature" consisting of an enciphered MD5 hash of certain other values in the INI file, generated using a signing tool provided by NI. This is an artifact from before the framework was officially made public, though the method of generating the signature had been reverse engineered and was publicly known prior to that point.
Algorithm
What follows is an explanation of how the "signature" is determined. If you are using the official signing tool (or an unofficial one) you do not need to know this, but it might be useful for tool developers or anyone who is curious.
First, take the values (not the keys) in the INI file in order, and concatenate them. Only include the values for keys in this list (rule of thumb: string values, not Boolean or numeric values, and don't include the Signature key of course):
- "InterfaceVersion"
- "LicenseRestrictions"
- "LicenseVersion"
- "LicenseName"
- "Alias"
- "SupportedType"
- "SupportedInterface"
- "CreateNewWizardHost"
- "BuildInterfaceVI"
- "DeployInterfaceVI"
- "SourceControlInterfaceVI"
- "CreateNewWizardInterfaceVI"
- "GlobalItemInterfaceVI"
- "ProviderInterfaceVI"
- "ItemInterfaceVI"
Do not include spaces or any other types of delimiters between values in the concatenated string. Take the MD5 hash of this string, and apply the following substitution cipher to each of the digits:
Change: 0123456789ABCDEF To: T3C5K7W9SBNRJLX2
Finally, for each pair of two consecutive digits, switch them. For example, CRTTR3X7 would become RCTT3R7X. You now have your signature!
Documentation and Examples
- LabVIEW Project Provider Dev Guide
- API Descriptions
- Interface VI Descriptions
- Examples in LabVIEW 2009 (32-bit)