]>
Commit | Line | Data |
---|---|---|
1 | /* | |
2 | * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved. | |
3 | * | |
4 | * Licensed under the Apache License 2.0 (the "License"). You may not use | |
5 | * this file except in compliance with the License. You can obtain a copy | |
6 | * in the file LICENSE in the source distribution or at | |
7 | * https://www.openssl.org/source/license.html | |
8 | */ | |
9 | ||
10 | #include "internal/propertyerr.h" | |
11 | #include "internal/property.h" | |
12 | #include "property_local.h" | |
13 | ||
14 | static int property_idx_cmp(const void *keyp, const void *compare) | |
15 | { | |
16 | OSSL_PROPERTY_IDX key = *(const OSSL_PROPERTY_IDX *)keyp; | |
17 | const OSSL_PROPERTY_DEFINITION *defn = | |
18 | (const OSSL_PROPERTY_DEFINITION *)compare; | |
19 | ||
20 | return key - defn->name_idx; | |
21 | } | |
22 | ||
23 | const OSSL_PROPERTY_DEFINITION * | |
24 | ossl_property_find_property(const OSSL_PROPERTY_LIST *list, | |
25 | OSSL_LIB_CTX *libctx, const char *name) | |
26 | { | |
27 | OSSL_PROPERTY_IDX name_idx; | |
28 | ||
29 | if (list == NULL || name == NULL | |
30 | || (name_idx = ossl_property_name(libctx, name, 0)) == 0) | |
31 | return NULL; | |
32 | ||
33 | return ossl_bsearch(&name_idx, list->properties, list->num_properties, | |
34 | sizeof(*list->properties), &property_idx_cmp, 0); | |
35 | } | |
36 | ||
37 | OSSL_PROPERTY_TYPE ossl_property_get_type(const OSSL_PROPERTY_DEFINITION *prop) | |
38 | { | |
39 | return prop->type; | |
40 | } | |
41 | ||
42 | const char *ossl_property_get_string_value(OSSL_LIB_CTX *libctx, | |
43 | const OSSL_PROPERTY_DEFINITION *prop) | |
44 | { | |
45 | const char *value = NULL; | |
46 | ||
47 | if (prop != NULL && prop->type == OSSL_PROPERTY_TYPE_STRING) | |
48 | value = ossl_property_value_str(libctx, prop->v.str_val); | |
49 | return value; | |
50 | } | |
51 | ||
52 | int64_t ossl_property_get_number_value(const OSSL_PROPERTY_DEFINITION *prop) | |
53 | { | |
54 | int64_t value = 0; | |
55 | ||
56 | if (prop != NULL && prop->type == OSSL_PROPERTY_TYPE_NUMBER) | |
57 | value = prop->v.int_val; | |
58 | return value; | |
59 | } | |
60 | ||
61 | /* Does a property query have any optional clauses */ | |
62 | int ossl_property_has_optional(const OSSL_PROPERTY_LIST *query) | |
63 | { | |
64 | return query->has_optional ? 1 : 0; | |
65 | } | |
66 | ||
67 | int ossl_property_is_enabled(OSSL_LIB_CTX *ctx, const char *property_name, | |
68 | const OSSL_PROPERTY_LIST *prop_list) | |
69 | { | |
70 | const OSSL_PROPERTY_DEFINITION *prop; | |
71 | ||
72 | prop = ossl_property_find_property(prop_list, ctx, property_name); | |
73 | /* Do a separate check for override as it does not set type */ | |
74 | if (prop == NULL || prop->optional || prop->oper == OSSL_PROPERTY_OVERRIDE) | |
75 | return 0; | |
76 | return (prop->type == OSSL_PROPERTY_TYPE_STRING | |
77 | && ((prop->oper == OSSL_PROPERTY_OPER_EQ | |
78 | && prop->v.str_val == OSSL_PROPERTY_TRUE) | |
79 | || (prop->oper == OSSL_PROPERTY_OPER_NE | |
80 | && prop->v.str_val != OSSL_PROPERTY_TRUE))); | |
81 | } | |
82 |