Add the missing parts for DES CFB1 and CFB8.
authorRichard Levitte <levitte@openssl.org>
Wed, 28 Jan 2004 19:05:35 +0000 (19:05 +0000)
committerRichard Levitte <levitte@openssl.org>
Wed, 28 Jan 2004 19:05:35 +0000 (19:05 +0000)
Add the corresponding AES parts while I'm at it.
make update

15 files changed:
crypto/aes/aes.h
crypto/aes/aes_cfb.c
crypto/des/des.h
crypto/evp/c_allc.c
crypto/evp/e_aes.c
crypto/evp/e_des3.c
crypto/evp/evp.h
crypto/evp/evp_err.c
crypto/evp/evp_lib.c
crypto/evp/evp_locl.h
crypto/objects/obj_dat.h
crypto/objects/obj_mac.h
crypto/objects/obj_mac.num
crypto/objects/objects.txt
util/libeay.num

index 6bc0cf0..20c4dbc 100644 (file)
@@ -97,6 +97,15 @@ void AES_cbc_encrypt(const unsigned char *in, unsigned char *out,
 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_cfb1_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_cfb8_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_cfbr_encrypt_block(const unsigned char *in,unsigned char *out,
+                           const int nbits,const AES_KEY *key,
+                           unsigned char *ivec,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);
index 9b569dd..2e0c41e 100644 (file)
@@ -155,3 +155,96 @@ void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out,
        *num=n;
 }
 
+/* This expects a single block of size nbits for both in and out. Note that
+   it corrupts any extra bits in the last byte of out */
+/* Untested, once it is working, it will be optimised */
+void AES_cfbr_encrypt_block(const unsigned char *in,unsigned char *out,
+                           const int nbits,const AES_KEY *key,
+                           unsigned char *ivec,const int enc)
+    {
+    int n;
+    unsigned char ovec[AES_BLOCK_SIZE*2];
+
+    assert(in && out && key && ivec);
+    if(enc)
+       {
+       /* construct the new IV */
+       AES_encrypt(ivec,ovec,key);
+       /* encrypt the input */
+       for(n=0 ; n < (nbits+7)/8 ; ++n)
+           out[n]=in[n]^ovec[n];
+       /* fill in the first half of the new IV with the current IV */
+       memcpy(ovec,ivec,AES_BLOCK_SIZE);
+       /* and put the ciphertext in the second half */
+       memcpy(ovec+AES_BLOCK_SIZE,out,(nbits+7)/8);
+       /* shift ovec left most of the bits... */
+       memmove(ovec,ovec+nbits/8,AES_BLOCK_SIZE+(nbits%8 ? 1 : 0));
+       /* now the remaining bits */
+       if(nbits%8 != 0)
+           for(n=0 ; n < AES_BLOCK_SIZE ; ++n)
+               {
+               ovec[n]<<=nbits%8;
+               ovec[n]|=ovec[n+1]>>(8-nbits%8);
+               }
+       /* finally, move it back into place */
+       memcpy(ivec,ovec,AES_BLOCK_SIZE);
+       }
+    else
+       {
+       /* construct the new IV in the first half of ovec */
+       AES_encrypt(ivec,ovec,key);
+       /* decrypt the input */
+       for(n=0 ; n < (nbits+7)/8 ; ++n)
+           out[n]=in[n]^ovec[n];
+       /* fill in the first half of the new IV with the current IV */
+       memcpy(ovec,ivec,AES_BLOCK_SIZE);
+       /* append the ciphertext */
+       memcpy(ovec+AES_BLOCK_SIZE,in,(nbits+7)/8);
+       /* shift ovec left most of the bits... */
+       memmove(ovec,ovec+nbits/8,AES_BLOCK_SIZE+(nbits%8 ? 1 : 0));
+       /* now the remaining bits */
+       if(nbits%8 != 0)
+           for(n=0 ; n < AES_BLOCK_SIZE ; ++n)
+               {
+               ovec[n]<<=nbits%8;
+               ovec[n]|=ovec[n+1]>>(8-nbits%8);
+               }
+       /* finally, move it back into place */
+       memcpy(ivec,ovec,AES_BLOCK_SIZE);
+       }
+    /* it is not necessary to cleanse ovec, since the IV is not secret */
+    }
+
+/* N.B. This expects the input to be packed, MS bit first */
+void AES_cfb1_encrypt(const unsigned char *in, unsigned char *out,
+                     const unsigned long length, const AES_KEY *key,
+                     unsigned char *ivec, int *num, const int enc)
+    {
+    unsigned int n;
+    unsigned char c[1],d[1];
+
+    assert(in && out && key && ivec && num);
+    assert(*num == 0);
+
+    memset(out,0,(length+7)/8);
+    for(n=0 ; n < length ; ++n)
+       {
+       c[0]=(in[n/8]&(1 << (7-n%8))) ? 0x80 : 0;
+       AES_cfbr_encrypt_block(c,d,1,key,ivec,enc);
+       out[n/8]=(out[n/8]&~(1 << (7-n%8)))|((d[0]&0x80) >> (n%8));
+       }
+    }
+
+void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out,
+                     const unsigned long length, const AES_KEY *key,
+                     unsigned char *ivec, int *num, const int enc)
+    {
+    unsigned int n;
+
+    assert(in && out && key && ivec && num);
+    assert(*num == 0);
+
+    for(n=0 ; n < length ; ++n)
+       AES_cfbr_encrypt_block(&in[n],&out[n],8,key,ivec,enc);
+    }
+
index 4475143..3cbc2b5 100644 (file)
@@ -187,6 +187,10 @@ void DES_ede3_cfb64_encrypt(const unsigned char *in,unsigned char *out,
                            long length,DES_key_schedule *ks1,
                            DES_key_schedule *ks2,DES_key_schedule *ks3,
                            DES_cblock *ivec,int *num,int enc);
