summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/ec/ec.h
diff options
context:
space:
mode:
authorjsing <>2019-09-06 17:59:25 +0000
committerjsing <>2019-09-06 17:59:25 +0000
commit11474dfb0e4a1fb55d042fbfb4e2c68602f61508 (patch)
tree41fcc6b250b4f518c93bc01711ee02ee90e03002 /src/lib/libcrypto/ec/ec.h
parentad62fd73e219aceeb5b13e772228acd3f93d6b23 (diff)
downloadopenbsd-11474dfb0e4a1fb55d042fbfb4e2c68602f61508.tar.gz
openbsd-11474dfb0e4a1fb55d042fbfb4e2c68602f61508.tar.bz2
openbsd-11474dfb0e4a1fb55d042fbfb4e2c68602f61508.zip
Add various macros and controls for EC_PKEY_CTX.
These are needed for the upcoming EC CMS support (nothing else appears to use them). This largely syncs our ec_pmeth.c with OpenSSL 1.1.1b. With input from inoguchi@ and tb@. ok inoguchi@ tb@
Diffstat (limited to 'src/lib/libcrypto/ec/ec.h')
-rw-r--r--src/lib/libcrypto/ec/ec.h100
1 files changed, 95 insertions, 5 deletions
diff --git a/src/lib/libcrypto/ec/ec.h b/src/lib/libcrypto/ec/ec.h
index 1c5641eca0..d0e3673675 100644
--- a/src/lib/libcrypto/ec/ec.h
+++ b/src/lib/libcrypto/ec/ec.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: ec.h,v 1.16 2019/01/19 01:17:41 tb Exp $ */ 1/* $OpenBSD: ec.h,v 1.17 2019/09/06 17:59:25 jsing Exp $ */
2/* 2/*
3 * Originally written by Bodo Moeller for the OpenSSL project. 3 * Originally written by Bodo Moeller for the OpenSSL project.
4 */ 4 */
@@ -97,7 +97,7 @@ extern "C" {
97 97
98 98
99#ifndef OPENSSL_ECC_MAX_FIELD_BITS 99#ifndef OPENSSL_ECC_MAX_FIELD_BITS
100# define OPENSSL_ECC_MAX_FIELD_BITS 661 100#define OPENSSL_ECC_MAX_FIELD_BITS 661
101#endif 101#endif
102 102
103/** Enum for the point conversion form as defined in X9.62 (ECDSA) 103/** Enum for the point conversion form as defined in X9.62 (ECDSA)
@@ -714,6 +714,7 @@ typedef struct ec_key_method_st EC_KEY_METHOD;
714/* some values for the flags field */ 714/* some values for the flags field */
715#define EC_FLAG_NON_FIPS_ALLOW 0x1 715#define EC_FLAG_NON_FIPS_ALLOW 0x1
716#define EC_FLAG_FIPS_CHECKED 0x2 716#define EC_FLAG_FIPS_CHECKED 0x2
717#define EC_FLAG_COFACTOR_ECDH 0x1000
717 718
718/** Creates a new EC_KEY object. 719/** Creates a new EC_KEY object.
719 * \return EC_KEY object or NULL if an error occurred. 720 * \return EC_KEY object or NULL if an error occurred.
@@ -995,11 +996,96 @@ EC_KEY *ECParameters_dup(EC_KEY *key);
995#endif 996#endif
996 997
997#define EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, nid) \ 998#define EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, nid) \
998 EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, EVP_PKEY_OP_PARAMGEN, \ 999 EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
999 EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID, nid, NULL) 1000 EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \
1000 1001 EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID, nid, NULL)
1002
1003#define EVP_PKEY_CTX_set_ec_param_enc(ctx, flag) \
1004 EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
1005 EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \
1006 EVP_PKEY_CTRL_EC_PARAM_ENC, flag, NULL)
1007
1008#define EVP_PKEY_CTX_set_ecdh_cofactor_mode(ctx, flag) \
1009 EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
1010 EVP_PKEY_OP_DERIVE, \
1011 EVP_PKEY_CTRL_EC_ECDH_COFACTOR, flag, NULL)
1012
1013#define EVP_PKEY_CTX_get_ecdh_cofactor_mode(ctx) \
1014 EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
1015 EVP_PKEY_OP_DERIVE, \
1016 EVP_PKEY_CTRL_EC_ECDH_COFACTOR, -2, NULL)
1017
1018#define EVP_PKEY_CTX_set_ecdh_kdf_type(ctx, kdf) \
1019 EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
1020 EVP_PKEY_OP_DERIVE, \
1021 EVP_PKEY_CTRL_EC_KDF_TYPE, kdf, NULL)
1022
1023#define EVP_PKEY_CTX_get_ecdh_kdf_type(ctx) \
1024 EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
1025 EVP_PKEY_OP_DERIVE, \
1026 EVP_PKEY_CTRL_EC_KDF_TYPE, -2, NULL)
1027
1028#define EVP_PKEY_CTX_set_ecdh_kdf_md(ctx, md) \
1029 EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
1030 EVP_PKEY_OP_DERIVE, \
1031 EVP_PKEY_CTRL_EC_KDF_MD, 0, (void *)(md))
1032
1033#define EVP_PKEY_CTX_get_ecdh_kdf_md(ctx, pmd) \
1034 EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
1035 EVP_PKEY_OP_DERIVE, \
1036 EVP_PKEY_CTRL_GET_EC_KDF_MD, 0, (void *)(pmd))
1037
1038#define EVP_PKEY_CTX_set_ecdh_kdf_outlen(ctx, len) \
1039 EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
1040 EVP_PKEY_OP_DERIVE, \
1041 EVP_PKEY_CTRL_EC_KDF_OUTLEN, len, NULL)
1042
1043#define EVP_PKEY_CTX_get_ecdh_kdf_outlen(ctx, plen) \
1044 EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
1045 EVP_PKEY_OP_DERIVE, \
1046 EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN, 0, \
1047 (void *)(plen))
1048
1049#define EVP_PKEY_CTX_set0_ecdh_kdf_ukm(ctx, p, plen) \
1050 EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
1051 EVP_PKEY_OP_DERIVE, \
1052 EVP_PKEY_CTRL_EC_KDF_UKM, plen, (void *)(p))
1053
1054#define EVP_PKEY_CTX_get0_ecdh_kdf_ukm(ctx, p) \
1055 EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
1056 EVP_PKEY_OP_DERIVE, \
1057 EVP_PKEY_CTRL_GET_EC_KDF_UKM, 0, (void *)(p))
1058
1059/* SM2 will skip the operation check so no need to pass operation here */
1060#define EVP_PKEY_CTX_set1_id(ctx, id, id_len) \
1061 EVP_PKEY_CTX_ctrl(ctx, -1, -1, \
1062 EVP_PKEY_CTRL_SET1_ID, (int)id_len, (void*)(id))
1063
1064#define EVP_PKEY_CTX_get1_id(ctx, id) \
1065 EVP_PKEY_CTX_ctrl(ctx, -1, -1, \
1066 EVP_PKEY_CTRL_GET1_ID, 0, (void*)(id))
1067
1068#define EVP_PKEY_CTX_get1_id_len(ctx, id_len) \
1069 EVP_PKEY_CTX_ctrl(ctx, -1, -1, \
1070 EVP_PKEY_CTRL_GET1_ID_LEN, 0, (void*)(id_len))
1001 1071
1002#define EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID (EVP_PKEY_ALG_CTRL + 1) 1072#define EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID (EVP_PKEY_ALG_CTRL + 1)
1073#define EVP_PKEY_CTRL_EC_PARAM_ENC (EVP_PKEY_ALG_CTRL + 2)
1074#define EVP_PKEY_CTRL_EC_ECDH_COFACTOR (EVP_PKEY_ALG_CTRL + 3)
1075#define EVP_PKEY_CTRL_EC_KDF_TYPE (EVP_PKEY_ALG_CTRL + 4)
1076#define EVP_PKEY_CTRL_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 5)
1077#define EVP_PKEY_CTRL_GET_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 6)
1078#define EVP_PKEY_CTRL_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 7)
1079#define EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 8)
1080#define EVP_PKEY_CTRL_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 9)
1081#define EVP_PKEY_CTRL_GET_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 10)
1082#define EVP_PKEY_CTRL_SET1_ID (EVP_PKEY_ALG_CTRL + 11)
1083#define EVP_PKEY_CTRL_GET1_ID (EVP_PKEY_ALG_CTRL + 12)
1084#define EVP_PKEY_CTRL_GET1_ID_LEN (EVP_PKEY_ALG_CTRL + 13)
1085
1086/* KDF types */
1087#define EVP_PKEY_ECDH_KDF_NONE 1
1088#define EVP_PKEY_ECDH_KDF_X9_63 2
1003 1089
1004/* BEGIN ERROR CODES */ 1090/* BEGIN ERROR CODES */
1005/* The following lines are auto generated by the script mkerr.pl. Any changes 1091/* The following lines are auto generated by the script mkerr.pl. Any changes
@@ -1172,6 +1258,7 @@ void ERR_load_EC_strings(void);
1172#define EC_R_INVALID_COMPRESSED_POINT 110 1258#define EC_R_INVALID_COMPRESSED_POINT 110
1173#define EC_R_INVALID_COMPRESSION_BIT 109 1259#define EC_R_INVALID_COMPRESSION_BIT 109
1174#define EC_R_INVALID_CURVE 141 1260#define EC_R_INVALID_CURVE 141
1261#define EC_R_INVALID_DIGEST 151
1175#define EC_R_INVALID_DIGEST_TYPE 138 1262#define EC_R_INVALID_DIGEST_TYPE 138
1176#define EC_R_INVALID_ENCODING 102 1263#define EC_R_INVALID_ENCODING 102
1177#define EC_R_INVALID_FIELD 103 1264#define EC_R_INVALID_FIELD 103
@@ -1180,6 +1267,7 @@ void ERR_load_EC_strings(void);
1180#define EC_R_INVALID_PENTANOMIAL_BASIS 132 1267#define EC_R_INVALID_PENTANOMIAL_BASIS 132
1181#define EC_R_INVALID_PRIVATE_KEY 123 1268#define EC_R_INVALID_PRIVATE_KEY 123
1182#define EC_R_INVALID_TRINOMIAL_BASIS 137 1269#define EC_R_INVALID_TRINOMIAL_BASIS 137
1270#define EC_R_KDF_PARAMETER_ERROR 148
1183#define EC_R_KEYS_NOT_SET 140 1271#define EC_R_KEYS_NOT_SET 140
1184#define EC_R_MISSING_PARAMETERS 124 1272#define EC_R_MISSING_PARAMETERS 124
1185#define EC_R_MISSING_PRIVATE_KEY 125 1273#define EC_R_MISSING_PRIVATE_KEY 125
@@ -1190,9 +1278,11 @@ void ERR_load_EC_strings(void);
1190#define EC_R_NO_FIELD_MOD 133 1278#define EC_R_NO_FIELD_MOD 133
1191#define EC_R_NO_PARAMETERS_SET 139 1279#define EC_R_NO_PARAMETERS_SET 139
1192#define EC_R_PASSED_NULL_PARAMETER 134 1280#define EC_R_PASSED_NULL_PARAMETER 134
1281#define EC_R_PEER_KEY_ERROR 149
1193#define EC_R_PKPARAMETERS2GROUP_FAILURE 127 1282#define EC_R_PKPARAMETERS2GROUP_FAILURE 127
1194#define EC_R_POINT_AT_INFINITY 106 1283#define EC_R_POINT_AT_INFINITY 106
1195#define EC_R_POINT_IS_NOT_ON_CURVE 107 1284#define EC_R_POINT_IS_NOT_ON_CURVE 107
1285#define EC_R_SHARED_INFO_ERROR 150
1196#define EC_R_SLOT_FULL 108 1286#define EC_R_SLOT_FULL 108
1197#define EC_R_UNDEFINED_GENERATOR 113 1287#define EC_R_UNDEFINED_GENERATOR 113
1198#define EC_R_UNDEFINED_ORDER 128 1288#define EC_R_UNDEFINED_ORDER 128