make depend
[openssl.git] / crypto / evp / pmeth_gn.c
index eb81d521348e9bd3aec28eb29194054fc399ec7f..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.
  */
 /* ====================================================================
@@ -61,6 +61,7 @@
 #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)
@@ -196,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;
+       }