summaryrefslogtreecommitdiff
path: root/cesar/cp/secu/src
diff options
context:
space:
mode:
authordufour2009-03-24 14:30:11 +0000
committerdufour2009-03-24 14:30:11 +0000
commit7c1747ba1aeeadf30e44b8c1585c8f0ed6f0dcc2 (patch)
tree80d8393796e29102012e81095907a04d98aa6c12 /cesar/cp/secu/src
parent4a720b13cec65c0602dd304959af64b39f1179dc (diff)
* cp/secu (closes #296):
- add function to generate hash of variable length. git-svn-id: svn+ssh://pessac/svn/cesar/trunk@4293 017c9cb6-072f-447c-8318-d5b54f68fe89
Diffstat (limited to 'cesar/cp/secu/src')
-rw-r--r--cesar/cp/secu/src/secu.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/cesar/cp/secu/src/secu.c b/cesar/cp/secu/src/secu.c
index e9b94a88f8..647b10126a 100644
--- a/cesar/cp/secu/src/secu.c
+++ b/cesar/cp/secu/src/secu.c
@@ -165,3 +165,27 @@ cp_secu_tek_gen (const u32 left[], const u32 right[], cp_key_t *output)
memcpy (output->key, output_buffer, 16);
}
+void
+cp_secu_generate_hash (const u32 seed, u8 *hash, const uint hash_length)
+{
+
+ uint compt = 0;
+ uint iteration = hash_length / CP_SECU_OUTPUT_KEY_SIZE;
+ /* For each CP_SECU_OUTPUT_KEY_SIZE of the hash. */
+ for (compt = 0; compt < iteration; compt++)
+ {
+ /* Generate hash. */
+ cp_secu_pbkdf1 ((u8 *) &seed, sizeof (seed),
+ (cp_key_t *) &hash[compt * CP_SECU_OUTPUT_KEY_SIZE],
+ CP_SECU_SALT_SPIDCOM);
+ }
+ /* Check if last part is not enought for CP_SECU_OUTPUT_KEY_SIZE. */
+ uint modulo = hash_length % CP_SECU_OUTPUT_KEY_SIZE;
+ if (modulo)
+ {
+ cp_key_t key;
+ cp_secu_pbkdf1 ((u8 *) &seed, sizeof (seed), &key, CP_SECU_SALT_SPIDCOM);
+ /* Only copy amout of data required. */
+ memcpy (&hash[iteration * CP_SECU_OUTPUT_KEY_SIZE], key.key, modulo);
+ }
+}