#define NAMED_CURVE_TYPE 3
#endif /* OPENSSL_NO_EC */
+/* Values for valid_flags in CERT_PKEY structure */
+/* Certificate inconsistent with session, key missing etc */
+#define CERT_PKEY_INVALID 0x0
+/* Certificate can be used with this sesstion */
+#define CERT_PKEY_VALID 0x1
+/* Certificate can also be used for signing */
+#define CERT_PKEY_SIGN 0x2
+
typedef struct cert_pkey_st
{
X509 *x509;
unsigned char *authz;
size_t authz_length;
#endif
+ /* Set if CERT_PKEY can be used with current SSL session: e.g.
+ * appropriate curve, signature algorithms etc. If zero it can't be
+ * used at all.
+ */
+ int valid_flags;
} CERT_PKEY;
typedef struct cert_st
/* Select ECDH parameters automatically */
int ecdh_tmp_auto;
#endif
-
+ /* Flags related to certificates */
+ unsigned int cert_flags;
CERT_PKEY pkeys[SSL_PKEY_NUM];
- /* Array of pairs of NIDs for signature algorithm extension */
- TLS_SIGALGS *sigalgs;
+ /* signature algorithms peer reports: e.g. supported signature
+ * algorithms extension for server or as part of a certificate
+ * request for client.
+ */
+ unsigned char *peer_sigalgs;
/* Size of above array */
- size_t sigalgslen;
+ size_t peer_sigalgslen;
+ /* configured signature algorithms (can be NULL for default).
+ * sent in signature algorithms extension or certificate request.
+ */
+ unsigned char *conf_sigalgs;
+ /* Size of above array */
+ size_t conf_sigalgslen;
+ /* Signature algorithms shared by client and server: cached
+ * because these are used most often
+ */
+ TLS_SIGALGS *shared_sigalgs;
+ size_t shared_sigalgslen;
int references; /* >1 only if SSL_copy_session_id is used */
} CERT;
int (*export_keying_material)(SSL *, unsigned char *, size_t,
const char *, size_t,
const unsigned char *, size_t,
- int use_context);
- } SSL3_ENC_METHOD;
+ int use_context);
+ } SSL3_ENC_METHOD;
#ifndef OPENSSL_NO_COMP
/* Used for holding the relevant compression methods loaded into SSL_CTX */
int ssl_clear_bad_session(SSL *s);
CERT *ssl_cert_new(void);
CERT *ssl_cert_dup(CERT *cert);
+void ssl_cert_set_default_md(CERT *cert);
int ssl_cert_inst(CERT **o);
+void ssl_cert_clear_certs(CERT *c);
void ssl_cert_free(CERT *c);
SESS_CERT *ssl_sess_cert_new(void);
void ssl_sess_cert_free(SESS_CERT *sc);
int *curves, size_t ncurves);
int tls1_set_curves_list(unsigned char **pext, size_t *pextlen,
const char *str);
-int tls1_check_ec_server_key(SSL *s);
int tls1_check_ec_tmp_key(SSL *s);
#endif /* OPENSSL_NO_EC */
int tls12_get_sigid(const EVP_PKEY *pk);
const EVP_MD *tls12_get_hash(unsigned char hash_alg);
+int tls1_set_sigalgs_list(CERT *c, const char *str);
+int tls1_set_sigalgs(CERT *c, const int *salg, size_t salglen);
+int tls1_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain,
+ int idx);
+void tls1_set_cert_validity(SSL *s);
+
#endif
EVP_MD_CTX* ssl_replace_hash(EVP_MD_CTX **hash,const EVP_MD *md) ;
void ssl_clear_hash_ctx(EVP_MD_CTX **hash);
int *al);
long ssl_get_algorithm2(SSL *s);
int tls1_process_sigalgs(SSL *s, const unsigned char *data, int dsize);
-int tls12_get_req_sig_algs(SSL *s, unsigned char *p);
+size_t tls12_get_sig_algs(SSL *s, unsigned char *p);
int ssl_add_clienthello_use_srtp_ext(SSL *s, unsigned char *p, int *len, int maxlen);
int ssl_parse_clienthello_use_srtp_ext(SSL *s, unsigned char *d, int len,int *al);