123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- /*
- ///////////////////////////////////////////////////////////////////////////////
- // Name: codec.h
- // Purpose:
- // Author: Ulrich Telle
- // Modified by:
- // Created: 2006-12-06
- // Copyright: (c) Ulrich Telle
- // Licence: wxWindows licence
- ///////////////////////////////////////////////////////////////////////////////
- /// \file codec.h Interface of the codec class
- */
- #ifndef _CODEC_H_
- #define _CODEC_H_
- #ifdef __cplusplus
- extern "C" {
- #endif
- #if defined(__BORLANDC__)
- #define __STDC__ 1
- #endif
- #if defined(__BORLANDC__)
- #undef __STDC__
- #endif
- /*
- // 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)
- #ifdef __cplusplus
- } /* End of the 'extern "C"' block */
- #endif
- #include "rijndael.h"
- #define CODEC_TYPE_AES128 1
- #define CODEC_TYPE_AES256 2
- #ifndef CODEC_TYPE
- #define CODEC_TYPE CODEC_TYPE_AES128
- #endif
- #if CODEC_TYPE == CODEC_TYPE_AES256
- #define KEYLENGTH 32
- #define CODEC_SHA_ITER 4001
- #else
- #define KEYLENGTH 16
- #endif
- typedef struct _Codec
- {
- int m_isEncrypted;
- int m_hasReadKey;
- unsigned char m_readKey[KEYLENGTH];
- int m_hasWriteKey;
- unsigned char m_writeKey[KEYLENGTH];
- Rijndael* m_aes;
- Btree* m_bt; /* Pointer to B-tree used by DB */
- unsigned char m_page[SQLITE_MAX_PAGE_SIZE+24];
- } Codec;
- void CodecInit(Codec* codec);
- void CodecTerm(Codec* codec);
- void CodecCopy(Codec* codec, Codec* other);
- void CodecGenerateReadKey(Codec* codec, char* userPassword, int passwordLength);
- void CodecGenerateWriteKey(Codec* codec, char* userPassword, int passwordLength);
- void CodecEncrypt(Codec* codec, int page, unsigned char* data, int len, int useWriteKey);
- void CodecDecrypt(Codec* codec, int page, unsigned char* data, int len);
- void CodecCopyKey(Codec* codec, int read2write);
- void CodecSetIsEncrypted(Codec* codec, int isEncrypted);
- void CodecSetHasReadKey(Codec* codec, int hasReadKey);
- void CodecSetHasWriteKey(Codec* codec, int hasWriteKey);
- void CodecSetBtree(Codec* codec, Btree* bt);
- int CodecIsEncrypted(Codec* codec);
- int CodecHasReadKey(Codec* codec);
- int CodecHasWriteKey(Codec* codec);
- Btree* CodecGetBtree(Codec* codec);
- unsigned char* CodecGetPageBuffer(Codec* codec);
- void CodecGenerateEncryptionKey(Codec* codec, char* userPassword, int passwordLength,
- unsigned char encryptionKey[KEYLENGTH]);
- void CodecPadPassword(Codec* codec, char* password, int pswdlen, unsigned char pswd[32]);
- void CodecRC4(Codec* codec, unsigned char* key, int keylen,
- unsigned char* textin, int textlen,
- unsigned char* textout);
- void CodecGetMD5Binary(Codec* codec, unsigned char* data, int length, unsigned char* digest);
- #if CODEC_TYPE == CODEC_TYPE_AES256
- void CodecGetSHABinary(Codec* codec, unsigned char* data, int length, unsigned char* digest);
- #endif
-
- void CodecGenerateInitialVector(Codec* codec, int seed, unsigned char iv[16]);
- void CodecAES(Codec* codec, int page, int encrypt, unsigned char encryptionKey[KEYLENGTH],
- unsigned char* datain, int datalen, unsigned char* dataout);
- #endif
|