00001
00013 #ifndef C4E_SHA_H
00014 #define C4E_SHA_H
00015
00016
00017
00018
00019 #include "c4e_sys.h"
00020 #include "c4e_algo32.h"
00021 #include "c4e_hash.h"
00022
00023
00024
00025 #ifdef __cplusplus
00026 extern "C" {
00027 #endif
00028
00029
00030
00031
00035 #define C4E_SHA12_BLOCK_LOG2LEN (6U)
00036
00037
00045
00046
00047 #define C4E_SHA1_DIGEST_LEN (20U)
00052 #define C4E_SHA1_BLOCK_LEN (1U << C4E_SHA12_BLOCK_LOG2LEN)
00053
00057 #define C4E_SHA1_CTX_WORDS ((C4E_SHA1_DIGEST_LEN / 4U) + 1U)
00058
00063 #define C4E_SHA1_TMP_WORDS ((C4E_SHA1_DIGEST_LEN + C4E_SHA1_BLOCK_LEN) / 4U)
00064
00068 #define C4E_SHA1_MEM_WORDS (C4E_SHA1_CTX_WORDS + C4E_SHA1_TMP_WORDS)
00069
00070
00071
00072
00073 #define C4E_SHA224_DIGEST_LEN (28U)
00074 #define C4E_SHA256_DIGEST_LEN (32U)
00080 #define C4E_SHA2_BLOCK_LEN (1U << C4E_SHA12_BLOCK_LOG2LEN)
00081
00085 #define C4E_SHA2_CTX_WORDS ((C4E_SHA256_DIGEST_LEN / 4U) + 1U)
00086
00091 #define C4E_SHA2_TMP_WORDS ((C4E_SHA256_DIGEST_LEN + C4E_SHA2_BLOCK_LEN) / 4U)
00092
00096 #define C4E_SHA2_MEM_WORDS (C4E_SHA2_CTX_WORDS + C4E_SHA2_TMP_WORDS)
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00134 void c4e_sha1_start(C4eAlgo32Uint ctx[C4E_SHA1_CTX_WORDS]);
00135
00136
00137
00171 void c4e_sha1_next(C4eAlgo32Uint ctx[C4E_RESTRICT C4E_SHA1_CTX_WORDS],
00172 C4eAlgo32Uint wtmp[C4E_RESTRICT C4E_SHA1_TMP_WORDS],
00173 C4E_CONST void* C4E_RESTRICT next);
00174
00175
00176
00205 void c4e_sha1_stop(C4eAlgo32Uint ctx[C4E_RESTRICT C4E_SHA1_CTX_WORDS],
00206 C4eAlgo32Uint wtmp[C4E_RESTRICT C4E_SHA1_TMP_WORDS],
00207 C4E_CONST void* C4E_RESTRICT last,
00208 C4eArchUint len,
00209 C4eArchUint8 digest[C4E_RESTRICT C4E_SHA1_DIGEST_LEN]);
00210
00211
00212
00241 void c4e_sha1_mem(C4eAlgo32Uint tmp[C4E_RESTRICT C4E_SHA1_MEM_WORDS],
00242 C4E_CONST void* C4E_RESTRICT mem,
00243 C4eArchSize len,
00244 C4eArchUint8 digest[C4E_RESTRICT C4E_SHA1_DIGEST_LEN]);
00245
00246
00247
00274 void c4e_sha2_start(C4eAlgo32Uint ctx[C4E_SHA2_CTX_WORDS], C4eHashId hid);
00275
00276
00277
00278
00312 void c4e_sha2_next(C4eAlgo32Uint ctx[C4E_RESTRICT C4E_SHA2_CTX_WORDS],
00313 C4eAlgo32Uint wtmp[C4E_RESTRICT C4E_SHA2_TMP_WORDS],
00314 C4E_CONST void* C4E_RESTRICT next);
00315
00316
00317
00318
00347 void c4e_sha2_stop(C4eAlgo32Uint ctx[C4E_RESTRICT C4E_SHA2_CTX_WORDS],
00348 C4eAlgo32Uint wtmp[C4E_RESTRICT C4E_SHA2_TMP_WORDS],
00349 C4E_CONST void* C4E_RESTRICT last,
00350 C4eArchUint len,
00351 C4eArchUint8 digest[C4E_RESTRICT C4E_SHA256_DIGEST_LEN]);
00352
00353
00354
00385 void c4e_sha2_mem(C4eAlgo32Uint tmp[C4E_RESTRICT C4E_SHA2_MEM_WORDS],
00386 C4eHashId hid,
00387 C4E_CONST void* C4E_RESTRICT mem,
00388 C4eArchSize len,
00389 C4eArchUint8 digest[C4E_RESTRICT C4E_SHA256_DIGEST_LEN]);
00390
00391
00396 #ifdef __cplusplus
00397 }
00398 #endif
00399
00400
00401 #endif
00402
00403
00404
00405
00406
00407