diff options
Diffstat (limited to 'src/lib/libcrypto/aes')
-rw-r--r-- | src/lib/libcrypto/aes/Makefile | 103 | ||||
-rw-r--r-- | src/lib/libcrypto/aes/Makefile.ssl | 103 | ||||
-rw-r--r-- | src/lib/libcrypto/aes/aes.h | 15 | ||||
-rw-r--r-- | src/lib/libcrypto/aes/aes_cbc.c | 44 | ||||
-rw-r--r-- | src/lib/libcrypto/aes/aes_cfb.c | 68 | ||||
-rw-r--r-- | src/lib/libcrypto/aes/aes_core.c | 4 | ||||
-rw-r--r-- | src/lib/libcrypto/aes/aes_ctr.c | 35 | ||||
-rw-r--r-- | src/lib/libcrypto/aes/aes_locl.h | 2 |
8 files changed, 249 insertions, 125 deletions
diff --git a/src/lib/libcrypto/aes/Makefile b/src/lib/libcrypto/aes/Makefile new file mode 100644 index 0000000000..a37c6f66a2 --- /dev/null +++ b/src/lib/libcrypto/aes/Makefile | |||
@@ -0,0 +1,103 @@ | |||
1 | # | ||
2 | # crypto/aes/Makefile | ||
3 | # | ||
4 | |||
5 | DIR= aes | ||
6 | TOP= ../.. | ||
7 | CC= cc | ||
8 | CPP= $(CC) -E | ||
9 | INCLUDES= | ||
10 | CFLAG=-g | ||
11 | INSTALL_PREFIX= | ||
12 | OPENSSLDIR= /usr/local/ssl | ||
13 | INSTALLTOP= /usr/local/ssl | ||
14 | MAKEDEPPROG= makedepend | ||
15 | MAKEDEPEND= $(TOP)/util/domd $(TOP) -MD $(MAKEDEPPROG) | ||
16 | MAKEFILE= Makefile | ||
17 | AR= ar r | ||
18 | |||
19 | # CFLAGS= -mpentiumpro $(INCLUDES) $(CFLAG) -O3 -fexpensive-optimizations -funroll-loops -fforce-addr | ||
20 | CFLAGS= $(INCLUDES) $(CFLAG) | ||
21 | |||
22 | GENERAL=Makefile | ||
23 | #TEST=aestest.c | ||
24 | TEST= | ||
25 | APPS= | ||
26 | |||
27 | LIB=$(TOP)/libcrypto.a | ||
28 | LIBSRC=aes_core.c aes_misc.c aes_ecb.c aes_cbc.c aes_cfb.c aes_ofb.c aes_ctr.c | ||
29 | LIBOBJ=aes_core.o aes_misc.o aes_ecb.o aes_cbc.o aes_cfb.o aes_ofb.o aes_ctr.o | ||
30 | |||
31 | SRC= $(LIBSRC) | ||
32 | |||
33 | EXHEADER= aes.h | ||
34 | HEADER= aes_locl.h $(EXHEADER) | ||
35 | |||
36 | ALL= $(GENERAL) $(SRC) $(HEADER) | ||
37 | |||
38 | top: | ||
39 | (cd ../..; $(MAKE) DIRS=crypto SDIRS=$(DIR) sub_all) | ||
40 | |||
41 | all: lib | ||
42 | |||
43 | lib: $(LIBOBJ) | ||
44 | $(AR) $(LIB) $(LIBOBJ) | ||
45 | $(RANLIB) $(LIB) || echo Never mind. | ||
46 | @touch lib | ||
47 | |||
48 | $(LIBOBJ): $(LIBSRC) | ||
49 | |||
50 | files: | ||
51 | $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO | ||
52 | |||
53 | links: | ||
54 | @$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER) | ||
55 | @$(PERL) $(TOP)/util/mklink.pl ../../test $(TEST) | ||
56 | @$(PERL) $(TOP)/util/mklink.pl ../../apps $(APPS) | ||
57 | |||
58 | install: installs | ||
59 | |||
60 | installs: | ||
61 | @headerlist="$(EXHEADER)"; for i in $$headerlist ; \ | ||
62 | do \ | ||
63 | (cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \ | ||
64 | chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \ | ||
65 | done; | ||
66 | |||
67 | tags: | ||
68 | ctags $(SRC) | ||
69 | |||
70 | tests: | ||
71 | |||
72 | lint: | ||
73 | lint -DLINT $(INCLUDES) $(SRC)>fluff | ||
74 | |||
75 | depend: | ||
76 | $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC) | ||
77 | |||
78 | dclean: | ||
79 | $(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new | ||
80 | mv -f Makefile.new $(MAKEFILE) | ||
81 | |||
82 | clean: | ||
83 | rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff | ||
84 | |||
85 | # DO NOT DELETE THIS LINE -- make depend depends on it. | ||
86 | |||
87 | aes_cbc.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h | ||
88 | aes_cbc.o: ../../include/openssl/opensslconf.h aes_cbc.c aes_locl.h | ||
89 | aes_cfb.o: ../../e_os.h ../../include/openssl/aes.h | ||
90 | aes_cfb.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h | ||
91 | aes_cfb.o: aes_cfb.c aes_locl.h | ||
92 | aes_core.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h | ||
93 | aes_core.o: ../../include/openssl/fips.h ../../include/openssl/opensslconf.h | ||
94 | aes_core.o: aes_core.c aes_locl.h | ||
95 | aes_ctr.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h | ||
96 | aes_ctr.o: ../../include/openssl/opensslconf.h aes_ctr.c aes_locl.h | ||
97 | aes_ecb.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h | ||
98 | aes_ecb.o: ../../include/openssl/opensslconf.h aes_ecb.c aes_locl.h | ||
99 | aes_misc.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h | ||
100 | aes_misc.o: ../../include/openssl/opensslconf.h | ||
101 | aes_misc.o: ../../include/openssl/opensslv.h aes_locl.h aes_misc.c | ||
102 | aes_ofb.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h | ||
103 | aes_ofb.o: ../../include/openssl/opensslconf.h aes_locl.h aes_ofb.c | ||
diff --git a/src/lib/libcrypto/aes/Makefile.ssl b/src/lib/libcrypto/aes/Makefile.ssl new file mode 100644 index 0000000000..f353aeb697 --- /dev/null +++ b/src/lib/libcrypto/aes/Makefile.ssl | |||
@@ -0,0 +1,103 @@ | |||
1 | # | ||
2 | # crypto/aes/Makefile | ||
3 | # | ||
4 | |||
5 | DIR= aes | ||
6 | TOP= ../.. | ||
7 | CC= cc | ||
8 | CPP= $(CC) -E | ||
9 | INCLUDES= | ||
10 | CFLAG=-g | ||
11 | INSTALL_PREFIX= | ||
12 | OPENSSLDIR= /usr/local/ssl | ||
13 | INSTALLTOP= /usr/local/ssl | ||
14 | MAKE= make -f Makefile.ssl | ||
15 | MAKEDEPPROG= makedepend | ||
16 | MAKEDEPEND= $(TOP)/util/domd $(TOP) -MD $(MAKEDEPPROG) | ||
17 | MAKEFILE= Makefile.ssl | ||
18 | AR= ar r | ||
19 | |||
20 | # CFLAGS= -mpentiumpro $(INCLUDES) $(CFLAG) -O3 -fexpensive-optimizations -funroll-loops -fforce-addr | ||
21 | CFLAGS= $(INCLUDES) $(CFLAG) | ||
22 | |||
23 | GENERAL=Makefile | ||
24 | #TEST=aestest.c | ||
25 | TEST= | ||
26 | APPS= | ||
27 | |||
28 | LIB=$(TOP)/libcrypto.a | ||
29 | LIBSRC=aes_core.c aes_misc.c aes_ecb.c aes_cbc.c aes_cfb.c aes_ofb.c aes_ctr.c | ||
30 | LIBOBJ=aes_core.o aes_misc.o aes_ecb.o aes_cbc.o aes_cfb.o aes_ofb.o aes_ctr.o | ||
31 | |||
32 | SRC= $(LIBSRC) | ||
33 | |||
34 | EXHEADER= aes.h | ||
35 | HEADER= aes_locl.h $(EXHEADER) | ||
36 | |||
37 | ALL= $(GENERAL) $(SRC) $(HEADER) | ||
38 | |||
39 | top: | ||
40 | (cd ../..; $(MAKE) DIRS=crypto SDIRS=$(DIR) sub_all) | ||
41 | |||
42 | all: lib | ||
43 | |||
44 | lib: $(LIBOBJ) | ||
45 | $(AR) $(LIB) $(LIBOBJ) | ||
46 | $(RANLIB) $(LIB) || echo Never mind. | ||
47 | @touch lib | ||
48 | |||
49 | $(LIBOBJ): $(LIBSRC) | ||
50 | |||
51 | files: | ||
52 | $(PERL) $(TOP)/util/files.pl Makefile.ssl >> $(TOP)/MINFO | ||
53 | |||
54 | links: | ||
55 | @sh $(TOP)/util/point.sh Makefile.ssl Makefile | ||
56 | @$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER) | ||
57 | @$(PERL) $(TOP)/util/mklink.pl ../../test $(TEST) | ||
58 | @$(PERL) $(TOP)/util/mklink.pl ../../apps $(APPS) | ||
59 | |||
60 | install: installs | ||
61 | |||
62 | installs: | ||
63 | @for i in $(EXHEADER) ; \ | ||
64 | do \ | ||
65 | (cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \ | ||
66 | chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \ | ||
67 | done; | ||
68 | |||
69 | tags: | ||
70 | ctags $(SRC) | ||
71 | |||
72 | tests: | ||
73 | |||
74 | lint: | ||
75 | lint -DLINT $(INCLUDES) $(SRC)>fluff | ||
76 | |||
77 | depend: | ||
78 | $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC) | ||
79 | |||
80 | dclean: | ||
81 | $(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new | ||
82 | mv -f Makefile.new $(MAKEFILE) | ||
83 | |||
84 | clean: | ||
85 | rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff | ||
86 | |||
87 | # DO NOT DELETE THIS LINE -- make depend depends on it. | ||
88 | |||
89 | aes_cbc.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h | ||
90 | aes_cbc.o: ../../include/openssl/opensslconf.h aes_cbc.c aes_locl.h | ||
91 | aes_cfb.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h | ||
92 | aes_cfb.o: ../../include/openssl/opensslconf.h aes_cfb.c aes_locl.h | ||
93 | aes_core.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h | ||
94 | aes_core.o: ../../include/openssl/opensslconf.h aes_core.c aes_locl.h | ||
95 | aes_ctr.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h | ||
96 | aes_ctr.o: ../../include/openssl/opensslconf.h aes_ctr.c aes_locl.h | ||
97 | aes_ecb.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h | ||
98 | aes_ecb.o: ../../include/openssl/opensslconf.h aes_ecb.c aes_locl.h | ||
99 | aes_misc.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h | ||
100 | aes_misc.o: ../../include/openssl/opensslconf.h | ||
101 | aes_misc.o: ../../include/openssl/opensslv.h aes_locl.h aes_misc.c | ||
102 | aes_ofb.o: ../../include/openssl/aes.h ../../include/openssl/e_os2.h | ||
103 | aes_ofb.o: ../../include/openssl/opensslconf.h aes_locl.h aes_ofb.c | ||
diff --git a/src/lib/libcrypto/aes/aes.h b/src/lib/libcrypto/aes/aes.h index 8a3ea0b883..da067f4a8f 100644 --- a/src/lib/libcrypto/aes/aes.h +++ b/src/lib/libcrypto/aes/aes.h | |||
@@ -52,8 +52,6 @@ | |||
52 | #ifndef HEADER_AES_H | 52 | #ifndef HEADER_AES_H |
53 | #define HEADER_AES_H | 53 | #define HEADER_AES_H |
54 | 54 | ||
55 | #include <openssl/e_os2.h> | ||
56 | |||
57 | #ifdef OPENSSL_NO_AES | 55 | #ifdef OPENSSL_NO_AES |
58 | #error AES is disabled. | 56 | #error AES is disabled. |
59 | #endif | 57 | #endif |
@@ -66,10 +64,6 @@ | |||
66 | #define AES_MAXNR 14 | 64 | #define AES_MAXNR 14 |
67 | #define AES_BLOCK_SIZE 16 | 65 | #define AES_BLOCK_SIZE 16 |
68 | 66 | ||
69 | #if defined(OPENSSL_FIPS) | ||
70 | #define FIPS_AES_SIZE_T int | ||
71 | #endif | ||
72 | |||
73 | #ifdef __cplusplus | 67 | #ifdef __cplusplus |
74 | extern "C" { | 68 | extern "C" { |
75 | #endif | 69 | #endif |
@@ -101,15 +95,6 @@ void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, | |||
101 | void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out, | 95 | void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out, |
102 | const unsigned long length, const AES_KEY *key, | 96 | const unsigned long length, const AES_KEY *key, |
103 | unsigned char *ivec, int *num, const int enc); | 97 | unsigned char *ivec, int *num, const int enc); |
104 | void AES_cfb1_encrypt(const unsigned char *in, unsigned char *out, | ||
105 | const unsigned long length, const AES_KEY *key, | ||
106 | unsigned char *ivec, int *num, const int enc); | ||
107 | void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out, | ||
108 | const unsigned long length, const AES_KEY *key, | ||
109 | unsigned char *ivec, int *num, const int enc); | ||
110 | void AES_cfbr_encrypt_block(const unsigned char *in,unsigned char *out, | ||
111 | const int nbits,const AES_KEY *key, | ||
112 | unsigned char *ivec,const int enc); | ||
113 | void AES_ofb128_encrypt(const unsigned char *in, unsigned char *out, | 98 | void AES_ofb128_encrypt(const unsigned char *in, unsigned char *out, |
114 | const unsigned long length, const AES_KEY *key, | 99 | const unsigned long length, const AES_KEY *key, |
115 | unsigned char *ivec, int *num); | 100 | unsigned char *ivec, int *num); |
diff --git a/src/lib/libcrypto/aes/aes_cbc.c b/src/lib/libcrypto/aes/aes_cbc.c index d2ba6bcdb4..1222a21002 100644 --- a/src/lib/libcrypto/aes/aes_cbc.c +++ b/src/lib/libcrypto/aes/aes_cbc.c | |||
@@ -66,7 +66,6 @@ void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, | |||
66 | unsigned long n; | 66 | unsigned long n; |
67 | unsigned long len = length; | 67 | unsigned long len = length; |
68 | unsigned char tmp[AES_BLOCK_SIZE]; | 68 | unsigned char tmp[AES_BLOCK_SIZE]; |
69 | const unsigned char *iv = ivec; | ||
70 | 69 | ||
71 | assert(in && out && key && ivec); | 70 | assert(in && out && key && ivec); |
72 | assert((AES_ENCRYPT == enc)||(AES_DECRYPT == enc)); | 71 | assert((AES_ENCRYPT == enc)||(AES_DECRYPT == enc)); |
@@ -74,39 +73,22 @@ void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, | |||
74 | if (AES_ENCRYPT == enc) { | 73 | if (AES_ENCRYPT == enc) { |
75 | while (len >= AES_BLOCK_SIZE) { | 74 | while (len >= AES_BLOCK_SIZE) { |
76 | for(n=0; n < AES_BLOCK_SIZE; ++n) | 75 | for(n=0; n < AES_BLOCK_SIZE; ++n) |
77 | out[n] = in[n] ^ iv[n]; | 76 | tmp[n] = in[n] ^ ivec[n]; |
78 | AES_encrypt(out, out, key); | 77 | AES_encrypt(tmp, out, key); |
79 | iv = out; | 78 | memcpy(ivec, out, AES_BLOCK_SIZE); |
80 | len -= AES_BLOCK_SIZE; | 79 | len -= AES_BLOCK_SIZE; |
81 | in += AES_BLOCK_SIZE; | 80 | in += AES_BLOCK_SIZE; |
82 | out += AES_BLOCK_SIZE; | 81 | out += AES_BLOCK_SIZE; |
83 | } | 82 | } |
84 | if (len) { | 83 | if (len) { |
85 | for(n=0; n < len; ++n) | 84 | for(n=0; n < len; ++n) |
86 | out[n] = in[n] ^ iv[n]; | 85 | tmp[n] = in[n] ^ ivec[n]; |
87 | for(n=len; n < AES_BLOCK_SIZE; ++n) | 86 | for(n=len; n < AES_BLOCK_SIZE; ++n) |
88 | out[n] = iv[n]; | 87 | tmp[n] = ivec[n]; |
89 | AES_encrypt(out, out, key); | 88 | AES_encrypt(tmp, tmp, key); |
90 | iv = out; | 89 | memcpy(out, tmp, AES_BLOCK_SIZE); |
91 | } | 90 | memcpy(ivec, tmp, AES_BLOCK_SIZE); |
92 | memcpy(ivec,iv,AES_BLOCK_SIZE); | 91 | } |
93 | } else if (in != out) { | ||
94 | while (len >= AES_BLOCK_SIZE) { | ||
95 | AES_decrypt(in, out, key); | ||
96 | for(n=0; n < AES_BLOCK_SIZE; ++n) | ||
97 | out[n] ^= iv[n]; | ||
98 | iv = in; | ||
99 | len -= AES_BLOCK_SIZE; | ||
100 | in += AES_BLOCK_SIZE; | ||
101 | out += AES_BLOCK_SIZE; | ||
102 | } | ||
103 | if (len) { | ||
104 | AES_decrypt(in,tmp,key); | ||
105 | for(n=0; n < len; ++n) | ||
106 | out[n] = tmp[n] ^ iv[n]; | ||
107 | iv = in; | ||
108 | } | ||
109 | memcpy(ivec,iv,AES_BLOCK_SIZE); | ||
110 | } else { | 92 | } else { |
111 | while (len >= AES_BLOCK_SIZE) { | 93 | while (len >= AES_BLOCK_SIZE) { |
112 | memcpy(tmp, in, AES_BLOCK_SIZE); | 94 | memcpy(tmp, in, AES_BLOCK_SIZE); |
@@ -120,12 +102,10 @@ void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, | |||
120 | } | 102 | } |
121 | if (len) { | 103 | if (len) { |
122 | memcpy(tmp, in, AES_BLOCK_SIZE); | 104 | memcpy(tmp, in, AES_BLOCK_SIZE); |
123 | AES_decrypt(tmp, out, key); | 105 | AES_decrypt(tmp, tmp, key); |
124 | for(n=0; n < len; ++n) | 106 | for(n=0; n < len; ++n) |
125 | out[n] ^= ivec[n]; | 107 | out[n] = tmp[n] ^ ivec[n]; |
126 | for(n=len; n < AES_BLOCK_SIZE; ++n) | ||
127 | out[n] = tmp[n]; | ||
128 | memcpy(ivec, tmp, AES_BLOCK_SIZE); | 108 | memcpy(ivec, tmp, AES_BLOCK_SIZE); |
129 | } | 109 | } |
130 | } | 110 | } |
131 | } | 111 | } |
diff --git a/src/lib/libcrypto/aes/aes_cfb.c b/src/lib/libcrypto/aes/aes_cfb.c index 49f0411010..9b569dda90 100644 --- a/src/lib/libcrypto/aes/aes_cfb.c +++ b/src/lib/libcrypto/aes/aes_cfb.c | |||
@@ -114,7 +114,6 @@ | |||
114 | 114 | ||
115 | #include <openssl/aes.h> | 115 | #include <openssl/aes.h> |
116 | #include "aes_locl.h" | 116 | #include "aes_locl.h" |
117 | #include "e_os.h" | ||
118 | 117 | ||
119 | /* The input and output encrypted as though 128bit cfb mode is being | 118 | /* The input and output encrypted as though 128bit cfb mode is being |
120 | * used. The extra state information to record how much of the | 119 | * used. The extra state information to record how much of the |
@@ -156,70 +155,3 @@ void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out, | |||
156 | *num=n; | 155 | *num=n; |
157 | } | 156 | } |
158 | 157 | ||
159 | /* This expects a single block of size nbits for both in and out. Note that | ||
160 | it corrupts any extra bits in the last byte of out */ | ||
161 | void AES_cfbr_encrypt_block(const unsigned char *in,unsigned char *out, | ||
162 | const int nbits,const AES_KEY *key, | ||
163 | unsigned char *ivec,const int enc) | ||
164 | { | ||
165 | int n,rem,num; | ||
166 | unsigned char ovec[AES_BLOCK_SIZE*2]; | ||
167 | |||
168 | if (nbits<=0 || nbits>128) return; | ||
169 | |||
170 | /* fill in the first half of the new IV with the current IV */ | ||
171 | memcpy(ovec,ivec,AES_BLOCK_SIZE); | ||
172 | /* construct the new IV */ | ||
173 | AES_encrypt(ivec,ivec,key); | ||
174 | num = (nbits+7)/8; | ||
175 | if (enc) /* encrypt the input */ | ||
176 | for(n=0 ; n < num ; ++n) | ||
177 | out[n] = (ovec[AES_BLOCK_SIZE+n] = in[n] ^ ivec[n]); | ||
178 | else /* decrypt the input */ | ||
179 | for(n=0 ; n < num ; ++n) | ||
180 | out[n] = (ovec[AES_BLOCK_SIZE+n] = in[n]) ^ ivec[n]; | ||
181 | /* shift ovec left... */ | ||
182 | rem = nbits%8; | ||
183 | num = nbits/8; | ||
184 | if(rem==0) | ||
185 | memcpy(ivec,ovec+num,AES_BLOCK_SIZE); | ||
186 | else | ||
187 | for(n=0 ; n < AES_BLOCK_SIZE ; ++n) | ||
188 | ivec[n] = ovec[n+num]<<rem | ovec[n+num+1]>>(8-rem); | ||
189 | |||
190 | /* it is not necessary to cleanse ovec, since the IV is not secret */ | ||
191 | } | ||
192 | |||
193 | /* N.B. This expects the input to be packed, MS bit first */ | ||
194 | void AES_cfb1_encrypt(const unsigned char *in, unsigned char *out, | ||
195 | const unsigned long length, const AES_KEY *key, | ||
196 | unsigned char *ivec, int *num, const int enc) | ||
197 | { | ||
198 | unsigned int n; | ||
199 | unsigned char c[1],d[1]; | ||
200 | |||
201 | assert(in && out && key && ivec && num); | ||
202 | assert(*num == 0); | ||
203 | |||
204 | memset(out,0,(length+7)/8); | ||
205 | for(n=0 ; n < length ; ++n) | ||
206 | { | ||
207 | c[0]=(in[n/8]&(1 << (7-n%8))) ? 0x80 : 0; | ||
208 | AES_cfbr_encrypt_block(c,d,1,key,ivec,enc); | ||
209 | out[n/8]=(out[n/8]&~(1 << (7-n%8)))|((d[0]&0x80) >> (n%8)); | ||
210 | } | ||
211 | } | ||
212 | |||
213 | void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out, | ||
214 | const unsigned long length, const AES_KEY *key, | ||
215 | unsigned char *ivec, int *num, const int enc) | ||
216 | { | ||
217 | unsigned int n; | ||
218 | |||
219 | assert(in && out && key && ivec && num); | ||
220 | assert(*num == 0); | ||
221 | |||
222 | for(n=0 ; n < length ; ++n) | ||
223 | AES_cfbr_encrypt_block(&in[n],&out[n],8,key,ivec,enc); | ||
224 | } | ||
225 | |||
diff --git a/src/lib/libcrypto/aes/aes_core.c b/src/lib/libcrypto/aes/aes_core.c index ed566a8123..2f41a825f8 100644 --- a/src/lib/libcrypto/aes/aes_core.c +++ b/src/lib/libcrypto/aes/aes_core.c | |||
@@ -37,11 +37,8 @@ | |||
37 | 37 | ||
38 | #include <stdlib.h> | 38 | #include <stdlib.h> |
39 | #include <openssl/aes.h> | 39 | #include <openssl/aes.h> |
40 | #include <openssl/fips.h> | ||
41 | #include "aes_locl.h" | 40 | #include "aes_locl.h" |
42 | 41 | ||
43 | #ifndef OPENSSL_FIPS | ||
44 | |||
45 | /* | 42 | /* |
46 | Te0[x] = S [x].[02, 01, 01, 03]; | 43 | Te0[x] = S [x].[02, 01, 01, 03]; |
47 | Te1[x] = S [x].[03, 02, 01, 01]; | 44 | Te1[x] = S [x].[03, 02, 01, 01]; |
@@ -1258,4 +1255,3 @@ void AES_decrypt(const unsigned char *in, unsigned char *out, | |||
1258 | PUTU32(out + 12, s3); | 1255 | PUTU32(out + 12, s3); |
1259 | } | 1256 | } |
1260 | 1257 | ||
1261 | #endif /* ndef OPENSSL_FIPS */ | ||
diff --git a/src/lib/libcrypto/aes/aes_ctr.c b/src/lib/libcrypto/aes/aes_ctr.c index f36982be1e..79e1c18f19 100644 --- a/src/lib/libcrypto/aes/aes_ctr.c +++ b/src/lib/libcrypto/aes/aes_ctr.c | |||
@@ -59,7 +59,7 @@ | |||
59 | #include <openssl/aes.h> | 59 | #include <openssl/aes.h> |
60 | #include "aes_locl.h" | 60 | #include "aes_locl.h" |
61 | 61 | ||
62 | /* NOTE: the IV/counter CTR mode is big-endian. The rest of the AES code | 62 | /* NOTE: CTR mode is big-endian. The rest of the AES code |
63 | * is endian-neutral. */ | 63 | * is endian-neutral. */ |
64 | 64 | ||
65 | /* increment counter (128-bit int) by 1 */ | 65 | /* increment counter (128-bit int) by 1 */ |
@@ -67,36 +67,61 @@ static void AES_ctr128_inc(unsigned char *counter) { | |||
67 | unsigned long c; | 67 | unsigned long c; |
68 | 68 | ||
69 | /* Grab bottom dword of counter and increment */ | 69 | /* Grab bottom dword of counter and increment */ |
70 | #ifdef L_ENDIAN | ||
71 | c = GETU32(counter + 0); | ||
72 | c++; | ||
73 | PUTU32(counter + 0, c); | ||
74 | #else | ||
70 | c = GETU32(counter + 12); | 75 | c = GETU32(counter + 12); |
71 | c++; c &= 0xFFFFFFFF; | 76 | c++; |
72 | PUTU32(counter + 12, c); | 77 | PUTU32(counter + 12, c); |
78 | #endif | ||
73 | 79 | ||
74 | /* if no overflow, we're done */ | 80 | /* if no overflow, we're done */ |
75 | if (c) | 81 | if (c) |
76 | return; | 82 | return; |
77 | 83 | ||
78 | /* Grab 1st dword of counter and increment */ | 84 | /* Grab 1st dword of counter and increment */ |
85 | #ifdef L_ENDIAN | ||
86 | c = GETU32(counter + 4); | ||
87 | c++; | ||
88 | PUTU32(counter + 4, c); | ||
89 | #else | ||
79 | c = GETU32(counter + 8); | 90 | c = GETU32(counter + 8); |
80 | c++; c &= 0xFFFFFFFF; | 91 | c++; |
81 | PUTU32(counter + 8, c); | 92 | PUTU32(counter + 8, c); |
93 | #endif | ||
82 | 94 | ||
83 | /* if no overflow, we're done */ | 95 | /* if no overflow, we're done */ |
84 | if (c) | 96 | if (c) |
85 | return; | 97 | return; |
86 | 98 | ||
87 | /* Grab 2nd dword of counter and increment */ | 99 | /* Grab 2nd dword of counter and increment */ |
100 | #ifdef L_ENDIAN | ||
101 | c = GETU32(counter + 8); | ||
102 | c++; | ||
103 | PUTU32(counter + 8, c); | ||
104 | #else | ||
88 | c = GETU32(counter + 4); | 105 | c = GETU32(counter + 4); |
89 | c++; c &= 0xFFFFFFFF; | 106 | c++; |
90 | PUTU32(counter + 4, c); | 107 | PUTU32(counter + 4, c); |
108 | #endif | ||
91 | 109 | ||
92 | /* if no overflow, we're done */ | 110 | /* if no overflow, we're done */ |
93 | if (c) | 111 | if (c) |
94 | return; | 112 | return; |
95 | 113 | ||
96 | /* Grab top dword of counter and increment */ | 114 | /* Grab top dword of counter and increment */ |
115 | #ifdef L_ENDIAN | ||
116 | c = GETU32(counter + 12); | ||
117 | c++; | ||
118 | PUTU32(counter + 12, c); | ||
119 | #else | ||
97 | c = GETU32(counter + 0); | 120 | c = GETU32(counter + 0); |
98 | c++; c &= 0xFFFFFFFF; | 121 | c++; |
99 | PUTU32(counter + 0, c); | 122 | PUTU32(counter + 0, c); |
123 | #endif | ||
124 | |||
100 | } | 125 | } |
101 | 126 | ||
102 | /* The input encrypted as though 128bit counter mode is being | 127 | /* The input encrypted as though 128bit counter mode is being |
diff --git a/src/lib/libcrypto/aes/aes_locl.h b/src/lib/libcrypto/aes/aes_locl.h index 4184729e34..f290946058 100644 --- a/src/lib/libcrypto/aes/aes_locl.h +++ b/src/lib/libcrypto/aes/aes_locl.h | |||
@@ -62,7 +62,7 @@ | |||
62 | #include <stdlib.h> | 62 | #include <stdlib.h> |
63 | #include <string.h> | 63 | #include <string.h> |
64 | 64 | ||
65 | #if defined(_MSC_VER) && !defined(_M_IA64) && !defined(OPENSSL_SYS_WINCE) | 65 | #if defined(_MSC_VER) && !defined(OPENSSL_SYS_WINCE) |
66 | # define SWAP(x) (_lrotl(x, 8) & 0x00ff00ff | _lrotr(x, 8) & 0xff00ff00) | 66 | # define SWAP(x) (_lrotl(x, 8) & 0x00ff00ff | _lrotr(x, 8) & 0xff00ff00) |
67 | # define GETU32(p) SWAP(*((u32 *)(p))) | 67 | # define GETU32(p) SWAP(*((u32 *)(p))) |
68 | # define PUTU32(ct, st) { *((u32 *)(ct)) = SWAP((st)); } | 68 | # define PUTU32(ct, st) { *((u32 *)(ct)) = SWAP((st)); } |