Fix bug in x86unix.pl introduced in latest update.
[openssl.git] / crypto / evp / evp_locl.h
index 7b088b48480ecc8d4ed9e20c1a1ee18089ffd309..dca3f68f345173e1ae8269f0bc21d444ba6d8701 100644 (file)
@@ -90,7 +90,7 @@ static int cname##_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const uns
 }
 
 #define BLOCK_CIPHER_func_cfb(cname, cprefix, cbits, kstruct, ksched) \
-static int cname##_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, unsigned int inl) \
+static int cname##_cfb##cbits##_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, unsigned int inl) \
 {\
        cprefix##_cfb##cbits##_encrypt(in, out, (long)inl, &((kstruct *)ctx->cipher_data)->ksched, ctx->iv, &ctx->num, ctx->encrypt);\
        return 1;\
@@ -124,17 +124,17 @@ const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
 BLOCK_CIPHER_def1(cname, cbc, cbc, CBC, kstruct, nid, block_size, key_len, \
                  iv_len, flags, init_key, cleanup, set_asn1, get_asn1, ctrl)
 
-#define BLOCK_CIPHER_def_cfb(cname, kstruct, nid, block_size, key_len, \
+#define BLOCK_CIPHER_def_cfb(cname, kstruct, nid, key_len, \
                             iv_len, cbits, flags, init_key, cleanup, \
                             set_asn1, get_asn1, ctrl) \
-BLOCK_CIPHER_def1(cname, cfb##cbits, cfb, CFB, kstruct, nid, block_size, \
+BLOCK_CIPHER_def1(cname, cfb##cbits, cfb##cbits, CFB, kstruct, nid, 1, \
                  key_len, iv_len, flags, init_key, cleanup, set_asn1, \
                  get_asn1, ctrl)
 
-#define BLOCK_CIPHER_def_ofb(cname, kstruct, nid, block_size, key_len, \
+#define BLOCK_CIPHER_def_ofb(cname, kstruct, nid, key_len, \
                             iv_len, cbits, flags, init_key, cleanup, \
                             set_asn1, get_asn1, ctrl) \
