Cryptographic Token Interface Standard |
PKCS#11 |
X9.42 Diffie-Hellman private key objects (object class CKO_PRIVATE_KEY, key type CKK_X9_42_DH) hold X9.42 Diffie-Hellman private keys. The following table defines the X9.42 Diffie-Hellman private key object attributes, in addition to the common attributes listed in Table 15 , Table 19 , Table 25 , and Table 34 :
Table 40, X9.42 Diffie-Hellman Private Key Object Attributes
Attribute | Data type | Meaning |
CKA_PRIME1,4,6 | Big integer | Prime p (>= 1024 bits, in steps of 256 bits) |
CKA_BASE1,4,6 | Big integer | Base g |
CKA_SUBPRIME1,4,6 | Big integer | Subprime q (>= 160 bits) |
CKA_VALUE1,4,6,7 | Big integer | Private value x |
The CKA_PRIME, CKA_BASE and CKA_SUBPRIME attribute values are collectively the "X9.42 Diffie-Hellman domain parameters". Depending on the token, there may be limits on the length of the key components. See the ANSI X9.42 standard for more information on X9.42 Diffie-Hellman keys.
Note that when generating a X9.42 Diffie-Hellman private key, the X9.42 Diffie-Hellman domain parameters are not specified in the key's template. This is because X9.42 Diffie-Hellman private keys are only generated as part of a X9.42 Diffie-Hellman key pair, and the X9.42 Diffie-Hellman domain parameters for the pair are specified in the template for the X9.42 Diffie-Hellman public key.
The following is a sample template for creating a X9.42 Diffie-Hellman private key object:
CK_OBJECT_CLASS class = CKO_PRIVATE_KEY; CK_KEY_TYPE keyType = CKK_X9_42_DH; CK_UTF8CHAR label[] = "A X9.42 Diffie-Hellman private key object"; CK_BYTE subject[] = {...}; CK_BYTE id[] = {123}; CK_BYTE prime[] = {...}; CK_BYTE base[] = {...}; CK_BYTE subprime[] = {...}; CK_BYTE value[] = {...}; CK_BBOOL true = TRUE; CK_ATTRIBUTE template[] = { {CKA_CLASS, &class, sizeof(class)}, {CKA_KEY_TYPE, &keyType, sizeof(keyType)}, {CKA_TOKEN, &true, sizeof(true)}, {CKA_LABEL, label, sizeof(label)-1}, {CKA_SUBJECT, subject, sizeof(subject)}, {CKA_ID, id, sizeof(id)}, {CKA_SENSITIVE, &true, sizeof(true)}, {CKA_DERIVE, &true, sizeof(true)}, {CKA_PRIME, prime, sizeof(prime)}, {CKA_BASE, base, sizeof(base)}, {CKA_SUBPRIME, subprime, sizeof(subprime)}, {CKA_VALUE, value, sizeof(value)} };