1/* Copyright (c) (2011,2012,2013,2014,2015,2016,2017,2018,2019) Apple Inc. All rights reserved.
2 *
3 * corecrypto is licensed under Apple Inc.’s Internal Use License Agreement (which
4 * is contained in the License.txt file distributed with corecrypto) and only to
5 * people who accept that license. IMPORTANT: Any license rights granted to you by
6 * Apple Inc. (if any) are limited to internal use within your organization only on
7 * devices and computers you own or control, for the sole purpose of verifying the
8 * security characteristics and correct functioning of the Apple Software. You may
9 * not, directly or indirectly, redistribute the Apple Software or any portions thereof.
10 */
11
12#ifndef _CORECRYPTO_CCMODE_FACTORY_H_
13#define _CORECRYPTO_CCMODE_FACTORY_H_
14
15#include <corecrypto/ccn.h>
16#include <corecrypto/ccmode_impl.h>
17
18/* Functions defined in this file are only to be used
19 within corecrypto files.
20 */
21
22/* Use these function to runtime initialize a ccmode_cbc decrypt object (for
23 example if it's part of a larger structure). Normally you would pass a
24 ecb decrypt mode implementation of some underlying algorithm as the ecb
25 parameter. */
26void ccmode_factory_cbc_decrypt(struct ccmode_cbc *cbc,
27 const struct ccmode_ecb *ecb);
28
29/* Use these function to runtime initialize a ccmode_cbc encrypt object (for
30 example if it's part of a larger structure). Normally you would pass a
31 ecb encrypt mode implementation of some underlying algorithm as the ecb
32 parameter. */
33void ccmode_factory_cbc_encrypt(struct ccmode_cbc *cbc,
34 const struct ccmode_ecb *ecb);
35
36
37/* Use these function to runtime initialize a ccmode_cfb decrypt object (for
38 example if it's part of a larger structure). Normally you would pass a
39 ecb encrypt mode implementation of some underlying algorithm as the ecb
40 parameter. */
41void ccmode_factory_cfb_decrypt(struct ccmode_cfb *cfb,
42 const struct ccmode_ecb *ecb);
43
44/* Use these function to runtime initialize a ccmode_cfb encrypt object (for
45 example if it's part of a larger structure). Normally you would pass a
46 ecb encrypt mode implementation of some underlying algorithm as the ecb
47 parameter. */
48void ccmode_factory_cfb_encrypt(struct ccmode_cfb *cfb,
49 const struct ccmode_ecb *ecb);
50
51/* Use these function to runtime initialize a ccmode_cfb8 decrypt object (for
52 example if it's part of a larger structure). Normally you would pass a
53 ecb decrypt mode implementation of some underlying algorithm as the ecb
54 parameter. */
55void ccmode_factory_cfb8_decrypt(struct ccmode_cfb8 *cfb8,
56 const struct ccmode_ecb *ecb);
57
58/* Use these function to runtime initialize a ccmode_cfb8 encrypt object (for
59 example if it's part of a larger structure). Normally you would pass a
60 ecb encrypt mode implementation of some underlying algorithm as the ecb
61 parameter. */
62void ccmode_factory_cfb8_encrypt(struct ccmode_cfb8 *cfb8,
63 const struct ccmode_ecb *ecb);
64
65/* Use these function to runtime initialize a ccmode_ctr decrypt object (for
66 example if it's part of a larger structure). Normally you would pass a
67 ecb encrypt mode implementation of some underlying algorithm as the ecb
68 parameter. */
69void ccmode_factory_ctr_crypt(struct ccmode_ctr *ctr,
70 const struct ccmode_ecb *ecb);
71
72/* Use these function to runtime initialize a ccmode_gcm decrypt object (for
73 example if it's part of a larger structure). For GCM you always pass a
74 ecb encrypt mode implementation of some underlying algorithm as the ecb
75 parameter. */
76void ccmode_factory_gcm_decrypt(struct ccmode_gcm *gcm,
77 const struct ccmode_ecb *ecb_encrypt);
78
79/* Use these function to runtime initialize a ccmode_gcm encrypt object (for
80 example if it's part of a larger structure). For GCM you always pass a
81 ecb encrypt mode implementation of some underlying algorithm as the ecb
82 parameter. */
83void ccmode_factory_gcm_encrypt(struct ccmode_gcm *gcm,
84 const struct ccmode_ecb *ecb_encrypt);
85
86/* Use these function to runtime initialize a ccmode_ccm decrypt object (for
87 example if it's part of a larger structure). For CCM you always pass a
88 ecb encrypt mode implementation of some underlying algorithm as the ecb
89 parameter. */
90
91void ccmode_factory_ccm_decrypt(struct ccmode_ccm *ccm,
92 const struct ccmode_ecb *ecb_encrypt);
93
94/* Use these function to runtime initialize a ccmode_ccm encrypt object (for
95 example if it's part of a larger structure). For CCM you always pass a
96 ecb encrypt mode implementation of some underlying algorithm as the ecb
97 parameter. */
98void ccmode_factory_ccm_encrypt(struct ccmode_ccm *ccm,
99 const struct ccmode_ecb *ecb_encrypt);
100
101/* Use these function to runtime initialize a ccmode_ofb encrypt object (for
102 example if it's part of a larger structure). Normally you would pass a
103 ecb encrypt mode implementation of some underlying algorithm as the ecb
104 parameter. */
105void ccmode_factory_ofb_crypt(struct ccmode_ofb *ofb,
106 const struct ccmode_ecb *ecb);
107
108/* Use these function to runtime initialize a ccmode_omac decrypt object (for
109 example if it's part of a larger structure). Normally you would pass a
110 ecb decrypt mode implementation of some underlying algorithm as the ecb
111 parameter. */
112void ccmode_factory_omac_decrypt(struct ccmode_omac *omac,
113 const struct ccmode_ecb *ecb);
114
115/* Use these function to runtime initialize a ccmode_omac encrypt object (for
116 example if it's part of a larger structure). Normally you would pass a
117 ecb encrypt mode implementation of some underlying algorithm as the ecb
118 parameter. */
119void ccmode_factory_omac_encrypt(struct ccmode_omac *omac,
120 const struct ccmode_ecb *ecb);
121
122/* Use these function to runtime initialize a ccmode_xts decrypt object (for
123 example if it's part of a larger structure). Normally you would pass a
124 ecb decrypt mode implementation of some underlying algorithm as the ecb
125 parameter. */
126void ccmode_factory_xts_decrypt(struct ccmode_xts *xts,
127 const struct ccmode_ecb *ecb,
128 const struct ccmode_ecb *ecb_encrypt);
129
130/* Use these function to runtime initialize a ccmode_xts encrypt object (for
131 example if it's part of a larger structure). Normally you would pass a
132 ecb encrypt mode implementation of some underlying algorithm as the ecb
133 parameter. */
134void ccmode_factory_xts_encrypt(struct ccmode_xts *xts,
135 const struct ccmode_ecb *ecb,
136 const struct ccmode_ecb *ecb_encrypt);
137
138#endif /* _CORECRYPTO_CCMODE_FACTORY_H_ */
139