CHelix v1.07 A class to implement the "Helix"
Encryption and Authentication cipher (Obsolete)
CHelix is a C++ implementation for the Helix Encryption and Authentication algorithm
as presented in a November 2003 Dr. Dobb's Journal article by Niels Ferguson and
Bruce Schneier. For further information please refer to the article.
The enclosed zip file contains the CHelix source
code and also includes a VC 6 workspace file to build a small test app and DLL version
- You are allowed to include the source code in any product (commercial, shareware,
freeware or otherwise) when your product is released in binary form.
- You are allowed to modify the source code in any way you want except you
cannot modify the copyright details at the top of each module.
- If you want to distribute source code with your application, then you are
only allowed to distribute versions released by the author. This is to maintain
a single distribution point for the source code.
28 December 2016
- Please note that this code is now considered obsolete as it has not been
updated in a long time and from a security point of view AES is now the recommended
cipher to use. For windows wrapper classes for AES encryption please take a
look at the authors CryptoWrappers framework.
V1.07 (30 December 2006)
- Updated copyright details.
- Addition of a CHELIX_EXT_CLASS preprocessor macro to allow the classes to
be more easily added to an extension dll
- Optimized CHelix constructor code.
- Code now uses newer C++ style casts instead of C style casts.
- Updated the code to clean compile on VC2005
- Reworked the layout of the CHelixMAC operator== method
- Replaced use of BOOL with bool in the class.
- Updated documentation to use the same style as the web site
V1.06 (28 October 2004)
- Fixed a problem in the decryption where the Helix_Decrypt_Masks bit masks
were incorrectly defined. Thanks to Dwain Skinner for reporting and providing
a fix for this problem.
- Removed the declaration of #pragma intrinsic(_rotl) as recent Platform SDK's
already have this defined.
- Sample app provided with download, now uses console I/O for reporting its
V1.05 (17 September 2004)
- Fixed a number of warnings in the code when compiled in VC .Net 2003 with
the "Force conformance in For Loop Scope" compiler option is set.
V1.04 (18 June 2004)
- Fixed a bug in the CHelix constructor. Thanks to Richard Gyger for reporting
V1.02 (1 December 2003)
- Optimized the for loop in Finish. Now it is only called 3 times instead
V1.03 (1 December 2003)
- Further optimizations as suggested by Serhiy Pavlov boost the speed to 208
MB / second on my home machine. This corresponds to a speed of 10.4 clock ticks
- Also produced a DLL version of the algorithm, so that client applications
which do not or cannot (e.g. Visual Basic) muck around with the C++ source code
can use the code.
V1.01 (30 November 2003)
- Following an email update from Niels Ferguson, the following changes were
- Removed the need for the doBlk function
- Made the Block function inline.
- Removed the unneeded code "m_i8 >> 31"
- Removed the unneeded local variable tag in the Finish method.
- Removed the switch statement in preference for a lookup array in Decrypt.
- plaintext is now not released from Decrypt if the MAC's do not match up.
- Optimized the key method CHelix::Block by using register local variables.
This now gets the throughput on my machine up to 191 MB / second
v1.0 (29 November 2003)