VirtualBox

source: vbox/trunk/include/iprt/crypto/ssl.h

Last change on this file was 98103, checked in by vboxsync, 17 months ago

Copyright year updates by scm.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.0 KB
Line 
1/** @file
2 * IPRT - Secure Socket Layer (SSL) / Transport Security Layer (TLS)
3 */
4
5/*
6 * Copyright (C) 2006-2023 Oracle and/or its affiliates.
7 *
8 * This file is part of VirtualBox base platform packages, as
9 * available from https://www.virtualbox.org.
10 *
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation, in version 3 of the
14 * License.
15 *
16 * This program is distributed in the hope that it will be useful, but
17 * WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, see <https://www.gnu.org/licenses>.
23 *
24 * The contents of this file may alternatively be used under the terms
25 * of the Common Development and Distribution License Version 1.0
26 * (CDDL), a copy of it is provided in the "COPYING.CDDL" file included
27 * in the VirtualBox distribution, in which case the provisions of the
28 * CDDL are applicable instead of those of the GPL.
29 *
30 * You may elect to license modified versions of this file under the
31 * terms and conditions of either the GPL or the CDDL or both.
32 *
33 * SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
34 */
35
36#ifndef IPRT_INCLUDED_crypto_ssl_h
37#define IPRT_INCLUDED_crypto_ssl_h
38#ifndef RT_WITHOUT_PRAGMA_ONCE
39# pragma once
40#endif
41
42#include <iprt/cdefs.h>
43#include <iprt/types.h>
44#include <iprt/sg.h>
45
46
47RT_C_DECLS_BEGIN
48
49/** @defgroup grp_rt_crssl RTCrSsl - Secure Socket Layer (SSL) / Transport Security Layer (TLS)
50 * @ingroup grp_rt_crypto
51 * @{
52 */
53
54/** SSL handle. */
55typedef R3PTRTYPE(struct RTCRSSLINT *) RTCRSSL;
56/** Pointer to a SSL handle. */
57typedef RTCRSSL *PRTCRSSL;
58/** Nil SSL handle. */
59#define NIL_RTCRSSL ((RTCRSSL)0)
60
61/** SSL session handle. */
62typedef R3PTRTYPE(struct RTCRSSLSESSIONINT *) RTCRSSLSESSION;
63/** Pointer to a SSL session handle. */
64typedef RTCRSSLSESSION *PRTCRSSLSESSION;
65/** Nil SSL session handle. */
66#define NIL_RTCRSSLSESSION ((RTCRSSLSESSION)0)
67
68
69RTDECL(int) RTCrSslCreate(PRTCRSSL phSsl, uint32_t fFlags);
70
71/**
72 * Retains a reference to the SSL handle.
73 *
74 * @returns New reference count, UINT32_MAX on invalid handle (asserted).
75 *
76 * @param hSsl The SSL handle.
77 */
78RTDECL(uint32_t) RTCrSslRetain(RTCRSSL hSsl);
79
80/**
81 * Release a reference to the SSL handle.
82 *
83 * @returns New reference count, UINT32_MAX on invalid handle (asserted).
84 *
85 * @param hSsl The SSL handle. The NIL handle is quietly
86 * ignored and 0 is returned.
87 */
88RTDECL(uint32_t) RTCrSslRelease(RTCRSSL hSsl);
89
90#define RTCRSSL_FILE_F_PEM 0
91#define RTCRSSL_FILE_F_ASN1 RT_BIT_32(1)
92
93RTDECL(int) RTCrSslSetCertificateFile(RTCRSSL hSsl, const char *pszFile, uint32_t fFlags);
94RTDECL(int) RTCrSslSetPrivateKeyFile(RTCRSSL hSsl, const char *pszFile, uint32_t fFlags);
95RTDECL(int) RTCrSslLoadTrustedRootCerts(RTCRSSL hSsl, const char *pszFile, const char *pszDir);
96RTDECL(int) RTCrSslSetNoPeerVerify(RTCRSSL hSsl);
97/** @todo Min/max protocol setters. */
98
99
100
101RTDECL(int) RTCrSslCreateSession(RTCRSSL hSsl, RTSOCKET hSocket, uint32_t fFlags, PRTCRSSLSESSION phSslSession);
102RTDECL(int) RTCrSslCreateSessionForNativeSocket(RTCRSSL hSsl, RTHCINTPTR hNativeSocket, uint32_t fFlags,
103 PRTCRSSLSESSION phSslSession);
104/** @name RTCRSSLSESSION_F_XXX - Flags for RTCrSslCreateSession and RTCrSslCreateSessionForNativeSocket.
105 * @{ */
106/** The socket is non-blocking. */
107#define RTCRSSLSESSION_F_NON_BLOCKING RT_BIT_32(0)
108/** @} */
109
110/**
111 * Retains a reference to the SSL session handle.
112 *
113 * @returns New reference count, UINT32_MAX on invalid handle (asserted).
114 *
115 * @param hSslSession The SSL session handle.
116 */
117RTDECL(uint32_t) RTCrSslSessionRetain(RTCRSSLSESSION hSslSession);
118
119/**
120 * Release a reference to the SSL handle.
121 *
122 * @returns New reference count, UINT32_MAX on invalid handle (asserted).
123 *
124 * @param hSslSession The SSL session handle. The NIL handle is quietly
125 * ignored and 0 is returned.
126 */
127RTDECL(uint32_t) RTCrSslSessionRelease(RTCRSSLSESSION hSslSession);
128
129RTDECL(int) RTCrSslSessionAccept(RTCRSSLSESSION hSslSession, uint32_t fFlags);
130RTDECL(int) RTCrSslSessionConnect(RTCRSSLSESSION hSslSession, uint32_t fFlags);
131
132RTDECL(const char *) RTCrSslSessionGetVersion(RTCRSSLSESSION hSslSession);
133RTDECL(int) RTCrSslSessionGetCertIssuerNameAsString(RTCRSSLSESSION hSslSession, char *pszBuf, size_t cbBuf, size_t *pcbActual);
134RTDECL(bool) RTCrSslSessionPending(RTCRSSLSESSION hSslSession);
135RTDECL(ssize_t) RTCrSslSessionRead(RTCRSSLSESSION hSslSession, void *pvBuf, size_t cbToRead);
136RTDECL(ssize_t) RTCrSslSessionWrite(RTCRSSLSESSION hSslSession, void const *pvBuf, size_t cbToWrite);
137
138
139/** @} */
140RT_C_DECLS_END
141
142#endif /* !IPRT_INCLUDED_crypto_ssl_h */
143
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use