📄 cypher.h
字号:
void * data, /// Clear text binary data decoded. PINDEX length /// Maximum number of bytes of data decoded. ); /**Decode the data. */
PINDEX Decode( const PBYTEArray & coded, /// Encoded data (cyphertext). void * data, /// Clear text binary data decoded. PINDEX length /// Maximum number of bytes of data decoded. ); /**Decode the data.
Decode the data using the algorithm embodied by the descendent class
and the key specifed in the construction of the objects instance.
The first form takes a string and returns a decoded string. The second
form takes an encoded string and returns arbitrary binary data bytes. In
both cases the encoded string is always 7 bit printable ASCII suitable
for use in mail systems etc.
The final form takes and arbitrary block of bytes and decodes them into
another block of binary data.
@return
decoded string.
*/
BOOL Decode( const PBYTEArray & coded, /// Encoded data (cyphertext). PBYTEArray & clear /// Clear text binary data decoded. ); protected: /** Create a new encryption object instance. */ PCypher( PINDEX blockSize, /// Size of encryption blocks (in bits) BlockChainMode chainMode /// Block chain mode ); PCypher( const void * keyData, /// Key for the encryption/decryption algorithm. PINDEX keyLength, /// Length of the key. PINDEX blockSize, /// Size of encryption blocks (in bits) BlockChainMode chainMode /// Block chain mode ); /** Initialise the encoding/decoding sequence. */ virtual void Initialise( BOOL encoding /// Flag for encoding/decoding sequence about to start. ) = 0; /** Encode an n bit block of memory according to the encryption algorithm. */ virtual void EncodeBlock( const void * in, /// Pointer to clear n bit block. void * out /// Pointer to coded n bit block. ) = 0; /** Dencode an n bit block of memory according to the encryption algorithm. */ virtual void DecodeBlock( const void * in, /// Pointer to coded n bit block. void * out /// Pointer to clear n bit block. ) = 0; /// Key for the encryption/decryption. PBYTEArray key; /// Size of each encryption block in bytes PINDEX blockSize; /// Mode for sequential encryption each block BlockChainMode chainMode;};/** Tiny Encryption Algorithm.This class implements the Tiny Encryption Algorithm by David Wheeler andRoger Needham at Cambridge University.This is a simple algorithm using a 128 bit binary key and encrypts data in64 bit blocks.*/class PTEACypher : public PCypher{ PCLASSINFO(PTEACypher, PCypher) public: struct Key { BYTE value[16]; }; /** Create a new TEA encryption object instance. The parameterless version automatically generates a new, random, key. */ PTEACypher( BlockChainMode chainMode = ElectronicCodebook /// Block chain mode ); PTEACypher( const Key & keyData, /// Key for the encryption/decryption algorithm. BlockChainMode chainMode = ElectronicCodebook /// Block chain mode ); /** Set the key used by this encryption method. */ void SetKey( const Key & newKey /// Variable to take the key used by cypher. ); /** Get the key used by this encryption method. */ void GetKey( Key & newKey /// Variable to take the key used by cypher. ) const; /** Generate a new key suitable for use for encryption using random data. */ static void GenerateKey( Key & newKey /// Variable to take the newly generated key. ); protected: /** Initialise the encoding/decoding sequence. */ virtual void Initialise( BOOL encoding /// Flag for encoding/decoding sequence about to start. ); /** Encode an n bit block of memory according to the encryption algorithm. */ virtual void EncodeBlock( const void * in, /// Pointer to clear n bit block. void * out /// Pointer to coded n bit block. ); /** Decode an n bit block of memory according to the encryption algorithm. */ virtual void DecodeBlock( const void * in, /// Pointer to coded n bit block. void * out /// Pointer to clear n bit block. ); private: DWORD k0, k1, k2, k3;};class PSecureConfig : public PConfig{ PCLASSINFO(PSecureConfig, PConfig)/* This class defines a set of configuration keys which may be secured by an encrypted hash function. Thus values contained in keys specified by this class cannot be changed without invalidating the hash function. */ public: PSecureConfig( const PTEACypher::Key & productKey, // Key to decrypt validation code. const PStringArray & securedKeys, // List of secured keys. Source src = Application // Standard source for the configuration. ); PSecureConfig( const PTEACypher::Key & productKey, // Key to decrypt validation code. const char * const * securedKeyArray, // List of secured keys. PINDEX count, // Number of secured keys in list. Source src = Application // Standard source for the configuration. ); /* Create a secured configuration. The default section for the configuration keys is "Secured Options", the default security key is "Validation" and the defualt prefix string is "Pending:". The user can descend from this class and change any of the member variable for the names of keys or the configuration file section. */ // New functions for class const PStringArray & GetSecuredKeys() const { return securedKeys; } /* Get the list of secured keys in the configuration file section. @return Array of strings for the secured keys. */ const PString & GetSecurityKey() const { return securityKey; } /* Get the security keys name in the configuration file section. @return String for the security values key. */ const PString & GetExpiryDateKey() const { return expiryDateKey; } /* Get the expiry date keys name in the configuration file section. @return String for the expiry date values key. */ const PString & GetOptionBitsKey() const { return optionBitsKey; } /* Get the Option Bits keys name in the configuration file section. @return String for the Option Bits values key. */ const PString & GetPendingPrefix() const { return pendingPrefix; } /* Get the pending prefix name in the configuration file section. @return String for the pending prefix. */ void GetProductKey( PTEACypher::Key & productKey // Variable to receive the product key. ) const; /* Get the pending prefix name in the configuration file section. @return String for the pending prefix. */ enum ValidationState { Defaults, Pending, IsValid, Expired, Invalid }; ValidationState GetValidation() const; /* Check the current values attached to the keys specified in the constructor against an encoded validation key. @return State of the validation keys. */ BOOL ValidatePending(); /* Validate a pending secured option list for the product. All secured keys with the <CODE>pendingPrefix</CODE> name will be checked against the value of the field <CODE>securityKey</CODE>. If they match then they are copied to the secured variables. @return TRUE if secure key values are valid. */ void ResetPending(); /* "Unvalidate" a security configuration going back to a pending state, usually used after an <CODE>Invalid</CODE> response was recieved from the <A>GetValidation()</A> function. */ protected: PTEACypher::Key productKey; PStringArray securedKeys; PString securityKey; PString expiryDateKey; PString optionBitsKey; PString pendingPrefix;};#endif // _PCYPHER// End Of File ///////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -