Home | History | Annotate | Download | only in tls

Lines Matching refs:conn

30 void tlsv1_server_alert(struct tlsv1_server *conn, u8 level, u8 description)
32 conn->alert_level = level;
33 conn->alert_description = description;
37 int tlsv1_server_derive_keys(struct tlsv1_server *conn,
49 os_memcpy(seed, conn->client_random, TLS_RANDOM_LEN);
50 os_memcpy(seed + TLS_RANDOM_LEN, conn->server_random,
54 conn->master_secret, TLS_MASTER_SECRET_LEN)) {
60 conn->master_secret, TLS_MASTER_SECRET_LEN);
63 os_memcpy(seed, conn->server_random, TLS_RANDOM_LEN);
64 os_memcpy(seed + TLS_RANDOM_LEN, conn->client_random, TLS_RANDOM_LEN);
65 key_block_len = 2 * (conn->rl.hash_size + conn->rl.key_material_len +
66 conn->rl.iv_size);
67 if (tls_prf(conn->master_secret, TLS_MASTER_SECRET_LEN,
79 os_memcpy(conn->rl.read_mac_secret, pos, conn->rl.hash_size);
80 pos += conn->rl.hash_size;
82 os_memcpy(conn->rl.write_mac_secret, pos, conn->rl.hash_size);
83 pos += conn->rl.hash_size;
86 os_memcpy(conn->rl.read_key, pos, conn->rl.key_material_len);
87 pos += conn->rl.key_material_len;
89 os_memcpy(conn->rl.write_key, pos, conn->rl.key_material_len);
90 pos += conn->rl.key_material_len;
93 os_memcpy(conn->rl.read_iv, pos, conn->rl.iv_size);
94 pos += conn->rl.iv_size;
96 os_memcpy(conn->rl.write_iv, pos, conn->rl.iv_size);
97 pos += conn->rl.iv_size;
105 * @conn: TLSv1 server connection data from tlsv1_server_init()
111 u8 * tlsv1_server_handshake(struct tlsv1_server *conn,
133 if (tlsv1_record_receive(&conn->rl, pos, end - pos,
137 tlsv1_server_alert(conn, TLS_ALERT_LEVEL_FATAL, alert);
149 if (tlsv1_server_process_handshake(conn, ct, in_pos,
161 msg = tlsv1_server_handshake_write(conn, out_len);
165 if (conn->alert_level) {
166 if (conn->state == FAILED) {
172 conn->state = FAILED;
174 msg = tlsv1_server_send_alert(conn, conn->alert_level,
175 conn->alert_description,
185 * @conn: TLSv1 server connection data from tlsv1_server_init()
195 int tlsv1_server_encrypt(struct tlsv1_server *conn,
206 if (tlsv1_record_send(&conn->rl, TLS_CONTENT_TYPE_APPLICATION_DATA,
209 tlsv1_server_alert(conn, TLS_ALERT_LEVEL_FATAL,
220 * @conn: TLSv1 server connection data from tlsv1_server_init()
230 int tlsv1_server_decrypt(struct tlsv1_server *conn,
248 tlsv1_server_alert(conn, TLS_ALERT_LEVEL_FATAL,
254 res = tlsv1_record_receive(&conn->rl, pos, in_end - pos,
259 tlsv1_server_alert(conn, TLS_ALERT_LEVEL_FATAL, alert);
266 tlsv1_server_alert(conn, TLS_ALERT_LEVEL_FATAL,
310 struct tlsv1_server *conn;
314 conn = os_zalloc(sizeof(*conn));
315 if (conn == NULL)
318 conn->cred = cred;
320 conn->state = CLIENT_HELLO;
322 if (tls_verify_hash_init(&conn->verify) < 0) {
325 os_free(conn);
330 suites = conn->cipher_suites;
338 conn->num_cipher_suites = count;
340 return conn;
344 static void tlsv1_server_clear_data(struct tlsv1_server *conn)
346 tlsv1_record_set_cipher_suite(&conn->rl, TLS_NULL_WITH_NULL_NULL);
347 tlsv1_record_change_write_cipher(&conn->rl);
348 tlsv1_record_change_read_cipher(&conn->rl);
349 tls_verify_hash_free(&conn->verify);
351 crypto_public_key_free(conn->client_rsa_key);
352 conn->client_rsa_key = NULL;
354 os_free(conn->session_ticket);
355 conn->session_ticket = NULL;
356 conn->session_ticket_len = 0;
357 conn->use_session_ticket = 0;
359 os_free(conn->dh_secret);
360 conn->dh_secret = NULL;
361 conn->dh_secret_len = 0;
367 * @conn: TLSv1 server connection data from tlsv1_server_init()
369 void tlsv1_server_deinit(struct tlsv1_server *conn)
371 tlsv1_server_clear_data(conn);
372 os_free(conn);
378 * @conn: TLSv1 server connection data from tlsv1_server_init()
381 int tlsv1_server_established(struct tlsv1_server *conn)
383 return conn->state == ESTABLISHED;
389 * @conn: TLSv1 server connection data from tlsv1_server_init()
397 int tlsv1_server_prf(struct tlsv1_server *conn, const char *label,
402 if (conn->state != ESTABLISHED)
406 os_memcpy(seed, conn->server_random, TLS_RANDOM_LEN);
407 os_memcpy(seed + TLS_RANDOM_LEN, conn->client_random,
410 os_memcpy(seed, conn->client_random, TLS_RANDOM_LEN);
411 os_memcpy(seed + TLS_RANDOM_LEN, conn->server_random,
415 return tls_prf(conn->master_secret, TLS_MASTER_SECRET_LEN,
422 * @conn: TLSv1 server connection data from tlsv1_server_init()
429 int tlsv1_server_get_cipher(struct tlsv1_server *conn, char *buf,
434 switch (conn->rl.cipher_suite) {
468 * @conn: TLSv1 server connection data from tlsv1_server_init()
471 int tlsv1_server_shutdown(struct tlsv1_server *conn)
473 conn->state = CLIENT_HELLO;
475 if (tls_verify_hash_init(&conn->verify) < 0) {
481 tlsv1_server_clear_data(conn);
489 * @conn: TLSv1 server connection data from tlsv1_server_init()
492 int tlsv1_server_resumed(struct tlsv1_server *conn)
500 * @conn: TLSv1 server connection data from tlsv1_server_init()
504 int tlsv1_server_get_keys(struct tlsv1_server *conn, struct tls_keys *keys)
507 if (conn->state == CLIENT_HELLO)
510 keys->client_random = conn->client_random;
513 if (conn->state != SERVER_HELLO) {
514 keys->server_random = conn->server_random;
516 keys->master_key = conn->master_secret;
526 * @conn: TLSv1 server connection data from tlsv1_server_init()
530 int tlsv1_server_get_keyblock_size(struct tlsv1_server *conn)
532 if (conn->state == CLIENT_HELLO || conn->state == SERVER_HELLO)
535 return 2 * (conn->rl.hash_size + conn->rl.key_material_len +
536 conn->rl.iv_size);
542 * @conn: TLSv1 server connection data from tlsv1_server_init()
547 int tlsv1_server_set_cipher_list(struct tlsv1_server *conn, u8 *ciphers)
556 suites = conn->cipher_suites;
571 conn->num_cipher_suites = count;
581 int tlsv1_server_set_verify(struct tlsv1_server *conn, int verify_peer)
583 conn->verify_peer = verify_peer;
588 void tlsv1_server_set_session_ticket_cb(struct tlsv1_server *conn,
594 conn->session_ticket_cb = cb;
595 conn->session_ticket_cb_ctx = ctx;