-BLOCK_CIPHER_def1(cname, ofb##cbits, ofb, OFB, kstruct, nid, block_size, \
+BLOCK_CIPHER_def1(cname, ofb##cbits, ofb, OFB, kstruct, nid, 1, \
                  key_len, iv_len, flags, init_key, cleanup, set_asn1, \
                  get_asn1, ctrl)
 
@@ -149,9 +149,9 @@ BLOCK_CIPHER_def1(cname, ecb, ecb, ECB, kstruct, nid, block_size, key_len, \
                          init_key, cleanup, set_asn1, get_asn1, ctrl) \
 BLOCK_CIPHER_def_cbc(cname, kstruct, nid, block_size, key_len, iv_len, flags, \
                     init_key, cleanup, set_asn1, get_asn1, ctrl) \
-BLOCK_CIPHER_def_cfb(cname, kstruct, nid, block_size, key_len, iv_len, cbits, \
+BLOCK_CIPHER_def_cfb(cname, kstruct, nid, key_len, iv_len, cbits, \
                     flags, init_key, cleanup, set_asn1, get_asn1, ctrl) \
-BLOCK_CIPHER_def_ofb(cname, kstruct, nid, block_size, key_len, iv_len, cbits, \
+BLOCK_CIPHER_def_ofb(cname, kstruct, nid, key_len, iv_len, cbits, \
                     flags, init_key, cleanup, set_asn1, get_asn1, ctrl) \
 BLOCK_CIPHER_def_ecb(cname, kstruct, nid, block_size, key_len, iv_len, flags, \
                     init_key, cleanup, set_asn1, get_asn1, ctrl)
@@ -225,3 +225,93 @@ const EVP_CIPHER *EVP_##cname##_ecb(void) { return &cname##_ecb; }
                          get_asn1, ctrl)
 
 #define EVP_C_DATA(kstruct, ctx)       ((kstruct *)(ctx)->cipher_data)
+
+#define IMPLEMENT_CFBR(cipher,cprefix,kstruct,ksched,keysize,cbits,iv_len) \
+       BLOCK_CIPHER_func_cfb(cipher##_##keysize,cprefix,cbits,kstruct,ksched) \
+       BLOCK_CIPHER_def_cfb(cipher##_##keysize,kstruct, \
+                            NID_##cipher##_##keysize, keysize/8, iv_len, cbits, \
+                            0, cipher##_init_key, NULL, \
+                            EVP_CIPHER_set_asn1_iv, \
+                            EVP_CIPHER_get_asn1_iv, \
+                            NULL)
+
+struct evp_pkey_ctx_st
+       {
+       /* Method associated with this operation */
+       const EVP_PKEY_METHOD *pmeth;
+       /* Engine that implements this method or NULL if builtin */
+       ENGINE *engine;
+       /* Key: may be NULL */
+       EVP_PKEY *pkey;
+       /* Peer key for key agreement, may be NULL */
+       EVP_PKEY *peerkey;
+       /* Actual operation */
+       int operation;
+       /* Algorithm specific data */
+       void *data;
+       /* Application specific data */
+       void *app_data;
+       /* Keygen callback */
+       EVP_PKEY_gen_cb *pkey_gencb;
+       /* implementation specific keygen data */
+       int *keygen_info;
+       int keygen_info_count;
+       } /* EVP_PKEY_CTX */;
+
+#define EVP_PKEY_FLAG_DYNAMIC  1
+
+struct evp_pkey_method_st
+       {
+       int pkey_id;
+       int flags;
+
+       int (*init)(EVP_PKEY_CTX *ctx);
+       int (*copy)(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src);
+       void (*cleanup)(EVP_PKEY_CTX *ctx);
+
+       int (*paramgen_init)(EVP_PKEY_CTX *ctx);
+       int (*paramgen)(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey);
+
+       int (*keygen_init)(EVP_PKEY_CTX *ctx);
+       int (*keygen)(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey);
+
+       int (*sign_init)(EVP_PKEY_CTX *ctx);
+       int (*sign)(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen,
+                               const unsigned char *tbs, size_t tbslen);
+
+       int (*verify_init)(EVP_PKEY_CTX *ctx);
+       int (*verify)(EVP_PKEY_CTX *ctx,
+                               const unsigned char *sig, size_t siglen,
+                               const unsigned char *tbs, size_t tbslen);
+
+       int (*verify_recover_init)(EVP_PKEY_CTX *ctx);
+       int (*verify_recover)(EVP_PKEY_CTX *ctx,
+                               unsigned char *rout, size_t *routlen,
+                               const unsigned char *sig, size_t siglen);
+
+       int (*signctx_init)(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx);
+       int (*signctx)(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen,
+                                       EVP_MD_CTX *mctx);
+
+       int (*verifyctx_init)(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx);
+       int (*verifyctx)(EVP_PKEY_CTX *ctx, const unsigned char *sig,int siglen,
+                                       EVP_MD_CTX *mctx);
+
+       int (*encrypt_init)(EVP_PKEY_CTX *ctx);
+       int (*encrypt)(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen,
+                                       const unsigned char *in, size_t inlen);
+
+       int (*decrypt_init)(EVP_PKEY_CTX *ctx);
+       int (*decrypt)(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen,
+                                       const unsigned char *in, size_t inlen);
+
+       int (*derive_init)(EVP_PKEY_CTX *ctx);
+       int (*derive)(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen);
+
+       int (*ctrl)(EVP_PKEY_CTX *ctx, int type, int p1, void *p2);
+       int (*ctrl_str)(EVP_PKEY_CTX *ctx, const char *type, const char *value);
+
+
+       } /* EVP_PKEY_METHOD */;
+
+void evp_pkey_set_cb_translate(BN_GENCB *cb, EVP_PKEY_CTX *ctx);