19d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Root/* 29d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Root * Copyright 2013 The Android Open Source Project 39d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Root * 49d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Root * Redistribution and use in source and binary forms, with or without 59d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Root * modification, are permitted provided that the following conditions 69d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Root * are met: 79d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Root * 1. Redistributions of source code must retain the above copyright 89d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Root * notice, this list of conditions and the following disclaimer. 99d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Root * 2. Redistributions in binary form must reproduce the above copyright 109d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Root * notice, this list of conditions and the following disclaimer in the 119d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Root * documentation and/or other materials provided with the distribution. 129d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Root * 139d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Root * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY 149d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Root * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 159d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Root * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 169d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Root * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY 179d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Root * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 189d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Root * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 199d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Root * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 209d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Root * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 219d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Root * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 229d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Root * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 239d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Root * 249d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Root */ 259d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Root 269d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Root/* For ENGINE method registration purposes. */ 279d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Rootextern const char* kKeystoreEngineId; 289d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Root 2996427baf0094d50047049d329b0779c3c910402cKenny Rootextern int dsa_key_handle; 3096427baf0094d50047049d329b0779c3c910402cKenny Rootextern int rsa_key_handle; 3196427baf0094d50047049d329b0779c3c910402cKenny Root 3296427baf0094d50047049d329b0779c3c910402cKenny Rootstruct DSA_Delete { 3396427baf0094d50047049d329b0779c3c910402cKenny Root void operator()(DSA* p) const { 3496427baf0094d50047049d329b0779c3c910402cKenny Root DSA_free(p); 3596427baf0094d50047049d329b0779c3c910402cKenny Root } 3696427baf0094d50047049d329b0779c3c910402cKenny Root}; 3796427baf0094d50047049d329b0779c3c910402cKenny Roottypedef UniquePtr<DSA, struct DSA_Delete> Unique_DSA; 3896427baf0094d50047049d329b0779c3c910402cKenny Root 3996427baf0094d50047049d329b0779c3c910402cKenny Rootstruct EC_KEY_Delete { 4096427baf0094d50047049d329b0779c3c910402cKenny Root void operator()(EC_KEY* p) const { 4196427baf0094d50047049d329b0779c3c910402cKenny Root EC_KEY_free(p); 4296427baf0094d50047049d329b0779c3c910402cKenny Root } 4396427baf0094d50047049d329b0779c3c910402cKenny Root}; 4496427baf0094d50047049d329b0779c3c910402cKenny Roottypedef UniquePtr<EC_KEY, EC_KEY_Delete> Unique_EC_KEY; 4596427baf0094d50047049d329b0779c3c910402cKenny Root 4696427baf0094d50047049d329b0779c3c910402cKenny Rootstruct RSA_Delete { 4796427baf0094d50047049d329b0779c3c910402cKenny Root void operator()(RSA* p) const { 4896427baf0094d50047049d329b0779c3c910402cKenny Root RSA_free(p); 4996427baf0094d50047049d329b0779c3c910402cKenny Root } 5096427baf0094d50047049d329b0779c3c910402cKenny Root}; 5196427baf0094d50047049d329b0779c3c910402cKenny Roottypedef UniquePtr<RSA, struct RSA_Delete> Unique_RSA; 5296427baf0094d50047049d329b0779c3c910402cKenny Root 5396427baf0094d50047049d329b0779c3c910402cKenny Root 549d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Root/* Keyhandles for ENGINE metadata */ 559d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Rootint keyhandle_new(void*, void*, CRYPTO_EX_DATA* ad, int idx, long, void*); 569d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Rootvoid keyhandle_free(void *, void *ptr, CRYPTO_EX_DATA*, int, long, void*); 579d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Rootint keyhandle_dup(CRYPTO_EX_DATA* to, CRYPTO_EX_DATA*, void *ptrRef, int idx, long, void *); 589d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Root 5996427baf0094d50047049d329b0779c3c910402cKenny Root/* For EC_EX_DATA stuff */ 6096427baf0094d50047049d329b0779c3c910402cKenny Rootvoid *ex_data_dup(void *); 6196427baf0094d50047049d329b0779c3c910402cKenny Rootvoid ex_data_free(void *); 6296427baf0094d50047049d329b0779c3c910402cKenny Rootvoid ex_data_clear_free(void *); 6396427baf0094d50047049d329b0779c3c910402cKenny Root 6447041552bd545846a1b7787823af4b5ca9e36deaKenny Root/* ECDSA */ 6547041552bd545846a1b7787823af4b5ca9e36deaKenny Rootint ecdsa_register(ENGINE *); 6647041552bd545846a1b7787823af4b5ca9e36deaKenny Rootint ecdsa_pkey_setup(ENGINE *, EVP_PKEY*, const char*); 6747041552bd545846a1b7787823af4b5ca9e36deaKenny Root 6896427baf0094d50047049d329b0779c3c910402cKenny Root/* DSA */ 6996427baf0094d50047049d329b0779c3c910402cKenny Rootint dsa_register(ENGINE *); 7096427baf0094d50047049d329b0779c3c910402cKenny Rootint dsa_pkey_setup(ENGINE *, EVP_PKEY*, const char*); 7196427baf0094d50047049d329b0779c3c910402cKenny Root 729d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Root/* RSA */ 739d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Rootint rsa_register(ENGINE *); 749d422a535cb4170acf46ec9fcb26cd3f428a2dc7Kenny Rootint rsa_pkey_setup(ENGINE *, EVP_PKEY*, const char*); 75