-/* p12_mutl.c */
/*
* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
* 1999.
# include <stdio.h>
# include "internal/cryptlib.h"
-#include <openssl/crypto.h>
+# include <openssl/crypto.h>
# include <openssl/hmac.h>
# include <openssl/rand.h>
# include <openssl/pkcs12.h>
+# include "p12_lcl.h"
+
+int PKCS12_mac_present(PKCS12 *p12)
+{
+ return p12->mac ? 1 : 0;
+}
+
+void PKCS12_get0_mac(ASN1_OCTET_STRING **pmac, X509_ALGOR **pmacalg,
+ ASN1_OCTET_STRING **psalt, ASN1_INTEGER **piter,
+ PKCS12 *p12)
+{
+ if (p12->mac) {
+ if (pmac)
+ *pmac = p12->mac->dinfo->digest;
+ if (pmacalg)
+ *pmacalg = p12->mac->dinfo->algor;
+ if (psalt)
+ *psalt = p12->mac->salt;
+ if (piter)
+ *piter = p12->mac->iter;
+ } else {
+ if (pmac)
+ *pmac = NULL;
+ if (pmacalg)
+ *pmacalg = NULL;
+ if (psalt)
+ *psalt = NULL;
+ if (piter)
+ *piter = NULL;
+ }
+}
# define TK26_MAC_KEY_LEN 32
unsigned char *mac, unsigned int *maclen)
{
const EVP_MD *md_type;
- HMAC_CTX hmac;
+ HMAC_CTX *hmac = NULL;
unsigned char key[EVP_MAX_MD_SIZE], *salt;
int saltlen, iter;
int md_size = 0;
PKCS12err(PKCS12_F_PKCS12_GEN_MAC, PKCS12_R_KEY_GEN_ERROR);
return 0;
}
- HMAC_CTX_init(&hmac);
- if (!HMAC_Init_ex(&hmac, key, md_size, md_type, NULL)
- || !HMAC_Update(&hmac, p12->authsafes->d.data->data,
+ hmac = HMAC_CTX_new();
+ if (!HMAC_Init_ex(hmac, key, md_size, md_type, NULL)
+ || !HMAC_Update(hmac, p12->authsafes->d.data->data,
p12->authsafes->d.data->length)
- || !HMAC_Final(&hmac, mac, maclen)) {
- HMAC_CTX_cleanup(&hmac);
+ || !HMAC_Final(hmac, mac, maclen)) {
+ HMAC_CTX_free(hmac);
return 0;
}
- HMAC_CTX_cleanup(&hmac);
+ HMAC_CTX_free(hmac);
return 1;
}