Public key blobs (type PUBLICKEYBLOB) are used to store RSA public keys. They have the following format:
BLOBHEADER blobheader;
RSAPUBKEY rsapubkey;
BYTE modulus[rsapubkey.bitlen/8];
Notice that public key blobs are not encrypted, but contain public keys in plaintext form.
The RSAPUBKEY structure contains information specific to the particular public key contained in the key blob. It is defined as follows:
typedef struct _RSAPUBKEY {
DWORD magic;
DWORD bitlen;
DWORD pubexp;
} RSAPUBKEY;
The following table describes each of the fields in the RSAPUBKEY structure.
Field | Description |
---|---|
magic | This should be set to "RSA1" (0x31415352) for public keys and to "RSA2" (0x32415352) for private keys. Notice that the hex values are just an ASCII encoding of "RSA1" and "RSA2." |
bitlen | Number of bits in the modulus. In practice, this must always be a multiple of 8. |
pubexp | The public exponent. |
The public key modulus data is located directly after the RSAPUBKEY structure. The size of this data will vary depending on the size of the public key. The number of bytes can be determined by dividing the value of the bitlen field of RSAPUBKEY by 8.