Added AES+GHASH implementation using AES-NI opcodes; also ARM-Thumb assembly for faster Montgomery multiplication on Cortex-M0+. Added selection functions for "default" implementations.
This commit is contained in:
parent
556e525d62
commit
5f045c7599
58 changed files with 3012 additions and 395 deletions
|
|
@ -471,6 +471,18 @@ const br_hash_class *get_hash_impl(int id);
|
|||
*/
|
||||
const char *find_error_name(int err, const char **comment);
|
||||
|
||||
/*
|
||||
* Find the symbolic name for an algorithm implementation. Provided
|
||||
* pointer should be a pointer to a vtable or to a function, where
|
||||
* appropriate. If not recognised, then the string "UNKNOWN" is returned.
|
||||
*
|
||||
* If 'long_name' is non-zero, then the returned name recalls the
|
||||
* algorithm type as well; otherwise, only the core implementation name
|
||||
* is returned (e.g. the long name could be 'aes_big_cbcenc' while the
|
||||
* short name is 'big').
|
||||
*/
|
||||
const char *get_algo_name(const void *algo, int long_name);
|
||||
|
||||
/*
|
||||
* Run a SSL engine, with a socket connected to the peer, and using
|
||||
* stdin/stdout to exchange application data.
|
||||
|
|
|
|||
|
|
@ -341,14 +341,16 @@ static uint32_t
|
|||
cc_do_keyx(const br_ssl_client_certificate_class **pctx,
|
||||
unsigned char *data, size_t *len)
|
||||
{
|
||||
const br_ec_impl *iec;
|
||||
ccert_context *zc;
|
||||
size_t xoff, xlen;
|
||||
uint32_t r;
|
||||
|
||||
zc = (ccert_context *)pctx;
|
||||
r = br_ec_all_m15.mul(data, *len, zc->sk->key.ec.x,
|
||||
iec = br_ec_get_default();
|
||||
r = iec->mul(data, *len, zc->sk->key.ec.x,
|
||||
zc->sk->key.ec.xlen, zc->sk->key.ec.curve);
|
||||
xoff = br_ec_all_m15.xoff(zc->sk->key.ec.curve, &xlen);
|
||||
xoff = iec->xoff(zc->sk->key.ec.curve, &xlen);
|
||||
memmove(data, data + xoff, xlen);
|
||||
*len = xlen;
|
||||
return r;
|
||||
|
|
@ -390,8 +392,8 @@ cc_do_sign(const br_ssl_client_certificate_class **pctx,
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
x = br_rsa_i31_pkcs1_sign(hash_oid, hv, hv_len,
|
||||
&zc->sk->key.rsa, data);
|
||||
x = br_rsa_pkcs1_sign_get_default()(
|
||||
hash_oid, hv, hv_len, &zc->sk->key.rsa, data);
|
||||
if (!x) {
|
||||
if (zc->verbose) {
|
||||
fprintf(stderr, "ERROR: RSA-sign failure\n");
|
||||
|
|
@ -418,8 +420,8 @@ cc_do_sign(const br_ssl_client_certificate_class **pctx,
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
sig_len = br_ecdsa_i31_sign_asn1(&br_ec_all_m15,
|
||||
hc, hv, &zc->sk->key.ec, data);
|
||||
sig_len = br_ecdsa_sign_asn1_get_default()(
|
||||
br_ec_get_default(), hc, hv, &zc->sk->key.ec, data);
|
||||
if (sig_len == 0) {
|
||||
if (zc->verbose) {
|
||||
fprintf(stderr, "ERROR: ECDSA-sign failure\n");
|
||||
|
|
@ -946,54 +948,29 @@ do_client(int argc, char *argv[])
|
|||
}
|
||||
/* TODO: algorithm implementation selection */
|
||||
if ((req & REQ_AESCBC) != 0) {
|
||||
br_ssl_engine_set_aes_cbc(&cc.eng,
|
||||
&br_aes_ct_cbcenc_vtable,
|
||||
&br_aes_ct_cbcdec_vtable);
|
||||
br_ssl_engine_set_cbc(&cc.eng,
|
||||
&br_sslrec_in_cbc_vtable,
|
||||
&br_sslrec_out_cbc_vtable);
|
||||
br_ssl_engine_set_default_aes_cbc(&cc.eng);
|
||||
}
|
||||
if ((req & REQ_AESGCM) != 0) {
|
||||
br_ssl_engine_set_aes_ctr(&cc.eng,
|
||||
&br_aes_ct_ctr_vtable);
|
||||
br_ssl_engine_set_ghash(&cc.eng,
|
||||
&br_ghash_ctmul);
|
||||
br_ssl_engine_set_gcm(&cc.eng,
|
||||
&br_sslrec_in_gcm_vtable,
|
||||
&br_sslrec_out_gcm_vtable);
|
||||
br_ssl_engine_set_default_aes_gcm(&cc.eng);
|
||||
}
|
||||
if ((req & REQ_CHAPOL) != 0) {
|
||||
br_ssl_engine_set_chacha20(&cc.eng,
|
||||
&br_chacha20_ct_run);
|
||||
br_ssl_engine_set_poly1305(&cc.eng,
|
||||
&br_poly1305_ctmul_run);
|
||||
br_ssl_engine_set_chapol(&cc.eng,
|
||||
&br_sslrec_in_chapol_vtable,
|
||||
&br_sslrec_out_chapol_vtable);
|
||||
br_ssl_engine_set_default_chapol(&cc.eng);
|
||||
}
|
||||
if ((req & REQ_3DESCBC) != 0) {
|
||||
br_ssl_engine_set_des_cbc(&cc.eng,
|
||||
&br_des_ct_cbcenc_vtable,
|
||||
&br_des_ct_cbcdec_vtable);
|
||||
br_ssl_engine_set_cbc(&cc.eng,
|
||||
&br_sslrec_in_cbc_vtable,
|
||||
&br_sslrec_out_cbc_vtable);
|
||||
br_ssl_engine_set_default_des_cbc(&cc.eng);
|
||||
}
|
||||
if ((req & REQ_RSAKEYX) != 0) {
|
||||
br_ssl_client_set_rsapub(&cc, &br_rsa_i31_public);
|
||||
br_ssl_client_set_default_rsapub(&cc);
|
||||
}
|
||||
if ((req & REQ_ECDHE_RSA) != 0) {
|
||||
br_ssl_engine_set_ec(&cc.eng, &br_ec_all_m15);
|
||||
br_ssl_engine_set_rsavrfy(&cc.eng,
|
||||
&br_rsa_i31_pkcs1_vrfy);
|
||||
br_ssl_engine_set_default_ec(&cc.eng);
|
||||
br_ssl_engine_set_default_rsavrfy(&cc.eng);
|
||||
}
|
||||
if ((req & REQ_ECDHE_ECDSA) != 0) {
|
||||
br_ssl_engine_set_ec(&cc.eng, &br_ec_all_m15);
|
||||
br_ssl_engine_set_ecdsa(&cc.eng,
|
||||
&br_ecdsa_i31_vrfy_asn1);
|
||||
br_ssl_engine_set_default_ecdsa(&cc.eng);
|
||||
}
|
||||
if ((req & REQ_ECDH) != 0) {
|
||||
br_ssl_engine_set_ec(&cc.eng, &br_ec_all_m15);
|
||||
br_ssl_engine_set_default_ec(&cc.eng);
|
||||
}
|
||||
}
|
||||
if (fallback) {
|
||||
|
|
@ -1025,9 +1002,9 @@ do_client(int argc, char *argv[])
|
|||
&br_tls12_sha384_prf);
|
||||
}
|
||||
}
|
||||
br_x509_minimal_set_rsa(&xc, &br_rsa_i31_pkcs1_vrfy);
|
||||
br_x509_minimal_set_rsa(&xc, br_rsa_pkcs1_vrfy_get_default());
|
||||
br_x509_minimal_set_ecdsa(&xc,
|
||||
&br_ec_all_m15, &br_ecdsa_i31_vrfy_asn1);
|
||||
br_ec_get_default(), br_ecdsa_vrfy_asn1_get_default());
|
||||
|
||||
/*
|
||||
* If there is no provided trust anchor, then certificate validation
|
||||
|
|
|
|||
104
tools/names.c
104
tools/names.c
|
|
@ -271,7 +271,7 @@ const cipher_suite cipher_suites[] = {
|
|||
{ NULL, 0, 0, NULL }
|
||||
};
|
||||
|
||||
static struct {
|
||||
static const struct {
|
||||
int id;
|
||||
const char *name;
|
||||
} curves[] = {
|
||||
|
|
@ -338,6 +338,108 @@ static struct {
|
|||
{ 0, 0 }
|
||||
};
|
||||
|
||||
static const struct {
|
||||
const char *long_name;
|
||||
const char *short_name;
|
||||
const void *impl;
|
||||
} algo_names[] = {
|
||||
/* Block ciphers */
|
||||
{ "aes_big_cbcenc", "big", &br_aes_big_cbcenc_vtable },
|
||||
{ "aes_big_cbcdec", "big", &br_aes_big_cbcdec_vtable },
|
||||
{ "aes_big_ctr", "big", &br_aes_big_ctr_vtable },
|
||||
{ "aes_small_cbcenc", "small", &br_aes_small_cbcenc_vtable },
|
||||
{ "aes_small_cbcdec", "small", &br_aes_small_cbcdec_vtable },
|
||||
{ "aes_small_ctr", "small", &br_aes_small_ctr_vtable },
|
||||
{ "aes_ct_cbcenc", "ct", &br_aes_ct_cbcenc_vtable },
|
||||
{ "aes_ct_cbcdec", "ct", &br_aes_ct_cbcdec_vtable },
|
||||
{ "aes_ct_ctr", "ct", &br_aes_ct_ctr_vtable },
|
||||
{ "aes_ct64_cbcenc", "ct64", &br_aes_ct64_cbcenc_vtable },
|
||||
{ "aes_ct64_cbcdec", "ct64", &br_aes_ct64_cbcdec_vtable },
|
||||
{ "aes_ct64_ctr", "ct64", &br_aes_ct64_ctr_vtable },
|
||||
|
||||
{ "des_tab_cbcenc", "tab", &br_des_tab_cbcenc_vtable },
|
||||
{ "des_tab_cbcdec", "tab", &br_des_tab_cbcdec_vtable },
|
||||
{ "des_ct_cbcenc", "ct", &br_des_ct_cbcenc_vtable },
|
||||
{ "des_ct_cbcdec", "ct", &br_des_ct_cbcdec_vtable },
|
||||
|
||||
{ "chacha20_ct", "ct", &br_chacha20_ct_run },
|
||||
|
||||
{ "ghash_ctmul", "ctmul", &br_ghash_ctmul },
|
||||
{ "ghash_ctmul32", "ctmul32", &br_ghash_ctmul32 },
|
||||
{ "ghash_ctmul64", "ctmul64", &br_ghash_ctmul64 },
|
||||
|
||||
{ "poly1305_ctmul", "ctmul", &br_poly1305_ctmul_run },
|
||||
{ "poly1305_ctmul32", "ctmul32", &br_poly1305_ctmul32_run },
|
||||
|
||||
{ "ec_all_m15", "all_m15", &br_ec_all_m15 },
|
||||
{ "ec_all_m31", "all_m31", &br_ec_all_m31 },
|
||||
{ "ec_c25519_i15", "c25519_i15", &br_ec_c25519_i15 },
|
||||
{ "ec_c25519_i31", "c25519_i31", &br_ec_c25519_i31 },
|
||||
{ "ec_c25519_m15", "c25519_m15", &br_ec_c25519_m15 },
|
||||
{ "ec_c25519_m31", "c25519_m31", &br_ec_c25519_m31 },
|
||||
{ "ec_p256_m15", "p256_m15", &br_ec_p256_m15 },
|
||||
{ "ec_p256_m31", "p256_m31", &br_ec_p256_m31 },
|
||||
{ "ec_prime_i15", "prime_i15", &br_ec_prime_i15 },
|
||||
{ "ec_prime_i31", "prime_i31", &br_ec_prime_i31 },
|
||||
|
||||
{ "ecdsa_i15_sign_asn1", "i15_asn1", &br_ecdsa_i15_sign_asn1 },
|
||||
{ "ecdsa_i15_sign_raw", "i15_raw", &br_ecdsa_i15_sign_raw },
|
||||
{ "ecdsa_i31_sign_asn1", "i31_asn1", &br_ecdsa_i31_sign_asn1 },
|
||||
{ "ecdsa_i31_sign_raw", "i31_raw", &br_ecdsa_i31_sign_raw },
|
||||
{ "ecdsa_i15_vrfy_asn1", "i15_asn1", &br_ecdsa_i15_vrfy_asn1 },
|
||||
{ "ecdsa_i15_vrfy_raw", "i15_raw", &br_ecdsa_i15_vrfy_raw },
|
||||
{ "ecdsa_i31_vrfy_asn1", "i31_asn1", &br_ecdsa_i31_vrfy_asn1 },
|
||||
{ "ecdsa_i31_vrfy_raw", "i31_raw", &br_ecdsa_i31_vrfy_raw },
|
||||
|
||||
{ "rsa_i15_pkcs1_sign", "i15", &br_rsa_i15_pkcs1_sign },
|
||||
{ "rsa_i31_pkcs1_sign", "i31", &br_rsa_i31_pkcs1_sign },
|
||||
{ "rsa_i32_pkcs1_sign", "i32", &br_rsa_i32_pkcs1_sign },
|
||||
{ "rsa_i15_pkcs1_vrfy", "i15", &br_rsa_i15_pkcs1_vrfy },
|
||||
{ "rsa_i31_pkcs1_vrfy", "i31", &br_rsa_i31_pkcs1_vrfy },
|
||||
{ "rsa_i32_pkcs1_vrfy", "i32", &br_rsa_i32_pkcs1_vrfy },
|
||||
|
||||
{ 0, 0, 0 }
|
||||
};
|
||||
|
||||
static const struct {
|
||||
const char *long_name;
|
||||
const char *short_name;
|
||||
const void *(*get)(void);
|
||||
} algo_names_dyn[] = {
|
||||
{ "aes_x86ni_cbcenc", "x86ni",
|
||||
(const void *(*)(void))&br_aes_x86ni_cbcenc_get_vtable },
|
||||
{ "aes_x86ni_cbcdec", "x86ni",
|
||||
(const void *(*)(void))&br_aes_x86ni_cbcdec_get_vtable },
|
||||
{ "aes_x86ni_ctr", "x86ni",
|
||||
(const void *(*)(void))&br_aes_x86ni_ctr_get_vtable },
|
||||
{ "ghash_pclmul", "pclmul",
|
||||
(const void *(*)(void))&br_ghash_pclmul_get },
|
||||
{ 0, 0, 0, }
|
||||
};
|
||||
|
||||
/* see brssl.h */
|
||||
const char *
|
||||
get_algo_name(const void *impl, int long_name)
|
||||
{
|
||||
size_t u;
|
||||
|
||||
for (u = 0; algo_names[u].long_name; u ++) {
|
||||
if (impl == algo_names[u].impl) {
|
||||
return long_name
|
||||
? algo_names[u].long_name
|
||||
: algo_names[u].short_name;
|
||||
}
|
||||
}
|
||||
for (u = 0; algo_names_dyn[u].long_name; u ++) {
|
||||
if (impl == algo_names_dyn[u].get()) {
|
||||
return long_name
|
||||
? algo_names_dyn[u].long_name
|
||||
: algo_names_dyn[u].short_name;
|
||||
}
|
||||
}
|
||||
return "UNKNOWN";
|
||||
}
|
||||
|
||||
/* see brssl.h */
|
||||
const char *
|
||||
get_curve_name(int id)
|
||||
|
|
|
|||
|
|
@ -475,14 +475,17 @@ sp_do_keyx(const br_ssl_server_policy_class **pctx,
|
|||
|
||||
pc = (policy_context *)pctx;
|
||||
switch (pc->sk->key_type) {
|
||||
const br_ec_impl *iec;
|
||||
|
||||
case BR_KEYTYPE_RSA:
|
||||
return br_rsa_ssl_decrypt(
|
||||
&br_rsa_i31_private, &pc->sk->key.rsa,
|
||||
data, *len);
|
||||
br_rsa_private_get_default(),
|
||||
&pc->sk->key.rsa, data, *len);
|
||||
case BR_KEYTYPE_EC:
|
||||
r = br_ec_all_m15.mul(data, *len, pc->sk->key.ec.x,
|
||||
iec = br_ec_get_default();
|
||||
r = iec->mul(data, *len, pc->sk->key.ec.x,
|
||||
pc->sk->key.ec.xlen, pc->sk->key.ec.curve);
|
||||
xoff = br_ec_all_m15.xoff(pc->sk->key.ec.curve, &xlen);
|
||||
xoff = iec->xoff(pc->sk->key.ec.curve, &xlen);
|
||||
memmove(data, data + xoff, xlen);
|
||||
*len = xlen;
|
||||
return r;
|
||||
|
|
@ -556,8 +559,8 @@ sp_do_sign(const br_ssl_server_policy_class **pctx,
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
x = br_rsa_i31_pkcs1_sign(hash_oid, hv, hv_len,
|
||||
&pc->sk->key.rsa, data);
|
||||
x = br_rsa_pkcs1_sign_get_default()(
|
||||
hash_oid, hv, hv_len, &pc->sk->key.rsa, data);
|
||||
if (!x) {
|
||||
if (pc->verbose) {
|
||||
fprintf(stderr, "ERROR: RSA-sign failure\n");
|
||||
|
|
@ -584,8 +587,8 @@ sp_do_sign(const br_ssl_server_policy_class **pctx,
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
sig_len = br_ecdsa_i31_sign_asn1(&br_ec_all_m15,
|
||||
hc, hv, &pc->sk->key.ec, data);
|
||||
sig_len = br_ecdsa_sign_asn1_get_default()(
|
||||
br_ec_get_default(), hc, hv, &pc->sk->key.ec, data);
|
||||
if (sig_len == 0) {
|
||||
if (pc->verbose) {
|
||||
fprintf(stderr, "ERROR: ECDSA-sign failure\n");
|
||||
|
|
@ -956,7 +959,7 @@ do_server(int argc, char *argv[])
|
|||
break;
|
||||
case BR_KEYTYPE_EC:
|
||||
curve = sk->key.ec.curve;
|
||||
supp = br_ec_all_m15.supported_curves;
|
||||
supp = br_ec_get_default()->supported_curves;
|
||||
if (curve > 31 || !((supp >> curve) & 1)) {
|
||||
fprintf(stderr, "ERROR: private key curve (%d)"
|
||||
" is not supported\n", curve);
|
||||
|
|
@ -1046,41 +1049,19 @@ do_server(int argc, char *argv[])
|
|||
}
|
||||
/* TODO: algorithm implementation selection */
|
||||
if ((req & REQ_AESCBC) != 0) {
|
||||
br_ssl_engine_set_aes_cbc(&cc.eng,
|
||||
&br_aes_ct_cbcenc_vtable,
|
||||
&br_aes_ct_cbcdec_vtable);
|
||||
br_ssl_engine_set_cbc(&cc.eng,
|
||||
&br_sslrec_in_cbc_vtable,
|
||||
&br_sslrec_out_cbc_vtable);
|
||||
br_ssl_engine_set_default_aes_cbc(&cc.eng);
|
||||
}
|
||||
if ((req & REQ_AESGCM) != 0) {
|
||||
br_ssl_engine_set_aes_ctr(&cc.eng,
|
||||
&br_aes_ct_ctr_vtable);
|
||||
br_ssl_engine_set_ghash(&cc.eng,
|
||||
&br_ghash_ctmul);
|
||||
br_ssl_engine_set_gcm(&cc.eng,
|
||||
&br_sslrec_in_gcm_vtable,
|
||||
&br_sslrec_out_gcm_vtable);
|
||||
br_ssl_engine_set_default_aes_gcm(&cc.eng);
|
||||
}
|
||||
if ((req & REQ_CHAPOL) != 0) {
|
||||
br_ssl_engine_set_chacha20(&cc.eng,
|
||||
&br_chacha20_ct_run);
|
||||
br_ssl_engine_set_poly1305(&cc.eng,
|
||||
&br_poly1305_ctmul_run);
|
||||
br_ssl_engine_set_chapol(&cc.eng,
|
||||
&br_sslrec_in_chapol_vtable,
|
||||
&br_sslrec_out_chapol_vtable);
|
||||
br_ssl_engine_set_default_chapol(&cc.eng);
|
||||
}
|
||||
if ((req & REQ_3DESCBC) != 0) {
|
||||
br_ssl_engine_set_des_cbc(&cc.eng,
|
||||
&br_des_ct_cbcenc_vtable,
|
||||
&br_des_ct_cbcdec_vtable);
|
||||
br_ssl_engine_set_cbc(&cc.eng,
|
||||
&br_sslrec_in_cbc_vtable,
|
||||
&br_sslrec_out_cbc_vtable);
|
||||
br_ssl_engine_set_default_des_cbc(&cc.eng);
|
||||
}
|
||||
if ((req & (REQ_ECDHE_RSA | REQ_ECDHE_ECDSA)) != 0) {
|
||||
br_ssl_engine_set_ec(&cc.eng, &br_ec_all_m15);
|
||||
br_ssl_engine_set_default_ec(&cc.eng);
|
||||
}
|
||||
}
|
||||
br_ssl_engine_set_suites(&cc.eng, suite_ids, num_suites);
|
||||
|
|
@ -1153,12 +1134,11 @@ do_server(int argc, char *argv[])
|
|||
br_x509_minimal_set_hash(&xc, id, hc);
|
||||
}
|
||||
}
|
||||
br_ssl_engine_set_rsavrfy(&cc.eng, &br_rsa_i31_pkcs1_vrfy);
|
||||
br_ssl_engine_set_ec(&cc.eng, &br_ec_all_m15);
|
||||
br_ssl_engine_set_ecdsa(&cc.eng, &br_ecdsa_i31_vrfy_asn1);
|
||||
br_x509_minimal_set_rsa(&xc, &br_rsa_i31_pkcs1_vrfy);
|
||||
br_ssl_engine_set_default_rsavrfy(&cc.eng);
|
||||
br_ssl_engine_set_default_ecdsa(&cc.eng);
|
||||
br_x509_minimal_set_rsa(&xc, br_rsa_pkcs1_vrfy_get_default());
|
||||
br_x509_minimal_set_ecdsa(&xc,
|
||||
&br_ec_all_m15, &br_ecdsa_i31_vrfy_asn1);
|
||||
br_ec_get_default(), br_ecdsa_vrfy_asn1_get_default());
|
||||
br_ssl_engine_set_x509(&cc.eng, &xc.vtable);
|
||||
br_ssl_server_set_trust_anchor_names_alt(&cc,
|
||||
&VEC_ELT(anchors, 0), VEC_LEN(anchors));
|
||||
|
|
|
|||
|
|
@ -262,6 +262,57 @@ run_ssl_engine(br_ssl_engine_context *cc, unsigned long fd, unsigned flags)
|
|||
verbose = (flags & RUN_ENGINE_VERBOSE) != 0;
|
||||
trace = (flags & RUN_ENGINE_TRACE) != 0;
|
||||
|
||||
/*
|
||||
* Print algorithm details.
|
||||
*/
|
||||
if (verbose) {
|
||||
fprintf(stderr, "Algorithms:\n");
|
||||
if (cc->iaes_cbcenc != 0) {
|
||||
fprintf(stderr, " AES/CBC (enc): %s\n",
|
||||
get_algo_name(cc->iaes_cbcenc, 0));
|
||||
}
|
||||
if (cc->iaes_cbcdec != 0) {
|
||||
fprintf(stderr, " AES/CBC (dec): %s\n",
|
||||
get_algo_name(cc->iaes_cbcdec, 0));
|
||||
}
|
||||
if (cc->iaes_ctr != 0) {
|
||||
fprintf(stderr, " AES/CTR: %s\n",
|
||||
get_algo_name(cc->iaes_cbcdec, 0));
|
||||
}
|
||||
if (cc->ides_cbcenc != 0) {
|
||||
fprintf(stderr, " DES/CBC (enc): %s\n",
|
||||
get_algo_name(cc->ides_cbcenc, 0));
|
||||
}
|
||||
if (cc->ides_cbcdec != 0) {
|
||||
fprintf(stderr, " DES/CBC (dec): %s\n",
|
||||
get_algo_name(cc->ides_cbcdec, 0));
|
||||
}
|
||||
if (cc->ighash != 0) {
|
||||
fprintf(stderr, " GHASH (GCM): %s\n",
|
||||
get_algo_name(cc->ighash, 0));
|
||||
}
|
||||
if (cc->ichacha != 0) {
|
||||
fprintf(stderr, " ChaCha20: %s\n",
|
||||
get_algo_name(cc->ichacha, 0));
|
||||
}
|
||||
if (cc->ipoly != 0) {
|
||||
fprintf(stderr, " Poly1305: %s\n",
|
||||
get_algo_name(cc->ipoly, 0));
|
||||
}
|
||||
if (cc->iec != 0) {
|
||||
fprintf(stderr, " EC: %s\n",
|
||||
get_algo_name(cc->iec, 0));
|
||||
}
|
||||
if (cc->iecdsa != 0) {
|
||||
fprintf(stderr, " ECDSA: %s\n",
|
||||
get_algo_name(cc->iecdsa, 0));
|
||||
}
|
||||
if (cc->irsavrfy != 0) {
|
||||
fprintf(stderr, " RSA (vrfy): %s\n",
|
||||
get_algo_name(cc->irsavrfy, 0));
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
fd_event = WSA_INVALID_EVENT;
|
||||
can_send = 0;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue