p12_mutl.c (160814) | p12_mutl.c (162911) |
---|---|
1/* p12_mutl.c */ 2/* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL 3 * project 1999. 4 */ 5/* ==================================================================== 6 * Copyright (c) 1999 The OpenSSL Project. All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 55 unchanged lines hidden (view full) --- 64#include <openssl/pkcs12.h> 65 66/* Generate a MAC */ 67int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, 68 unsigned char *mac, unsigned int *maclen) 69{ 70 const EVP_MD *md_type; 71 HMAC_CTX hmac; | 1/* p12_mutl.c */ 2/* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL 3 * project 1999. 4 */ 5/* ==================================================================== 6 * Copyright (c) 1999 The OpenSSL Project. All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 55 unchanged lines hidden (view full) --- 64#include <openssl/pkcs12.h> 65 66/* Generate a MAC */ 67int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, 68 unsigned char *mac, unsigned int *maclen) 69{ 70 const EVP_MD *md_type; 71 HMAC_CTX hmac; |
72 unsigned char key[PKCS12_MAC_KEY_LENGTH], *salt; | 72 unsigned char key[EVP_MAX_MD_SIZE], *salt; |
73 int saltlen, iter; 74 75 if (!PKCS7_type_is_data(p12->authsafes)) 76 { 77 PKCS12err(PKCS12_F_PKCS12_GEN_MAC,PKCS12_R_CONTENT_TYPE_NOT_DATA); 78 return 0; 79 } 80 81 salt = p12->mac->salt->data; 82 saltlen = p12->mac->salt->length; 83 if (!p12->mac->iter) iter = 1; 84 else iter = ASN1_INTEGER_get (p12->mac->iter); 85 if(!(md_type = 86 EVP_get_digestbyobj (p12->mac->dinfo->algor->algorithm))) { 87 PKCS12err(PKCS12_F_PKCS12_GEN_MAC,PKCS12_R_UNKNOWN_DIGEST_ALGORITHM); 88 return 0; 89 } 90 if(!PKCS12_key_gen (pass, passlen, salt, saltlen, PKCS12_MAC_ID, iter, | 73 int saltlen, iter; 74 75 if (!PKCS7_type_is_data(p12->authsafes)) 76 { 77 PKCS12err(PKCS12_F_PKCS12_GEN_MAC,PKCS12_R_CONTENT_TYPE_NOT_DATA); 78 return 0; 79 } 80 81 salt = p12->mac->salt->data; 82 saltlen = p12->mac->salt->length; 83 if (!p12->mac->iter) iter = 1; 84 else iter = ASN1_INTEGER_get (p12->mac->iter); 85 if(!(md_type = 86 EVP_get_digestbyobj (p12->mac->dinfo->algor->algorithm))) { 87 PKCS12err(PKCS12_F_PKCS12_GEN_MAC,PKCS12_R_UNKNOWN_DIGEST_ALGORITHM); 88 return 0; 89 } 90 if(!PKCS12_key_gen (pass, passlen, salt, saltlen, PKCS12_MAC_ID, iter, |
91 PKCS12_MAC_KEY_LENGTH, key, md_type)) { | 91 EVP_MD_size(md_type), key, md_type)) { |
92 PKCS12err(PKCS12_F_PKCS12_GEN_MAC,PKCS12_R_KEY_GEN_ERROR); 93 return 0; 94 } 95 HMAC_CTX_init(&hmac); | 92 PKCS12err(PKCS12_F_PKCS12_GEN_MAC,PKCS12_R_KEY_GEN_ERROR); 93 return 0; 94 } 95 HMAC_CTX_init(&hmac); |
96 HMAC_Init_ex(&hmac, key, PKCS12_MAC_KEY_LENGTH, md_type, NULL); | 96 HMAC_Init_ex(&hmac, key, EVP_MD_size(md_type), md_type, NULL); |
97 HMAC_Update(&hmac, p12->authsafes->d.data->data, 98 p12->authsafes->d.data->length); 99 HMAC_Final(&hmac, mac, maclen); 100 HMAC_CTX_cleanup(&hmac); 101 return 1; 102} 103 104/* Verify the mac */ --- 78 unchanged lines hidden --- | 97 HMAC_Update(&hmac, p12->authsafes->d.data->data, 98 p12->authsafes->d.data->length); 99 HMAC_Final(&hmac, mac, maclen); 100 HMAC_CTX_cleanup(&hmac); 101 return 1; 102} 103 104/* Verify the mac */ --- 78 unchanged lines hidden --- |