-
Notifications
You must be signed in to change notification settings - Fork 96
Include IANA reference in the definition of ECC curves and DH groups #279
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
c6f03ef
c625045
fd368e5
214064e
691ec52
6e59505
43326f0
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -421,10 +421,18 @@ | |
#define PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE ((psa_key_type_t)0x60030000) | ||
#define PSA_KEY_TYPE_ECC_KEY_PAIR_BASE ((psa_key_type_t)0x70030000) | ||
#define PSA_KEY_TYPE_ECC_CURVE_MASK ((psa_key_type_t)0x0000ffff) | ||
/** Elliptic curve key pair. */ | ||
/** Elliptic curve key pair. | ||
* | ||
* \param curve A value of type ::psa_ecc_curve_t that identifies the | ||
* ECC curve to be used. | ||
*/ | ||
#define PSA_KEY_TYPE_ECC_KEY_PAIR(curve) \ | ||
(PSA_KEY_TYPE_ECC_KEY_PAIR_BASE | (curve)) | ||
/** Elliptic curve public key. */ | ||
/** Elliptic curve public key. | ||
* | ||
* \param curve A value of type ::psa_ecc_curve_t that identifies the | ||
* ECC curve to be used. | ||
*/ | ||
#define PSA_KEY_TYPE_ECC_PUBLIC_KEY(curve) \ | ||
(PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE | (curve)) | ||
|
||
|
@@ -495,13 +503,34 @@ | |
*/ | ||
#define PSA_ECC_CURVE_CURVE448 ((psa_ecc_curve_t) 0x001e) | ||
|
||
/** Minimum value for a vendor-defined ECC curve identifier | ||
* | ||
* The range for vendor-defined curve identifiers is a subset of the IANA | ||
* registry private use range, `0xfe00` - `0xfeff`. | ||
*/ | ||
#define PSA_ECC_CURVE_VENDOR_MIN ((psa_ecc_curve_t) 0xfe00) | ||
/** Maximum value for a vendor-defined ECC curve identifier | ||
* | ||
* The range for vendor-defined curve identifiers is a subset of the IANA | ||
* registry private use range, `0xfe00` - `0xfeff`. | ||
*/ | ||
#define PSA_ECC_CURVE_VENDOR_MAX ((psa_ecc_curve_t) 0xfe7f) | ||
|
||
#define PSA_KEY_TYPE_DH_PUBLIC_KEY_BASE ((psa_key_type_t)0x60040000) | ||
#define PSA_KEY_TYPE_DH_KEY_PAIR_BASE ((psa_key_type_t)0x70040000) | ||
#define PSA_KEY_TYPE_DH_GROUP_MASK ((psa_key_type_t)0x0000ffff) | ||
/** Diffie-Hellman key pair. */ | ||
/** Diffie-Hellman key pair. | ||
* | ||
* \param group A value of type ::psa_dh_group_t that identifies the | ||
* Diffie-Hellman group to be used. | ||
*/ | ||
#define PSA_KEY_TYPE_DH_KEY_PAIR(group) \ | ||
(PSA_KEY_TYPE_DH_KEY_PAIR_BASE | (group)) | ||
/** Diffie-Hellman public key. */ | ||
/** Diffie-Hellman public key. | ||
* | ||
* \param group A value of type ::psa_dh_group_t that identifies the | ||
* Diffie-Hellman group to be used. | ||
*/ | ||
#define PSA_KEY_TYPE_DH_PUBLIC_KEY(group) \ | ||
(PSA_KEY_TYPE_DH_PUBLIC_KEY_BASE | (group)) | ||
|
||
|
@@ -535,6 +564,19 @@ | |
#define PSA_DH_GROUP_FFDHE6144 ((psa_dh_group_t) 0x0103) | ||
#define PSA_DH_GROUP_FFDHE8192 ((psa_dh_group_t) 0x0104) | ||
|
||
/** Minimum value for a vendor-defined Diffie Hellman group identifier | ||
* | ||
* The range for vendor-defined group identifiers is a subset of the IANA | ||
* registry private use range, `0x01fc` - `0x01ff`. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @athoelke To confirm, this range is still accurate, but the GREASE values are also available so the practical use of this range is limited. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes, that is correct. An minor improvement might be to refer to the However, I'd like this merged sooner so I can render the reST and separate the specification from the doxygen source code, which is a pre-requistite to completing the remaing API changes before publishing 1.0.0 of the spec. I can clarify/improve the text after the split if desirable. |
||
*/ | ||
#define PSA_DH_GROUP_VENDOR_MIN ((psa_dh_group_t) 0x01fc) | ||
/** Maximum value for a vendor-defined Diffie Hellman group identifier | ||
* | ||
* The range for vendor-defined group identifiers is a subset of the IANA | ||
* registry private use range, `0x01fc` - `0x01ff`. | ||
*/ | ||
#define PSA_DH_GROUP_VENDOR_MAX ((psa_dh_group_t) 0x01fd) | ||
|
||
/** The block size of a block cipher. | ||
* | ||
* \param type A cipher key type (value of type #psa_key_type_t). | ||
|
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Unfortunately, this is a ridiculously small range whereas an implementation may well wish to define many custom groups, since many groups have been common in the wild and specific systems or protocols may define their own groups.
The TLS registry puts EC and FF groups in the same 16-bit range, but we don't have to. I propose to use some values in the IANA EC range for vendor FF groups. We can in particular use the GREASE values, which TLS uses for the purpose of not having a corresponding cryptographic algorithm.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
From a quick glance, the proposed GREASE values that can be used in this way are:
This is still draft and subject to change. This might not affect this API element, but should modify the documentation of
psa_dh_group_t
.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My proposal was to define the GREASE values (stated by value, with the GREASE spec given as an informative rationale) as reserved for vendors in
psa_dh_group_t
.Though given that there are only 16 of them, that's not much. We can punt PSA crypto future use until later, but I do think we need more vendor FFDH values. I guess the only solution (short of moving to a bigger type) is to take values that are already assigned to elliptic curves and declare them as vendor-specific FFDH values.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've added a commit the extends the recommendations for vendor defined DH groups.