Mercurial > dropbear
comparison src/modes/lrw/lrw_setiv.c @ 380:d5faf4814ddb libtomcrypt-orig libtomcrypt-1.16
Update to LibTomCrypt 1.16
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Thu, 11 Jan 2007 02:22:00 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
280:59400faa4b44 | 380:d5faf4814ddb |
---|---|
1 /* LibTomCrypt, modular cryptographic library -- Tom St Denis | |
2 * | |
3 * LibTomCrypt is a library that provides various cryptographic | |
4 * algorithms in a highly modular and flexible manner. | |
5 * | |
6 * The library is free for all purposes without any express | |
7 * guarantee it works. | |
8 * | |
9 * Tom St Denis, [email protected], http://libtomcrypt.com | |
10 */ | |
11 #include "tomcrypt.h" | |
12 | |
13 /** | |
14 @file lrw_setiv.c | |
15 LRW_MODE implementation, Set the current IV, Tom St Denis | |
16 */ | |
17 | |
18 #ifdef LTC_LRW_MODE | |
19 | |
20 /** | |
21 Set the IV for LRW | |
22 @param IV The IV, must be 16 octets | |
23 @param len Length ... must be 16 :-) | |
24 @param lrw The LRW state to update | |
25 @return CRYPT_OK if successful | |
26 */ | |
27 int lrw_setiv(const unsigned char *IV, unsigned long len, symmetric_LRW *lrw) | |
28 { | |
29 int err; | |
30 #ifdef LRW_TABLES | |
31 unsigned char T[16]; | |
32 int x, y; | |
33 #endif | |
34 LTC_ARGCHK(IV != NULL); | |
35 LTC_ARGCHK(lrw != NULL); | |
36 | |
37 if (len != 16) { | |
38 return CRYPT_INVALID_ARG; | |
39 } | |
40 | |
41 if ((err = cipher_is_valid(lrw->cipher)) != CRYPT_OK) { | |
42 return err; | |
43 } | |
44 | |
45 /* copy the IV */ | |
46 XMEMCPY(lrw->IV, IV, 16); | |
47 | |
48 /* check if we have to actually do work */ | |
49 if (cipher_descriptor[lrw->cipher].accel_lrw_encrypt != NULL && cipher_descriptor[lrw->cipher].accel_lrw_decrypt != NULL) { | |
50 /* we have accelerators, let's bail since they don't use lrw->pad anyways */ | |
51 return CRYPT_OK; | |
52 } | |
53 | |
54 #ifdef LRW_TABLES | |
55 XMEMCPY(T, &lrw->PC[0][IV[0]][0], 16); | |
56 for (x = 1; x < 16; x++) { | |
57 #ifdef LTC_FAST | |
58 for (y = 0; y < 16; y += sizeof(LTC_FAST_TYPE)) { | |
59 *((LTC_FAST_TYPE *)(T + y)) ^= *((LTC_FAST_TYPE *)(&lrw->PC[x][IV[x]][y])); | |
60 } | |
61 #else | |
62 for (y = 0; y < 16; y++) { | |
63 T[y] ^= lrw->PC[x][IV[x]][y]; | |
64 } | |
65 #endif | |
66 } | |
67 XMEMCPY(lrw->pad, T, 16); | |
68 #else | |
69 gcm_gf_mult(lrw->tweak, IV, lrw->pad); | |
70 #endif | |
71 | |
72 return CRYPT_OK; | |
73 } | |
74 | |
75 | |
76 #endif | |
77 /* $Source: /cvs/libtom/libtomcrypt/src/modes/lrw/lrw_setiv.c,v $ */ | |
78 /* $Revision: 1.12 $ */ | |
79 /* $Date: 2006/06/29 01:53:13 $ */ |