Add the modes OFB128, CFB128 and CTR128 to AES.
authorRichard Levitte <levitte@openssl.org>
Sat, 16 Feb 2002 12:21:43 +0000 (12:21 +0000)
committerRichard Levitte <levitte@openssl.org>
Sat, 16 Feb 2002 12:21:43 +0000 (12:21 +0000)
Submitted by Stephen Sprunk <stephen@sprunk.org>

crypto/aes/Makefile.ssl
crypto/aes/aes.h
crypto/aes/aes_cbc.c
crypto/aes/aes_core.c
crypto/aes/aes_ecb.c
crypto/aes/aes_locl.h
crypto/aes/aes_misc.c

index 13deef0604abf94603041ec8be920d216dd10734..099bf0dd28731482f3c857143fbc112b0a0a6547 100644 (file)
@@ -26,8 +26,8 @@ TEST=
 APPS=
 
 LIB=$(TOP)/libcrypto.a
-LIBSRC=aes_core.c aes_misc.c aes_ecb.c aes_cbc.c
-LIBOBJ=aes_core.o aes_misc.o aes_ecb.o aes_cbc.o
+LIBSRC=aes_core.c aes_misc.c aes_ecb.c aes_cbc.c aes_cfb.c aes_ofb.c aes_ctr.c
+LIBOBJ=aes_core.o aes_misc.o aes_ecb.o aes_cbc.o aes_cfb.o aes_ofb.o aes_ctr.o
 
 SRC= $(LIBSRC)
 
index 2d6c2018386288ea4e8ebefe481d6c602799affe..e8da921ec50472067ca0cad91e66d8cc920d4490 100644 (file)
@@ -1,6 +1,6 @@
 /* crypto/aes/aes.h -*- mode:C; c-file-style: "eay" -*- */
 /* ====================================================================
- * Copyright (c) 1998-2001 The OpenSSL Project.  All rights reserved.
+ * Copyright (c) 1998-2002 The OpenSSL Project.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
 
 static const int AES_DECRYPT = 0;
 static const int AES_ENCRYPT = 1;
-#define AES_MAXNR 14 /* array size can't be a const in C */
-static const int AES_BLOCK_SIZE = 16; /* bytes */
+/* Because array size can't be a const in C, the following two are macros.
+   Both sizes are in bytes. */
+#define AES_MAXNR 14
+#define AES_BLOCK_SIZE 16
 
 #ifdef  __cplusplus
 extern "C" {
@@ -74,17 +76,31 @@ typedef struct aes_key_st AES_KEY;
 
 const char *AES_options(void);
 
-int AES_set_encrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key);
-int AES_set_decrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key);
+int AES_set_encrypt_key(const unsigned char *userKey, const int bits,
+       AES_KEY *key);
+int AES_set_decrypt_key(const unsigned char *userKey, const int bits,
+       AES_KEY *key);
 
-void AES_encrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key);
-void AES_decrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key);
+void AES_encrypt(const unsigned char *in, unsigned char *out,
+       const AES_KEY *key);
+void AES_decrypt(const unsigned char *in, unsigned char *out,
+       const AES_KEY *key);
 
 void AES_ecb_encrypt(const unsigned char *in, unsigned char *out,
-                    const AES_KEY *key, const int enc);
+       const AES_KEY *key, const int enc);
 void AES_cbc_encrypt(const unsigned char *in, unsigned char *out,
-                    const unsigned long length, const AES_KEY *key,
-                    unsigned char *ivec, const int enc);
+       const unsigned long length, const AES_KEY *key,
+       unsigned char *ivec, const int enc);
+void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out,
+       const unsigned long length, const AES_KEY *key,
+       unsigned char *ivec, int *num, const int enc);
+void AES_ofb128_encrypt(const unsigned char *in, unsigned char *out,
+       const unsigned long length, const AES_KEY *key,
+       unsigned char *ivec, int *num);
+void AES_ctr128_encrypt(const unsigned char *in, unsigned char *out,
+       const unsigned long length, const AES_KEY *key,
+       unsigned char *counter, unsigned int *num);
+
 
 #ifdef  __cplusplus
 }
