Remove no-unused-parameter compilation flag. Fix some errors.
[platform/core/security/yaca.git] / src / internal.h
1 /*
2  *  Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  *  Contact: Krzysztof Jackiewicz <k.jackiewicz@samsung.com>
5  *
6  *  Licensed under the Apache License, Version 2.0 (the "License");
7  *  you may not use this file except in compliance with the License.
8  *  You may obtain a copy of the License at
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
12  *  Unless required by applicable law or agreed to in writing, software
13  *  distributed under the License is distributed on an "AS IS" BASIS,
14  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  *  See the License for the specific language governing permissions and
16  *  limitations under the License
17  */
18
19 /**
20  * @file internal.h
21  * @brief
22  */
23
24 #ifndef YACA_INTERNAL_H
25 #define YACA_INTERNAL_H
26
27 #include <stddef.h>
28
29 #include <openssl/ossl_typ.h>
30 #include <openssl/err.h>
31
32 #include <yaca_types.h>
33
34 #define API __attribute__ ((visibility("default")))
35 #define UNUSED __attribute__((unused))
36
37 enum yaca_ctx_type_e {
38         YACA_CTX_INVALID = 0,
39         YACA_CTX_DIGEST,
40         YACA_CTX_SIGN,
41         YACA_CTX_ENCRYPT,
42         YACA_CTX_SEAL
43 };
44
45 /* Base structure for crypto contexts - to be inherited */
46 struct yaca_context_s {
47         enum yaca_ctx_type_e type;
48
49         void (*ctx_destroy)(const yaca_context_h ctx);
50         int (*get_output_length)(const yaca_context_h ctx, size_t input_len, size_t *output_len);
51         int (*set_param)(yaca_context_h ctx, yaca_property_e param,
52                          const void *value, size_t value_len);
53         int (*get_param)(const yaca_context_h ctx, yaca_property_e param,
54                          void **value, size_t *value_len);
55 };
56
57
58 /* Base structure for crypto keys - to be inherited */
59 struct yaca_key_s {
60         yaca_key_type_e type;
61 };
62
63 /**
64  * Internal type for:
65  * - YACA_KEY_TYPE_SYMMETRIC
66  * - YACA_KEY_TYPE_DES
67  * - YACA_KEY_TYPE_IV
68  */
69 struct yaca_key_simple_s {
70         struct yaca_key_s key;
71
72         size_t bits;
73         char d[];
74 };
75
76 /**
77  * Internal type for:
78  * - YACA_KEY_TYPE_RSA_PUB
79  * - YACA_KEY_TYPE_RSA_PRIV
80  * - YACA_KEY_TYPE_DSA_PUB
81  * - YACA_KEY_TYPE_DSA_PRIV
82  *
83  */
84 struct yaca_key_evp_s {
85         struct yaca_key_s key;
86
87         EVP_PKEY *evp;
88 };
89
90 int digest_get_algorithm(yaca_digest_algorithm_e algo, const EVP_MD **md);
91
92 int encrypt_get_algorithm(yaca_encrypt_algorithm_e algo,
93                           yaca_block_cipher_mode_e bcm,
94                           size_t key_bits,
95                           const EVP_CIPHER **cipher);
96
97 struct yaca_key_simple_s *key_get_simple(const yaca_key_h key);
98 struct yaca_key_evp_s *key_get_evp(const yaca_key_h key);
99
100 void error_dump(const char *file, int line, const char *function, int code);
101 #define ERROR_DUMP(code) error_dump(__FILE__, __LINE__, __func__, (code))
102 #define ERROR_CLEAR() ERR_clear_error()
103
104 /**
105  * Function responsible for translating the openssl error to yaca error and
106  * clearing/dumping the openssl error queue. Use only after openssl function
107  * failure.
108  *
109  * The function checks only first error in the queue. If the function doesn't
110  * find any error in openssl queue or is not able to translate it, it will
111  * return YACA_ERROR_INTERNAL and dump openssl errors if any. If the
112  * translation succeeds the function will clear the error queue and return the
113  * result of translation.
114  */
115 int error_handle(const char *file, int line, const char *function);
116 #define ERROR_HANDLE() error_handle(__FILE__, __LINE__, __func__)
117
118 #endif /* YACA_INTERNAL_H */