1 /* 2 ** SQLCipher 3 ** sqlcipher.h developed by Stephen Lombardo (Zetetic LLC) 4 ** sjlombardo at zetetic dot net 5 ** http://zetetic.net 6 ** 7 ** Copyright (c) 2008, ZETETIC LLC 8 ** All rights reserved. 9 ** 10 ** Redistribution and use in source and binary forms, with or without 11 ** modification, are permitted provided that the following conditions are met: 12 ** * Redistributions of source code must retain the above copyright 13 ** notice, this list of conditions and the following disclaimer. 14 ** * Redistributions in binary form must reproduce the above copyright 15 ** notice, this list of conditions and the following disclaimer in the 16 ** documentation and/or other materials provided with the distribution. 17 ** * Neither the name of the ZETETIC LLC nor the 18 ** names of its contributors may be used to endorse or promote products 19 ** derived from this software without specific prior written permission. 20 ** 21 ** THIS SOFTWARE IS PROVIDED BY ZETETIC LLC ''AS IS'' AND ANY 22 ** EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 23 ** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 24 ** DISCLAIMED. IN NO EVENT SHALL ZETETIC LLC BE LIABLE FOR ANY 25 ** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 26 ** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 27 ** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 28 ** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 30 ** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 ** 32 */ 33 /* BEGIN SQLCIPHER */ 34 #ifdef SQLITE_HAS_CODEC 35 #ifndef SQLCIPHER_H 36 #define SQLCIPHER_H 37 38 39 typedef struct { 40 int (*activate)(void *ctx); 41 int (*deactivate)(void *ctx); 42 const char* (*get_provider_name)(void *ctx); 43 int (*add_random)(void *ctx, void *buffer, int length); 44 int (*random)(void *ctx, void *buffer, int length); 45 int (*hmac)(void *ctx, unsigned char *hmac_key, int key_sz, unsigned char *in, int in_sz, unsigned char *in2, int in2_sz, unsigned char *out); 46 int (*kdf)(void *ctx, const unsigned char *pass, int pass_sz, unsigned char* salt, int salt_sz, int workfactor, int key_sz, unsigned char *key); 47 int (*cipher)(void *ctx, int mode, unsigned char *key, int key_sz, unsigned char *iv, unsigned char *in, int in_sz, unsigned char *out); 48 int (*set_cipher)(void *ctx, const char *cipher_name); 49 const char* (*get_cipher)(void *ctx); 50 int (*get_key_sz)(void *ctx); 51 int (*get_iv_sz)(void *ctx); 52 int (*get_block_sz)(void *ctx); 53 int (*get_hmac_sz)(void *ctx); 54 int (*ctx_copy)(void *target_ctx, void *source_ctx); 55 int (*ctx_cmp)(void *c1, void *c2); 56 int (*ctx_init)(void **ctx); 57 int (*ctx_free)(void **ctx); 58 int (*fips_status)(void *ctx); 59 const char* (*get_provider_version)(void *ctx); 60 } sqlcipher_provider; 61 62 /* utility functions */ 63 void sqlcipher_free(void *ptr, int sz); 64 void* sqlcipher_malloc(int sz); 65 void* sqlcipher_memset(void *v, unsigned char value, int len); 66 int sqlcipher_ismemset(const void *v, unsigned char value, int len); 67 int sqlcipher_memcmp(const void *v0, const void *v1, int len); 68 void sqlcipher_free(void *, int); 69 70 /* provider interfaces */ 71 int sqlcipher_register_provider(sqlcipher_provider *p); 72 sqlcipher_provider* sqlcipher_get_provider(); 73 74 #endif 75 #endif 76 /* END SQLCIPHER */ 77 78