+void DES_ede3_cfb_encrypt(const unsigned char *in,unsigned char *out,
+                         int numbits,long length,DES_key_schedule *ks1,
+                         DES_key_schedule *ks2,DES_key_schedule *ks3,
+                         DES_cblock *ivec,int enc);
 void DES_ede3_ofb64_encrypt(const unsigned char *in,unsigned char *out,
                            long length,DES_key_schedule *ks1,
                            DES_key_schedule *ks2,DES_key_schedule *ks3,
index 341a958..fc96812 100644 (file)
@@ -67,6 +67,8 @@ void OpenSSL_add_all_ciphers(void)
 
 #ifndef OPENSSL_NO_DES
        EVP_add_cipher(EVP_des_cfb());
+       EVP_add_cipher(EVP_des_cfb1());
+       EVP_add_cipher(EVP_des_cfb8());
        EVP_add_cipher(EVP_des_ede_cfb());
        EVP_add_cipher(EVP_des_ede3_cfb());
 
@@ -150,6 +152,8 @@ void OpenSSL_add_all_ciphers(void)
        EVP_add_cipher(EVP_aes_128_ecb());
        EVP_add_cipher(EVP_aes_128_cbc());
        EVP_add_cipher(EVP_aes_128_cfb());
+       EVP_add_cipher(EVP_aes_128_cfb1());
+       EVP_add_cipher(EVP_aes_128_cfb8());
        EVP_add_cipher(EVP_aes_128_ofb());
 #if 0
        EVP_add_cipher(EVP_aes_128_ctr());
@@ -159,6 +163,8 @@ void OpenSSL_add_all_ciphers(void)
        EVP_add_cipher(EVP_aes_192_ecb());
        EVP_add_cipher(EVP_aes_192_cbc());
        EVP_add_cipher(EVP_aes_192_cfb());
+       EVP_add_cipher(EVP_aes_192_cfb1());
+       EVP_add_cipher(EVP_aes_192_cfb8());
        EVP_add_cipher(EVP_aes_192_ofb());
 #if 0
        EVP_add_cipher(EVP_aes_192_ctr());
@@ -168,6 +174,8 @@ void OpenSSL_add_all_ciphers(void)
        EVP_add_cipher(EVP_aes_256_ecb());
        EVP_add_cipher(EVP_aes_256_cbc());
        EVP_add_cipher(EVP_aes_256_cfb());
+       EVP_add_cipher(EVP_aes_256_cfb1());
+       EVP_add_cipher(EVP_aes_256_cfb8());
        EVP_add_cipher(EVP_aes_256_ofb());
 #if 0
        EVP_add_cipher(EVP_aes_256_ctr());
index bf7c45f..bd6c0a3 100644 (file)
@@ -86,17 +86,35 @@ IMPLEMENT_BLOCK_CIPHER(aes_256, ks, AES, EVP_AES_KEY,
                       EVP_CIPHER_get_asn1_iv,
                       NULL)
 
+#define IMPLEMENT_AES_CFBR(ksize,cbits)        IMPLEMENT_CFBR(aes,AES,EVP_AES_KEY,ks,ksize,cbits,16)
+
+IMPLEMENT_AES_CFBR(128,1)
+IMPLEMENT_AES_CFBR(192,1)
+IMPLEMENT_AES_CFBR(256,1)
+
+IMPLEMENT_AES_CFBR(128,8)
+IMPLEMENT_AES_CFBR(192,8)
+IMPLEMENT_AES_CFBR(256,8)
+
 static int aes_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
-                  const unsigned char *iv, int enc) {
+                  const unsigned char *iv, int enc)
+       {
+       int ret;
 
        if ((ctx->cipher->flags & EVP_CIPH_MODE) == EVP_CIPH_CFB_MODE
            || (ctx->cipher->flags & EVP_CIPH_MODE) == EVP_CIPH_OFB_MODE
            || enc) 
-               AES_set_encrypt_key(key, ctx->key_len * 8, ctx->cipher_data);
+               ret=AES_set_encrypt_key(key, ctx->key_len * 8, ctx->cipher_data);
        else
-               AES_set_decrypt_key(key, ctx->key_len * 8, ctx->cipher_data);
+               ret=AES_set_decrypt_key(key, ctx->key_len * 8, ctx->cipher_data);
+
+       if(ret < 0)
+               {
+               EVPerr(EVP_F_AES_INIT_KEY,EVP_R_AES_KEY_SETUP_FAILED);
+               return 0;
+               }
 
        return 1;
-}
+       }
 
 #endif
