Home | History | Annotate | Download | only in keystore-engine
      1 /*
      2  * Copyright 2013 The Android Open Source Project
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  * 1. Redistributions of source code must retain the above copyright
      8  *    notice, this list of conditions and the following disclaimer.
      9  * 2. Redistributions in binary form must reproduce the above copyright
     10  *    notice, this list of conditions and the following disclaimer in the
     11  *    documentation and/or other materials provided with the distribution.
     12  *
     13  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY
     14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     15  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     16  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY
     17  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     18  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     19  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     20  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     21  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     22  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     23  *
     24  */
     25 
     26 /* For ENGINE method registration purposes. */
     27 extern const char* kKeystoreEngineId;
     28 
     29 extern int dsa_key_handle;
     30 extern int rsa_key_handle;
     31 
     32 struct DSA_Delete {
     33     void operator()(DSA* p) const {
     34         DSA_free(p);
     35     }
     36 };
     37 typedef UniquePtr<DSA, struct DSA_Delete> Unique_DSA;
     38 
     39 struct EC_KEY_Delete {
     40     void operator()(EC_KEY* p) const {
     41         EC_KEY_free(p);
     42     }
     43 };
     44 typedef UniquePtr<EC_KEY, EC_KEY_Delete> Unique_EC_KEY;
     45 
     46 struct RSA_Delete {
     47     void operator()(RSA* p) const {
     48         RSA_free(p);
     49     }
     50 };
     51 typedef UniquePtr<RSA, struct RSA_Delete> Unique_RSA;
     52 
     53 
     54 /* Keyhandles for ENGINE metadata */
     55 int keyhandle_new(void*, void*, CRYPTO_EX_DATA* ad, int idx, long, void*);
     56 void keyhandle_free(void *, void *ptr, CRYPTO_EX_DATA*, int, long, void*);
     57 int keyhandle_dup(CRYPTO_EX_DATA* to, CRYPTO_EX_DATA*, void *ptrRef, int idx, long, void *);
     58 
     59 /* For EC_EX_DATA stuff */
     60 void *ex_data_dup(void *);
     61 void ex_data_free(void *);
     62 void ex_data_clear_free(void *);
     63 
     64 /* ECDSA */
     65 int ecdsa_register(ENGINE *);
     66 int ecdsa_pkey_setup(ENGINE *, EVP_PKEY*, const char*);
     67 
     68 /* DSA */
     69 int dsa_register(ENGINE *);
     70 int dsa_pkey_setup(ENGINE *, EVP_PKEY*, const char*);
     71 
     72 /* RSA */
     73 int rsa_register(ENGINE *);
     74 int rsa_pkey_setup(ENGINE *, EVP_PKEY*, const char*);
     75