evp/e_aes_cbc_hmac_sha*.c: harmonize names, fix bugs.
[openssl.git] / crypto / ecdh / ecdh.h
index b5b877b55f793a4795a11057344c663805457f59..539e212c10dad3bdd66abe177a8c19811434c078 100644 (file)
@@ -9,19 +9,6 @@
  * The ECC Code is licensed pursuant to the OpenSSL open source
  * license provided below.
  *
- * In addition, Sun covenants to all licensees who provide a reciprocal
- * covenant with respect to their own patents if any, not to sue under
- * current and future patent claims necessarily infringed by the making,
- * using, practicing, selling, offering for sale and/or otherwise
- * disposing of the ECC Code as delivered hereunder (or portions thereof),
- * provided that such covenant shall not apply:
- *  1) for code that a licensee deletes from the ECC Code;
- *  2) separates from the ECC Code; or
- *  3) for infringements caused by:
- *       i) the modification of the ECC Code or
- *      ii) the combination of the ECC Code with other software or
- *          devices where such combination causes the infringement.
- *
  * The ECDH software is originally written by Douglas Stebila of
  * Sun Microsystems Laboratories.
  *
 #ifndef HEADER_ECDH_H
 #define HEADER_ECDH_H
 
+#include <openssl/opensslconf.h>
+
 #ifdef OPENSSL_NO_ECDH
 #error ECDH is disabled.
 #endif
 
-#include <openssl/bn.h>
 #include <openssl/ec.h>
 #include <openssl/ossl_typ.h>
+#ifndef OPENSSL_NO_DEPRECATED
+#include <openssl/bn.h>
+#endif
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-typedef struct ecdh_method 
-{
-       const char *name;
-       int (*compute_key)(unsigned char *key,const EC_POINT *pub_key, EC_KEY *ecdh);
-#if 0
-       int (*init)(EC_KEY *eckey);
-       int (*finish)(EC_KEY *eckey);
-#endif
-       int flags;
-       char *app_data;
-} ECDH_METHOD;
-
-typedef struct ecdh_data_st {
-       /* EC_KEY_METH_DATA part */
-       int (*init)(EC_KEY *);
-       void (*finish)(EC_KEY *);
-       /* method specific part */
-       ENGINE  *engine;
-       int     flags;
-       const ECDH_METHOD *meth;
-       CRYPTO_EX_DATA ex_data;
-} ECDH_DATA; 
-
-/* ECDH_DATA functions */
-ECDH_DATA *ECDH_DATA_new(void);
-ECDH_DATA *ECDH_DATA_new_method(ENGINE *);
-void ECDH_DATA_free(ECDH_DATA *);
-
-ECDH_DATA *ecdh_check(EC_KEY *);
-
+#define EC_FLAG_COFACTOR_ECDH  0x1000
 
 const ECDH_METHOD *ECDH_OpenSSL(void);
 
@@ -131,15 +93,19 @@ void         ECDH_set_default_method(const ECDH_METHOD *);
 const ECDH_METHOD *ECDH_get_default_method(void);
 int      ECDH_set_method(EC_KEY *, const ECDH_METHOD *);
 
-int      ECDH_size(const EC_KEY *);
-int ECDH_compute_key(unsigned char *key,const EC_POINT *pub_key, EC_KEY *ecdh);
-
+int ECDH_compute_key(void *out, size_t outlen, const EC_POINT *pub_key, EC_KEY *ecdh,
+                     void *(*KDF)(const void *in, size_t inlen, void *out, size_t *outlen));
 
 int      ECDH_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new 
                *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
 int      ECDH_set_ex_data(EC_KEY *d, int idx, void *arg);
 void     *ECDH_get_ex_data(EC_KEY *d, int idx);
 
+int ECDH_KDF_X9_62(unsigned char *out, size_t outlen, 
+               const unsigned char *Z, size_t Zlen,
+               const unsigned char *sinfo, size_t sinfolen,
+               const EVP_MD *md);
+
 
 /* BEGIN ERROR CODES */
 /* The following lines are auto generated by the script mkerr.pl. Any changes
@@ -151,12 +117,12 @@ void ERR_load_ECDH_strings(void);
 
 /* Function codes. */
 #define ECDH_F_ECDH_COMPUTE_KEY                                 100
-#define ECDH_F_ECDH_DATA_NEW                            101
+#define ECDH_F_ECDH_DATA_NEW_METHOD                     101
 
 /* Reason codes. */
+#define ECDH_R_KDF_FAILED                               102
 #define ECDH_R_NO_PRIVATE_VALUE                                 100
 #define ECDH_R_POINT_ARITHMETIC_FAILURE                         101
-#define ECDH_R_SHA1_DIGEST_FAILED                       102
 
 #ifdef  __cplusplus
 }