index b462d7c..86342fb 100644 (file)
@@ -85,7 +85,8 @@ static int des_ede_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
                              const unsigned char *in, unsigned int inl)
 {
        BLOCK_CIPHER_ecb_loop()
-               DES_ecb3_encrypt(in + i,out + i, 
+               DES_ecb3_encrypt((const_DES_cblock *)(in + i),
+                                (DES_cblock *)(out + i),
                                 &data(ctx)->ks1, &data(ctx)->ks2,
                                 &data(ctx)->ks3,
                                 ctx->encrypt);
index a1dd3da..a5f3c44 100644 (file)
@@ -603,9 +603,20 @@ const EVP_CIPHER *EVP_des_ede(void);
 const EVP_CIPHER *EVP_des_ede3(void);
 const EVP_CIPHER *EVP_des_ede_ecb(void);
 const EVP_CIPHER *EVP_des_ede3_ecb(void);
-const EVP_CIPHER *EVP_des_cfb(void);
-const EVP_CIPHER *EVP_des_ede_cfb(void);
-const EVP_CIPHER *EVP_des_ede3_cfb(void);
+const EVP_CIPHER *EVP_des_cfb64(void);
+# define EVP_des_cfb EVP_des_cfb64
+const EVP_CIPHER *EVP_des_cfb1(void);
+const EVP_CIPHER *EVP_des_cfb8(void);
+const EVP_CIPHER *EVP_des_ede_cfb64(void);
+# define EVP_des_ede_cfb EVP_des_ede_cfb64
+#if 0
+const EVP_CIPHER *EVP_des_ede_cfb1(void);
+const EVP_CIPHER *EVP_des_ede_cfb8(void);
+#endif
+const EVP_CIPHER *EVP_des_ede3_cfb64(void);
+# define EVP_des_ede3_cfb EVP_des_ede3_cfb64
+const EVP_CIPHER *EVP_des_ede3_cfb1(void);
+const EVP_CIPHER *EVP_des_ede3_cfb8(void);
 const EVP_CIPHER *EVP_des_ofb(void);
 const EVP_CIPHER *EVP_des_ede_ofb(void);
 const EVP_CIPHER *EVP_des_ede3_ofb(void);
@@ -629,7 +640,8 @@ const EVP_CIPHER *EVP_rc4_40(void);
 #endif
 #ifndef OPENSSL_NO_IDEA
 const EVP_CIPHER *EVP_idea_ecb(void);
-const EVP_CIPHER *EVP_idea_cfb(void);
+const EVP_CIPHER *EVP_idea_cfb64(void);
+# define EVP_idea_cfb EVP_idea_cfb64
 const EVP_CIPHER *EVP_idea_ofb(void);
 const EVP_CIPHER *EVP_idea_cbc(void);
 #endif
@@ -638,45 +650,58 @@ const EVP_CIPHER *EVP_rc2_ecb(void);
 const EVP_CIPHER *EVP_rc2_cbc(void);
 const EVP_CIPHER *EVP_rc2_40_cbc(void);
 const EVP_CIPHER *EVP_rc2_64_cbc(void);
-const EVP_CIPHER *EVP_rc2_cfb(void);
+const EVP_CIPHER *EVP_rc2_cfb64(void);
+# define EVP_rc2_cfb EVP_rc2_cfb64
 const EVP_CIPHER *EVP_rc2_ofb(void);
 #endif
 #ifndef OPENSSL_NO_BF
 const EVP_CIPHER *EVP_bf_ecb(void);
 const EVP_CIPHER *EVP_bf_cbc(void);
-const EVP_CIPHER *EVP_bf_cfb(void);
+const EVP_CIPHER *EVP_bf_cfb64(void);
+# define EVP_bf_cfb EVP_bf_cfb64
 const EVP_CIPHER *EVP_bf_ofb(void);
 #endif
 #ifndef OPENSSL_NO_CAST
 const EVP_CIPHER *EVP_cast5_ecb(void);
 const EVP_CIPHER *EVP_cast5_cbc(void);
-const EVP_CIPHER *EVP_cast5_cfb(void);
+const EVP_CIPHER *EVP_cast5_cfb64(void);
+# define EVP_cast5_cfb EVP_cast5_cfb64
 const EVP_CIPHER *EVP_cast5_ofb(void);
 #endif
 #ifndef OPENSSL_NO_RC5
 const EVP_CIPHER *EVP_rc5_32_12_16_cbc(void);
 const EVP_CIPHER *EVP_rc5_32_12_16_ecb(void);
-const EVP_CIPHER *EVP_rc5_32_12_16_cfb(void);
+const EVP_CIPHER *EVP_rc5_32_12_16_cfb64(void);
+# define EVP_rc5_32_12_16_cfb EVP_rc5_32_12_16_cfb64
 const EVP_CIPHER *EVP_rc5_32_12_16_ofb(void);
 #endif
 #ifndef OPENSSL_NO_AES
 const EVP_CIPHER *EVP_aes_128_ecb(void);
 const EVP_CIPHER *EVP_aes_128_cbc(void);
-const EVP_CIPHER *EVP_aes_128_cfb(void);
+const EVP_CIPHER *EVP_aes_128_cfb1(void);
+const EVP_CIPHER *EVP_aes_128_cfb8(void);
+const EVP_CIPHER *EVP_aes_128_cfb128(void);
+# define EVP_aes_128_cfb EVP_aes_128_cfb128
 const EVP_CIPHER *EVP_aes_128_ofb(void);
 #if 0
 const EVP_CIPHER *EVP_aes_128_ctr(void);
 #endif
 const EVP_CIPHER *EVP_aes_192_ecb(void);
 const EVP_CIPHER *EVP_aes_192_cbc(void);
-const EVP_CIPHER *EVP_aes_192_cfb(void);
+const EVP_CIPHER *EVP_aes_192_cfb1(void);
+const EVP_CIPHER *EVP_aes_192_cfb8(void);
+const EVP_CIPHER *EVP_aes_192_cfb128(void);
+# define EVP_aes_192_cfb EVP_aes_192_cfb128
 const EVP_CIPHER *EVP_aes_192_ofb(void);
 #if 0
 const EVP_CIPHER *EVP_aes_192_ctr(void);
 #endif
 const EVP_CIPHER *EVP_aes_256_ecb(void);
 const EVP_CIPHER *EVP_aes_256_cbc(void);
-const EVP_CIPHER *EVP_aes_256_cfb(void);
+const EVP_CIPHER *EVP_aes_256_cfb1(void);
+const EVP_CIPHER *EVP_aes_256_cfb8(void);
+const EVP_CIPHER *EVP_aes_256_cfb128(void);
+# define EVP_aes_256_cfb EVP_aes_256_cfb128
 const EVP_CIPHER *EVP_aes_256_ofb(void);
 #if 0
 const EVP_CIPHER *EVP_aes_256_ctr(void);
@@ -794,6 +819,7 @@ void ERR_load_EVP_strings(void);
 /* Error codes for the EVP functions. */
 
 /* Function codes. */
+#define EVP_F_AES_INIT_KEY                              133
 #define EVP_F_D2I_PKEY                                  100
 #define EVP_F_ECDSA_PKEY2PKCS8                          129
 #define EVP_F_EC_KEY_PKEY2PKCS8                                 132
@@ -828,6 +854,7 @@ void ERR_load_EVP_strings(void);
 #define EVP_F_RC5_CTRL                                  125
 
 /* Reason codes. */
+#define EVP_R_AES_KEY_SETUP_FAILED                      143
 #define EVP_R_ASN1_LIB                                  140
 #define EVP_R_BAD_BLOCK_LENGTH                          136
 #define EVP_R_BAD_DECRYPT                               100
index 815ce63..bf37e66 100644 (file)
@@ -1,6 +1,6 @@
 /* crypto/evp/evp_err.c */
 /* ====================================================================
- * Copyright (c) 1999-2002 The OpenSSL Project.  All rights reserved.
+ * Copyright (c) 1999-2003 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
@@ -66,6 +66,7 @@
 #ifndef OPENSSL_NO_ERR
 static ERR_STRING_DATA EVP_str_functs[]=
        {
+{ERR_PACK(0,EVP_F_AES_INIT_KEY,0),     "AES_INIT_KEY"},
 {ERR_PACK(0,EVP_F_D2I_PKEY,0), "D2I_PKEY"},
 {ERR_PACK(0,EVP_F_ECDSA_PKEY2PKCS8,0), "ECDSA_PKEY2PKCS8"},
 {ERR_PACK(0,EVP_F_EC_KEY_PKEY2PKCS8,0),        "EC_KEY_PKEY2PKCS8"},
@@ -103,6 +104,7 @@ static ERR_STRING_DATA EVP_str_functs[]=
 
 static ERR_STRING_DATA EVP_str_reasons[]=
        {
+{EVP_R_AES_KEY_SETUP_FAILED              ,"aes key setup failed"},
 {EVP_R_ASN1_LIB                          ,"asn1 lib"},
 {EVP_R_BAD_BLOCK_LENGTH                  ,"bad block length"},
 {EVP_R_BAD_DECRYPT                       ,"bad decrypt"},
index c97cb9c..b532c45 100644 (file)
@@ -135,6 +135,30 @@ int EVP_CIPHER_type(const EVP_CIPHER *ctx)
 
                return NID_rc4;
 
+               case NID_aes_128_cfb128:
+               case NID_aes_128_cfb8:
+               case NID_aes_128_cfb1:
+
+               return NID_aes_128_cfb128;
+
+               case NID_aes_192_cfb128:
+               case NID_aes_192_cfb8:
+               case NID_aes_192_cfb1:
+
+               return NID_aes_192_cfb128;
+
+               case NID_aes_256_cfb128:
+               case NID_aes_256_cfb8:
+               case NID_aes_256_cfb1:
+
+               return NID_aes_256_cfb128;
+
+               case NID_des_cfb64:
+               case NID_des_cfb8:
+               case NID_des_cfb1:
+
+               return NID_des_cfb64;
+
                default:
                /* Check it has an OID and it is valid */
                otmp = OBJ_nid2obj(nid);
index 4d81a3b..2204e34 100644 (file)
@@ -90,7 +90,7 @@ static int cname##_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const uns
 }
 
 #define BLOCK_CIPHER_func_cfb(cname, cprefix, cbits, kstruct, ksched) \
-static int cname##_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, unsigned int inl) \
+static int cname##_cfb##cbits##_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, unsigned int inl) \
 {\
        cprefix##_cfb##cbits##_encrypt(in, out, (long)inl, &((kstruct *)ctx->cipher_data)->ksched, ctx->iv, &ctx->num, ctx->encrypt);\
        return 1;\
@@ -127,7 +127,7 @@ BLOCK_CIPHER_def1(cname, cbc, cbc, CBC, kstruct, nid, block_size, key_len, \
 #define BLOCK_CIPHER_def_cfb(cname, kstruct, nid, key_len, \
                             iv_len, cbits, flags, init_key, cleanup, \
                             set_asn1, get_asn1, ctrl) \
-BLOCK_CIPHER_def1(cname, cfb##cbits, cfb, CFB, kstruct, nid, 1, \
+BLOCK_CIPHER_def1(cname, cfb##cbits, cfb##cbits, CFB, kstruct, nid, 1, \
                  key_len, iv_len, flags, init_key, cleanup, set_asn1, \
                  get_asn1, ctrl)
 
@@ -225,3 +225,12 @@ const EVP_CIPHER *EVP_##cname##_ecb(void) { return &cname##_ecb; }
                          get_asn1, ctrl)
 
 #define EVP_C_DATA(kstruct, ctx)       ((kstruct *)(ctx)->cipher_data)
+
+#define IMPLEMENT_CFBR(cipher,cprefix,kstruct,ksched,keysize,cbits,iv_len) \
+       BLOCK_CIPHER_func_cfb(cipher##_##keysize,cprefix,cbits,kstruct,ksched) \
+       BLOCK_CIPHER_def_cfb(cipher##_##keysize,kstruct, \
+                            NID_##cipher##_##keysize, keysize/8, iv_len, cbits, \
+                            0, cipher##_init_key, NULL, \
+                            EVP_CIPHER_set_asn1_iv, \
+                            EVP_CIPHER_get_asn1_iv, \
+                            NULL)
index beb48b8..7889f2c 100644 (file)
@@ -62,9 +62,9 @@
  * [including the GNU Public Licence.]
  */
 
-#define NUM_NID 726
-#define NUM_SN 721
-#define NUM_LN 721
+#define NUM_NID 736
+#define NUM_SN 731
+#define NUM_LN 731
 #define NUM_OBJ 693
 
 static unsigned char lvalues[4882]={
@@ -1896,20 +1896,36 @@ static ASN1_OBJECT nid_objs[NUM_NID]={
        NID_international_organizations,1,&(lvalues[4880]),0},
 {"Oakley-EC2N-3","ipsec3",NID_ipsec3,0,NULL},
 {"Oakley-EC2N-4","ipsec4",NID_ipsec4,0,NULL},
+{"AES-128-CFB1","aes-128-cfb1",NID_aes_128_cfb1,0,NULL},
+{"AES-192-CFB1","aes-192-cfb1",NID_aes_192_cfb1,0,NULL},
+{"AES-256-CFB1","aes-256-cfb1",NID_aes_256_cfb1,0,NULL},
+{"AES-128-CFB8","aes-128-cfb8",NID_aes_128_cfb8,0,NULL},
+{"AES-192-CFB8","aes-192-cfb8",NID_aes_192_cfb8,0,NULL},
+{"AES-256-CFB8","aes-256-cfb8",NID_aes_256_cfb8,0,NULL},
+{"DES-CFB1","des-cfb1",NID_des_cfb1,0,NULL},
+{"DES-CFB8","des-cfb8",NID_des_cfb8,0,NULL},
+{"DES-EDE3-CFB1","des-ede3-cfb1",NID_des_ede3_cfb1,0,NULL},
+{"DES-EDE3-CFB8","des-ede3-cfb8",NID_des_ede3_cfb8,0,NULL},
 };
 
 static ASN1_OBJECT *sn_objs[NUM_SN]={
 &(nid_objs[364]),/* "AD_DVCS" */
 &(nid_objs[419]),/* "AES-128-CBC" */
 &(nid_objs[421]),/* "AES-128-CFB" */
+&(nid_objs[726]),/* "AES-128-CFB1" */
+&(nid_objs[729]),/* "AES-128-CFB8" */
 &(nid_objs[418]),/* "AES-128-ECB" */
 &(nid_objs[420]),/* "AES-128-OFB" */
 &(nid_objs[423]),/* "AES-192-CBC" */
 &(nid_objs[425]),/* "AES-192-CFB" */
+&(nid_objs[727]),/* "AES-192-CFB1" */
+&(nid_objs[730]),/* "AES-192-CFB8" */
 &(nid_objs[422]),/* "AES-192-ECB" */
 &(nid_objs[424]),/* "AES-192-OFB" */
 &(nid_objs[427]),/* "AES-256-CBC" */
 &(nid_objs[429]),/* "AES-256-CFB" */
+&(nid_objs[728]),/* "AES-256-CFB1" */
+&(nid_objs[731]),/* "AES-256-CFB8" */
 &(nid_objs[426]),/* "AES-256-ECB" */
 &(nid_objs[428]),/* "AES-256-OFB" */
 &(nid_objs[91]),/* "BF-CBC" */
@@ -1929,6 +1945,8 @@ static ASN1_OBJECT *sn_objs[NUM_SN]={
 &(nid_objs[31]),/* "DES-CBC" */
 &(nid_objs[707]),/* "DES-CDMF" */
 &(nid_objs[30]),/* "DES-CFB" */
+&(nid_objs[732]),/* "DES-CFB1" */
+&(nid_objs[733]),/* "DES-CFB8" */
 &(nid_objs[29]),/* "DES-ECB" */
 &(nid_objs[32]),/* "DES-EDE" */
 &(nid_objs[43]),/* "DES-EDE-CBC" */
@@ -1937,6 +1955,8 @@ static ASN1_OBJECT *sn_objs[NUM_SN]={
 &(nid_objs[33]),/* "DES-EDE3" */
 &(nid_objs[44]),/* "DES-EDE3-CBC" */
 &(nid_objs[61]),/* "DES-EDE3-CFB" */
+&(nid_objs[734]),/* "DES-EDE3-CFB1" */
+&(nid_objs[735]),/* "DES-EDE3-CFB8" */
 &(nid_objs[63]),/* "DES-EDE3-OFB" */
 &(nid_objs[45]),/* "DES-OFB" */
 &(nid_objs[80]),/* "DESX-CBC" */
@@ -2737,14 +2757,20 @@ static ASN1_OBJECT *ln_objs[NUM_LN]={
 &(nid_objs[670]),/* "additional verification" */
 &(nid_objs[419]),/* "aes-128-cbc" */
 &(nid_objs[421]),/* "aes-128-cfb" */
+&(nid_objs[726]),/* "aes-128-cfb1" */
+&(nid_objs[729]),/* "aes-128-cfb8" */
 &(nid_objs[418]),/* "aes-128-ecb" */
 &(nid_objs[420]),/* "aes-128-ofb" */
 &(nid_objs[423]),/* "aes-192-cbc" */
 &(nid_objs[425]),/* "aes-192-cfb" */
+&(nid_objs[727]),/* "aes-192-cfb1" */
+&(nid_objs[730]),/* "aes-192-cfb8" */
 &(nid_objs[422]),/* "aes-192-ecb" */
 &(nid_objs[424]),/* "aes-192-ofb" */
 &(nid_objs[427]),/* "aes-256-cbc" */
 &(nid_objs[429]),/* "aes-256-cfb" */
+&(nid_objs[728]),/* "aes-256-cfb1" */
+&(nid_objs[731]),/* "aes-256-cfb8" */
 &(nid_objs[426]),/* "aes-256-ecb" */
 &(nid_objs[428]),/* "aes-256-ofb" */
 &(nid_objs[376]),/* "algorithm" */
@@ -2803,6 +2829,8 @@ static ASN1_OBJECT *ln_objs[NUM_LN]={
 &(nid_objs[31]),/* "des-cbc" */
 &(nid_objs[707]),/* "des-cdmf" */
 &(nid_objs[30]),/* "des-cfb" */
+&(nid_objs[732]),/* "des-cfb1" */
+&(nid_objs[733]),/* "des-cfb8" */
 &(nid_objs[29]),/* "des-ecb" */
 &(nid_objs[32]),/* "des-ede" */
 &(nid_objs[43]),/* "des-ede-cbc" */
@@ -2811,6 +2839,8 @@ static ASN1_OBJECT *ln_objs[NUM_LN]={
 &(nid_objs[33]),/* "des-ede3" */
 &(nid_objs[44]),/* "des-ede3-cbc" */
 &(nid_objs[61]),/* "des-ede3-cfb" */
+&(nid_objs[734]),/* "des-ede3-cfb1" */
+&(nid_objs[735]),/* "des-ede3-cfb8" */
 &(nid_objs[63]),/* "des-ede3-ofb" */
 &(nid_objs[45]),/* "des-ofb" */
 &(nid_objs[107]),/* "description" */
index ba871f4..f04ff9b 100644 (file)
 #define NID_aes_256_cfb128             429
 #define OBJ_aes_256_cfb128             OBJ_aes,44L
 
+#define SN_aes_128_cfb1                "AES-128-CFB1"
+#define LN_aes_128_cfb1                "aes-128-cfb1"
+#define NID_aes_128_cfb1               726
+
+#define SN_aes_192_cfb1                "AES-192-CFB1"
+#define LN_aes_192_cfb1                "aes-192-cfb1"
+#define NID_aes_192_cfb1               727
+
+#define SN_aes_256_cfb1                "AES-256-CFB1"
+#define LN_aes_256_cfb1                "aes-256-cfb1"
+#define NID_aes_256_cfb1               728
+
+#define SN_aes_128_cfb8                "AES-128-CFB8"
+#define LN_aes_128_cfb8                "aes-128-cfb8"
+#define NID_aes_128_cfb8               729
+
+#define SN_aes_192_cfb8                "AES-192-CFB8"
+#define LN_aes_192_cfb8                "aes-192-cfb8"
+#define NID_aes_192_cfb8               730
+
+#define SN_aes_256_cfb8                "AES-256-CFB8"
+#define LN_aes_256_cfb8                "aes-256-cfb8"
+#define NID_aes_256_cfb8               731
+
+#define SN_des_cfb1            "DES-CFB1"
+#define LN_des_cfb1            "des-cfb1"
+#define NID_des_cfb1           732
+
+#define SN_des_cfb8            "DES-CFB8"
+#define LN_des_cfb8            "des-cfb8"
+#define NID_des_cfb8           733
+
+#define SN_des_ede3_cfb1               "DES-EDE3-CFB1"
+#define LN_des_ede3_cfb1               "des-ede3-cfb1"
+#define NID_des_ede3_cfb1              734
+
+#define SN_des_ede3_cfb8               "DES-EDE3-CFB8"
+#define LN_des_ede3_cfb8               "des-ede3-cfb8"
+#define NID_des_ede3_cfb8              735
+
 #define SN_hold_instruction_code               "holdInstructionCode"
 #define LN_hold_instruction_code               "Hold Instruction Code"
 #define NID_hold_instruction_code              430
index b4ff8f0..65ecec0 100644 (file)
@@ -723,3 +723,13 @@ joint_iso_itu_t            722
 international_organizations            723
 ipsec3         724
 ipsec4         725
+aes_128_cfb1           726
+aes_192_cfb1           727
+aes_256_cfb1           728
+aes_128_cfb8           729
+aes_192_cfb8           730
+aes_256_cfb8           731
+des_cfb1               732
+des_cfb8               733
+des_ede3_cfb1          734
+des_ede3_cfb8          735
index 0160b3e..ae78c0d 100644 (file)
@@ -775,6 +775,19 @@ aes 43                     : AES-256-OFB           : aes-256-ofb
 !Cname aes-256-cfb128
 aes 44                 : AES-256-CFB           : aes-256-cfb
 
+# There are no OIDs for these modes...
+
+                       : AES-128-CFB1          : aes-128-cfb1
+                       : AES-192-CFB1          : aes-192-cfb1
+                       : AES-256-CFB1          : aes-256-cfb1
+                       : AES-128-CFB8          : aes-128-cfb8
+                       : AES-192-CFB8          : aes-192-cfb8
+                       : AES-256-CFB8          : aes-256-cfb8
+                       : DES-CFB1              : des-cfb1
+                       : DES-CFB8              : des-cfb8
+                       : DES-EDE3-CFB1         : des-ede3-cfb1
+                       : DES-EDE3-CFB8         : des-ede3-cfb8
+
 # Hold instruction CRL entry extension
 !Cname hold-instruction-code
 id-ce 23               : holdInstructionCode   : Hold Instruction Code
index cc60c32..6d66ffc 100755 (executable)
@@ -284,20 +284,20 @@ EVP_add_alias                           291       NOEXIST::FUNCTION:
 EVP_add_cipher                          292    EXIST::FUNCTION:
 EVP_add_digest                          293    EXIST::FUNCTION:
 EVP_bf_cbc                              294    EXIST::FUNCTION:BF
-EVP_bf_cfb                              295    EXIST::FUNCTION:BF
+EVP_bf_cfb64                            295    EXIST::FUNCTION:BF
 EVP_bf_ecb                              296    EXIST::FUNCTION:BF
 EVP_bf_ofb                              297    EXIST::FUNCTION:BF
 EVP_cleanup                             298    EXIST::FUNCTION:
 EVP_des_cbc                             299    EXIST::FUNCTION:DES
-EVP_des_cfb                             300    EXIST::FUNCTION:DES
+EVP_des_cfb64                           300    EXIST::FUNCTION:DES
 EVP_des_ecb                             301    EXIST::FUNCTION:DES
 EVP_des_ede                             302    EXIST::FUNCTION:DES
 EVP_des_ede3                            303    EXIST::FUNCTION:DES
 EVP_des_ede3_cbc                        304    EXIST::FUNCTION:DES
-EVP_des_ede3_cfb                        305    EXIST::FUNCTION:DES
+EVP_des_ede3_cfb64                      305    EXIST::FUNCTION:DES
 EVP_des_ede3_ofb                        306    EXIST::FUNCTION:DES
 EVP_des_ede_cbc                         307    EXIST::FUNCTION:DES
-EVP_des_ede_cfb                         308    EXIST::FUNCTION:DES
+EVP_des_ede_cfb64                       308    EXIST::FUNCTION:DES
 EVP_des_ede_ofb                         309    EXIST::FUNCTION:DES
 EVP_des_ofb                             310    EXIST::FUNCTION:DES
 EVP_desx_cbc                            311    EXIST::FUNCTION:DES
@@ -308,14 +308,14 @@ EVP_get_cipherbyname                    315       EXIST::FUNCTION:
 EVP_get_digestbyname                    316    EXIST::FUNCTION:
 EVP_get_pw_prompt                       317    EXIST::FUNCTION:
 EVP_idea_cbc                            318    EXIST::FUNCTION:IDEA
-EVP_idea_cfb                            319    EXIST::FUNCTION:IDEA
+EVP_idea_cfb64                          319    EXIST::FUNCTION:IDEA
 EVP_idea_ecb                            320    EXIST::FUNCTION:IDEA
 EVP_idea_ofb                            321    EXIST::FUNCTION:IDEA
 EVP_md2                                 322    EXIST::FUNCTION:MD2
 EVP_md5                                 323    EXIST::FUNCTION:MD5
 EVP_md_null                             324    EXIST::FUNCTION:
 EVP_rc2_cbc                             325    EXIST::FUNCTION:RC2
-EVP_rc2_cfb                             326    EXIST::FUNCTION:RC2
+EVP_rc2_cfb64                           326    EXIST::FUNCTION:RC2
 EVP_rc2_ecb                             327    EXIST::FUNCTION:RC2
 EVP_rc2_ofb                             328    EXIST::FUNCTION:RC2
 EVP_rc4                                 329    EXIST::FUNCTION:RC4
@@ -962,7 +962,7 @@ i2t_ASN1_OBJECT                         979 EXIST::FUNCTION:
 BN_BLINDING_new                         980    EXIST::FUNCTION:
 BN_BLINDING_free                        981    EXIST::FUNCTION:
 EVP_cast5_cbc                           983    EXIST::FUNCTION:CAST
-EVP_cast5_cfb                           984    EXIST::FUNCTION:CAST
+EVP_cast5_cfb64                         984    EXIST::FUNCTION:CAST
 EVP_cast5_ecb                           985    EXIST::FUNCTION:CAST
 EVP_cast5_ofb                           986    EXIST::FUNCTION:CAST
 BF_decrypt                              987    EXIST::FUNCTION:BF
@@ -1057,7 +1057,7 @@ EVP_CIPHER_param_to_asn1                1084      EXIST::FUNCTION:
 EVP_CIPHER_get_asn1_iv                  1085   EXIST::FUNCTION:
 EVP_CIPHER_set_asn1_iv                  1086   EXIST::FUNCTION:
 EVP_rc5_32_12_16_cbc                    1087   EXIST::FUNCTION:RC5
-EVP_rc5_32_12_16_cfb                    1088   EXIST::FUNCTION:RC5
+EVP_rc5_32_12_16_cfb64                  1088   EXIST::FUNCTION:RC5
 EVP_rc5_32_12_16_ecb                    1089   EXIST::FUNCTION:RC5
 EVP_rc5_32_12_16_ofb                    1090   EXIST::FUNCTION:RC5
 asn1_add_error                          1091   EXIST::FUNCTION:
@@ -2776,10 +2776,10 @@ ENGINE_load_4758cca                     3218    EXIST::FUNCTION:ENGINE,STATIC_ENGIN
 _ossl_096_des_random_seed               3219   EXIST::FUNCTION:DES
 EVP_aes_256_ofb                         3220   EXIST::FUNCTION:AES
 EVP_aes_192_ofb                         3221   EXIST::FUNCTION:AES
-EVP_aes_128_cfb                         3222   EXIST::FUNCTION:AES
-EVP_aes_256_cfb                         3223   EXIST::FUNCTION:AES
+EVP_aes_128_cfb64                       3222   NOEXIST::FUNCTION:
+EVP_aes_256_cfb64                       3223   NOEXIST::FUNCTION:
 EVP_aes_128_ofb                         3224   EXIST::FUNCTION:AES
-EVP_aes_192_cfb                         3225   EXIST::FUNCTION:AES
+EVP_aes_192_cfb64                       3225   NOEXIST::FUNCTION:
 CONF_modules_free                       3226   EXIST::FUNCTION:
 NCONF_default                           3227   EXIST::FUNCTION:
 OPENSSL_no_config                       3228   EXIST::FUNCTION:
@@ -3148,3 +3148,17 @@ BN_GF2m_mod_inv_arr                     3576     EXIST::FUNCTION:
 ENGINE_unregister_ECDSA                 3577   EXIST::FUNCTION:ENGINE
 PKCS7_set_digest                        3578   EXIST::FUNCTION:
 PKCS7_set0_type_other                   3579   EXIST::FUNCTION:
+EVP_aes_128_cfb8                        3580   EXIST::FUNCTION:AES
+EVP_aes_256_cfb128                      3581   EXIST::FUNCTION:AES
+EVP_aes_128_cfb1                        3582   EXIST::FUNCTION:AES
+EVP_aes_192_cfb8                        3583   EXIST::FUNCTION:AES
+EVP_aes_256_cfb8                        3584   EXIST::FUNCTION:AES
+DES_ede3_cfb_encrypt                    3585   EXIST::FUNCTION:DES
+EVP_aes_128_cfb128                      3586   EXIST::FUNCTION:AES
+EVP_des_ede3_cfb8                       3587   EXIST::FUNCTION:DES
+EVP_aes_192_cfb128                      3588   EXIST::FUNCTION:AES
+EVP_aes_192_cfb1                        3589   EXIST::FUNCTION:AES
+EVP_des_cfb8                            3590   EXIST::FUNCTION:DES
+EVP_aes_256_cfb1                        3591   EXIST::FUNCTION:AES
+EVP_des_cfb1                            3592   EXIST::FUNCTION:DES
+EVP_des_ede3_cfb1                       3593   EXIST::FUNCTION:DES