index 964a9780e4db459d5a97b21186b5096d1f89dd63..3dfd7aba2a1900d454ebfbd39d78bd9b7f6a9897 100644 (file)
@@ -1,6 +1,6 @@
 /* crypto/aes/aes_cbc.c -*- mode:C; c-file-style: "eay" -*- */
 /* ====================================================================
- * Copyright (c) 1998-2001 The OpenSSL Project.  All rights reserved.
+ * Copyright (c) 1998-2002 The OpenSSL Project.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
index a9bc1c0de41f35067c683c8ea50d7f00bf65abd2..937988dd8c60775ae3fee4f5e11162af47817f0c 100644 (file)
@@ -715,16 +715,6 @@ static const u32 rcon[] = {
        0x1B000000, 0x36000000, /* for 128-bit blocks, Rijndael never uses more than 10 rcon values */
 };
 
-#define SWAP(x) (_lrotl(x, 8) & 0x00ff00ff | _lrotr(x, 8) & 0xff00ff00)
-
-#ifdef _MSC_VER
-#define GETU32(p) SWAP(*((u32 *)(p)))
-#define PUTU32(ct, st) { *((u32 *)(ct)) = SWAP((st)); }
-#else
-#define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ ((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
-#define PUTU32(ct, st) { (ct)[0] = (u8)((st) >> 24); (ct)[1] = (u8)((st) >> 16); (ct)[2] = (u8)((st) >>  8); (ct)[3] = (u8)(st); }
-#endif
-
 /**
  * Expand the cipher key into the encryption key schedule.
  */
index 8ea0f6608814118e98c82137ba389b9a5d609705..1cb2e07d3dd1b2c5a648973428c82baea10e1492 100644 (file)
@@ -1,6 +1,6 @@
 /* crypto/aes/aes_ecb.c -*- mode:C; c-file-style: "eay" -*- */
 /* ====================================================================
- * Copyright (c) 1998-2001 The OpenSSL Project.  All rights reserved.
+ * Copyright (c) 1998-2002 The OpenSSL Project.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
index d49e829933a500faca3b66af1601ed6acac89ea2..541d1d6e84592d9ed91f63b29fb85948bfca5c8f 100644 (file)
@@ -1,6 +1,6 @@
 /* crypto/aes/aes.h -*- mode:C; c-file-style: "eay" -*- */
 /* ====================================================================
- * Copyright (c) 1998-2001 The OpenSSL Project.  All rights reserved.
+ * Copyright (c) 1998-2002 The OpenSSL Project.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
 #include <string.h>
 #endif
 
+#ifdef _MSC_VER
+# define SWAP(x) (_lrotl(x, 8) & 0x00ff00ff | _lrotr(x, 8) & 0xff00ff00)
+# define GETU32(p) SWAP(*((u32 *)(p)))
+# define PUTU32(ct, st) { *((u32 *)(ct)) = SWAP((st)); }
+#else
+# define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ ((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
+# define PUTU32(ct, st) { (ct)[0] = (u8)((st) >> 24); (ct)[1] = (u8)((st) >> 16); (ct)[2] = (u8)((st) >>  8); (ct)[3] = (u8)(st); }
+#endif
+
 typedef unsigned long u32;
 typedef unsigned short u16;
 typedef unsigned char u8;
index 6bec96f67d8c9ffbde19f195661e5ce0e168dd00..090def25d5ac4b70443d67554a26e170f7efccb2 100644 (file)
@@ -1,6 +1,6 @@
 /* crypto/aes/aes_misc.c -*- mode:C; c-file-style: "eay" -*- */
 /* ====================================================================
- * Copyright (c) 1998-2001 The OpenSSL Project.  All rights reserved.
+ * Copyright (c) 1998-2002 The OpenSSL Project.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions