OSSL_METHOD_STORE.pod 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. =pod
  2. =head1 NAME
  3. OSSL_METHOD_STORE, ossl_method_store_new, ossl_method_store_free,
  4. ossl_method_store_init, ossl_method_store_cleanup,
  5. ossl_method_store_add, ossl_method_store_fetch,
  6. ossl_method_store_remove, ossl_method_store_remove_all_provided,
  7. ossl_method_store_cache_get, ossl_method_store_cache_set,
  8. ossl_method_store_cache_flush_all
  9. - implementation method store and query
  10. =head1 SYNOPSIS
  11. #include "internal/property.h"
  12. typedef struct ossl_method_store_st OSSL_METHOD_STORE;
  13. OSSL_METHOD_STORE *ossl_method_store_new(OSSL_LIB_CTX *ctx);
  14. void ossl_method_store_free(OSSL_METHOD_STORE *store);
  15. int ossl_method_store_init(OSSL_LIB_CTX *ctx);
  16. void ossl_method_store_cleanup(OSSL_LIB_CTX *ctx);
  17. int ossl_method_store_add(OSSL_METHOD_STORE *store, const OSSL_PROVIDER *prov,
  18. int nid, const char *properties, void *method,
  19. int (*method_up_ref)(void *),
  20. void (*method_destruct)(void *));
  21. int ossl_method_store_remove(OSSL_METHOD_STORE *store,
  22. int nid, const void *method);
  23. int ossl_method_store_fetch(OSSL_METHOD_STORE *store,
  24. int nid, const char *properties,
  25. void **method, const OSSL_PROVIDER **prov_rw);
  26. int ossl_method_store_remove_all_provided(OSSL_METHOD_STORE *store,
  27. const OSSL_PROVIDER *prov);
  28. int ossl_method_store_cache_get(OSSL_METHOD_STORE *store, OSSL_PROVIDER *prov,
  29. int nid, const char *prop_query, void **method);
  30. int ossl_method_store_cache_set(OSSL_METHOD_STORE *store, OSSL_PROVIDER *prov,
  31. int nid, const char *prop_query, void *method,
  32. int (*method_up_ref)(void *),
  33. void (*method_destruct)(void *));
  34. void ossl_method_store_cache_flush_all(OSSL_METHOD_STORE *store);
  35. =head1 DESCRIPTION
  36. OSSL_METHOD_STORE stores methods that can be queried using properties and a
  37. numeric identity (nid).
  38. Methods are expected to be library internal structures.
  39. It's left to the caller to define the exact contents.
  40. Numeric identities are expected to be an algorithm identity for the methods.
  41. It's left to the caller to define exactly what an algorithm is, and to allocate
  42. these numeric identities accordingly.
  43. The B<OSSL_METHOD_STORE> also holds an internal query cache, which is accessed
  44. separately (see L</Cache Functions> below).
  45. =head2 Store Functions
  46. ossl_method_store_init() initialises the method store subsystem in the scope of
  47. the library context I<ctx>.
  48. ossl_method_store_cleanup() cleans up and shuts down the implementation method
  49. store subsystem in the scope of the library context I<ctx>.
  50. ossl_method_store_new() create a new empty method store using the supplied
  51. I<ctx> to allow access to the required underlying property data.
  52. ossl_method_store_free() frees resources allocated to I<store>.
  53. ossl_method_store_add() adds the I<method> constructed from an implementation in
  54. the provider I<prov> to the I<store> as an instance of an algorithm indicated by
  55. I<nid> and the property definition I<properties>, unless the I<store> already
  56. has a method from the same provider with the same I<nid> and I<properties>.
  57. If the I<method_up_ref> function is given, it's called to increment the
  58. reference count of the method.
  59. If the I<method_destruct> function is given, it's called when this function
  60. fails to add the method to the store, or later on when it is being released from
  61. the I<store>.
  62. ossl_method_store_remove() removes the I<method> identified by I<nid> from the
  63. I<store>.
  64. ossl_method_store_fetch() queries I<store> for a method identified by I<nid>
  65. that matches the property query I<prop_query>.
  66. I<*prop> may be a pointer to a provider, which will narrow the search
  67. to methods from that provider.
  68. The result, if any, is returned in I<*method>, and its provider in I<*prov>.
  69. ossl_method_store_remove_all_provided() removes all methods from I<store>
  70. that are provided by I<prov>.
  71. When doing so, it also flushes the corresponding cache entries.
  72. =head2 Cache Functions
  73. ossl_method_store_cache_get() queries the cache associated with the I<store>
  74. for a method identified by I<nid> that matches the property query
  75. I<prop_query>.
  76. Additionally, if I<prov> isn't NULL, it will be used to narrow the search
  77. to only include methods from that provider.
  78. The result, if any, is returned in I<method>.
  79. ossl_method_store_cache_set() sets a cache entry identified by I<nid> from the
  80. provider I<prov>, with the property query I<prop_query> in the I<store>.
  81. Future calls to ossl_method_store_cache_get() will return the specified I<method>.
  82. The I<method_up_ref> function is called to increment the
  83. reference count of the method and the I<method_destruct> function is called
  84. to decrement it.
  85. ossl_method_store_cache_flush_all() flushes all cached entries associated with
  86. I<store>.
  87. =head1 NOTES
  88. The I<prop_query> argument to ossl_method_store_cache_get() and
  89. ossl_method_store_cache_set() is not allowed to be NULL. Use "" for an
  90. empty property definition or query.
  91. =head1 RETURN VALUES
  92. ossl_method_store_new() returns a new method store object or NULL on failure.
  93. ossl_method_store_free(), ossl_method_store_add(),
  94. ossl_method_store_remove(), ossl_method_store_fetch(),
  95. ossl_method_store_cache_get(), ossl_method_store_cache_set() and
  96. ossl_method_store_flush_cache() return B<1> on success and B<0> on error.
  97. ossl_method_store_free() and ossl_method_store_cleanup() do not return any value.
  98. =head1 HISTORY
  99. This functionality was added to OpenSSL 3.0.
  100. =head1 COPYRIGHT
  101. Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved.
  102. Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
  103. Licensed under the Apache License 2.0 (the "License"). You may not use this
  104. file except in compliance with the License. You can obtain a copy in the file
  105. LICENSE in the source distribution or at
  106. L<https://www.openssl.org/source/license.html>.
  107. =cut