Note that this utility is defined as cdsa_sign by CDSA$SYMBOLS.COM. The cdsa_sign utility takes a service provider product, application, or CSSM binary, plus the manufacturer certificates generated using certgen, and creates a manifest file. Manifest files have a file extension of .ESW. This utility can be used for Integrity signing and for Export signing. The options for each function are totally different, so they are described here in separate sections. Integrity signing for a module must always be done before Export signing.
1 – Integrity Signing
Integrity signing is optional for applications and mandatory for plug-in modules. SYNOPSIS cdsa_sign module_name subdirectory type signer_cert password cert_chain module_guid access_tag pvcapi_tag pvcspi_tag priv_tag OPTIONS module_ name The name of the module being signed. subdirectory The subdirectory (in UNIX directory format) containing the module being signed. type The module type, which can be one of the following: A - Service provider module C - CSSM D - Application sharable image E - Elective Module Manager G - Generic image X - Application executable signer_cert The name of the certificate being used to sign the module. password The password for the private key of the certificate being used to sign the module. cert_chain A text file identifying the Integrity certificates to be embedded. This file has the following form: number cert1 cert2 . . . where number is the number of certificates being embedded, and cert1 and cert2 are the names of certificates to be embedded; for example: 2 introot.cer intmanf.cer module_guid The string version of the globally unique identifier of the module being signed (as installed in MDS). access_tag For installer modules, this is the base-64 encoded, unsigned, 32-bit value (in big-endian) of the access type defined for CDSA_DB_ACCESS_TYPE. For modules other than installers, specify "XX" for this parameter. pvcapi_tag Specifies whether pointer validation checking is to be done on the application program interface boundaries. The values for the CDSA_PVC_API tag are as follows: "EXEMPT" Specifies an application manifest, where the program can set the PVC flag in cssm_Init. "OFF" Specifies a CSSM manifest, where the PVC flag is not applicable. "XX" Specifies that the CDSA_PVC_API tag is not in the manifest. pvcspi_tag Specifies whether pointer validation checking is to be done on the service provider interface boundaries. The values for the CDSA_PVC_SPI tag are as follows: "EXEMPT" Specifies a service provider manifest, where the program can set the PVC flag in cssm_Init. "OFF" Specifies a CSSM manifest, where the PVC flag is not applicable. "XX" Specifies that the CDSA_PVC_SPI tag is not in the manifest. priv_tag The CDSA_PRIV tag in the manifest. Currently, no CDSA_PRIV tag values are defined, so specify "XX" to indicate that this tag is not in the manifest.
2 – Integrity Signing Example
The following is an example of the cdsa_sign command for Integrity signing: $ define cdsa_sign "/cdsa_tempdir/addin" $ set default cdsa_sysdir:[sign] $ cdsa_sign stubcsp300_shr cdsa_sign A intmods.cer - _$ intmods intchain. {79BDE0F0-4541-11d3-A8F3-0090271D266F} - _$ "XX" "EXEMPT" "XX" "XX" The first command defines the logical cdsa_sign (which is used internally by the code) in UNIX directory format as the directory where the executable to be signed can be found. * stubcsp300_shr is the name of the module being signed. * cdsa_sign is the logical pointing to the directory containing the module. * A indicates that stubcsp300_shr is a service provider module. * intmods.cer is the name of the certificate being used to sign the module. * intmods is the password for the private key of the certificate (intmods.cer) being used to sign the module. * intchain. is the name of the text file containing the names of the certificates in the Integrity chain. * {79BDE0F0-4541-11d3-A8F3-0090271D266F} is the GUID of the service provider module. * "XX" is the access tag, which indicates that this is not an installer module. * "EXEMPT" is the CDSA_PVC_API tag specifying that this is an application manifest. * "XX" specifies that the CDSA_PVC_SPI tag is not in the manifest. * "XX" specifies that the CDSA_PRIV tag is not in the manifest.
3 – Export Signing
Export signing is optional. Before you can do Export signing for a module, you must already have done Integrity signing and a manifest must exist. For more information about Export signing, refer to the Intel CDSA Manifest Signing Tools User's Guide. SYNOPSIS cdsa_sign manifest_path signer_cert password cert_chain usee_tag priv_tag pvcapi_tag pvcspi_tag OPTIONS manifest_path The path (in UNIX directory format) to the manifest created in the Integrity signing phase. signer_cert The name of the certificate being used to sign the module. password The password for the private key of the certificate being used to sign the module. cert_chain A text file identifying the Export certificates to be embedded. This file has the following form: number cert1 cert2 . . . where number is the number of certificates being embedded, and cert1 and cert2 are the names of certificates to be embedded; for example: 2 introot.cer intmanf.cer usee_tag The base-64 encoded value of the CSSM_USEE_TAG value. This value must be enclosed within double quotation marks. priv_tag The CDSA_PRIV tag in the manifest. Currently, no CDSA_PRIV tag values are defined, so specify "XX" to indicate that this tag is not in the manifest. pvcapi_tag The CDSA_PVC_API tag for application and CSSM manifests. The values are: "EXEMPT" Specifies an application manifest. "OFF" Specifies a CSSM manifest. "XX" Specifies that the CDSA_PVC_API tag is not in the manifest. pvcspi_tag The CDSA_PVC_SPI tag for application and CSSM manifests. The values are: "EXEMPT" Specifies an application manifest. "OFF" Specifies a CSSM manifest. "XX" Specifies that the CDSA_PVC_SPI tag is not in the manifest.
4 – Export Signing Example
The following is an example of the cdsa_sign command for Export signing: $ cdsa_sign /cdsa_tempdir/des2/des2.esw exapps.cer secret exchain. - _$ "AAAAAQ==" "XX" "EXEMPT" "XX" In this example: * /cdsa_tempdir/des2/des2.esw is the path (in UNIX format) to the manifest created during Integrity signing. * exapps.cer is the name of the certificate being used to sign the module. * secret is the password for the private key of the certificate being used to sign the module. * exchain. is the name of the text file identifying the Export certificate chain to be embedded in the signature. * "AAAAAQ==" is the base-64 encoded value of the CDSA_USEE_DOMESTIC tag. * "XX" specifies that the CDSA_PRIV tag is not in the manifest. * "EXEMPT" is the CDSA_PVC_API tag specifying that this is an application manifest. * "XX" specifies that the CDSA_PVC_SPI tag is not in the manifest.