new modules

This commit is contained in:
Zhi Guan
2015-10-05 15:34:54 +08:00
parent 8afb3ef97b
commit 254a1266d6
49 changed files with 4895 additions and 187 deletions

View File

@@ -12,10 +12,22 @@ extern "C" {
#endif
/*
KDFSet ALGORITHM ::= {
{ OID x9-63-kdf PARMS HashAlgorithm } |
{ OID nist-concatenation-kdf PARMS HashAlgorithm } |
{ OID tls-kdf PARMS HashAlgorithm } |
{ OID ikev2-kdf PARMS HashAlgorithm }
}
*/
typedef struct ecies_params_st {
int kdf_nid;
const EVP_MD *kdf_md;
const EVP_CIPHER *sym_cipher;
int mac_nid;
const EVP_MD *mac_md;
const EVP_CIPHER *mac_cipher;
} ECIES_PARAMS;
typedef struct ecies_ciphertext_value_st {
@@ -36,14 +48,6 @@ int ECIES_do_decrypt(const ECIES_CIPHERTEXT_VALUE *cv,
EC_KEY *pri_key);
/* ERR function (should in openssl/err.h) begin */
/*
#define ERR_LIB_ECIES 129
#define ERR_R_ECIES_LIB ERR_LIB_ECIES
#define ECIESerr(f,r) ERR_PUT_error(ERR_LIB_ECIES,(f),(r),__FILE__,__LINE__)
*/
void ERR_load_ECIES_strings(void);
/* Error codes for the ECIES functions. */

View File

@@ -95,6 +95,9 @@ secg-scheme 22 : hmac-full-ecies
secg-scheme 23 : hmac-half-ecies
secg-scheme 24 0 : cmac-aes128-ecies
secg-scheme 24 1 : cmac-aes192-ecies
FIXME: we can not get an EVP_algor object from these new NIDs
*/
typedef struct ecies_parameters_st {

View File

@@ -1,6 +1,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/aes.h>
#include <openssl/hmac.h>
#include <openssl/rand.h>
#include <openssl/ecdh.h>
@@ -16,7 +17,7 @@ ECIES_CIPHERTEXT_VALUE *ECIES_do_encrypt(const ECIES_PARAMS *param,
EC_KEY *ephem_key = NULL;
unsigned char *share = NULL;
unsigned char *enckey, *mackey, *p;
int sharelen, enckeylen, mackeylen, len;
int sharelen, enckeylen, mackeylen, maclen, len;
EVP_CIPHER_CTX cipher_ctx;
EVP_CIPHER_CTX_init(&cipher_ctx);
@@ -67,7 +68,29 @@ ECIES_CIPHERTEXT_VALUE *ECIES_do_encrypt(const ECIES_PARAMS *param,
if (param->sym_cipher)
enckeylen = EVP_CIPHER_key_length(param->sym_cipher);
else enckeylen = inlen;
mackeylen = EVP_MD_size(param->mac_md); //TODO: is this true for hmac-half-ecies?
switch (param->mac_nid) {
case NID_hmac_full_ecies:
maclen = EVP_MD_size(param->mac_md);
mackeylen = EVP_MD_size(param->mac_md);
break;
case NID_hmac_half_ecies:
maclen = EVP_MD_size(param->mac_md)/2;
mackeylen = EVP_MD_size(param->mac_md);
break;
case NID_cmac_aes128_ecies:
maclen = AES_BLOCK_SIZE;
mackeylen = 128/8;
break;
case NID_cmac_aes192_ecies:
maclen = AES_BLOCK_SIZE;
mackeylen = 192/8;
break;
default:
ECIESerr(ECIES_F_ECIES_DO_ENCRYPT, ERR_R_EC_LIB);
goto err;
}
sharelen = enckeylen + mackeylen;
if (!(share = OPENSSL_malloc(sharelen)))
@@ -138,12 +161,12 @@ ECIES_CIPHERTEXT_VALUE *ECIES_do_encrypt(const ECIES_PARAMS *param,
/*
* calculate mactag of ciphertext and encode
*/
cv->mactag->length = EVP_MD_size(param->mac_md);
cv->mactag->length = maclen;
if (!M_ASN1_OCTET_STRING_set(cv->mactag, NULL, EVP_MD_size(param->mac_md)))
if (!M_ASN1_OCTET_STRING_set(cv->mactag, NULL, cv->mactag->length))
{
ECIESerr(ECIES_F_ECIES_DO_ENCRYPT, ERR_R_MALLOC_FAILURE);
goto err;
goto err;
}
if (!HMAC(param->mac_md, mackey, mackeylen,
cv->ciphertext->data, (size_t)cv->ciphertext->length,

View File

@@ -14,7 +14,7 @@ static void *x963_kdf(const EVP_MD *md, const void *share, size_t sharelen,
void *key, size_t keylen)
{
EVP_MD_CTX ctx;
unsigned int counter = 1;
unsigned int counter = 1; //FIXME: uint32_t
unsigned int counter_be;
unsigned char dgst[EVP_MAX_MD_SIZE];
unsigned int dgstlen;