mirror of
https://github.com/openmoh/openmohaa.git
synced 2025-04-28 13:47:58 +03:00
137 lines
6.2 KiB
C
137 lines
6.2 KiB
C
///////////////////////////////////////////////////////////////////////////////
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
#ifndef __GHTTPENCRYPTION_H__
|
|
#define __GHTTPENCRYPTION_H__
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//#include "ghttpCommon.h"
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// Encryption method
|
|
typedef enum
|
|
{
|
|
GHIEncryptionMethod_None,
|
|
GHIEncryptionMethod_Encrypt, // encrypt raw data written to buffer
|
|
GHIEncryptionMethod_Decrypt // decrypt raw data written to buffer
|
|
} GHIEncryptionMethod;
|
|
|
|
// Encryption results
|
|
typedef enum
|
|
{
|
|
GHIEncryptionResult_None,
|
|
GHIEncryptionResult_Success, // successfully encrypted/decrypted
|
|
GHIEncryptionResult_BufferTooSmall, // buffer was too small to hold converted data
|
|
GHIEncryptionResult_Error // some other kind of error
|
|
} GHIEncryptionResult;
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
struct GHIEncryptor; // forward declare for callbacks
|
|
struct GHIConnection;
|
|
|
|
// Called to init the encryption engine
|
|
typedef GHIEncryptionResult (*GHTTPEncryptorInitFunc) (struct GHIConnection * theConnection,
|
|
struct GHIEncryptor * theEncryptor);
|
|
|
|
// Called to connect the socket (some engines do this internally)
|
|
typedef GHIEncryptionResult (*GHTTPEncryptorConnectFunc)(struct GHIConnection * theConnection,
|
|
struct GHIEncryptor * theEncryptor);
|
|
|
|
// Called to start the handshake process engine
|
|
typedef GHIEncryptionResult (*GHTTPEncryptorStartFunc)(struct GHIConnection * theConnection,
|
|
struct GHIEncryptor * theEncryptor);
|
|
|
|
// Called to destroy the encryption engine
|
|
typedef GHIEncryptionResult (*GHTTPEncryptorCleanupFunc)(struct GHIConnection * theConnection,
|
|
struct GHIEncryptor * theEncryptor);
|
|
|
|
// Called when data needs to be encrypted
|
|
// - entire plain text buffer will be encrypted
|
|
typedef GHIEncryptionResult (*GHTTPEncryptorEncryptFunc)(struct GHIConnection * theConnection,
|
|
struct GHIEncryptor * theEncryptor,
|
|
const char * thePlainTextBuffer,
|
|
int thePlainTextLength, // [in]
|
|
char * theEncryptedBuffer,
|
|
int * theEncryptedLength); // [in/out]
|
|
|
|
// Called when data needs to be decrypted
|
|
// - encrypted data may be left in the buffer
|
|
// - decrypted buffer is appended to, not overwritten
|
|
typedef GHIEncryptionResult (*GHTTPEncryptorDecryptFunc)(struct GHIConnection * theConnection,
|
|
struct GHIEncryptor* theEncryptor,
|
|
const char * theEncryptedBuffer,
|
|
int * theEncryptedLength, // [in/out]
|
|
char * theDecryptedBuffer,
|
|
int * theDecryptedLength);// [in/out]
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
typedef struct GHIEncryptor
|
|
{
|
|
void* mInterface; // only SSL is currently supported
|
|
GHTTPEncryptionEngine mEngine;
|
|
GHTTPBool mInitialized;
|
|
GHTTPBool mSessionStarted; // handshake started?
|
|
GHTTPBool mSessionEstablished; // handshake completed?
|
|
|
|
// (As coded, these two are exclusive!)
|
|
// pattern 1 = manually encrypt the buffer, then send using normal socket functions
|
|
// pattern 2 = send plain text through the encryption engine, it will send
|
|
GHTTPBool mEncryptOnBuffer; // engine encrypts when writing to a buffer? (pattern 1)
|
|
GHTTPBool mEncryptOnSend; // engine encrypts when sending over socket? (pattern 2)
|
|
|
|
// If GHTTPTrue, the SSL library handles sending/receiving handshake messages
|
|
GHTTPBool mLibSendsHandshakeMessages;
|
|
|
|
// Functions for engine use
|
|
GHTTPEncryptorInitFunc mInitFunc;
|
|
GHTTPEncryptorCleanupFunc mCleanupFunc;
|
|
GHTTPEncryptorStartFunc mStartFunc; // start the handshake process
|
|
GHTTPEncryptorEncryptFunc mEncryptFunc;
|
|
GHTTPEncryptorDecryptFunc mDecryptFunc;
|
|
} GHIEncryptor;
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// ssl encryption
|
|
GHIEncryptionResult ghiEncryptorSslInitFunc(struct GHIConnection * connection,
|
|
struct GHIEncryptor * theEncryptor);
|
|
GHIEncryptionResult ghiEncryptorSslCleanupFunc(struct GHIConnection * connection,
|
|
struct GHIEncryptor * theEncryptor);
|
|
|
|
GHIEncryptionResult ghiEncryptorSslStartFunc(struct GHIConnection * connection,
|
|
struct GHIEncryptor * theEncryptor);
|
|
|
|
GHIEncryptionResult ghiEncryptorSslEncryptFunc(struct GHIConnection * connection,
|
|
struct GHIEncryptor * theEncryptor,
|
|
const char * thePlainTextBuffer,
|
|
int thePlainTextLength,
|
|
char * theEncryptedBuffer,
|
|
int * theEncryptedLength);
|
|
GHIEncryptionResult ghiEncryptorSslDecryptFunc(struct GHIConnection * connection,
|
|
struct GHIEncryptor * theEncryptor,
|
|
const char * theEncryptedBuffer,
|
|
int * theEncryptedLength,
|
|
char * theDecryptedBuffer,
|
|
int * theDecryptedLength);
|
|
GHIEncryptionResult ghiEncryptorSslEncryptSend(struct GHIConnection * connection,
|
|
struct GHIEncryptor * theEncryptor,
|
|
const char * thePlainTextBuffer,
|
|
int thePlainTextLength,
|
|
int * theBytesSent);
|
|
GHIEncryptionResult ghiEncryptorSslDecryptRecv(struct GHIConnection * connection,
|
|
struct GHIEncryptor * theEncryptor,
|
|
char * theDecryptedBuffer,
|
|
int * theDecryptedLength);
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
#endif // __GHTTPENCRYPTION_H__
|