diff options
author | Ben Laurie <ben@openssl.org> | 2001-02-06 14:09:13 +0000 |
---|---|---|
committer | Ben Laurie <ben@openssl.org> | 2001-02-06 14:09:13 +0000 |
commit | 259810e05bfcb465469a326cbfb939661a2fbcb9 (patch) | |
tree | d1d0e9f496dc18d640caad8eae5ef3c93190ef49 /crypto | |
parent | 171cc53a962533f284b8f1f4cf5d92f6bca3b3e0 (diff) |
Rijdael CBC mode and partial undebugged SSL support.
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/evp/c_allc.c | 3 | ||||
-rw-r--r-- | crypto/evp/e_rd.c | 82 | ||||
-rw-r--r-- | crypto/evp/evp.h | 1 | ||||
-rw-r--r-- | crypto/objects/obj_dat.h | 36 | ||||
-rw-r--r-- | crypto/objects/obj_mac.h | 36 | ||||
-rw-r--r-- | crypto/objects/obj_mac.num | 12 | ||||
-rw-r--r-- | crypto/objects/objects.txt | 9 | ||||
-rw-r--r-- | crypto/rijndael/Makefile.ssl | 4 |
8 files changed, 174 insertions, 9 deletions
diff --git a/crypto/evp/c_allc.c b/crypto/evp/c_allc.c index bb78c68160..02b3579b86 100644 --- a/crypto/evp/c_allc.c +++ b/crypto/evp/c_allc.c @@ -150,7 +150,10 @@ void OpenSSL_add_all_ciphers(void) #ifndef NO_RIJNDAEL for(i=0 ; i < 3 ; ++i) for(j=0 ; j < 3 ; ++j) + { EVP_add_cipher(EVP_rijndael_ecb(i,j)); + EVP_add_cipher(EVP_rijndael_cbc(i,j)); + } #endif PKCS12_PBE_add(); PKCS5_PBE_add(); diff --git a/crypto/evp/e_rd.c b/crypto/evp/e_rd.c index 78122edc7a..c2888aa055 100644 --- a/crypto/evp/e_rd.c +++ b/crypto/evp/e_rd.c @@ -56,15 +56,22 @@ static EVP_CIPHER rd_cipher[3][3]; static int anSizes[]={16,24,32}; -static int anNIDs[3][3]= +static int anECBNIDs[3][3]= { { NID_rijndael_ecb_k128_b128,NID_rijndael_ecb_k192_b128,NID_rijndael_ecb_k256_b128 }, { NID_rijndael_ecb_k128_b192,NID_rijndael_ecb_k192_b192,NID_rijndael_ecb_k256_b192 }, { NID_rijndael_ecb_k128_b256,NID_rijndael_ecb_k192_b256,NID_rijndael_ecb_k256_b256 } }; -static int rd_init_ecb(EVP_CIPHER_CTX *ctx, const unsigned char *key, - const unsigned char *iv, int enc) +static int anCBCNIDs[3][3]= + { + { NID_rd128_cbc_b128,NID_rd192_cbc_b128,NID_rd256_cbc_b128 }, + { NID_rd128_cbc_b192,NID_rd192_cbc_b192,NID_rd256_cbc_b192 }, + { NID_rd128_cbc_b256,NID_rd192_cbc_b256,NID_rd256_cbc_b256 } + }; + +static int rd_init(EVP_CIPHER_CTX *ctx, const unsigned char *key, + const unsigned char *iv, int enc) { RIJNDAEL_KEY *k=&ctx->c.rijndael; @@ -98,6 +105,39 @@ static int rd_cipher_ecb(EVP_CIPHER_CTX *ctx, unsigned char *out, return 1; } +static int rd_cipher_cbc(EVP_CIPHER_CTX *ctx, unsigned char *out, + const unsigned char *in, unsigned int inl) + { + int n; + unsigned char tmp[16]; + + while(inl > 0) + { + if(ctx->c.rijndael.enc) + { + for(n=0 ; n < 16 ; ++n) + tmp[n]=in[n]^ctx->c.rijndael.iv[n]; + rijndaelEncrypt(tmp,out,ctx->c.rijndael.keySched, + ctx->c.rijndael.rounds); + memcpy(ctx->c.rijndael.iv,out,16); + } + else + { + rijndaelDecrypt(in,out,ctx->c.rijndael.keySched, + ctx->c.rijndael.rounds); + for(n=0 ; n < 16 ; ++n) + out[n]^=ctx->c.rijndael.iv[n]; + memcpy(ctx->c.rijndael.iv,in,16); + } + inl-=16; + in+=16; + out+=16; + } + assert(inl == 0); + + return 1; + } + EVP_CIPHER *EVP_rijndael_ecb(int nBlockLength,int nKeyLength) { EVP_CIPHER *c; @@ -117,15 +157,47 @@ EVP_CIPHER *EVP_rijndael_ecb(int nBlockLength,int nKeyLength) memset(c,'\0',sizeof *c); - c->nid=anNIDs[nBlockLength][nKeyLength]; + c->nid=anECBNIDs[nBlockLength][nKeyLength]; c->block_size=anSizes[nBlockLength]; c->key_len=anSizes[nKeyLength]; c->iv_len=16; c->flags=EVP_CIPH_ECB_MODE; - c->init=rd_init_ecb; + c->init=rd_init; c->do_cipher=rd_cipher_ecb; c->ctx_size=sizeof(EVP_CIPHER_CTX)-sizeof((((EVP_CIPHER_CTX *)NULL)->c))+ sizeof((((EVP_CIPHER_CTX *)NULL)->c.rijndael)); return c; } + +EVP_CIPHER *EVP_rijndael_cbc(int nBlockLength,int nKeyLength) + { + EVP_CIPHER *c; + + if(nBlockLength < 0 || nBlockLength > 2) + { + EVPerr(EVP_F_EVP_RIJNDAEL,EVP_R_BAD_BLOCK_LENGTH); + return NULL; + } + if(nKeyLength < 0 || nKeyLength > 2) + { + EVPerr(EVP_F_EVP_RIJNDAEL,EVP_R_BAD_KEY_LENGTH); + return NULL; + } + + c=&rd_cipher[nKeyLength][nBlockLength]; + + memset(c,'\0',sizeof *c); + + c->nid=anCBCNIDs[nBlockLength][nKeyLength]; + c->block_size=anSizes[nBlockLength]; + c->key_len=anSizes[nKeyLength]; + c->iv_len=16; + c->flags=EVP_CIPH_CBC_MODE; + c->init=rd_init; + c->do_cipher=rd_cipher_cbc; + c->ctx_size=sizeof(EVP_CIPHER_CTX)-sizeof((((EVP_CIPHER_CTX *)NULL)->c))+ + sizeof((((EVP_CIPHER_CTX *)NULL)->c.rijndael)); + + return c; + } diff --git a/crypto/evp/evp.h b/crypto/evp/evp.h index 60578f9d5e..e8b4de48df 100644 --- a/crypto/evp/evp.h +++ b/crypto/evp/evp.h @@ -707,6 +707,7 @@ EVP_CIPHER *EVP_rc5_32_12_16_ofb(void); #endif #ifndef NO_RIJNDAEL EVP_CIPHER *EVP_rijndael_ecb(int nBlockLength,int nKeyLength); +EVP_CIPHER *EVP_rijndael_cbc(int nBlockLength,int nKeyLength); #endif void OpenSSL_add_all_algorithms(void); diff --git a/crypto/objects/obj_dat.h b/crypto/objects/obj_dat.h index b10da2d9b6..5c5b5aaf14 100644 --- a/crypto/objects/obj_dat.h +++ b/crypto/objects/obj_dat.h @@ -61,9 +61,9 @@ * perl obj_dat.pl objects.h obj_dat.h */ -#define NUM_NID 405 -#define NUM_SN 401 -#define NUM_LN 401 +#define NUM_NID 417 +#define NUM_SN 410 +#define NUM_LN 410 #define NUM_OBJ 366 static unsigned char lvalues[2896]={ @@ -1066,6 +1066,18 @@ static ASN1_OBJECT nid_objs[NUM_NID]={ NID_rijndael_ecb_k192_b256,0,NULL}, {"RIJNDAEL-ECB-K256-B256","rijndael-ecb-k256-b256", NID_rijndael_ecb_k256_b256,0,NULL}, +{NULL,NULL,NID_undef,0,NULL}, +{NULL,NULL,NID_undef,0,NULL}, +{NULL,NULL,NID_undef,0,NULL}, +{"RD128-CBC-B128","rd128-cbc-b128",NID_rd128_cbc_b128,0,NULL}, +{"RD192-CBC-B128","rd192-cbc-b128",NID_rd192_cbc_b128,0,NULL}, +{"RD256-CBC-B128","rd256-cbc-b128",NID_rd256_cbc_b128,0,NULL}, +{"RD128-CBC-B192","rd128-cbc-b192",NID_rd128_cbc_b192,0,NULL}, +{"RD192-CBC-B192","rd192-cbc-b192",NID_rd192_cbc_b192,0,NULL}, +{"RD256-CBC-B192","rd256-cbc-b192",NID_rd256_cbc_b192,0,NULL}, +{"RD128-CBC-B256","rd128-cbc-b256",NID_rd128_cbc_b256,0,NULL}, +{"RD192-CBC-B256","rd192-cbc-b256",NID_rd192_cbc_b256,0,NULL}, +{"RD256-CBC-B256","rd256-cbc-b256",NID_rd256_cbc_b256,0,NULL}, }; static ASN1_OBJECT *sn_objs[NUM_SN]={ @@ -1155,6 +1167,15 @@ static ASN1_OBJECT *sn_objs[NUM_SN]={ &(nid_objs[122]),/* "RC5-CFB" */ &(nid_objs[121]),/* "RC5-ECB" */ &(nid_objs[123]),/* "RC5-OFB" */ +&(nid_objs[408]),/* "RD128-CBC-B128" */ +&(nid_objs[411]),/* "RD128-CBC-B192" */ +&(nid_objs[414]),/* "RD128-CBC-B256" */ +&(nid_objs[409]),/* "RD192-CBC-B128" */ +&(nid_objs[412]),/* "RD192-CBC-B192" */ +&(nid_objs[415]),/* "RD192-CBC-B256" */ +&(nid_objs[410]),/* "RD256-CBC-B128" */ +&(nid_objs[413]),/* "RD256-CBC-B192" */ +&(nid_objs[416]),/* "RD256-CBC-B256" */ &(nid_objs[396]),/* "RIJNDAEL-ECB-K128-B128" */ &(nid_objs[399]),/* "RIJNDAEL-ECB-K128-B192" */ &(nid_objs[402]),/* "RIJNDAEL-ECB-K128-B256" */ @@ -1834,6 +1855,15 @@ static ASN1_OBJECT *ln_objs[NUM_LN]={ &(nid_objs[122]),/* "rc5-cfb" */ &(nid_objs[121]),/* "rc5-ecb" */ &(nid_objs[123]),/* "rc5-ofb" */ +&(nid_objs[408]),/* "rd128-cbc-b128" */ +&(nid_objs[411]),/* "rd128-cbc-b192" */ +&(nid_objs[414]),/* "rd128-cbc-b256" */ +&(nid_objs[409]),/* "rd192-cbc-b128" */ +&(nid_objs[412]),/* "rd192-cbc-b192" */ +&(nid_objs[415]),/* "rd192-cbc-b256" */ +&(nid_objs[410]),/* "rd256-cbc-b128" */ +&(nid_objs[413]),/* "rd256-cbc-b192" */ +&(nid_objs[416]),/* "rd256-cbc-b256" */ &(nid_objs[396]),/* "rijndael-ecb-k128-b128" */ &(nid_objs[399]),/* "rijndael-ecb-k128-b192" */ &(nid_objs[402]),/* "rijndael-ecb-k128-b256" */ diff --git a/crypto/objects/obj_mac.h b/crypto/objects/obj_mac.h index 308528f9cc..ccfea00d8c 100644 --- a/crypto/objects/obj_mac.h +++ b/crypto/objects/obj_mac.h @@ -1833,3 +1833,39 @@ #define LN_rijndael_ecb_k256_b256 "rijndael-ecb-k256-b256" #define NID_rijndael_ecb_k256_b256 404 +#define SN_rd128_cbc_b128 "RD128-CBC-B128" +#define LN_rd128_cbc_b128 "rd128-cbc-b128" +#define NID_rd128_cbc_b128 408 + +#define SN_rd192_cbc_b128 "RD192-CBC-B128" +#define LN_rd192_cbc_b128 "rd192-cbc-b128" +#define NID_rd192_cbc_b128 409 + +#define SN_rd256_cbc_b128 "RD256-CBC-B128" +#define LN_rd256_cbc_b128 "rd256-cbc-b128" +#define NID_rd256_cbc_b128 410 + +#define SN_rd128_cbc_b192 "RD128-CBC-B192" +#define LN_rd128_cbc_b192 "rd128-cbc-b192" +#define NID_rd128_cbc_b192 411 + +#define SN_rd192_cbc_b192 "RD192-CBC-B192" +#define LN_rd192_cbc_b192 "rd192-cbc-b192" +#define NID_rd192_cbc_b192 412 + +#define SN_rd256_cbc_b192 "RD256-CBC-B192" +#define LN_rd256_cbc_b192 "rd256-cbc-b192" +#define NID_rd256_cbc_b192 413 + +#define SN_rd128_cbc_b256 "RD128-CBC-B256" +#define LN_rd128_cbc_b256 "rd128-cbc-b256" +#define NID_rd128_cbc_b256 414 + +#define SN_rd192_cbc_b256 "RD192-CBC-B256" +#define LN_rd192_cbc_b256 "rd192-cbc-b256" +#define NID_rd192_cbc_b256 415 + +#define SN_rd256_cbc_b256 "RD256-CBC-B256" +#define LN_rd256_cbc_b256 "rd256-cbc-b256" +#define NID_rd256_cbc_b256 416 + diff --git a/crypto/objects/obj_mac.num b/crypto/objects/obj_mac.num index 94e13b44eb..9196462b14 100644 --- a/crypto/objects/obj_mac.num +++ b/crypto/objects/obj_mac.num @@ -402,3 +402,15 @@ rijndael_ecb_k256_b192 401 rijndael_ecb_k128_b256 402 rijndael_ecb_k192_b256 403 rijndael_ecb_k256_b256 404 +rd128_cbc 405 +rd192_cbc 406 +rd256_cbc 407 +rd128_cbc_b128 408 +rd192_cbc_b128 409 +rd256_cbc_b128 410 +rd128_cbc_b192 411 +rd192_cbc_b192 412 +rd256_cbc_b192 413 +rd128_cbc_b256 414 +rd192_cbc_b256 415 +rd256_cbc_b256 416 diff --git a/crypto/objects/objects.txt b/crypto/objects/objects.txt index d4ee20db37..d110ad6c65 100644 --- a/crypto/objects/objects.txt +++ b/crypto/objects/objects.txt @@ -601,3 +601,12 @@ enterprises 1466 344 : dcobject : dcObject : RIJNDAEL-ECB-K128-B256: rijndael-ecb-k128-b256 : RIJNDAEL-ECB-K192-B256: rijndael-ecb-k192-b256 : RIJNDAEL-ECB-K256-B256: rijndael-ecb-k256-b256 + : RD128-CBC-B128 : rd128-cbc-b128 + : RD192-CBC-B128 : rd192-cbc-b128 + : RD256-CBC-B128 : rd256-cbc-b128 + : RD128-CBC-B192 : rd128-cbc-b192 + : RD192-CBC-B192 : rd192-cbc-b192 + : RD256-CBC-B192 : rd256-cbc-b192 + : RD128-CBC-B256 : rd128-cbc-b256 + : RD192-CBC-B256 : rd192-cbc-b256 + : RD256-CBC-B256 : rd256-cbc-b256 diff --git a/crypto/rijndael/Makefile.ssl b/crypto/rijndael/Makefile.ssl index 6ed8aa3c03..368a82c5bd 100644 --- a/crypto/rijndael/Makefile.ssl +++ b/crypto/rijndael/Makefile.ssl @@ -20,7 +20,7 @@ RD_ENC= rd_enc.o # or use #DES_ENC= bx86-elf.o -CFLAGS= $(INCLUDES) $(CFLAG) -DINTERMEDIATE_VALUE_KAT -DBINARY_KEY_MATERIAL +CFLAGS= -mpentiumpro $(INCLUDES) $(CFLAG) -DINTERMEDIATE_VALUE_KAT -DBINARY_KEY_MATERIAL -O3 -fexpensive-optimizations -funroll-loops -fforce-addr GENERAL=Makefile #TEST=rijndael-test-fst.c table.128 table.192 table.256 @@ -45,6 +45,8 @@ lib: $(LIBOBJ) $(RANLIB) $(LIB) @touch lib +$(LIBOBJ): $(LIBSRC) + files: $(PERL) $(TOP)/util/files.pl Makefile.ssl >> $(TOP)/MINFO |