Objets BLOB de clé publique DSS version 3
Les objets BLOB de clé publique DSS version 3 de type PublicKeyBlob permettent d’exporter et d’importer des informations sur une clé publique DH. Ils ont le format suivant :
BLOBHEADER blobheader;
// As explained under "Data Structures"
DSSPUBKEY_VER3 dsspubkeyver3;
BYTE p[dsspubkeyver3.bitlenP/8];
// Where P is the prime modulus
BYTE q[dsspubkeyver3.bitlenQ/8];
// Where Q is a large factor of P-1
BYTE g[dsspubkeyver3.bitlenP/8];
// Where G is the generator parameter
BYTE j[dsspubkeyver3.bitlenJ/8];
// Where J is (P-1)/Q
BYTE y[dsspubkeyver3.bitlenP/8];
// Where Y is (G^X) mod P
Ce format d' objet BLOB est exporté lorsque l’indicateur de chiffrement _ d’objets BLOB _ VER3 est utilisé avec CryptExportKey. Étant donné que la version se trouve dans l’objet BLOB, il n’est pas nécessaire de spécifier un indicateur lors de l’utilisation de cet objet BLOB avec CryptImportKey.
En outre, ce format d’objet BLOB est utilisé avec la fonction CryptSetKeyParam lorsque la valeur dwParam KP _ pub _ param est utilisée pour définir des paramètres de clé sur une clé DSS. Cela se fait lorsque l' _ indicateur de chiffrement PREGEN a été utilisé pour générer la clé. Lorsqu’elle est utilisée dans cette situation, la valeur y est ignorée et ne doit donc pas être incluse dans l’objet BLOB.
Le tableau suivant décrit chaque composant de l’objet BLOB de clé.
| Champ | Description |
|---|---|
| Blobheader | Structure BLOBHEADER . Le membre bType doit avoir la valeur PublicKeyBlob. |
| Dsspubkeyver3 | Structure DSSPUBKEY_VER3 . Le membre magique doit être défini sur « DSS3 » (0x33535344) pour les clés publiques. Notez que la valeur hexadécimale est simplement un encodage ASCII de « DSS3 ». |
| P | La valeur P est située directement après la structure DSSPUBKEY_VER3 , et doit toujours être la longueur, en octets, du champ bitlenP DSSPUBKEY_VER3 (longueur binaire de P) divisé par huit (formatLittle-endian ). |
| Q | La valeur Q est située directement après la valeur P et doit toujours être la longueur en octets du membre DSSPUBKEY_VER3bitlenQ divisé par huit (formatLittle endian ). |
| G | La valeur G est située directement après la valeur Q et doit toujours être la longueur, en octets, du membre DSSPUBKEY_VER3bitlenP (longueur de bit de P) divisé par huit. Si la longueur des données est un ou plusieurs octets plus courts que P divisés par 8, les données doivent être complétées par les octets nécessaires (de zéro valeur) pour que les données soient de la longueur souhaitée (formatLittle-endian ). |
| J | La valeur J est située directement après la valeur G et doit toujours être la longueur en octets du membre DSSPUBKEY_VER3bitlenJ divisé par huit (formatLittle endian ). Si la valeur bitlenQ est 0, la valeur est absente de l’objet BLOB. |
| O | La valeur Y, (G ^ X) mod P, est située directement après la valeur J et doit toujours être la longueur, en octets, de la DSSPUBKEY_VER3membrebitlenP (longueur de bit de P) divisé par huit. Si la longueur des données résultant du calcul de (G ^ X) mod P est un ou plusieurs octets plus courts que P divisé par 8, les données doivent être complétées par les octets nécessaires (de zéro valeur) pour que les données soient de la longueur souhaitée (formatLittle endian ).[!Note] |
Notes
Les objets BLOB de clé publique ne sont pas chiffrés, mais contiennent des clés publiques sous forme de texte en clair.