diff options
author | David Walter Seikel | 2011-06-27 15:59:06 +1000 |
---|---|---|
committer | David Walter Seikel | 2011-06-27 15:59:06 +1000 |
commit | 92bd9b2503e7dd927f416cb9b17f169ea925fa56 (patch) | |
tree | f0f3776cfc0c6e6224db66f5678387c580095f16 /linden/indra/libgcrypt/libgcrypt-1.2.2/cipher/arcfour.c | |
parent | Make use of the new packaging stuff from upstream. (diff) | |
download | meta-impy-92bd9b2503e7dd927f416cb9b17f169ea925fa56.zip meta-impy-92bd9b2503e7dd927f416cb9b17f169ea925fa56.tar.gz meta-impy-92bd9b2503e7dd927f416cb9b17f169ea925fa56.tar.bz2 meta-impy-92bd9b2503e7dd927f416cb9b17f169ea925fa56.tar.xz |
Clean up line endings, execute bits, and other bits of errant nonsense from Windows.
Diffstat (limited to 'linden/indra/libgcrypt/libgcrypt-1.2.2/cipher/arcfour.c')
-rw-r--r--[-rwxr-xr-x] | linden/indra/libgcrypt/libgcrypt-1.2.2/cipher/arcfour.c | 312 |
1 files changed, 156 insertions, 156 deletions
diff --git a/linden/indra/libgcrypt/libgcrypt-1.2.2/cipher/arcfour.c b/linden/indra/libgcrypt/libgcrypt-1.2.2/cipher/arcfour.c index 59da169..6bb0555 100755..100644 --- a/linden/indra/libgcrypt/libgcrypt-1.2.2/cipher/arcfour.c +++ b/linden/indra/libgcrypt/libgcrypt-1.2.2/cipher/arcfour.c | |||
@@ -1,156 +1,156 @@ | |||
1 | /* arcfour.c - The arcfour stream cipher | 1 | /* arcfour.c - The arcfour stream cipher |
2 | * Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc. | 2 | * Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc. |
3 | * | 3 | * |
4 | * This file is part of Libgcrypt. | 4 | * This file is part of Libgcrypt. |
5 | * | 5 | * |
6 | * Libgcrypt is free software; you can redistribute it and/or modify | 6 | * Libgcrypt is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU Lesser general Public License as | 7 | * it under the terms of the GNU Lesser general Public License as |
8 | * published by the Free Software Foundation; either version 2.1 of | 8 | * published by the Free Software Foundation; either version 2.1 of |
9 | * the License, or (at your option) any later version. | 9 | * the License, or (at your option) any later version. |
10 | * | 10 | * |
11 | * Libgcrypt is distributed in the hope that it will be useful, | 11 | * Libgcrypt is distributed in the hope that it will be useful, |
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
14 | * GNU Lesser General Public License for more details. | 14 | * GNU Lesser General Public License for more details. |
15 | * | 15 | * |
16 | * You should have received a copy of the GNU Lesser General Public | 16 | * You should have received a copy of the GNU Lesser General Public |
17 | * License along with this program; if not, write to the Free Software | 17 | * License along with this program; if not, write to the Free Software |
18 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA | 18 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA |
19 | * | 19 | * |
20 | * For a description of the algorithm, see: | 20 | * For a description of the algorithm, see: |
21 | * Bruce Schneier: Applied Cryptography. John Wiley & Sons, 1996. | 21 | * Bruce Schneier: Applied Cryptography. John Wiley & Sons, 1996. |
22 | * ISBN 0-471-11709-9. Pages 397 ff. | 22 | * ISBN 0-471-11709-9. Pages 397 ff. |
23 | */ | 23 | */ |
24 | 24 | ||
25 | 25 | ||
26 | #include <config.h> | 26 | #include <config.h> |
27 | #include <stdio.h> | 27 | #include <stdio.h> |
28 | #include <stdlib.h> | 28 | #include <stdlib.h> |
29 | #include <string.h> | 29 | #include <string.h> |
30 | #include "types.h" | 30 | #include "types.h" |
31 | #include "g10lib.h" | 31 | #include "g10lib.h" |
32 | #include "cipher.h" | 32 | #include "cipher.h" |
33 | 33 | ||
34 | static const char *selftest(void); | 34 | static const char *selftest(void); |
35 | 35 | ||
36 | typedef struct { | 36 | typedef struct { |
37 | int idx_i, idx_j; | 37 | int idx_i, idx_j; |
38 | byte sbox[256]; | 38 | byte sbox[256]; |
39 | } ARCFOUR_context; | 39 | } ARCFOUR_context; |
40 | 40 | ||
41 | static void | 41 | static void |
42 | do_encrypt_stream( ARCFOUR_context *ctx, | 42 | do_encrypt_stream( ARCFOUR_context *ctx, |
43 | byte *outbuf, const byte *inbuf, unsigned int length ) | 43 | byte *outbuf, const byte *inbuf, unsigned int length ) |
44 | { | 44 | { |
45 | register int i = ctx->idx_i; | 45 | register int i = ctx->idx_i; |
46 | register int j = ctx->idx_j; | 46 | register int j = ctx->idx_j; |
47 | register byte *sbox = ctx->sbox; | 47 | register byte *sbox = ctx->sbox; |
48 | register int t; | 48 | register int t; |
49 | 49 | ||
50 | while ( length-- ) | 50 | while ( length-- ) |
51 | { | 51 | { |
52 | i++; | 52 | i++; |
53 | i = i & 255; /* The and-op seems to be faster than the mod-op. */ | 53 | i = i & 255; /* The and-op seems to be faster than the mod-op. */ |
54 | j += sbox[i]; | 54 | j += sbox[i]; |
55 | j &= 255; | 55 | j &= 255; |
56 | t = sbox[i]; sbox[i] = sbox[j]; sbox[j] = t; | 56 | t = sbox[i]; sbox[i] = sbox[j]; sbox[j] = t; |
57 | *outbuf++ = *inbuf++ ^ sbox[(sbox[i] + sbox[j]) & 255]; | 57 | *outbuf++ = *inbuf++ ^ sbox[(sbox[i] + sbox[j]) & 255]; |
58 | } | 58 | } |
59 | 59 | ||
60 | ctx->idx_i = i; | 60 | ctx->idx_i = i; |
61 | ctx->idx_j = j; | 61 | ctx->idx_j = j; |
62 | } | 62 | } |
63 | 63 | ||
64 | static void | 64 | static void |
65 | encrypt_stream (void *context, | 65 | encrypt_stream (void *context, |
66 | byte *outbuf, const byte *inbuf, unsigned int length) | 66 | byte *outbuf, const byte *inbuf, unsigned int length) |
67 | { | 67 | { |
68 | ARCFOUR_context *ctx = (ARCFOUR_context *) context; | 68 | ARCFOUR_context *ctx = (ARCFOUR_context *) context; |
69 | do_encrypt_stream (ctx, outbuf, inbuf, length ); | 69 | do_encrypt_stream (ctx, outbuf, inbuf, length ); |
70 | _gcry_burn_stack (64); | 70 | _gcry_burn_stack (64); |
71 | } | 71 | } |
72 | 72 | ||
73 | 73 | ||
74 | static gcry_err_code_t | 74 | static gcry_err_code_t |
75 | do_arcfour_setkey (void *context, const byte *key, unsigned int keylen) | 75 | do_arcfour_setkey (void *context, const byte *key, unsigned int keylen) |
76 | { | 76 | { |
77 | static int initialized; | 77 | static int initialized; |
78 | static const char* selftest_failed; | 78 | static const char* selftest_failed; |
79 | int i, j; | 79 | int i, j; |
80 | byte karr[256]; | 80 | byte karr[256]; |
81 | ARCFOUR_context *ctx = (ARCFOUR_context *) context; | 81 | ARCFOUR_context *ctx = (ARCFOUR_context *) context; |
82 | 82 | ||
83 | if (!initialized ) | 83 | if (!initialized ) |
84 | { | 84 | { |
85 | initialized = 1; | 85 | initialized = 1; |
86 | selftest_failed = selftest(); | 86 | selftest_failed = selftest(); |
87 | if( selftest_failed ) | 87 | if( selftest_failed ) |
88 | log_error ("ARCFOUR selftest failed (%s)\n", selftest_failed ); | 88 | log_error ("ARCFOUR selftest failed (%s)\n", selftest_failed ); |
89 | } | 89 | } |
90 | if( selftest_failed ) | 90 | if( selftest_failed ) |
91 | return GPG_ERR_SELFTEST_FAILED; | 91 | return GPG_ERR_SELFTEST_FAILED; |
92 | 92 | ||
93 | if( keylen < 40/8 ) /* we want at least 40 bits */ | 93 | if( keylen < 40/8 ) /* we want at least 40 bits */ |
94 | return GPG_ERR_INV_KEYLEN; | 94 | return GPG_ERR_INV_KEYLEN; |
95 | 95 | ||
96 | ctx->idx_i = ctx->idx_j = 0; | 96 | ctx->idx_i = ctx->idx_j = 0; |
97 | for (i=0; i < 256; i++ ) | 97 | for (i=0; i < 256; i++ ) |
98 | ctx->sbox[i] = i; | 98 | ctx->sbox[i] = i; |
99 | for (i=0; i < 256; i++ ) | 99 | for (i=0; i < 256; i++ ) |
100 | karr[i] = key[i%keylen]; | 100 | karr[i] = key[i%keylen]; |
101 | for (i=j=0; i < 256; i++ ) | 101 | for (i=j=0; i < 256; i++ ) |
102 | { | 102 | { |
103 | int t; | 103 | int t; |
104 | j = (j + ctx->sbox[i] + karr[i]) % 256; | 104 | j = (j + ctx->sbox[i] + karr[i]) % 256; |
105 | t = ctx->sbox[i]; | 105 | t = ctx->sbox[i]; |
106 | ctx->sbox[i] = ctx->sbox[j]; | 106 | ctx->sbox[i] = ctx->sbox[j]; |
107 | ctx->sbox[j] = t; | 107 | ctx->sbox[j] = t; |
108 | } | 108 | } |
109 | memset( karr, 0, 256 ); | 109 | memset( karr, 0, 256 ); |
110 | 110 | ||
111 | return GPG_ERR_NO_ERROR; | 111 | return GPG_ERR_NO_ERROR; |
112 | } | 112 | } |
113 | 113 | ||
114 | static gcry_err_code_t | 114 | static gcry_err_code_t |
115 | arcfour_setkey ( void *context, const byte *key, unsigned int keylen ) | 115 | arcfour_setkey ( void *context, const byte *key, unsigned int keylen ) |
116 | { | 116 | { |
117 | ARCFOUR_context *ctx = (ARCFOUR_context *) context; | 117 | ARCFOUR_context *ctx = (ARCFOUR_context *) context; |
118 | gcry_err_code_t rc = do_arcfour_setkey (ctx, key, keylen ); | 118 | gcry_err_code_t rc = do_arcfour_setkey (ctx, key, keylen ); |
119 | _gcry_burn_stack (300); | 119 | _gcry_burn_stack (300); |
120 | return rc; | 120 | return rc; |
121 | } | 121 | } |
122 | 122 | ||
123 | 123 | ||
124 | static const char* | 124 | static const char* |
125 | selftest(void) | 125 | selftest(void) |
126 | { | 126 | { |
127 | ARCFOUR_context ctx; | 127 | ARCFOUR_context ctx; |
128 | byte scratch[16]; | 128 | byte scratch[16]; |
129 | 129 | ||
130 | /* Test vector from Cryptlib labeled there: "from the | 130 | /* Test vector from Cryptlib labeled there: "from the |
131 | State/Commerce Department". */ | 131 | State/Commerce Department". */ |
132 | static byte key_1[] = | 132 | static byte key_1[] = |
133 | { 0x61, 0x8A, 0x63, 0xD2, 0xFB }; | 133 | { 0x61, 0x8A, 0x63, 0xD2, 0xFB }; |
134 | static byte plaintext_1[] = | 134 | static byte plaintext_1[] = |
135 | { 0xDC, 0xEE, 0x4C, 0xF9, 0x2C }; | 135 | { 0xDC, 0xEE, 0x4C, 0xF9, 0x2C }; |
136 | static const byte ciphertext_1[] = | 136 | static const byte ciphertext_1[] = |
137 | { 0xF1, 0x38, 0x29, 0xC9, 0xDE }; | 137 | { 0xF1, 0x38, 0x29, 0xC9, 0xDE }; |
138 | 138 | ||
139 | arcfour_setkey( &ctx, key_1, sizeof(key_1)); | 139 | arcfour_setkey( &ctx, key_1, sizeof(key_1)); |
140 | encrypt_stream( &ctx, scratch, plaintext_1, sizeof(plaintext_1)); | 140 | encrypt_stream( &ctx, scratch, plaintext_1, sizeof(plaintext_1)); |
141 | if ( memcmp (scratch, ciphertext_1, sizeof (ciphertext_1))) | 141 | if ( memcmp (scratch, ciphertext_1, sizeof (ciphertext_1))) |
142 | return "Arcfour encryption test 1 failed."; | 142 | return "Arcfour encryption test 1 failed."; |
143 | arcfour_setkey( &ctx, key_1, sizeof(key_1)); | 143 | arcfour_setkey( &ctx, key_1, sizeof(key_1)); |
144 | encrypt_stream(&ctx, scratch, scratch, sizeof(plaintext_1)); /* decrypt */ | 144 | encrypt_stream(&ctx, scratch, scratch, sizeof(plaintext_1)); /* decrypt */ |
145 | if ( memcmp (scratch, plaintext_1, sizeof (plaintext_1))) | 145 | if ( memcmp (scratch, plaintext_1, sizeof (plaintext_1))) |
146 | return "Arcfour decryption test 1 failed."; | 146 | return "Arcfour decryption test 1 failed."; |
147 | return NULL; | 147 | return NULL; |
148 | } | 148 | } |
149 | 149 | ||
150 | 150 | ||
151 | gcry_cipher_spec_t _gcry_cipher_spec_arcfour = | 151 | gcry_cipher_spec_t _gcry_cipher_spec_arcfour = |
152 | { | 152 | { |
153 | "ARCFOUR", NULL, NULL, 1, 128, sizeof (ARCFOUR_context), | 153 | "ARCFOUR", NULL, NULL, 1, 128, sizeof (ARCFOUR_context), |
154 | arcfour_setkey, NULL, NULL, encrypt_stream, encrypt_stream, | 154 | arcfour_setkey, NULL, NULL, encrypt_stream, encrypt_stream, |
155 | }; | 155 | }; |
156 | 156 | ||