Enc doesn't support AEAD ciphers.
[openssl.git] / crypto / evp / pmeth_gn.c
index 4972d5e96d333f8198c04dfb469418e24f5a800b..4651c8137022467cab6412cbec4e3bfee203321b 100644 (file)
@@ -1,5 +1,5 @@
 /* pmeth_gn.c */
-/* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL
+/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
  * project 2006.
  */
 /* ====================================================================
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <openssl/objects.h>
 #include "cryptlib.h"
+#include <openssl/objects.h>
 #include <openssl/evp.h>
+#include <openssl/bn.h>
 #include "evp_locl.h"
 
 int EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx)
@@ -166,6 +167,11 @@ void EVP_PKEY_CTX_set_cb(EVP_PKEY_CTX *ctx, EVP_PKEY_gen_cb *cb)
        ctx->pkey_gencb = cb;
        }
 
+EVP_PKEY_gen_cb *EVP_PKEY_CTX_get_cb(EVP_PKEY_CTX *ctx)
+       {
+       return ctx->pkey_gencb;
+       }
+
 /* "translation callback" to call EVP_PKEY_CTX callbacks using BN_GENCB
  * style callbacks.
  */
@@ -191,3 +197,25 @@ int EVP_PKEY_CTX_get_keygen_info(EVP_PKEY_CTX *ctx, int idx)
                return 0;
        return ctx->keygen_info[idx];
        }
+
+EVP_PKEY *EVP_PKEY_new_mac_key(int type, ENGINE *e,
+                               const unsigned char *key, int keylen)
+       {
+       EVP_PKEY_CTX *mac_ctx = NULL;
+       EVP_PKEY *mac_key = NULL;
+       mac_ctx = EVP_PKEY_CTX_new_id(type, e);
+       if (!mac_ctx)
+               return NULL;
+       if (EVP_PKEY_keygen_init(mac_ctx) <= 0)
+               goto merr;
+       if (EVP_PKEY_CTX_ctrl(mac_ctx, -1, EVP_PKEY_OP_KEYGEN,
+                               EVP_PKEY_CTRL_SET_MAC_KEY,
+                               keylen, (void *)key) <= 0)
+               goto merr;
+       if (EVP_PKEY_keygen(mac_ctx, &mac_key) <= 0)
+               goto merr;
+       merr:
+       if (mac_ctx)
+               EVP_PKEY_CTX_free(mac_ctx);
+       return mac_key;
+       }