Partager via


IOpcDigitalSignatureManager ::Sign, méthode (msopc.h)

Signe le package en générant une signature à l’aide du certificat spécifié et du pointeur d’interface IOpcSigningOptions . La signature résultante est représentée par un pointeur d’interface IOpcDigitalSignature .

Syntaxe

HRESULT Sign(
  [in]          const CERT_CONTEXT   *certificate,
  [in]          IOpcSigningOptions   *signingOptions,
  [out, retval] IOpcDigitalSignature **digitalSignature
);

Paramètres

[in] certificate

Pointeur vers une structure CERT_CONTEXT qui contient le certificat.

[in] signingOptions

Pointeur d’interface IOpcSigningOptions utilisé pour générer la signature.

[out, retval] digitalSignature

Nouveau pointeur d’interface IOpcDigitalSignature qui représente la signature.

Valeur retournée

Cette méthode retourne un code HRESULT. Les valeurs possibles sont notamment celles figurant dans le tableau suivant.

Code/valeur de retour Description
S_OK
S_OK
E_POINTER
Au moins l’un des paramètres de certificat, signingOptions et digitalSignature est NULL.
OPC_E_DS_DEFAULT_DIGEST_METHOD_NOT_SET
0x80510047
La méthode digest par défaut n’a pas été définie ; pour le définir, appelez IOpcSigningOptions ::SetDefaultDigestMethod.
OPC_E_DS_DIGEST_VALUE_ERROR
0x8051001A
Impossible d’obtenir la valeur digest d’un composant de package ou d’un élément dans le balisage de signature référencé pour la signature.
OPC_E_DS_INVALID_OPC_SIGNATURE_TIME_FORMAT
0x80510024
Le format d’heure de la signature n’est pas une valeur d’énumération OPC_SIGNATURE_TIME_FORMAT valide.
OPC_E_DS_INVALID_RELATIONSHIPS_SIGNING_OPTION
0x80510023
Une option de signature de relation indiquée n’est pas une valeur d’énumération OPC_RELATIONSHIPS_SIGNING_OPTION valide.
OPC_E_DS_SIGNATURE_CORRUPT
0x80510019
Une signature dans le package n’est pas correctement formée. Impossible d’obtenir la valeur de signature.
OPC_E_DS_SIGNATURE_METHOD_NOT_SET
0x80510046
La méthode de signature n’a pas été définie. Appelez IOpcSigningOptions ::SetSignatureMethod pour définir la méthode de signature.
OPC_E_NO_SUCH_PART
0x80510018
La partie spécifiée n’existe pas.
Erreur de chiffrement
Code d’erreur HRESULT d’une API de chiffrement .
Erreur des services Web Windows
Code d’erreur HRESULT d’une API des services Web Windows .

Remarques

Cette méthode utilise des objets Packaging pour apporter des modifications à un package. Les modifications résultantes ne sont pas enregistrées tant que le package n’est pas enregistré.

Avant d’appeler cette méthode pour générer une signature, appelez les méthodes IOpcSigningOptions ::SetDefaultDigestMethod et IOpcSigningOptions ::SetSignatureMethod .

Pour créer un pointeur d’interface IOpcSigningOptions requis par cette méthode, appelez la méthode CreateSigningOptions .

Important Si le package est modifié pendant l’exécution de cette méthode, Sign peut échouer ou générer une signature incohérente. Pour éviter l’altération du package, utilisez les API pour enregistrer le package avant d’appeler Sign. Pour plus d’informations sur l’enregistrement d’un package, consultez Enregistrement d’un package.
 
Cette méthode peut créer les parties et relations suivantes :
  • Partie Origine de la signature numérique
  • Relation de package du type de relation d’origine de signature numérique
  • Une partie de signature qui contient le balisage de signature
  • Une ou plusieurs parties qui contiennent un certificat
  • Une relation qui cible une partie de signature et dont la source est la partie Origine de la signature numérique
  • Une ou plusieurs relations qui ciblent un composant de signature qui contient un certificat et qui a une autre partie de signature comme source

Si sign échoue, l’une des parties et relations ci-dessus peut être représentée, dans le package, par des objets Packaging. Si la méthode retourne le code d’erreur OPC_E_DS_SIGNATURE_METHOD_NOT_SET ou OPC_E_DS_DEFAULT_DIGEST_METHOD_NOT_SET , le package n’a pas été modifié.

Si sign réussit, les valeurs digest sont calculées pour les entités signées et la signature générée est sérialisée en tant que balisage de signature. Les entités signées possibles incluent l’élément Signature , les références, les parties, les relations et les éléments Object spécifiques au package et à l’application.

Les erreurs introduites dans une signature de package lorsque l’appelant utilise l’interface IOpcSigningOptions pour définir les informations de signature peuvent ne pas être exposées tant que Sign n’est pas appelé.

Cohérence de thread

Les objets d’empaquetage ne sont pas thread-safe.

Pour plus d’informations, consultez la Prise en main avec l’API d’empaquetage.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 7 [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2008 R2 [applications de bureau uniquement]
Plateforme cible Windows
En-tête msopc.h

Voir aussi

Principales interfaces d’empaquetage

Certificats numériques

Vue d’ensemble des signatures numériques

Prise en main avec l’API d’empaquetage

IOpcDigitalSignatureManager

Vues d'ensemble

Guide de programmation de l’API d’empaquetage

Informations de référence sur l’API d’empaque

Exemples d’API d’empaquetage

Empaquetage des interfaces de signature numérique

Interfaces d’empaquetage

Référence

Enregistrement d’un package