VirtualBox

source: vbox/trunk/include/iprt/crypto/cipher.h@ 96407

Last change on this file since 96407 was 96407, checked in by vboxsync, 2 years ago

scm copyright and license note update

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 6.7 KB
Line 
1/** @file
2 * IPRT - Crypto - Symmetric Ciphers.
3 */
4
5/*
6 * Copyright (C) 2018-2022 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_cipher_h
37#define IPRT_INCLUDED_crypto_cipher_h
38#ifndef RT_WITHOUT_PRAGMA_ONCE
39# pragma once
40#endif
41
42#include <iprt/asn1.h>
43
44
45RT_C_DECLS_BEGIN
46
47struct RTCRX509SUBJECTPUBLICKEYINFO;
48
49/** @defgroup grp_rt_crcipher RTCrCipher - Symmetric Ciphers
50 * @ingroup grp_rt_crypto
51 * @{
52 */
53
54/**
55 * A symmetric cipher handle.
56 *
57 * @remarks In OpenSSL terms this corresponds to a EVP_CIPHER, while in Microsoft
58 * terms it is an algorithm handle. The latter is why a handle was
59 * choosen rather than constant descriptor structure pointer. */
60typedef struct RTCRCIPHERINT *RTCRCIPHER;
61/** Pointer to a symmetric cipher handle. */
62typedef RTCRCIPHER *PRTCRCIPHER;
63/** Nil symmetric cipher handle. */
64#define NIL_RTCRCIPHER ((RTCRCIPHER)0)
65/** Symmetric cipher context */
66typedef struct RTCRCIPHERCTXINT *RTCRCIPHERCTX;
67/** Pointer to a symmetric cipher context */
68typedef RTCRCIPHERCTX *PRTCRCIPHERCTX;
69/** Nil symmetric cipher context */
70#define NIL_RTCRCIPHERCTX ((RTCRCIPHERCTX)0)
71
72/**
73 * Symmetric cipher types.
74 *
75 * @note Only add new types at the end, existing values must be stable.
76 */
77typedef enum RTCRCIPHERTYPE
78{
79 /** Invalid zero value. */
80 RTCRCIPHERTYPE_INVALID = 0,
81 /** XTS-AES-128 (NIST SP 800-38E). */
82 RTCRCIPHERTYPE_XTS_AES_128,
83 /** XTS-AES-256 (NIST SP 800-38E). */
84 RTCRCIPHERTYPE_XTS_AES_256,
85 /** GCM-AES-128. */
86 RTCRCIPHERTYPE_GCM_AES_128,
87 /** GCM-AES-256. */
88 RTCRCIPHERTYPE_GCM_AES_256,
89 /* CTR-AES-128 */
90 RTCRCIPHERTYPE_CTR_AES_128,
91 /* CTR-AES-256 */
92 RTCRCIPHERTYPE_CTR_AES_256,
93 /** End of valid symmetric cipher types. */
94 RTCRCIPHERTYPE_END,
95 /** Make sure the type is a 32-bit one. */
96 RTCRCIPHERTYPE_32BIT_HACK = 0x7fffffff
97} RTCRCIPHERTYPE;
98
99
100RTDECL(int) RTCrCipherOpenByType(PRTCRCIPHER phCipher, RTCRCIPHERTYPE enmType, uint32_t fFlags);
101RTDECL(uint32_t) RTCrCipherRetain(RTCRCIPHER hCipher);
102RTDECL(uint32_t) RTCrCipherRelease(RTCRCIPHER hCipher);
103RTDECL(uint32_t) RTCrCipherGetKeyLength(RTCRCIPHER hCipher);
104RTDECL(uint32_t) RTCrCipherGetInitializationVectorLength(RTCRCIPHER hCipher);
105RTDECL(uint32_t) RTCrCipherGetBlockSize(RTCRCIPHER hCipher);
106
107RTDECL(int) RTCrCipherCtxFree(RTCRCIPHERCTX phCipherCtx);
108
109RTDECL(int) RTCrCipherCtxEncryptInit(RTCRCIPHER hCipher, void const *pvKey, size_t cbKey,
110 void const *pvInitVector, size_t cbInitVector,
111 void const *pvAuthData, size_t cbAuthData,
112 PRTCRCIPHERCTX phCipherCtx);
113RTDECL(int) RTCrCipherCtxEncryptProcess(RTCRCIPHERCTX hCipherCtx, void const *pvPlainText, size_t cbPlainText,
114 void *pvEncrypted, size_t cbEncrypted, size_t *pcbEncrypted);
115RTDECL(int) RTCrCipherCtxEncryptFinish(RTCRCIPHERCTX hCipherCtx,
116 void *pvEncrypted, size_t *pcbEncrypted,
117 void *pvTag, size_t cbTag, size_t *pcbTag);
118
119RTDECL(int) RTCrCipherCtxDecryptInit(RTCRCIPHER hCipher, void const *pvKey, size_t cbKey,
120 void const *pvInitVector, size_t cbInitVector,
121 void const *pvAuthData, size_t cbAuthData,
122 void *pvTag, size_t cbTag, PRTCRCIPHERCTX phCipherCtx);
123RTDECL(int) RTCrCipherCtxDecryptProcess(RTCRCIPHERCTX hCipherCtx,
124 void const *pvEncrypted, size_t cbEncrypted,
125 void *pvPlainText, size_t cbPlainText, size_t *pcbPlainText);
126RTDECL(int) RTCrCipherCtxDecryptFinish(RTCRCIPHERCTX hCipherCtx,
127 void *pvPlainText, size_t *pcbPlainText);
128
129
130RTDECL(int) RTCrCipherEncrypt(RTCRCIPHER hCipher, void const *pvKey, size_t cbKey,
131 void const *pvInitVector, size_t cbInitVector,
132 void const *pvPlainText, size_t cbPlainText,
133 void *pvEncrypted, size_t cbEncrypted, size_t *pcbEncrypted);
134RTDECL(int) RTCrCipherDecrypt(RTCRCIPHER hCipher, void const *pvKey, size_t cbKey,
135 void const *pvInitVector, size_t cbInitVector,
136 void const *pvEncrypted, size_t cbEncrypted,
137 void *pvPlainText, size_t cbPlainText, size_t *pcbPlainText);
138RTDECL(int) RTCrCipherEncryptEx(RTCRCIPHER hCipher, void const *pvKey, size_t cbKey,
139 void const *pvInitVector, size_t cbInitVector,
140 void const *pvAuthData, size_t cbAuthData,
141 void const *pvPlainText, size_t cbPlainText,
142 void *pvEncrypted, size_t cbEncrypted, size_t *pcbEncrypted,
143 void *pvTag, size_t cbTag, size_t *pcbTag);
144RTDECL(int) RTCrCipherDecryptEx(RTCRCIPHER hCipher, void const *pvKey, size_t cbKey,
145 void const *pvInitVector, size_t cbInitVector,
146 void const *pvAuthData, size_t cbAuthData,
147 void *pvTag, size_t cbTag,
148 void const *pvEncrypted, size_t cbEncrypted,
149 void *pvPlainText, size_t cbPlainText, size_t *pcbPlainText);
150
151/** @} */
152
153RT_C_DECLS_END
154
155#endif /* !IPRT_INCLUDED_crypto_cipher_h */
156
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette