# if (OPENSSL_VERSION_NUMBER >= 0x00908000L)
SSL_library_init ();
# endif
- SSLeay_add_all_algorithms ();
+#if OPENSSL_VERSION_NUMBER < 0x10100000
+ SSLeay_add_all_algorithms();
+#else
+ OpenSSL_add_all_algorithms();
+#endif
PKCS12_PBE_add (); /* stub */
#ifdef NO_THREAD
unsigned char temp[EVP_MAX_MD_SIZE];
unsigned int size = 0;
caddr_t res = NULL;
- HMAC_CTX ctx;
+ HMAC_CTX *ctx;
const EVP_MD *md = EVP_sha1 ();
if (alg == 1)
md = EVP_ripemd160 ();
- HMAC_Init (&ctx, key, box_length (key) - DV_STRINGP (key) ? 1 : 0, md);
- box_hmac_1 (box, &ctx);
- HMAC_Final (&ctx, temp, &size);
+ ctx = HMAC_CTX_new();
+ if (!ctx)
+ return res;
+
+ HMAC_Init_ex (ctx, key, box_length (key) - DV_STRINGP (key) ? 1 : 0, md, NULL);
+ box_hmac_1 (box, ctx);
+ HMAC_Final (ctx, temp, &size);
if (size)
{
res = dk_alloc_box (size + 1, DV_SHORT_STRING);
memcpy (res, temp, size);
res[size] = 0;
}
+ HMAC_CTX_free(ctx);
return res;
}
{
int ii;
- opp = op;
- ii = d2i_ASN1_BOOLEAN (NULL, &opp, len + hl);
- if (ii < 0)
+ if (len + hl < 1)
{
if (BIO_write (bp, "Bad boolean\n", 12))
goto end;
}
- BIO_printf (bp, "%d", ii);
+ BIO_printf (bp, "%d", p[0]);
}
else if (tag == V_ASN1_BMPSTRING)
{
}
if (os != NULL)
{
- M_ASN1_OCTET_STRING_free (os);
+ ASN1_STRING_free (os);
os = NULL;
}
}
if (BIO_write (bp, "BAD INTEGER", 11) <= 0)
goto end;
}
- M_ASN1_INTEGER_free (bs);
+ ASN1_STRING_free (bs);
}
else if (tag == V_ASN1_ENUMERATED)
{
if (BIO_write (bp, "BAD ENUMERATED", 11) <= 0)
goto end;
}
- M_ASN1_ENUMERATED_free (bs);
+ ASN1_STRING_free (bs);
}
else if (len > 0 && dump)
{
if (o != NULL)
ASN1_OBJECT_free (o);
if (os != NULL)
- M_ASN1_OCTET_STRING_free (os);
+ ASN1_STRING_free (os);
*pp = p;
return (ret);
}
}
certs = sk_X509_new_null ();
- if (store && store->objs)
+
+ if (store && X509_STORE_get0_objects(store))
{
- for (inx = 0; inx < sk_X509_OBJECT_num (store->objs); inx++)
+ STACK_OF(X509_OBJECT) *store_objs = X509_STORE_get0_objects(store);
+
+ for (inx = 0; inx < sk_X509_OBJECT_num (store_objs); inx++)
{
- X509_OBJECT *obj = sk_X509_OBJECT_value (store->objs, inx);
- if (obj->type == X509_LU_X509)
- sk_X509_push (certs, X509_dup (obj->data.x509));
+ X509_OBJECT *obj = sk_X509_OBJECT_value (store_objs, inx);
+ if (X509_OBJECT_get_type(obj) == X509_LU_X509)
+ sk_X509_push (certs, X509_dup (X509_OBJECT_get0_X509(obj)));
}
}
+
if (store)
X509_STORE_free (store);
in_bio = BIO_new_mem_buf (msg, box_length (msg) - 1);
sqlr_new_error ("42000", "CR006", "No recipient certificates");
certs = sk_X509_new_null ();
- if (store && store->objs)
+
+ if (store && X509_STORE_get0_objects(store))
{
- for (inx = 0; inx < sk_X509_OBJECT_num (store->objs); inx++)
+ STACK_OF(X509_OBJECT) *store_objs = X509_STORE_get0_objects(store);
+
+ for (inx = 0; inx < sk_X509_OBJECT_num (store_objs); inx++)
{
- X509_OBJECT *obj = sk_X509_OBJECT_value (store->objs, inx);
- if (obj->type == X509_LU_X509)
- sk_X509_push (certs, X509_dup (obj->data.x509));
+ X509_OBJECT *obj = sk_X509_OBJECT_value (store_objs, inx);
+ if (X509_OBJECT_get_type(obj) == X509_LU_X509)
+ sk_X509_push (certs, X509_dup (X509_OBJECT_get0_X509(obj)));
}
}
+
if (store)
X509_STORE_free (store);
in_bio = BIO_new_mem_buf (msg, box_length (msg) - 1);
char *opts = (char *) X509_STORE_CTX_get_app_data (ctx);
if (!ok && opts)
{
- switch (ctx->error)
+ switch (X509_STORE_CTX_get_error(ctx))
{
case X509_V_ERR_CERT_HAS_EXPIRED:
if (strstr (opts, "expired"))
if (!i)
{
const char *err_str;
- err_str = X509_verify_cert_error_string (csc->error);
+ err_str = X509_verify_cert_error_string (X509_STORE_CTX_get_error(csc));
*err_ret = srv_make_new_error ("22023", "CR015", "X509 error: %s", err_str);
}
#define VIRT_CERT_EXT "2.16.840.1.1113.1"
static caddr_t
-BN_box (BIGNUM * x)
+BN_box (const BIGNUM *x)
{
size_t buf_len, n;
caddr_t buf;
buf_len = (size_t) BN_num_bytes (x);
- if (buf_len <= BN_BYTES)
- buf = box_num ((unsigned long) x->d[0]);
- else
- {
- buf = dk_alloc_box (buf_len, DV_BIN);
- n = BN_bn2bin (x, (unsigned char *) buf);
- if (n != buf_len)
- GPF_T;
- }
+ /* did not figure out where buf is free()ed */
+ buf = dk_alloc_box (buf_len, DV_BIN);
+ n = BN_bn2bin (x, (unsigned char *) buf);
+ if (n != buf_len)
+ GPF_T;
return buf;
}
int i;
char tmp[1024];
char *ext_oid = (char *) (BOX_ELEMENTS (args) > 4 ? bif_string_arg (qst, args, 4, "get_certificate_info") : VIRT_CERT_EXT);
- STACK_OF (X509_EXTENSION) * exts = cert->cert_info->extensions;
+ const STACK_OF (X509_EXTENSION) * exts = X509_get0_extensions(cert);
for (i = 0; i < sk_X509_EXTENSION_num (exts); i++)
{
X509_EXTENSION *ex = sk_X509_EXTENSION_value (exts, i);
char *data_ptr;
BIO *mem = BIO_new (BIO_s_mem ());
if (!X509V3_EXT_print (mem, ex, 0, 0))
- M_ASN1_OCTET_STRING_print (mem, ex->value);
+ ASN1_STRING_print (mem, X509_EXTENSION_get_data(ex));
len = BIO_get_mem_data (mem, &data_ptr);
if (len > 0 && data_ptr)
{
if (k)
{
#ifdef EVP_PKEY_RSA
- if (k->type == EVP_PKEY_RSA)
+ if (EVP_PKEY_id(k) == EVP_PKEY_RSA)
{
- RSA *x = k->pkey.rsa;
- ret = list (3, box_dv_short_string ("RSAPublicKey"), BN_box (x->e), BN_box (x->n));
+ const BIGNUM *n, *e;
+
+ RSA_get0_key(EVP_PKEY_get0_RSA(k), &n, &e, NULL);
+
+ ret = list (3, box_dv_short_string ("RSAPublicKey"), BN_box (e), BN_box (n));
}
else
#endif
#ifdef EVP_PKEY_DSA
- if (k->type == EVP_PKEY_DSA)
+ if (EVP_PKEY_id(k) == EVP_PKEY_DSA)
{
- DSA *x = k->pkey.dsa;
- ret = list (2, box_dv_short_string ("DSAPublicKey"), BN_box (x->pub_key));
+ const BIGNUM *pub_key;
+
+ DSA_get0_key(EVP_PKEY_get0_DSA(k), &pub_key, NULL);
+ ret = list (2, box_dv_short_string ("DSAPublicKey"), BN_box (pub_key));
}
else
#endif
int n, i, len;
char *s, *data_ptr;
BIO *mem = BIO_new (BIO_s_mem ());
- for (i = 0; NULL != subj && i < sk_X509_NAME_ENTRY_num(subj->entries); i++)
+
+ for (i = 0; NULL != subj && i < X509_NAME_entry_count(subj); i++)
{
- ne = sk_X509_NAME_ENTRY_value(subj->entries,i);
- n = OBJ_obj2nid (ne->object);
+ ne = X509_NAME_get_entry(subj, i);
+ n = OBJ_obj2nid (X509_NAME_ENTRY_get_object(ne));
if ((n == NID_undef) || ((s = OBJ_nid2sn (n)) == NULL))
{
- i2t_ASN1_OBJECT (buffer, sizeof (buffer), ne->object);
+ i2t_ASN1_OBJECT (buffer, sizeof (buffer), X509_NAME_ENTRY_get_object(ne));
s = buffer;
}
if (!strcmp (s, attr))
break;
}
}
+
if (ne_ret)
{
- ASN1_STRING_print (mem, ne_ret->value);
+ ASN1_STRING_print (mem, X509_NAME_ENTRY_get_data(ne_ret));
len = BIO_get_mem_data (mem, &data_ptr);
if (len > 0 && data_ptr)
{
dk_set_t set = NULL;
caddr_t val;
BIO *mem = BIO_new (BIO_s_mem ());
- for (i = 0; NULL != subj && i < sk_X509_NAME_ENTRY_num(subj->entries); i++)
+
+ for (i = 0; NULL != subj && i < X509_NAME_entry_count(subj); i++)
{
val = NULL;
- ne = sk_X509_NAME_ENTRY_value(subj->entries,i);
- n = OBJ_obj2nid (ne->object);
+ ne = X509_NAME_get_entry(subj, i);
+ n = OBJ_obj2nid (X509_NAME_ENTRY_get_object(ne));
if ((n == NID_undef) || ((s = OBJ_nid2sn (n)) == NULL))
{
- i2t_ASN1_OBJECT (buffer, sizeof (buffer), ne->object);
+ i2t_ASN1_OBJECT (buffer, sizeof (buffer), X509_NAME_ENTRY_get_object(ne));
s = buffer;
}
- ASN1_STRING_print (mem, ne->value);
+ ASN1_STRING_print (mem, X509_NAME_ENTRY_get_data(ne));
len = BIO_get_mem_data (mem, &data_ptr);
if (len > 0 && data_ptr)
{
}
BIO_free (mem);
ret = list_to_array (dk_set_nreverse (set));
+
break;
}
default:
log_error ("SSL: The stored certificate '%s' can not be used as extra chain certificate", tok);
break;
}
- CRYPTO_add(&k->xek_x509->references, 1, CRYPTO_LOCK_X509);
+ X509_up_ref(k->xek_x509);
tok = strtok_r (NULL, ",", &tok_s);
}
dk_free_box (str);
}
-static void
-genrsa_cb(int p, int n, void *arg)
-{
-#ifdef LINT
- p=n;
-#endif
-}
-
int
__xenc_key_rsa_init (char *name)
{
RSA *rsa = NULL;
- int num=1024;
- unsigned long f4=RSA_F4;
+ BIGNUM *bn = NULL;
int r;
+
xenc_key_t * pkey = xenc_get_key_by_name (name, 1);
if (NULL == pkey)
SQLR_NEW_KEY_ERROR (name);
- rsa=RSA_generate_key(num,f4,genrsa_cb,NULL);
+ rsa = RSA_new();
+ if (!rsa)
+ goto out;
+ bn = BN_new();
+ if (!bn)
+ goto out;
+ if (!BN_set_word(bn, RSA_F4))
+ goto out;
+
+ if (!RSA_generate_key_ex(rsa, 1024, bn, NULL))
+ goto out;
+
r = RSA_check_key(rsa);
+ if (r != 1)
+ goto out;
pkey->ki.rsa.pad = RSA_PKCS1_PADDING;
- if (rsa == NULL)
- {
- sqlr_new_error ("42000", "XENC06",
- "RSA parameters generation error");
- }
pkey->xek_rsa = rsa;
pkey->xek_private_rsa = rsa;
+ BN_free(bn);
return 0;
+out:
+ if (bn)
+ BN_free(bn);
+ if (rsa)
+ RSA_free(rsa);
+ sqlr_new_error ("42000", "XENC06",
+ "RSA parameters generation error");
+ return -1;
}
if (pkey)
{
- switch (EVP_PKEY_type (pkey->type))
+ switch (EVP_PKEY_type (EVP_PKEY_id(pkey)))
{
case EVP_PKEY_DSA:
sign_algoname = DSIG_DSA_SHA1_ALGO;
enc_algoname = XENC_DSA_ALGO;
- dsa = pkey->pkey.dsa;
- private_dsa = private_key ? private_key->pkey.dsa : 0;
+ dsa = EVP_PKEY_get0_DSA(pkey);
+ private_dsa = private_key ? EVP_PKEY_get0_DSA(private_key) : 0;
break;
case EVP_PKEY_RSA:
sign_algoname = DSIG_RSA_SHA1_ALGO;
enc_algoname = XENC_RSA_ALGO;
- rsa = pkey->pkey.rsa;
- private_rsa = private_key ? private_key->pkey.rsa : 0;
+ rsa = EVP_PKEY_get0_RSA(pkey);
+ private_rsa = private_key ? EVP_PKEY_get0_RSA(private_key) : 0;
break;
default:
goto finish;
return k;
}
-static void dh_cb(int p, int n, void *arg)
-{
-#ifdef LINT
- p=n;
-#endif
-}
-
static /*xenc_key_DSA_create */
caddr_t bif_xenc_key_dsa_create (caddr_t * qst, caddr_t * err_r, state_slot_t ** args)
{
dh = DH_new ();
bn_p = BN_bin2bn ((unsigned char *)mod, p_len, NULL);
bn_g = BN_bin2bn (g_bin, 1, NULL);
- dh->p = bn_p;
- dh->g = bn_g;
+ if (dh)
+ DH_set0_pqg(dh, bn_p, NULL, bn_g);
dk_free_box (mod_b64);
dk_free_box (mod);
}
else
{
- dh = DH_generate_parameters (num, g, dh_cb, NULL);
+ dh = DH_new();
+ if (dh) {
+ if (!DH_generate_parameters_ex(dh, num, g, NULL)) {
+ DH_free(dh);
+ dh = NULL;
+ }
+ }
}
if (!dh)
{
int n, len;
caddr_t buf = NULL, ret, b64;
DH *dh;
- BIGNUM *num;
+ const BIGNUM *num;
mutex_enter (xenc_keys_mtx);
key = xenc_get_key_by_name (name, 0);
switch (param)
{
case 1:
- num = dh->p;
+ DH_get0_pqg(dh, &num, NULL, NULL);
break;
case 2:
- num = dh->g;
+ DH_get0_pqg(dh, NULL, NULL, &num);
break;
case 3:
- num = dh->pub_key;
+ DH_get0_key(dh, &num, NULL);
break;
case 4:
- num = dh->priv_key;
+ DH_get0_key(dh, NULL, &num);
break;
default:
- num = dh->pub_key;
+ DH_get0_key(dh, &num, NULL);
}
buf_len = (size_t)BN_num_bytes(num);
if (!algo)
len = 0;
else if (!strcmp (algo, XENC_TRIPLEDES_ALGO))
- len = 3 * sizeof (des_cblock);
+ len = 3 * sizeof (DES_cblock);
else if (!strcmp (algo, XENC_AES128_ALGO))
len = 128;
else if (!strcmp (algo, XENC_AES256_ALGO))
xenc_key_t * k;
caddr_t name = bif_string_arg (qst, args, 0, "xenc_key_RSA_create");
int num = (int) bif_long_arg (qst, args, 1, "xenc_key_RSA_create");
- RSA *rsa = NULL;
+ RSA *rsa;
+ BIGNUM *bn;
EVP_PKEY *pk = NULL;
+ rsa = RSA_new();
+ bn = BN_new();
+ if (!rsa || !bn)
+ goto out;
+ if (!BN_set_word(bn, RSA_F4))
+ goto out;
+
mutex_enter (xenc_keys_mtx);
if (NULL == (k = xenc_key_create (name, XENC_RSA_ALGO , DSIG_RSA_SHA1_ALGO, 0)))
{
SQLR_NEW_KEY_EXIST_ERROR (name);
}
- rsa = RSA_generate_key (num, RSA_F4, NULL, NULL);
-
- if (rsa == NULL)
- {
- sqlr_new_error ("42000", "XENC06", "RSA generation error");
- }
+ if (!RSA_generate_key_ex (rsa, num, bn, NULL)) {
+ mutex_leave (xenc_keys_mtx);
+ goto out;
+ }
+ BN_free(bn);
k->xek_rsa = RSAPublicKey_dup (rsa);
k->xek_private_rsa = rsa;
mutex_leave (xenc_keys_mtx);
return NULL;
+out:
+ if (bn)
+ BN_free(bn);
+ if (rsa)
+ RSA_free(rsa);
+ sqlr_new_error ("42000", "XENC06", "RSA generation error");
+ return NULL;
}
xenc_key_t *
{
xenc_key_t * key;
P_SHA1_CTX * psha1;
- des_cblock _key[5];
+ DES_cblock _key[5];
int key_len = 0;
caddr_t * utok_opts = (caddr_t *) xenc_get_option (ctx->wc_opts, "UsernameToken", NULL);
caddr_t key_algo = xenc_get_option (utok_opts, "keyAlgorithm", XENC_TRIPLEDES_ALGO);
memset (&key->ki.triple_des.ks3, 0, sizeof (key->ki.triple_des.ks3));
memset (&key->ki.triple_des.iv, 0, sizeof (key->ki.triple_des.iv));
- des_set_key_unchecked(&_key[0], key->ki.triple_des.ks1);
- des_set_key_unchecked(&_key[1], key->ki.triple_des.ks2);
- des_set_key_unchecked(&_key[2], key->ki.triple_des.ks3);
+ DES_set_key_unchecked(&_key[0], &key->ki.triple_des.ks1);
+ DES_set_key_unchecked(&_key[1], &key->ki.triple_des.ks2);
+ DES_set_key_unchecked(&_key[2], &key->ki.triple_des.ks3);
- memcpy (key->ki.triple_des.k1, &_key[0], sizeof (des_cblock));
- memcpy (key->ki.triple_des.k2, &_key[1], sizeof (des_cblock));
- memcpy (key->ki.triple_des.k3, &_key[2], sizeof (des_cblock));
+ memcpy (key->ki.triple_des.k1, &_key[0], sizeof (DES_cblock));
+ memcpy (key->ki.triple_des.k2, &_key[1], sizeof (DES_cblock));
+ memcpy (key->ki.triple_des.k3, &_key[2], sizeof (DES_cblock));
break;
}
#ifdef AES_ENC_ENABLE
SQLR_NEW_KEY_ERROR (name);
RAND_poll ();
- dsa = DSA_generate_parameters(num, NULL, 0, NULL, NULL, dh_cb, NULL);
+ dsa = DSA_new();
+ if (dsa) {
+ if (!DSA_generate_parameters_ex(dsa, num, NULL, 0, NULL, NULL, NULL)) {
+ DSA_free(dsa);
+ dsa = NULL;
+ }
+ }
if (dsa == NULL)
{
sqlr_new_error ("42000", "XENC11",
if (NULL == pkey)
SQLR_NEW_KEY_ERROR (name);
- dh = DH_generate_parameters (num, g, dh_cb, NULL);
+ dh = DH_new();
+ if (dh) {
+ if (!DH_generate_parameters_ex(dh, num, g, NULL)) {
+ DH_free(dh);
+ dh = NULL;
+ }
+ }
if (!dh)
{
sqlr_new_error ("42000", "XENC11",
int __xenc_key_3des_init (char *name, char *pwd, int lock)
{
char _key[KEYSIZB+1];
- des_cblock key[3];
+ DES_cblock key[3];
xenc_key_t * pkey = xenc_get_key_by_name (name, lock);
if (NULL == pkey)
(unsigned char *)_key,
strlen(_key), 1, (unsigned char*) &key[0], pkey->ki.triple_des.iv);
- des_set_key_unchecked(&key[0], pkey->ki.triple_des.ks1);
- des_set_key_unchecked(&key[1], pkey->ki.triple_des.ks2);
- des_set_key_unchecked(&key[2], pkey->ki.triple_des.ks3);
+ DES_set_key_unchecked(&key[0], &pkey->ki.triple_des.ks1);
+ DES_set_key_unchecked(&key[1], &pkey->ki.triple_des.ks2);
+ DES_set_key_unchecked(&key[2], &pkey->ki.triple_des.ks3);
- memcpy (pkey->ki.triple_des.k1, &key[0], sizeof (des_cblock));
- memcpy (pkey->ki.triple_des.k2, &key[1], sizeof (des_cblock));
- memcpy (pkey->ki.triple_des.k3, &key[2], sizeof (des_cblock));
+ memcpy (pkey->ki.triple_des.k1, &key[0], sizeof (DES_cblock));
+ memcpy (pkey->ki.triple_des.k2, &key[1], sizeof (DES_cblock));
+ memcpy (pkey->ki.triple_des.k3, &key[2], sizeof (DES_cblock));
xenc_store_key (pkey, lock);
return 0;
void xenc_key_3des_init (xenc_key_t * pkey, unsigned char * k1, unsigned char * k2, unsigned char * k3)
{
- memcpy (pkey->ki.triple_des.k1, k1, sizeof (des_cblock));
- memcpy (pkey->ki.triple_des.k2, k2, sizeof (des_cblock));
- memcpy (pkey->ki.triple_des.k3, k3, sizeof (des_cblock));
+ memcpy (pkey->ki.triple_des.k1, k1, sizeof (DES_cblock));
+ memcpy (pkey->ki.triple_des.k2, k2, sizeof (DES_cblock));
+ memcpy (pkey->ki.triple_des.k3, k3, sizeof (DES_cblock));
- des_set_key_unchecked((const_des_cblock*) k1, pkey->ki.triple_des.ks1);
- des_set_key_unchecked((const_des_cblock*) k2, pkey->ki.triple_des.ks2);
- des_set_key_unchecked((const_des_cblock*) k3, pkey->ki.triple_des.ks3);
+ DES_set_key_unchecked((const_DES_cblock*) k1, &pkey->ki.triple_des.ks1);
+ DES_set_key_unchecked((const_DES_cblock*) k2, &pkey->ki.triple_des.ks2);
+ DES_set_key_unchecked((const_DES_cblock*) k3, &pkey->ki.triple_des.ks3);
}
{
caddr_t name = bif_key_name_arg (qst, args, 0, "xenc_key_3DES_rand_create");
xenc_key_t * k = 0;
- des_cblock k1;
- des_cblock k2;
- des_cblock k3;
- des_key_schedule ks1;
- des_key_schedule ks2;
- des_key_schedule ks3;
-
- des_random_key (&k1);
- des_random_key (&k2);
- des_random_key (&k3);
-
- if ( (des_set_key_checked (&k1, ks1) < 0) ||
- (des_set_key_checked (&k2, ks2) < 0) ||
- (des_set_key_checked (&k3, ks3) < 0) )
+ DES_cblock k1;
+ DES_cblock k2;
+ DES_cblock k3;
+ DES_key_schedule ks1;
+ DES_key_schedule ks2;
+ DES_key_schedule ks3;
+
+ DES_random_key (&k1);
+ DES_random_key (&k2);
+ DES_random_key (&k3);
+
+ if ( (DES_set_key_checked (&k1, &ks1) < 0) ||
+ (DES_set_key_checked (&k2, &ks2) < 0) ||
+ (DES_set_key_checked (&k3, &ks3) < 0) )
GPF_T; /* parity check failed, library error - could not check result of it's own work */
mutex_enter (xenc_keys_mtx);
mutex_leave (xenc_keys_mtx);
SQLR_NEW_KEY_EXIST_ERROR (name);
}
- memcpy (&k->ki.triple_des.k1, &k1, sizeof (des_cblock));
- memcpy (&k->ki.triple_des.k2, &k2, sizeof (des_cblock));
- memcpy (&k->ki.triple_des.k3, &k3, sizeof (des_cblock));
+ memcpy (&k->ki.triple_des.k1, &k1, sizeof (DES_cblock));
+ memcpy (&k->ki.triple_des.k2, &k2, sizeof (DES_cblock));
+ memcpy (&k->ki.triple_des.k3, &k3, sizeof (DES_cblock));
- memcpy (&k->ki.triple_des.ks1, &ks1, sizeof (des_key_schedule));
- memcpy (&k->ki.triple_des.ks2, &ks2, sizeof (des_key_schedule));
- memcpy (&k->ki.triple_des.ks3, &ks3, sizeof (des_key_schedule));
+ memcpy (&k->ki.triple_des.ks1, &ks1, sizeof (DES_key_schedule));
+ memcpy (&k->ki.triple_des.ks2, &ks2, sizeof (DES_key_schedule));
+ memcpy (&k->ki.triple_des.ks3, &ks3, sizeof (DES_key_schedule));
mutex_leave (xenc_keys_mtx);
if (!p)
{
+ const BIGNUM *n, *e;
+
+ RSA_get0_key(r, &n, &e, NULL);
p = RSA_new ();
- p->n = BN_dup (r->n);
- p->e = BN_dup (r->e);
+ RSA_set0_key(p, BN_dup(n), BN_dup(e), NULL);
}
mutex_enter (xenc_keys_mtx);
p = RSA_new ();
n = BN_bin2bn ((unsigned char *) mod, box_length (mod) - 1, NULL);
e = BN_bin2bn ((unsigned char *) exp, box_length (exp) - 1, NULL);
- p->n = n;
- p->e = e;
+ RSA_set0_key(p, n, e, NULL);
if (pexp)
{
pk = RSA_new ();
- pk->d = BN_bin2bn ((unsigned char *) pexp, box_length (pexp) - 1, NULL);
- pk->n = BN_dup (n);
- pk->e = BN_dup (e);
+ RSA_set0_key(p, BN_dup(n),
+ BN_dup(e),
+ BN_bin2bn ((unsigned char *) pexp, box_length (pexp) - 1, NULL));
}
mutex_enter (xenc_keys_mtx);
k = xenc_key_create (name, XENC_RSA_ALGO, DSIG_RSA_SHA1_ALGO, 0);
if (k->xek_type == DSIG_KEY_3DES)
{
- memcpy (in_buf, k->ki.triple_des.k1, sizeof (des_cblock));
- memcpy (in_buf + sizeof (des_cblock), k->ki.triple_des.k2, sizeof (des_cblock));
- memcpy (in_buf + 2*sizeof (des_cblock), k->ki.triple_des.k3, sizeof (des_cblock));
+ memcpy (in_buf, k->ki.triple_des.k1, sizeof (DES_cblock));
+ memcpy (in_buf + sizeof (DES_cblock), k->ki.triple_des.k2, sizeof (DES_cblock));
+ memcpy (in_buf + 2*sizeof (DES_cblock), k->ki.triple_des.k3, sizeof (DES_cblock));
}
else if (k->xek_type == DSIG_KEY_RSA)
{
#endif
}
-xenc_tag_t * xenc_tag_add_child_BN (xenc_tag_t * tag, BIGNUM * bn)
+static xenc_tag_t * xenc_tag_add_child_BN (xenc_tag_t * tag, const BIGNUM * bn)
{
char * buffer = dk_alloc_box (BN_num_bytes (bn), DV_BIN);
char * buffer_base64 = dk_alloc_box (box_length (buffer) * 2, DV_STRING);
caddr_t ** array;
if (key->xek_type == DSIG_KEY_RSA)
{
+ const BIGNUM *rsa_n, *rsa_e;
+
+ RSA_get0_key(key->ki.rsa.rsa_st, &rsa_n, &rsa_e, NULL);
xenc_tag_t * rsakeyval = xenc_tag_create (DSIG_URI, ":RSAKeyValue");
xenc_tag_t * rsamodulus = xenc_tag_create (DSIG_URI, ":Modulus");
xenc_tag_t * rsaexponent = xenc_tag_create (DSIG_URI, ":Exponent");
- xenc_tag_add_child_BN (rsamodulus, key->ki.rsa.rsa_st->n);
- xenc_tag_add_child_BN (rsaexponent, key->ki.rsa.rsa_st->e);
+ xenc_tag_add_child_BN (rsamodulus, rsa_n);
+ xenc_tag_add_child_BN (rsaexponent, rsa_e);
xenc_tag_add_child (rsakeyval, xenc_tag_finalize (rsamodulus));
xenc_tag_add_child (rsakeyval, xenc_tag_finalize (rsaexponent));
xenc_tag_t * g = xenc_tag_create (DSIG_URI, ":G");
xenc_tag_t * y = xenc_tag_create (DSIG_URI, ":Y");
DSA * dsa = key->ki.dsa.dsa_st;
+ const BIGNUM *dsa_p, *dsa_q, *dsa_g, *dsa_pub_key;
+ DSA_get0_pqg(dsa, &dsa_p, &dsa_q, &dsa_g);
+ DSA_get0_key(dsa, &dsa_pub_key, NULL);
- xenc_tag_add_child_BN (p, dsa->p);
- xenc_tag_add_child_BN (p, dsa->q);
- xenc_tag_add_child_BN (p, dsa->g);
- xenc_tag_add_child_BN (p, dsa->pub_key);
+ xenc_tag_add_child_BN (p, dsa_p);
+ xenc_tag_add_child_BN (p, dsa_q);
+ xenc_tag_add_child_BN (p, dsa_g);
+ xenc_tag_add_child_BN (p, dsa_pub_key);
xenc_tag_add_child (dsakeyval, xenc_tag_finalize (p));
xenc_tag_add_child (dsakeyval, xenc_tag_finalize (q));
xenc_des3_decryptor (out, strses_length (out), in, key, &t);
key_data_2 = strses_string (in);
- if (memcmp (key_data, key_data_2, 3 * sizeof (des_cblock)))
+ if (memcmp (key_data, key_data_2, 3 * sizeof (DES_cblock)))
xenc_assert (0);
dk_free_box (key_data_2);
dk_free_box (key_data);
new_key = xenc_build_encrypted_key ("virtdev_test_rest", in, XENC_TRIPLEDES_ALGO, &t);
if (memcmp (new_key->ki.triple_des.k1,
- key->ki.triple_des.k1, sizeof (des_cblock)))
+ key->ki.triple_des.k1, sizeof (DES_cblock)))
xenc_assert (0);
if (memcmp (new_key->ki.triple_des.k2,
- key->ki.triple_des.k2, sizeof (des_cblock)))
+ key->ki.triple_des.k2, sizeof (DES_cblock)))
xenc_assert (0);
if (memcmp (new_key->ki.triple_des.k3,
- key->ki.triple_des.k3, sizeof (des_cblock)))
+ key->ki.triple_des.k3, sizeof (DES_cblock)))
xenc_assert (0);
strses_flush (in);
ret = dk_alloc_box (ikeyid->length, DV_BIN);
memcpy (ret, ikeyid->data, ikeyid->length);
- M_ASN1_OCTET_STRING_free(ikeyid);
+ ASN1_STRING_free(ikeyid);
return ret;
}
ret = dk_alloc_box (ikeyid->length, DV_BIN);
memcpy (ret, ikeyid->data, ikeyid->length);
- M_ASN1_OCTET_STRING_free(ikeyid);
+ ASN1_STRING_free(ikeyid);
return ret;
}
sk_X509_EXTENSION_push(st_exts, ex);
}
X509_REQ_add_extensions(x, st_exts);
- if (!X509_REQ_sign (x, pk, (pk->type == EVP_PKEY_RSA ? EVP_md5() : EVP_dss1())))
+ if (!X509_REQ_sign (x, pk, (EVP_PKEY_id(pk) == EVP_PKEY_RSA ? EVP_md5() : EVP_sha1())))
{
pk = NULL; /* keep one in the xenc_key */
*err_ret = srv_make_new_error ("42000", "XECXX", "Can not sign certificate : %s", get_ssl_error_text (buf, sizeof (buf)));
sqlr_warning ("01V01", "QW001", "Unknown extension entry");
}
- if (!X509_sign (x, pk, (pk->type == EVP_PKEY_RSA ? EVP_md5() : EVP_dss1()) ))
+ if (!X509_sign (x, pk, (EVP_PKEY_id(pk) == EVP_PKEY_RSA ? EVP_md5() : EVP_sha1()) ))
{
pk = NULL; /* keep one in the xenc_key */
*err_ret = srv_make_new_error ("42000", "XECXX", "Can not sign certificate");
goto err;
}
- switch (EVP_PKEY_type (cli_pk->type))
+ switch (EVP_PKEY_type (EVP_PKEY_id(cli_pk)))
{
case EVP_PKEY_DSA:
sign_algoname = DSIG_DSA_SHA1_ALGO;
enc_algoname = XENC_DSA_ALGO;
- dsa = cli_pk->pkey.dsa;
+ dsa = EVP_PKEY_get0_DSA(cli_pk);
break;
case EVP_PKEY_RSA:
sign_algoname = DSIG_RSA_SHA1_ALGO;
enc_algoname = XENC_RSA_ALGO;
- rsa = cli_pk->pkey.rsa;
+ rsa = EVP_PKEY_get0_RSA(cli_pk);
break;
default:
*err_ret = srv_make_new_error ("42000", "XECXX", "The type of public key is not supported mus tbe RSA or DSA");
{
k = X509_get_pubkey (key->xek_x509);
#ifdef EVP_PKEY_RSA
- if (k->type == EVP_PKEY_RSA)
+ if (EVP_PKEY_id(k) == EVP_PKEY_RSA)
{
- RSA * x = k->pkey.rsa;
+ RSA *x = EVP_PKEY_get0_RSA(k);
PEM_write_bio_RSA_PUBKEY (b, x);
}
#endif
#ifdef EVP_PKEY_DSA
- if (k->type == EVP_PKEY_DSA)
+ if (EVP_PKEY_id(k) == EVP_PKEY_DSA)
{
- DSA * x = k->pkey.dsa;
+ DSA * x = EVP_PKEY_get0_DSA(k);
PEM_write_bio_DSA_PUBKEY (b, x);
}
#endif
{
k = X509_get_pubkey (key->xek_x509);
#ifdef EVP_PKEY_RSA
- if (k->type == EVP_PKEY_RSA)
+ if (EVP_PKEY_id(k) == EVP_PKEY_RSA)
{
- RSA * x = k->pkey.rsa;
+ RSA * x = EVP_PKEY_get0_RSA(k);
i2d_RSA_PUBKEY_bio (b, x);
}
#endif
#ifdef EVP_PKEY_DSA
- if (k->type == EVP_PKEY_DSA)
+ if (EVP_PKEY_id(k) == EVP_PKEY_DSA)
{
- DSA * x = k->pkey.dsa;
+ DSA * x = EVP_PKEY_get0_DSA(k);
i2d_DSA_PUBKEY_bio (b, x);
}
#endif
}
static caddr_t
-BN2binbox (BIGNUM * x)
+BN2binbox (const BIGNUM * x)
{
size_t buf_len, n;
caddr_t buf;
xenc_rsa_pub_magic (RSA * x)
{
caddr_t ret;
- caddr_t n = BN2binbox (x->n); /* modulus */
- caddr_t e = BN2binbox (x->e); /* public exponent */
+ caddr_t n;
+ caddr_t e;
+ const BIGNUM *rsa_n, *rsa_e;
+
+ RSA_get0_key(x, &rsa_n, &rsa_e, NULL);
+ n = BN2binbox (rsa_n); /* modulus */
+ e = BN2binbox (rsa_e); /* public exponent */
+
n = xenc_encode_base64_binbox (n, 1);
e = xenc_encode_base64_binbox (e, 1);
ret = dk_alloc_box (box_length (n) + box_length (e) + 4 /* two dots - one trailing zero + RSA prefix */, DV_STRING);
{
k = X509_get_pubkey (key->xek_x509);
#ifdef EVP_PKEY_RSA
- if (k->type == EVP_PKEY_RSA)
+ if (EVP_PKEY_id(k) == EVP_PKEY_RSA)
{
- RSA * x = k->pkey.rsa;
+ RSA * x = EVP_PKEY_get0_RSA(k);
ret = xenc_rsa_pub_magic (x);
}
#endif
xenc_rsa_pub_ssh_export (RSA * x)
{
static char * ssh_header = "\x00\x00\x00\x07ssh-rsa";
+ const BIGNUM *rsa_n, *rsa_e;
caddr_t ret;
int len, pos;
- caddr_t n = BN2binbox (x->n); /* modulus */
- caddr_t e = BN2binbox (x->e); /* public exponent */
+ caddr_t n;
+ caddr_t e;
+
+ RSA_get0_key(x, &rsa_n, &rsa_e, NULL);
+ n = BN2binbox (rsa_n); /* modulus */
+ e = BN2binbox (rsa_e); /* public exponent */
+
len = 11 + 8 + box_length (n) + box_length (e);
if (n[0] & 0x80)
len ++;
{
k = X509_get_pubkey (key->xek_x509);
#ifdef EVP_PKEY_RSA
- if (k->type == EVP_PKEY_RSA)
+ if (EVP_PKEY_id(k) == EVP_PKEY_RSA)
{
- RSA * x = k->pkey.rsa;
+ RSA * x = EVP_PKEY_get0_RSA(k);
ret = xenc_rsa_pub_ssh_export (x);
}
#endif
return NULL;
}
pk = NETSCAPE_SPKI_get_pubkey (spki);
- if (!pk || pk->type != EVP_PKEY_RSA)
+ if (!pk || EVP_PKEY_id(pk) != EVP_PKEY_RSA)
{
NETSCAPE_SPKI_free (spki);
*err_ret = srv_make_new_error ("42000", "XECXX", "Can not retrieve RSA key");
#include <openssl/dsa.h>
#include <openssl/rsa.h>
#include <openssl/des.h>
+#include <openssl/hmac.h>
#ifdef AES_ENC_ENABLE
#include <openssl/aes.h>
} dsa;
struct dsig_des3_keyinfo_s
{
- des_cblock k1;
- des_cblock k2;
- des_cblock k3;
+ DES_cblock k1;
+ DES_cblock k2;
+ DES_cblock k3;
- des_key_schedule ks1;/* key schedule */
- des_key_schedule ks2;/* key schedule (for ede) */
- des_key_schedule ks3;/* key schedule (for ede3) */
+ DES_key_schedule ks1;/* key schedule */
+ DES_key_schedule ks2;/* key schedule (for ede) */
+ DES_key_schedule ks3;/* key schedule (for ede3) */
- des_cblock iv;
+ DES_cblock iv;
#define PKCS5_SALT_LEN 8
unsigned char salt[PKCS5_SALT_LEN];
} triple_des;
extern dk_mutex_t * xenc_keys_mtx;
+#if OPENSSL_VERSION_NUMBER < 0x10100000
+
+static inline HMAC_CTX *HMAC_CTX_new(void)
+{
+ HMAC_CTX *p;
+
+ p = calloc(1, sizeof(HMAC_CTX));
+ if (!p)
+ return p;
+ HMAC_CTX_init(p);
+ return p;
+}
+
+static inline void HMAC_CTX_free(HMAC_CTX *ctx)
+{
+ HMAC_CTX_cleanup(ctx);
+ free(ctx);
+}
+
+static inline void RSA_get0_key(const RSA *r, const BIGNUM **n,
+ const BIGNUM **e, const BIGNUM **d)
+{
+ if (n != NULL)
+ *n = r->n;
+ if (e != NULL)
+ *e = r->e;
+ if (d != NULL)
+ *d = r->d;
+}
+
+static inline void RSA_get0_factors(const RSA *r, const BIGNUM **p,
+ const BIGNUM **q)
+{
+ if (p != NULL)
+ *p = r->p;
+ if (q != NULL)
+ *q = r->q;
+}
+
+static inline RSA *EVP_PKEY_get0_RSA(EVP_PKEY *pkey)
+{
+ if (pkey->type != EVP_PKEY_RSA)
+ return NULL;
+ return pkey->pkey.rsa;
+}
+
+static inline void DH_get0_key(const DH *dh, const BIGNUM **pub_key,
+ const BIGNUM **priv_key)
+{
+ if (pub_key != NULL)
+ *pub_key = dh->pub_key;
+ if (priv_key != NULL)
+ *priv_key = dh->priv_key;
+}
+
+
+static inline void DH_get0_pqg(const DH *dh, const BIGNUM **p, const BIGNUM **q,
+ const BIGNUM **g)
+{
+ if (p != NULL)
+ *p = dh->p;
+ if (q != NULL)
+ *q = dh->q;
+ if (g != NULL)
+ *g = dh->g;
+}
+
+static inline DSA *EVP_PKEY_get0_DSA(EVP_PKEY *pkey)
+{
+ if (pkey->type != EVP_PKEY_DSA)
+ return NULL;
+ return pkey->pkey.dsa;
+}
+
+static inline int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g)
+{
+ /* If the fields p and g in d are NULL, the corresponding input
+ * parameters MUST be non-NULL. q may remain NULL.
+ */
+ if ((dh->p == NULL && p == NULL)
+ || (dh->g == NULL && g == NULL))
+ return 0;
+
+ if (p != NULL) {
+ BN_free(dh->p);
+ dh->p = p;
+ }
+ if (q != NULL) {
+ BN_free(dh->q);
+ dh->q = q;
+ }
+ if (g != NULL) {
+ BN_free(dh->g);
+ dh->g = g;
+ }
+
+ if (q != NULL) {
+ dh->length = BN_num_bits(q);
+ }
+
+ return 1;
+}
+
+static inline int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d)
+{
+ /* If the fields n and e in r are NULL, the corresponding input
+ * parameters MUST be non-NULL for n and e. d may be
+ * left NULL (in case only the public key is used).
+ */
+ if ((r->n == NULL && n == NULL)
+ || (r->e == NULL && e == NULL))
+ return 0;
+
+ if (n != NULL) {
+ BN_free(r->n);
+ r->n = n;
+ }
+ if (e != NULL) {
+ BN_free(r->e);
+ r->e = e;
+ }
+ if (d != NULL) {
+ BN_free(r->d);
+ r->d = d;
+ }
+
+ return 1;
+}
+
+static inline void DSA_get0_pqg(const DSA *d, const BIGNUM **p,
+ const BIGNUM **q, const BIGNUM **g)
+{
+ if (p != NULL)
+ *p = d->p;
+ if (q != NULL)
+ *q = d->q;
+ if (g != NULL)
+ *g = d->g;
+}
+
+static inline void DSA_get0_key(const DSA *d, const BIGNUM **pub_key,
+ const BIGNUM **priv_key)
+{
+ if (pub_key != NULL)
+ *pub_key = d->pub_key;
+ if (priv_key != NULL)
+ *priv_key = d->priv_key;
+}
+
+static inline const STACK_OF(X509_EXTENSION) *X509_get0_extensions(const X509 *x)
+{
+ return x->cert_info->extensions;
+}
+
+static inline int X509_up_ref(X509 *x)
+{
+ return CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509);
+}
+
+static inline STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(X509_STORE *v)
+{
+ return v->objs;
+}
+
+static inline int X509_OBJECT_get_type(const X509_OBJECT *a)
+{
+ return a->type;
+}
+
+static inline X509 *X509_OBJECT_get0_X509(const X509_OBJECT *a)
+{
+ if (a == NULL || a->type != X509_LU_X509)
+ return NULL;
+ return a->data.x509;
+}
+
+#endif
+
#endif
dsig_hmac_sha256_digest (dk_session_t * ses_in, long len, xenc_key_t * key, caddr_t * sign_out)
{
unsigned char * data;
- HMAC_CTX ctx;
+ HMAC_CTX *ctx;
unsigned char key_data[32 * 8];
unsigned char md [SHA256_DIGEST_LENGTH + 1];
unsigned char md64 [SHA256_DIGEST_LENGTH * 2 + 1];
if (NULL == key)
return 0;
-
switch (key->xek_type)
{
case DSIG_KEY_3DES:
- memcpy (key_data, key->ki.triple_des.k1, sizeof (des_cblock));
- memcpy (key_data + 8, key->ki.triple_des.k2, sizeof (des_cblock));
- memcpy (key_data + 16, key->ki.triple_des.k3, sizeof (des_cblock));
- key_len = 3 * sizeof (des_cblock);
+ memcpy (key_data, key->ki.triple_des.k1, sizeof (DES_cblock));
+ memcpy (key_data + 8, key->ki.triple_des.k2, sizeof (DES_cblock));
+ memcpy (key_data + 16, key->ki.triple_des.k3, sizeof (DES_cblock));
+ key_len = 3 * sizeof (DES_cblock);
break;
#ifdef AES_ENC_ENABLE
case DSIG_KEY_AES:
default:
return 0;
}
-
+ ctx = HMAC_CTX_new();
+ if (!ctx)
+ return 0;
data = (unsigned char *) dk_alloc_box (len, DV_C_STRING);
CATCH_READ_FAIL (ses_in)
FAILED
{
dk_free_box ((box_t) data);
+ HMAC_CTX_free(ctx);
return 0;
}
END_READ_FAIL (ses_in);
- HMAC_Init(&ctx, (void*) key_data , key_len, EVP_sha256 ());
- HMAC_Update(&ctx, data, len);
- HMAC_Final(&ctx, md, &hmac_len);
- HMAC_cleanup(&ctx);
+ HMAC_Init_ex(ctx, (void*) key_data , key_len, EVP_sha256 (), NULL);
+ HMAC_Update(ctx, data, len);
+ HMAC_Final(ctx, md, &hmac_len);
+ HMAC_CTX_free(ctx);
if (hmac_len != SHA256_DIGEST_LENGTH)
GPF_T;
int
dsig_hmac_sha256_verify (dk_session_t * ses_in, long len, xenc_key_t * key, caddr_t digest)
{
- HMAC_CTX ctx;
+ HMAC_CTX *ctx;
unsigned char * data;
unsigned char key_data[3 * 8];
unsigned char md [SHA256_DIGEST_LENGTH + 1];
switch (key->xek_type)
{
case DSIG_KEY_3DES:
- memcpy (key_data, key->ki.triple_des.k1, sizeof (des_cblock));
- memcpy (key_data + 8, key->ki.triple_des.k2, sizeof (des_cblock));
- memcpy (key_data + 16, key->ki.triple_des.k3, sizeof (des_cblock));
- key_len = 3 * sizeof (des_cblock);
+ memcpy (key_data, key->ki.triple_des.k1, sizeof (DES_cblock));
+ memcpy (key_data + 8, key->ki.triple_des.k2, sizeof (DES_cblock));
+ memcpy (key_data + 16, key->ki.triple_des.k3, sizeof (DES_cblock));
+ key_len = 3 * sizeof (DES_cblock);
break;
#ifdef AES_ENC_ENABLE
case DSIG_KEY_AES:
return 0;
}
+ ctx = HMAC_CTX_new();
+ if (!ctx)
+ return 0;
data = (unsigned char *) dk_alloc_box (len, DV_C_STRING);
CATCH_READ_FAIL (ses_in)
FAILED
{
dk_free_box ((box_t) data);
+ HMAC_CTX_free(ctx);
return 0;
}
END_READ_FAIL (ses_in);
- HMAC_Init(&ctx, (void*) key_data , key_len, EVP_sha256 ());
- HMAC_Update(&ctx, data, len);
- HMAC_Final(&ctx, md, &hmac_len);
- HMAC_cleanup(&ctx);
+ HMAC_Init_ex(ctx, (void*) key_data , key_len, EVP_sha256 (), NULL);
+ HMAC_Update(ctx, data, len);
+ HMAC_Final(ctx, md, &hmac_len);
+ HMAC_CTX_free(ctx);
dk_free_box ((box_t) data);
len1 = xenc_encode_base64 ((char *)md, md64, hmac_len);
dsig_hmac_sha1_digest (dk_session_t * ses_in, long len, xenc_key_t * key, caddr_t * sign_out)
{
unsigned char * data;
- HMAC_CTX ctx;
+ HMAC_CTX *ctx;
unsigned char key_data[32 * 8];
unsigned char md [SHA_DIGEST_LENGTH + 1];
unsigned char md64 [SHA_DIGEST_LENGTH * 2 + 1];
switch (key->xek_type)
{
case DSIG_KEY_3DES:
- memcpy (key_data, key->ki.triple_des.k1, sizeof (des_cblock));
- memcpy (key_data + 8, key->ki.triple_des.k2, sizeof (des_cblock));
- memcpy (key_data + 16, key->ki.triple_des.k3, sizeof (des_cblock));
- key_len = 3 * sizeof (des_cblock);
+ memcpy (key_data, key->ki.triple_des.k1, sizeof (DES_cblock));
+ memcpy (key_data + 8, key->ki.triple_des.k2, sizeof (DES_cblock));
+ memcpy (key_data + 16, key->ki.triple_des.k3, sizeof (DES_cblock));
+ key_len = 3 * sizeof (DES_cblock);
break;
#ifdef AES_ENC_ENABLE
case DSIG_KEY_AES:
return 0;
}
+ ctx = HMAC_CTX_new();
+ if (!ctx)
+ return 0;
data = (unsigned char *) dk_alloc_box (len, DV_C_STRING);
CATCH_READ_FAIL (ses_in)
FAILED
{
dk_free_box ((box_t) data);
+ HMAC_CTX_free(ctx);
return 0;
}
END_READ_FAIL (ses_in);
- HMAC_Init(&ctx, (void*) key_data , key_len, EVP_sha1 ());
- HMAC_Update(&ctx, data, len);
- HMAC_Final(&ctx, md, &hmac_len);
- HMAC_cleanup(&ctx);
+ HMAC_Init_ex(ctx, (void*) key_data , key_len, EVP_sha1 (), NULL);
+ HMAC_Update(ctx, data, len);
+ HMAC_Final(ctx, md, &hmac_len);
+ HMAC_CTX_free(ctx);
if (hmac_len != SHA_DIGEST_LENGTH)
GPF_T;
int
dsig_hmac_sha1_verify (dk_session_t * ses_in, long len, xenc_key_t * key, caddr_t digest)
{
- HMAC_CTX ctx;
+ HMAC_CTX *ctx;
unsigned char * data;
unsigned char key_data[3 * 8];
unsigned char md [SHA_DIGEST_LENGTH + 1];
switch (key->xek_type)
{
case DSIG_KEY_3DES:
- memcpy (key_data, key->ki.triple_des.k1, sizeof (des_cblock));
- memcpy (key_data + 8, key->ki.triple_des.k2, sizeof (des_cblock));
- memcpy (key_data + 16, key->ki.triple_des.k3, sizeof (des_cblock));
- key_len = 3 * sizeof (des_cblock);
+ memcpy (key_data, key->ki.triple_des.k1, sizeof (DES_KEY_SZ));
+ memcpy (key_data + 8, key->ki.triple_des.k2, sizeof (DES_KEY_SZ));
+ memcpy (key_data + 16, key->ki.triple_des.k3, sizeof (DES_KEY_SZ));
+ key_len = 3 * sizeof (DES_KEY_SZ);
break;
#ifdef AES_ENC_ENABLE
case DSIG_KEY_AES:
return 0;
}
+ ctx = HMAC_CTX_new();
+ if (!ctx)
+ return 0;
data = (unsigned char *) dk_alloc_box (len, DV_C_STRING);
CATCH_READ_FAIL (ses_in)
FAILED
{
dk_free_box ((box_t) data);
+ HMAC_CTX_free(ctx);
return 0;
}
END_READ_FAIL (ses_in);
- HMAC_Init(&ctx, (void*) key_data , key_len, EVP_sha1 ());
- HMAC_Update(&ctx, data, len);
- HMAC_Final(&ctx, md, &hmac_len);
- HMAC_cleanup(&ctx);
+ HMAC_Init_ex(ctx, (void*) key_data , key_len, EVP_sha1 (), NULL);
+ HMAC_Update(ctx, data, len);
+ HMAC_Final(ctx, md, &hmac_len);
+ HMAC_CTX_free(ctx);
dk_free_box ((box_t) data);
len1 = xenc_encode_base64 ((char *)md, md64, hmac_len);
caddr_t outbuf_beg;
int len;
caddr_t encoded_out;
- EVP_CIPHER_CTX ctx;
+ EVP_CIPHER_CTX *ctx;
unsigned char * ivec = &key->ki.aes.iv[0];
CATCH_READ_FAIL (ses_in)
END_READ_FAIL (ses_in);
#if 1
- EVP_CIPHER_CTX_init(&ctx);
+ ctx = EVP_CIPHER_CTX_new();
outbuf_beg = dk_alloc_box (box_length (text) + 16, DV_BIN);
memcpy (outbuf_beg, ivec, 16);
outbuf = outbuf_beg + 16;
switch (key->ki.aes.bits)
{
case 128:
- EVP_EncryptInit_ex(&ctx, EVP_aes_128_cbc(), NULL, key->ki.aes.k, ivec);
+ EVP_EncryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key->ki.aes.k, ivec);
break;
case 192:
- EVP_EncryptInit_ex(&ctx, EVP_aes_192_cbc(), NULL, key->ki.aes.k, ivec);
+ EVP_EncryptInit_ex(ctx, EVP_aes_192_cbc(), NULL, key->ki.aes.k, ivec);
break;
case 256:
- EVP_EncryptInit_ex(&ctx, EVP_aes_256_cbc(), NULL, key->ki.aes.k, ivec);
+ EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key->ki.aes.k, ivec);
break;
default:
GPF_T1 ("Unsupported key size");
}
- if(!EVP_EncryptUpdate(&ctx, (unsigned char *)outbuf, &outlen, (unsigned char *)text, box_length (text)))
+ if(!EVP_EncryptUpdate(ctx, (unsigned char *)outbuf, &outlen, (unsigned char *)text, box_length (text)))
{
- EVP_CIPHER_CTX_cleanup(&ctx);
dk_free_box (text);
dk_free_box (outbuf_beg);
xenc_report_error (t, 500, XENC_ENC_ERR, "AES encryption internal error #2");
xenc_report_error (t, 500, XENC_ENC_ERR, "AES encryption internal error #3");
} */
/* outlen += tmplen; */
- EVP_CIPHER_CTX_cleanup(&ctx);
+ EVP_CIPHER_CTX_free(ctx);
#else
outbuf_beg = dk_alloc_box (box_length (text) + 16 /* iv */, DV_BIN);
int len = 0;
int keysize;
RSA * rsa = key->xek_private_rsa;
+ const BIGNUM *p, *q;
if (!seslen)
{
xenc_report_error (t, 500 + strlen (key->xek_name), XENC_ENC_ERR, "could not make RSA decryption [key %s is not RSA]", key->xek_name);
return 0;
}
+ RSA_get0_factors(rsa, &p, &q);
if (!rsa ||
- !rsa->p ||
- !rsa->q)
+ !p || !q)
{
if (key->xek_x509_KI)
key = xenc_get_key_by_keyidentifier (key->xek_x509_KI, 1);
}
- des_ede3_cbc_encrypt ((const unsigned char *)buf,
+ DES_ede3_cbc_encrypt ((const unsigned char *)buf,
(unsigned char *)out_buf,
(long)DES_BLOCK_LEN,
- key->ki.triple_des.ks1,
- key->ki.triple_des.ks2,
- key->ki.triple_des.ks3,
- (des_cblock*) _iv,
+ &key->ki.triple_des.ks1,
+ &key->ki.triple_des.ks2,
+ &key->ki.triple_des.ks3,
+ (DES_cblock*) _iv,
DES_ENCRYPT);
total_blocks++;
END_READ_FAIL (ses_in);
for (;!failed;)
{
- des_ede3_cbc_encrypt ((const unsigned char *)buf,
+ DES_ede3_cbc_encrypt ((const unsigned char *)buf,
(unsigned char *)out_buf,
(long)DES_BLOCK_LEN,
key->ki.triple_des.ks1,
char out_buf[DES_BLOCK_LEN + 1];
char *text, *text_beg;
long text_len;
- des_cblock iv;
+ DES_cblock iv;
int blocks;
if (!seslen)
memcpy (buf, text, DES_BLOCK_LEN);
text += DES_BLOCK_LEN;
- des_ede3_cbc_encrypt ((const unsigned char *)buf,
+ DES_ede3_cbc_encrypt ((const unsigned char *)buf,
(unsigned char *)out_buf,
(long)DES_BLOCK_LEN,
- key->ki.triple_des.ks1,
- key->ki.triple_des.ks2,
- key->ki.triple_des.ks3,
+ &key->ki.triple_des.ks1,
+ &key->ki.triple_des.ks2,
+ &key->ki.triple_des.ks3,
&iv,
DES_DECRYPT);
int
ssl_engine_startup (void)
{
- CRYPTO_malloc_init ();
+#if OPENSSL_VERSION_NUMBER < 0x10100000
+ CRYPTO_malloc_init ();
+#else
+ OPENSSL_malloc_init();
+#endif
ERR_load_crypto_strings();
OpenSSL_add_all_algorithms();