1 /* 2 * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. 3 * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. 4 * 5 * Licensed under the Apache License 2.0 (the "License"). You may not use 6 * this file except in compliance with the License. You can obtain a copy 7 * in the file LICENSE in the source distribution or at 8 * https://www.openssl.org/source/license.html 9 */ 10 11 #include <openssl/crypto.h> 12 #include "internal/property.h" 13 14 typedef int OSSL_PROPERTY_IDX; 15 16 typedef enum { 17 OSSL_PROPERTY_OPER_EQ, 18 OSSL_PROPERTY_OPER_NE, 19 OSSL_PROPERTY_OVERRIDE 20 } OSSL_PROPERTY_OPER; 21 22 struct ossl_property_definition_st { 23 OSSL_PROPERTY_IDX name_idx; 24 OSSL_PROPERTY_TYPE type; 25 OSSL_PROPERTY_OPER oper; 26 unsigned int optional : 1; 27 union { 28 int64_t int_val; /* Signed integer */ 29 OSSL_PROPERTY_IDX str_val; /* String */ 30 } v; 31 }; 32 33 struct ossl_property_list_st { 34 int num_properties; 35 unsigned int has_optional : 1; 36 OSSL_PROPERTY_DEFINITION properties[1]; 37 }; 38 39 #define OSSL_PROPERTY_TRUE 1 40 #define OSSL_PROPERTY_FALSE 2 41 42 /* Property string functions */ 43 OSSL_PROPERTY_IDX ossl_property_name(OSSL_LIB_CTX *ctx, const char *s, 44 int create); 45 const char *ossl_property_name_str(OSSL_LIB_CTX *ctx, OSSL_PROPERTY_IDX idx); 46 OSSL_PROPERTY_IDX ossl_property_value(OSSL_LIB_CTX *ctx, const char *s, 47 int create); 48 const char *ossl_property_value_str(OSSL_LIB_CTX *ctx, OSSL_PROPERTY_IDX idx); 49 50 /* Property list functions */ 51 void ossl_property_free(OSSL_PROPERTY_LIST *p); 52 int ossl_property_has_optional(const OSSL_PROPERTY_LIST *query); 53 54 /* Property definition cache functions */ 55 OSSL_PROPERTY_LIST *ossl_prop_defn_get(OSSL_LIB_CTX *ctx, const char *prop); 56 int ossl_prop_defn_set(OSSL_LIB_CTX *ctx, const char *prop, 57 OSSL_PROPERTY_LIST **pl); 58