1*8fb009dcSAndroid Build Coastguard Worker /* Copyright (c) 2014, Google Inc. 2*8fb009dcSAndroid Build Coastguard Worker * 3*8fb009dcSAndroid Build Coastguard Worker * Permission to use, copy, modify, and/or distribute this software for any 4*8fb009dcSAndroid Build Coastguard Worker * purpose with or without fee is hereby granted, provided that the above 5*8fb009dcSAndroid Build Coastguard Worker * copyright notice and this permission notice appear in all copies. 6*8fb009dcSAndroid Build Coastguard Worker * 7*8fb009dcSAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 8*8fb009dcSAndroid Build Coastguard Worker * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 9*8fb009dcSAndroid Build Coastguard Worker * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 10*8fb009dcSAndroid Build Coastguard Worker * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 11*8fb009dcSAndroid Build Coastguard Worker * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION 12*8fb009dcSAndroid Build Coastguard Worker * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 13*8fb009dcSAndroid Build Coastguard Worker * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ 14*8fb009dcSAndroid Build Coastguard Worker 15*8fb009dcSAndroid Build Coastguard Worker #ifndef OPENSSL_HEADER_ENGINE_H 16*8fb009dcSAndroid Build Coastguard Worker #define OPENSSL_HEADER_ENGINE_H 17*8fb009dcSAndroid Build Coastguard Worker 18*8fb009dcSAndroid Build Coastguard Worker #include <openssl/base.h> 19*8fb009dcSAndroid Build Coastguard Worker 20*8fb009dcSAndroid Build Coastguard Worker #if defined(__cplusplus) 21*8fb009dcSAndroid Build Coastguard Worker extern "C" { 22*8fb009dcSAndroid Build Coastguard Worker #endif 23*8fb009dcSAndroid Build Coastguard Worker 24*8fb009dcSAndroid Build Coastguard Worker 25*8fb009dcSAndroid Build Coastguard Worker // Engines are collections of methods. Methods are tables of function pointers, 26*8fb009dcSAndroid Build Coastguard Worker // defined for certain algorithms, that allow operations on those algorithms to 27*8fb009dcSAndroid Build Coastguard Worker // be overridden via a callback. This can be used, for example, to implement an 28*8fb009dcSAndroid Build Coastguard Worker // RSA* that forwards operations to a hardware module. 29*8fb009dcSAndroid Build Coastguard Worker // 30*8fb009dcSAndroid Build Coastguard Worker // Methods are reference counted but |ENGINE|s are not. When creating a method, 31*8fb009dcSAndroid Build Coastguard Worker // you should zero the whole structure and fill in the function pointers that 32*8fb009dcSAndroid Build Coastguard Worker // you wish before setting it on an |ENGINE|. Any functions pointers that 33*8fb009dcSAndroid Build Coastguard Worker // are NULL indicate that the default behaviour should be used. 34*8fb009dcSAndroid Build Coastguard Worker 35*8fb009dcSAndroid Build Coastguard Worker 36*8fb009dcSAndroid Build Coastguard Worker // Allocation and destruction. 37*8fb009dcSAndroid Build Coastguard Worker 38*8fb009dcSAndroid Build Coastguard Worker // ENGINE_new returns an empty ENGINE that uses the default method for all 39*8fb009dcSAndroid Build Coastguard Worker // algorithms. 40*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT ENGINE *ENGINE_new(void); 41*8fb009dcSAndroid Build Coastguard Worker 42*8fb009dcSAndroid Build Coastguard Worker // ENGINE_free decrements the reference counts for all methods linked from 43*8fb009dcSAndroid Build Coastguard Worker // |engine| and frees |engine| itself. It returns one. 44*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int ENGINE_free(ENGINE *engine); 45*8fb009dcSAndroid Build Coastguard Worker 46*8fb009dcSAndroid Build Coastguard Worker 47*8fb009dcSAndroid Build Coastguard Worker // Method accessors. 48*8fb009dcSAndroid Build Coastguard Worker // 49*8fb009dcSAndroid Build Coastguard Worker // Method accessors take a method pointer and the size of the structure. The 50*8fb009dcSAndroid Build Coastguard Worker // size allows for ABI compatibility in the case that the method structure is 51*8fb009dcSAndroid Build Coastguard Worker // extended with extra elements at the end. Methods are always copied by the 52*8fb009dcSAndroid Build Coastguard Worker // set functions. 53*8fb009dcSAndroid Build Coastguard Worker // 54*8fb009dcSAndroid Build Coastguard Worker // Set functions return one on success and zero on allocation failure. 55*8fb009dcSAndroid Build Coastguard Worker 56*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int ENGINE_set_RSA_method(ENGINE *engine, 57*8fb009dcSAndroid Build Coastguard Worker const RSA_METHOD *method, 58*8fb009dcSAndroid Build Coastguard Worker size_t method_size); 59*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT RSA_METHOD *ENGINE_get_RSA_method(const ENGINE *engine); 60*8fb009dcSAndroid Build Coastguard Worker 61*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int ENGINE_set_ECDSA_method(ENGINE *engine, 62*8fb009dcSAndroid Build Coastguard Worker const ECDSA_METHOD *method, 63*8fb009dcSAndroid Build Coastguard Worker size_t method_size); 64*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT ECDSA_METHOD *ENGINE_get_ECDSA_method(const ENGINE *engine); 65*8fb009dcSAndroid Build Coastguard Worker 66*8fb009dcSAndroid Build Coastguard Worker 67*8fb009dcSAndroid Build Coastguard Worker // Generic method functions. 68*8fb009dcSAndroid Build Coastguard Worker // 69*8fb009dcSAndroid Build Coastguard Worker // These functions take a void* type but actually operate on all method 70*8fb009dcSAndroid Build Coastguard Worker // structures. 71*8fb009dcSAndroid Build Coastguard Worker 72*8fb009dcSAndroid Build Coastguard Worker // METHOD_ref increments the reference count of |method|. This is a no-op for 73*8fb009dcSAndroid Build Coastguard Worker // now because all methods are currently static. 74*8fb009dcSAndroid Build Coastguard Worker void METHOD_ref(void *method); 75*8fb009dcSAndroid Build Coastguard Worker 76*8fb009dcSAndroid Build Coastguard Worker // METHOD_unref decrements the reference count of |method| and frees it if the 77*8fb009dcSAndroid Build Coastguard Worker // reference count drops to zero. This is a no-op for now because all methods 78*8fb009dcSAndroid Build Coastguard Worker // are currently static. 79*8fb009dcSAndroid Build Coastguard Worker void METHOD_unref(void *method); 80*8fb009dcSAndroid Build Coastguard Worker 81*8fb009dcSAndroid Build Coastguard Worker 82*8fb009dcSAndroid Build Coastguard Worker // Private functions. 83*8fb009dcSAndroid Build Coastguard Worker 84*8fb009dcSAndroid Build Coastguard Worker // openssl_method_common_st contains the common part of all method structures. 85*8fb009dcSAndroid Build Coastguard Worker // This must be the first member of all method structures. 86*8fb009dcSAndroid Build Coastguard Worker struct openssl_method_common_st { 87*8fb009dcSAndroid Build Coastguard Worker int references; // dummy – not used. 88*8fb009dcSAndroid Build Coastguard Worker char is_static; 89*8fb009dcSAndroid Build Coastguard Worker }; 90*8fb009dcSAndroid Build Coastguard Worker 91*8fb009dcSAndroid Build Coastguard Worker 92*8fb009dcSAndroid Build Coastguard Worker #if defined(__cplusplus) 93*8fb009dcSAndroid Build Coastguard Worker } // extern C 94*8fb009dcSAndroid Build Coastguard Worker 95*8fb009dcSAndroid Build Coastguard Worker extern "C++" { 96*8fb009dcSAndroid Build Coastguard Worker 97*8fb009dcSAndroid Build Coastguard Worker BSSL_NAMESPACE_BEGIN 98*8fb009dcSAndroid Build Coastguard Worker 99*8fb009dcSAndroid Build Coastguard Worker BORINGSSL_MAKE_DELETER(ENGINE, ENGINE_free) 100*8fb009dcSAndroid Build Coastguard Worker 101*8fb009dcSAndroid Build Coastguard Worker BSSL_NAMESPACE_END 102*8fb009dcSAndroid Build Coastguard Worker 103*8fb009dcSAndroid Build Coastguard Worker } // extern C++ 104*8fb009dcSAndroid Build Coastguard Worker 105*8fb009dcSAndroid Build Coastguard Worker #endif 106*8fb009dcSAndroid Build Coastguard Worker 107*8fb009dcSAndroid Build Coastguard Worker #define ENGINE_R_OPERATION_NOT_SUPPORTED 100 108*8fb009dcSAndroid Build Coastguard Worker 109*8fb009dcSAndroid Build Coastguard Worker #endif // OPENSSL_HEADER_ENGINE_H 110