blob: 7c1247008d6affb47d8dc2a02c4729687abc2452 [file] [log] [blame]
/* srp-tls.h
*
* Copyright (c) 2019-2021 Apple Inc. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* TLS Shim definitions. These entry points should in principle work for any TLS
* library, with the addition of a single shim file, for example tls-mbedtls.c.
*/
#ifndef __SRP_TLS_H
#define __SRP_TLS_H
// Anonymous key structure, depends on the target.
typedef struct srp_key srp_key_t;
#ifdef SRP_CRYPTO_MBEDTLS_INTERNAL
#include <mbedtls/certs.h>
#include <mbedtls/x509.h>
#include <mbedtls/ssl.h>
struct tls_context {
struct mbedtls_ssl_context context;
enum { handshake_in_progress, handshake_complete } state;
};
#endif // SRP_CRYPTO_MBEDTLS_INTERNAL
#ifdef SRP_CRYPTO_MACOS
#include "tls-macos.h"
#endif
// tls_*.c:
bool srp_tls_init(void);
bool srp_tls_client_init(void);
bool srp_tls_server_init(const char *NULLABLE cacert_file,
const char *NULLABLE srvcrt_file, const char *NULLABLE server_key_file);
bool srp_tls_accept_setup(comm_t *NONNULL comm);
bool srp_tls_listen_callback(comm_t *NONNULL comm);
bool srp_tls_connect_callback(comm_t *NONNULL comm);
ssize_t srp_tls_read(comm_t *NONNULL comm, unsigned char *NONNULL buf, size_t max);
void srp_tls_context_free(comm_t *NONNULL comm);
ssize_t srp_tls_write(comm_t *NONNULL comm, struct iovec *NONNULL iov, int iov_len);
/*!
* @brief
* Configure TLS with the identity.
*
* @param context
* Context passed to this function to let it finish the configuration process.
*
* @discussion
* This function can only be called after srp_tls_init() is called to fetch the necessary identity.
*
*/
void
srp_tls_configure(void *NULLABLE context);
/*!
* @brief
* Gets the remaining valid time for the TLS certificate that is initialized by <code>srp_tls_init()</code>.
*
* @result
* The remaining time valid time before TLS certificate expires.
*
* @discussion
* <code>srp_tls_init()</code> has to be called to initialize the TLS certificate before calling this function.
*/
uint32_t
srp_tls_get_next_rotation_time(void);
/*!
* @brief
* Destroy the TLS certificate that is initialized by <code>srp_tls_init()</code>.
*
* @discussion
* <code>srp_tls_init()</code> has to be called to initialize the TLS certificate before calling this function.
*/
void
srp_tls_dispose(void);
/*!
* @brief
* Schedule a wake up event so that the TLS certificate that is expiring
* soon can be replaced with a newer one.
*
* @param tls_listener_wakeup
* The pointer to the tls_listener_wakeup context that can be used to
* schedule a wakeup event.
*
* @param tls_listener_to_rotate
* The TLS listener object created before that needs to be rotated.
*
* @discussion
* The TLS rotation time is controlled by
* <code>TLS_CERTIFICATE_VALID_PERIOD_SECS</code>.
*/
void
schedule_tls_certificate_rotation(wakeup_t * NULLABLE * NONNULL tls_listener_wakeup,
comm_t * NONNULL tls_listener_to_rotate);
#endif // __SRP_TLS_H
// Local Variables:
// mode: C
// tab-width: 4
// c-file-style: "bsd"
// c-basic-offset: 4
// fill-column: 108
// indent-tabs-mode: nil
// End: