Browse Source

Re-add |EVP_des_ede_cbc|.

Note that while |DES_ede2_cbc_encrypt| exists, I didn't use it: I
think it's easier to see what's happening this way.

(I couldn't find an authoritative source of test data, including in
OpenSSL's source, so I used OpenSSL's implementation to produce the
test ciphertext.)

This benefits globalplatform.

Change-Id: I7e17ca0b69067d7b3f4bc213b4616eb269882ae0
Reviewed-on: https://boringssl-review.googlesource.com/5724
Reviewed-by: Adam Langley <agl@google.com>
kris/onging/CECPQ3_patch15
Matt Braithwaite 9 years ago
committed by Adam Langley
parent
commit
8c413a2d94
4 changed files with 34 additions and 2 deletions
  1. +2
    -0
      crypto/cipher/cipher_test.cc
  2. +23
    -2
      crypto/cipher/e_des.c
  3. +8
    -0
      crypto/cipher/test/cipher_test.txt
  4. +1
    -0
      include/openssl/cipher.h

+ 2
- 0
crypto/cipher/cipher_test.cc View File

@@ -71,6 +71,8 @@ static const EVP_CIPHER *GetCipher(const std::string &name) {
return EVP_des_cbc();
} else if (name == "DES-ECB") {
return EVP_des_ecb();
} else if (name == "DES-EDE-CBC") {
return EVP_des_ede_cbc();
} else if (name == "DES-EDE3-CBC") {
return EVP_des_ede3_cbc();
} else if (name == "RC4") {


+ 23
- 2
crypto/cipher/e_des.c View File

@@ -151,10 +151,31 @@ static int des_ede3_cbc_cipher(EVP_CIPHER_CTX *ctx, uint8_t *out,
return 1;
}

static const EVP_CIPHER des3_cbc = {
static const EVP_CIPHER des_ede3_cbc = {
NID_des_ede3_cbc, 8 /* block_size */, 24 /* key_size */,
8 /* iv_len */, sizeof(DES_EDE_KEY), EVP_CIPH_CBC_MODE,
NULL /* app_data */, des_ede3_init_key, des_ede3_cbc_cipher,
NULL /* cleanup */, NULL /* ctrl */, };

const EVP_CIPHER *EVP_des_ede3_cbc(void) { return &des3_cbc; }
const EVP_CIPHER *EVP_des_ede3_cbc(void) { return &des_ede3_cbc; }


static int des_ede_init_key(EVP_CIPHER_CTX *ctx, const uint8_t *key,
const uint8_t *iv, int enc) {
DES_cblock *deskey = (DES_cblock *) key;
DES_EDE_KEY *dat = (DES_EDE_KEY *) ctx->cipher_data;

DES_set_key(&deskey[0], &dat->ks.ks[0]);
DES_set_key(&deskey[1], &dat->ks.ks[1]);
DES_set_key(&deskey[0], &dat->ks.ks[2]);

return 1;
}

static const EVP_CIPHER des_ede_cbc = {
NID_des_ede_cbc, 8 /* block_size */, 16 /* key_size */,
8 /* iv_len */, sizeof(DES_EDE_KEY), EVP_CIPH_CBC_MODE,
NULL /* app_data */, des_ede_init_key , des_ede3_cbc_cipher,
NULL /* cleanup */, NULL /* ctrl */, };

const EVP_CIPHER *EVP_des_ede_cbc(void) { return &des_ede_cbc; }

+ 8
- 0
crypto/cipher/test/cipher_test.txt View File

@@ -38,6 +38,14 @@ Plaintext = 37363534333231204E6F77206973207468652074696D6520666F722000000000
Ciphertext = 3FE301C962AC01D02213763C1CBD4CDC799657C064ECF5D41C673812CFDE9675


# DES EDE CBC tests
Cipher = DES-EDE-CBC
Key = 0123456789abcdeff1e0d3c2b5a49786
IV = fedcba9876543210
Plaintext = 37363534333231204E6F77206973207468652074696D6520666F722000000000
Ciphertext = 7948C0DA4FE91CD815DCA96DBC9B60A857EB954F4DEB08EB98722642AE69257B


# AES 128 ECB tests (from FIPS-197 test vectors, encrypt)
Cipher = AES-128-ECB
Key = 000102030405060708090A0B0C0D0E0F


+ 1
- 0
include/openssl/cipher.h View File

@@ -76,6 +76,7 @@ OPENSSL_EXPORT const EVP_CIPHER *EVP_rc4(void);

OPENSSL_EXPORT const EVP_CIPHER *EVP_des_cbc(void);
OPENSSL_EXPORT const EVP_CIPHER *EVP_des_ecb(void);
OPENSSL_EXPORT const EVP_CIPHER *EVP_des_ede_cbc(void);
OPENSSL_EXPORT const EVP_CIPHER *EVP_des_ede3_cbc(void);

OPENSSL_EXPORT const EVP_CIPHER *EVP_aes_128_ecb(void);


Loading…
Cancel
Save