Portable C
as defined by the ECRYPT NoE
Stream Cipher Project
We define portable C to be 1990 ISO standard
compliant C (ISO/IEC 9899:1990, the amendment ISO/IEC 9899 AM1, and the two
technical corrigenda ISO/IEC 9899 TCOR1 and TCOR2; hereafter called C90) with
following relaxations and/or additional requirements:
- Two's complement representation of signed integers may be assumed.
- Define and use minimum-width integer types and macro's to obtain
exact-width results from these minimum-width integers. Use of the long long type (or equivalents such as the
__int64 type), if available, is
allowed.
- Endianness conversion (if required) should only be performed on
input/output data.
- Define and use macro's for operations that are not available in standard
C90 and/or may be overridden by architecture-specific operations for
optimization reasons.
- Comments should use the /* ... */ syntax, not the C++-like // syntax.
It is strongly recommended to use the include the following files:
These files contain:
- Definitions of minimum-width integer types and macro's to obtain exact-width results from these minimum-width integers.
- Robust macro's for endianness conversion.
- An example definition of a macro for an operation that is not
available in standard C90 and may be overridden by an
architecture-specific operation for optimization reasons (the rotate
operation).