support for delphi 11.1
This commit is contained in:
233
contrib/mORMot/SQLite3/amalgamation/ciphers/cipher_common.h
Normal file
233
contrib/mORMot/SQLite3/amalgamation/ciphers/cipher_common.h
Normal file
@@ -0,0 +1,233 @@
|
||||
/*
|
||||
** Name: cipher_common.h
|
||||
** Purpose: Header for the ciphers of SQLite3 Multiple Ciphers
|
||||
** Author: Ulrich Telle
|
||||
** Created: 2020-02-02
|
||||
** Copyright: (c) 2006-2020 Ulrich Telle
|
||||
** License: MIT
|
||||
*/
|
||||
|
||||
#ifndef CIPHER_COMMON_H_
|
||||
#define CIPHER_COMMON_H_
|
||||
|
||||
#include "sqlite3mc.h"
|
||||
|
||||
/*
|
||||
// ATTENTION: Macro similar to that in pager.c
|
||||
// TODO: Check in case of new version of SQLite
|
||||
*/
|
||||
#define WX_PAGER_MJ_PGNO(x) ((PENDING_BYTE/(x))+1)
|
||||
|
||||
#define CODEC_TYPE_DEFAULT CODEC_TYPE_CHACHA20
|
||||
|
||||
#ifndef CODEC_TYPE
|
||||
#define CODEC_TYPE CODEC_TYPE_DEFAULT
|
||||
#endif
|
||||
|
||||
#if CODEC_TYPE < 1 || CODEC_TYPE > CODEC_TYPE_MAX
|
||||
#error "Invalid codec type selected"
|
||||
#endif
|
||||
|
||||
#define MAXKEYLENGTH 32
|
||||
#define KEYLENGTH_AES128 16
|
||||
#define KEYLENGTH_AES256 32
|
||||
#define KEYSALT_LENGTH 16
|
||||
|
||||
#define CODEC_SHA_ITER 4001
|
||||
|
||||
typedef struct _Codec
|
||||
{
|
||||
int m_isEncrypted;
|
||||
int m_hmacCheck;
|
||||
/* Read cipher */
|
||||
int m_hasReadCipher;
|
||||
int m_readCipherType;
|
||||
void* m_readCipher;
|
||||
int m_readReserved;
|
||||
/* Write cipher */
|
||||
int m_hasWriteCipher;
|
||||
int m_writeCipherType;
|
||||
void* m_writeCipher;
|
||||
int m_writeReserved;
|
||||
|
||||
sqlite3* m_db; /* Pointer to DB */
|
||||
Btree* m_bt; /* Pointer to B-tree used by DB */
|
||||
BtShared* m_btShared; /* Pointer to shared B-tree used by DB */
|
||||
unsigned char m_page[SQLITE_MAX_PAGE_SIZE + 24];
|
||||
int m_pageSize;
|
||||
int m_reserved;
|
||||
int m_hasKeySalt;
|
||||
unsigned char m_keySalt[KEYSALT_LENGTH];
|
||||
} Codec;
|
||||
|
||||
#define CIPHER_PARAMS_SENTINEL { "", 0, 0, 0, 0 }
|
||||
#define CIPHER_PAGE1_OFFSET 24
|
||||
|
||||
typedef struct _CipherParams
|
||||
{
|
||||
char* m_name;
|
||||
int m_value;
|
||||
int m_default;
|
||||
int m_minValue;
|
||||
int m_maxValue;
|
||||
} CipherParams;
|
||||
|
||||
typedef struct _CodecParameter
|
||||
{
|
||||
char* m_name;
|
||||
int m_id;
|
||||
CipherParams* m_params;
|
||||
} CodecParameter;
|
||||
|
||||
typedef void* (*AllocateCipher_t)(sqlite3* db);
|
||||
typedef void (*FreeCipher_t)(void* cipher);
|
||||
typedef void (*CloneCipher_t)(void* cipherTo, void* cipherFrom);
|
||||
typedef int (*CompareCipher_t)(void* cipher1, void* cipher2);
|
||||
typedef int (*GetLegacy_t)(void* cipher);
|
||||
typedef int (*GetPageSize_t)(void* cipher);
|
||||
typedef int (*GetReserved_t)(void* cipher);
|
||||
typedef unsigned char* (*GetSalt_t)(void* cipher);
|
||||
typedef void (*GenerateKey_t)(void* cipher, BtShared* pBt, char* userPassword, int passwordLength, int rekey, unsigned char* cipherSalt);
|
||||
typedef int (*EncryptPage_t)(void* cipher, int page, unsigned char* data, int len, int reserved);
|
||||
typedef int (*DecryptPage_t)(void* cipher, int page, unsigned char* data, int len, int reserved, int hmacCheck);
|
||||
|
||||
typedef struct _CodecDescriptor
|
||||
{
|
||||
char m_name[32];
|
||||
AllocateCipher_t m_allocateCipher;
|
||||
FreeCipher_t m_freeCipher;
|
||||
CloneCipher_t m_cloneCipher;
|
||||
CompareCipher_t m_compareCipher;
|
||||
GetLegacy_t m_getLegacy;
|
||||
GetPageSize_t m_getPageSize;
|
||||
GetReserved_t m_getReserved;
|
||||
GetSalt_t m_getSalt;
|
||||
GenerateKey_t m_generateKey;
|
||||
EncryptPage_t m_encryptPage;
|
||||
DecryptPage_t m_decryptPage;
|
||||
} CipherDescriptor;
|
||||
|
||||
SQLITE_PRIVATE int sqlite3mcGetCipherParameter(CipherParams* cipherParams, const char* paramName);
|
||||
SQLITE_PRIVATE int sqlite3mcGetCipherType(sqlite3* db);
|
||||
SQLITE_PRIVATE CipherParams* sqlite3mcGetCipherParams(sqlite3* db, int cypherType);
|
||||
SQLITE_PRIVATE int sqlite3mcCodecInit(Codec* codec);
|
||||
SQLITE_PRIVATE void sqlite3mcCodecTerm(Codec* codec);
|
||||
SQLITE_PRIVATE void sqlite3mcClearKeySalt(Codec* codec);
|
||||
SQLITE_PRIVATE int sqlite3mcCodecSetup(Codec* codec, int cipherType, char* userPassword, int passwordLength);
|
||||
SQLITE_PRIVATE int sqlite3mcSetupWriteCipher(Codec* codec, int cipherType, char* userPassword, int passwordLength);
|
||||
SQLITE_PRIVATE void sqlite3mcSetIsEncrypted(Codec* codec, int isEncrypted);
|
||||
SQLITE_PRIVATE void sqlite3mcSetReadCipherType(Codec* codec, int cipherType);
|
||||
SQLITE_PRIVATE void sqlite3mcSetWriteCipherType(Codec* codec, int cipherType);
|
||||
SQLITE_PRIVATE void sqlite3mcSetHasReadCipher(Codec* codec, int hasReadCipher);
|
||||
SQLITE_PRIVATE void sqlite3mcSetHasWriteCipher(Codec* codec, int hasWriteCipher);
|
||||
SQLITE_PRIVATE void sqlite3mcSetDb(Codec* codec, sqlite3* db);
|
||||
SQLITE_PRIVATE void sqlite3mcSetBtree(Codec* codec, Btree* bt);
|
||||
SQLITE_PRIVATE void sqlite3mcSetReadReserved(Codec* codec, int reserved);
|
||||
SQLITE_PRIVATE void sqlite3mcSetWriteReserved(Codec* codec, int reserved);
|
||||
SQLITE_PRIVATE int sqlite3mcIsEncrypted(Codec* codec);
|
||||
SQLITE_PRIVATE int sqlite3mcHasReadCipher(Codec* codec);
|
||||
SQLITE_PRIVATE int sqlite3mcHasWriteCipher(Codec* codec);
|
||||
SQLITE_PRIVATE Btree* sqlite3mcGetBtree(Codec* codec);
|
||||
SQLITE_PRIVATE BtShared* sqlite3mcGetBtShared(Codec* codec);
|
||||
SQLITE_PRIVATE int sqlite3mcGetPageSize(Codec* codec);
|
||||
SQLITE_PRIVATE int sqlite3mcGetReadReserved(Codec* codec);
|
||||
SQLITE_PRIVATE int sqlite3mcGetWriteReserved(Codec* codec);
|
||||
SQLITE_PRIVATE unsigned char* sqlite3mcGetPageBuffer(Codec* codec);
|
||||
SQLITE_PRIVATE int sqlite3mcGetLegacyReadCipher(Codec* codec);
|
||||
SQLITE_PRIVATE int sqlite3mcGetLegacyWriteCipher(Codec* codec);
|
||||
SQLITE_PRIVATE int sqlite3mcGetPageSizeReadCipher(Codec* codec);
|
||||
SQLITE_PRIVATE int sqlite3mcGetPageSizeWriteCipher(Codec* codec);
|
||||
SQLITE_PRIVATE int sqlite3mcGetReservedReadCipher(Codec* codec);
|
||||
SQLITE_PRIVATE int sqlite3mcGetReservedWriteCipher(Codec* codec);
|
||||
SQLITE_PRIVATE int sqlite3mcReservedEqual(Codec* codec);
|
||||
SQLITE_PRIVATE unsigned char* sqlite3mcGetSaltWriteCipher(Codec* codec);
|
||||
SQLITE_PRIVATE int sqlite3mcCodecCopy(Codec* codec, Codec* other);
|
||||
SQLITE_PRIVATE int sqlite3mcCodecCompare(Codec* codec1, Codec* codec2);
|
||||
|
||||
SQLITE_PRIVATE void sqlite3mcGenerateReadKey(Codec* codec, char* userPassword, int passwordLength, unsigned char* cipherSalt);
|
||||
|
||||
SQLITE_PRIVATE void sqlite3mcGenerateWriteKey(Codec* codec, char* userPassword, int passwordLength, unsigned char* cipherSalt);
|
||||
|
||||
SQLITE_PRIVATE int sqlite3mcEncrypt(Codec* codec, int page, unsigned char* data, int len, int useWriteKey);
|
||||
|
||||
SQLITE_PRIVATE int sqlite3mcDecrypt(Codec* codec, int page, unsigned char* data, int len);
|
||||
|
||||
SQLITE_PRIVATE int sqlite3mcCopyCipher(Codec* codec, int read2write);
|
||||
|
||||
SQLITE_PRIVATE int sqlite3mcCodecSetup(Codec* codec, int cipherType, char* userPassword, int passwordLength);
|
||||
SQLITE_PRIVATE int sqlite3mcSetupWriteCipher(Codec* codec, int cipherType, char* userPassword, int passwordLength);
|
||||
|
||||
SQLITE_PRIVATE void sqlite3mcSetIsEncrypted(Codec* codec, int isEncrypted);
|
||||
SQLITE_PRIVATE void sqlite3mcSetReadCipherType(Codec* codec, int cipherType);
|
||||
SQLITE_PRIVATE void sqlite3mcSetWriteCipherType(Codec* codec, int cipherType);
|
||||
SQLITE_PRIVATE void sqlite3mcSetHasReadCipher(Codec* codec, int hasReadCipher);
|
||||
SQLITE_PRIVATE void sqlite3mcSetHasWriteCipher(Codec* codec, int hasWriteCipher);
|
||||
SQLITE_PRIVATE void sqlite3mcSetDb(Codec* codec, sqlite3* db);
|
||||
SQLITE_PRIVATE void sqlite3mcSetBtree(Codec* codec, Btree* bt);
|
||||
SQLITE_PRIVATE void sqlite3mcSetReadReserved(Codec* codec, int reserved);
|
||||
SQLITE_PRIVATE void sqlite3mcSetWriteReserved(Codec* codec, int reserved);
|
||||
|
||||
SQLITE_PRIVATE int sqlite3mcIsEncrypted(Codec* codec);
|
||||
SQLITE_PRIVATE int sqlite3mcHasReadCipher(Codec* codec);
|
||||
SQLITE_PRIVATE int sqlite3mcHasWriteCipher(Codec* codec);
|
||||
SQLITE_PRIVATE Btree* sqlite3mcGetBtree(Codec* codec);
|
||||
SQLITE_PRIVATE BtShared* sqlite3mcGetBtShared(Codec* codec);
|
||||
SQLITE_PRIVATE int sqlite3mcGetPageSize(Codec* codec);
|
||||
SQLITE_PRIVATE int sqlite3mcGetReadReserved(Codec* codec);
|
||||
SQLITE_PRIVATE int sqlite3mcGetWriteReserved(Codec* codec);
|
||||
SQLITE_PRIVATE unsigned char* sqlite3mcGetPageBuffer(Codec* codec);
|
||||
SQLITE_PRIVATE int sqlite3mcGetLegacyReadCipher(Codec* codec);
|
||||
SQLITE_PRIVATE int sqlite3mcGetLegacyWriteCipher(Codec* codec);
|
||||
SQLITE_PRIVATE int sqlite3mcGetPageSizeReadCipher(Codec* codec);
|
||||
SQLITE_PRIVATE int sqlite3mcGetPageSizeWriteCipher(Codec* codec);
|
||||
SQLITE_PRIVATE int sqlite3mcGetReservedReadCipher(Codec* codec);
|
||||
SQLITE_PRIVATE int sqlite3mcGetReservedWriteCipher(Codec* codec);
|
||||
SQLITE_PRIVATE int sqlite3mcReservedEqual(Codec* codec);
|
||||
|
||||
SQLITE_PRIVATE void sqlite3mcPadPassword(char* password, int pswdlen, unsigned char pswd[32]);
|
||||
SQLITE_PRIVATE void sqlite3mcRC4(unsigned char* key, int keylen, unsigned char* textin, int textlen, unsigned char* textout);
|
||||
SQLITE_PRIVATE void sqlite3mcGetMD5Binary(unsigned char* data, int length, unsigned char* digest);
|
||||
SQLITE_PRIVATE void sqlite3mcGetSHABinary(unsigned char* data, int length, unsigned char* digest);
|
||||
SQLITE_PRIVATE void sqlite3mcGenerateInitialVector(int seed, unsigned char iv[16]);
|
||||
|
||||
SQLITE_PRIVATE int sqlite3mcIsHexKey(const unsigned char* hex, int len);
|
||||
SQLITE_PRIVATE int sqlite3mcConvertHex2Int(char c);
|
||||
SQLITE_PRIVATE void sqlite3mcConvertHex2Bin(const unsigned char* hex, int len, unsigned char* bin);
|
||||
|
||||
SQLITE_PRIVATE int sqlite3mcConfigureFromUri(sqlite3* db, const char *zDbName, int configDefault);
|
||||
SQLITE_PRIVATE void sqlite3mcConfigureSQLCipherVersion(sqlite3* db, int configDefault, int legacyVersion);
|
||||
|
||||
SQLITE_PRIVATE int sqlite3mcCodecAttach(sqlite3* db, int nDb, const char* zPath, const void* zKey, int nKey);
|
||||
SQLITE_PRIVATE void sqlite3mcCodecGetKey(sqlite3* db, int nDb, void** zKey, int* nKey);
|
||||
|
||||
/* Debugging */
|
||||
|
||||
#if 0
|
||||
#define SQLITE3MC_DEBUG
|
||||
#define SQLITE3MC_DEBUG_DATA
|
||||
#endif
|
||||
|
||||
#ifdef SQLITE3MC_DEBUG
|
||||
#define SQLITE3MC_DEBUG_LOG(...) { fprintf(stdout, __VA_ARGS__); fflush(stdout); }
|
||||
#else
|
||||
#define SQLITE3MC_DEBUG_LOG(...)
|
||||
#endif
|
||||
|
||||
#ifdef SQLITE3MC_DEBUG_DATA
|
||||
#define SQLITE3MC_DEBUG_HEX(DESC,BUFFER,LEN) \
|
||||
{ \
|
||||
int count; \
|
||||
printf(DESC); \
|
||||
for (count = 0; count < LEN; ++count) \
|
||||
{ \
|
||||
if (count % 16 == 0) printf("\n%05x: ", count); \
|
||||
printf("%02x ", ((unsigned char*) BUFFER)[count]); \
|
||||
} \
|
||||
printf("\n"); \
|
||||
fflush(stdout); \
|
||||
}
|
||||
#else
|
||||
#define SQLITE3MC_DEBUG_HEX(DESC,BUFFER,LEN)
|
||||
#endif
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user