2018-11-16 01:44:30 +00:00
|
|
|
=pod
|
|
|
|
|
|
|
|
=head1 NAME
|
|
|
|
|
|
|
|
ossl_method_store_new, ossl_method_store_free, ossl_method_store_init,
|
|
|
|
ossl_method_store_cleanup, ossl_method_store_add, ossl_method_store_remove,
|
|
|
|
ossl_method_store_fetch, ossl_method_store_set_global_properties,
|
|
|
|
ossl_method_store_cache_get and ossl_method_store_cache_set
|
|
|
|
- implementation method store and query
|
|
|
|
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
|
|
|
|
#include "internal/property.h"
|
|
|
|
|
|
|
|
typedef struct ossl_method_store_st OSSL_METHOD_STORE;
|
|
|
|
|
|
|
|
OSSL_METHOD_STORE *ossl_method_store_new(void);
|
|
|
|
void ossl_method_store_free(OSSL_METHOD_STORE *store);
|
|
|
|
int ossl_method_store_init(void);
|
|
|
|
void ossl_method_store_cleanup(void);
|
|
|
|
int ossl_method_store_add(OSSL_METHOD_STORE *store,
|
|
|
|
int nid, const char *properties,
|
2019-02-18 08:40:07 +00:00
|
|
|
void *method, void (*method_destruct)(void *));
|
2018-11-16 01:44:30 +00:00
|
|
|
int ossl_method_store_remove(OSSL_METHOD_STORE *store,
|
2019-02-18 08:40:07 +00:00
|
|
|
int nid, const void *method);
|
2018-11-16 01:44:30 +00:00
|
|
|
int ossl_method_store_fetch(OSSL_METHOD_STORE *store,
|
|
|
|
int nid, const char *properties,
|
2019-02-18 08:40:07 +00:00
|
|
|
void **method);
|
2018-11-16 01:44:30 +00:00
|
|
|
int ossl_method_store_set_global_properties(OSSL_METHOD_STORE *store,
|
|
|
|
const char *prop_query);
|
|
|
|
int ossl_method_store_cache_get(OSSL_METHOD_STORE *store, int nid,
|
2019-02-18 08:40:07 +00:00
|
|
|
const char *prop_query, void **method);
|
2018-11-16 01:44:30 +00:00
|
|
|
int ossl_method_store_cache_set(OSSL_METHOD_STORE *store, int nid,
|
2019-02-18 08:40:07 +00:00
|
|
|
const char *prop_query, void *method);
|
2018-11-16 01:44:30 +00:00
|
|
|
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
|
2019-02-18 08:40:07 +00:00
|
|
|
OSSL_METHOD_STORE stores methods that can be queried using properties and a
|
|
|
|
numeric identity (nid).
|
2018-11-16 01:44:30 +00:00
|
|
|
|
2019-02-18 08:40:07 +00:00
|
|
|
Methods are expected to be library internal structures.
|
|
|
|
It's left to the caller to define the exact contents.
|
|
|
|
|
|
|
|
Numeric identities are expected to be an algorithm identity for the methods.
|
|
|
|
It's left to the caller to define exactly what an algorithm is, and to allocate
|
|
|
|
these numeric identities accordingly.
|
|
|
|
|
|
|
|
The B<OSSL_METHOD_STORE> also holds an internal query cache, which is accessed
|
|
|
|
separately (see L</Cache Functions> below).
|
|
|
|
|
|
|
|
=head2 Store Functions
|
|
|
|
|
|
|
|
ossl_method_store_init() initialises the method store subsystem.
|
2018-11-16 01:44:30 +00:00
|
|
|
|
|
|
|
ossl_method_store_cleanup() cleans up and shuts down the implementation method
|
2019-02-18 08:40:07 +00:00
|
|
|
store subsystem.
|
2018-11-16 01:44:30 +00:00
|
|
|
|
2019-02-18 08:40:07 +00:00
|
|
|
ossl_method_store_new() create a new empty method store.
|
2018-11-16 01:44:30 +00:00
|
|
|
|
|
|
|
ossl_method_store_free() frees resources allocated to B<store>.
|
|
|
|
|
2019-02-18 08:40:07 +00:00
|
|
|
ossl_method_store_add() adds the B<method> to the B<store> as an instance of an
|
|
|
|
algorithm indicated by B<nid> and the property definition B<properties>.
|
|
|
|
The optional B<method_destruct> function is called when B<method> is being
|
|
|
|
released from B<store>.
|
2018-11-16 01:44:30 +00:00
|
|
|
|
2019-02-18 08:40:07 +00:00
|
|
|
ossl_method_store_remove() removes the B<method> identified by B<nid> from the
|
|
|
|
B<store>.
|
2018-11-16 01:44:30 +00:00
|
|
|
|
2019-02-18 08:40:07 +00:00
|
|
|
ossl_method_store_fetch() queries B<store> for an method identified by B<nid>
|
|
|
|
that matches the property query B<prop_query>.
|
|
|
|
The result, if any, is returned in B<method>.
|
2018-11-16 01:44:30 +00:00
|
|
|
|
2019-02-18 08:40:07 +00:00
|
|
|
ossl_method_store_set_global_properties() sets method B<store> wide query
|
|
|
|
properties to B<prop_query>.
|
2018-11-16 01:44:30 +00:00
|
|
|
All subsequent fetches will need to meet both these global query properties
|
2019-02-18 08:40:07 +00:00
|
|
|
and the ones passed to the ossl_method_store_free().
|
|
|
|
|
|
|
|
=head2 Cache Functions
|
2018-11-16 01:44:30 +00:00
|
|
|
|
|
|
|
ossl_method_store_cache_get() queries the cache associated with the B<store>
|
2019-02-18 08:40:07 +00:00
|
|
|
for an method identified by B<nid> that matches the property query
|
2018-11-16 01:44:30 +00:00
|
|
|
B<prop_query>.
|
2019-02-18 08:40:07 +00:00
|
|
|
The result, if any, is returned in B<method>.
|
2018-11-16 01:44:30 +00:00
|
|
|
|
2019-02-18 08:40:07 +00:00
|
|
|
ossl_method_store_cache_set() sets a cache entry identified by B<nid> with the
|
2018-11-16 01:44:30 +00:00
|
|
|
property query B<prop_query> in the B<store>.
|
2019-02-18 08:40:07 +00:00
|
|
|
Future cache gets will return the specified B<method>.
|
2018-11-16 01:44:30 +00:00
|
|
|
|
|
|
|
=head1 RETURN VALUES
|
|
|
|
|
|
|
|
ossl_method_store_new() a new method store object or B<NULL> on failure.
|
|
|
|
|
|
|
|
ossl_method_store_free(), ossl_method_store_add(),
|
|
|
|
ossl_method_store_remove(), ossl_method_store_fetch(),
|
|
|
|
ossl_method_store_set_global_properties(), ossl_method_store_cache_get()
|
|
|
|
and ossl_method_store_cache_set() return B<1> on success and B<0> on error.
|
|
|
|
|
|
|
|
ossl_method_store_free() and ossl_method_store_cleanup() do not return values.
|
|
|
|
|
|
|
|
=head1 HISTORY
|
|
|
|
|
|
|
|
This functionality was added to OpenSSL 3.0.0.
|
|
|
|
|
|
|
|
=head1 COPYRIGHT
|
|
|
|
|
|
|
|
Copyright 2019 The OpenSSL Project Authors. All Rights Reserved.
|
|
|
|
Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
|
|
|
|
|
|
|
|
Licensed under the Apache License 2.0 (the "License"). You may not use this
|
|
|
|
file except in compliance with the License. You can obtain a copy in the file
|
|
|
|
LICENSE in the source distribution or at
|
|
|
|
L<https://www.openssl.org/source/license.html>.
|
|
|
|
|
|
|
|
=cut
|