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 PUBLICKEYBLOBs 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 must always be set to 0x31415352. Notice that this is just an ASCII encoding of "RSA1." |
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 RSAPUBKEY's bitlen field by 8.