1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* crypto/evp/e_des.c */ 2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * All rights reserved. 4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This package is an SSL implementation written 6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * by Eric Young (eay@cryptsoft.com). 7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The implementation was written so as to conform with Netscapes SSL. 8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This library is free for commercial and non-commercial use as long as 10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the following conditions are aheared to. The following conditions 11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * apply to all code found in this distribution, be it the RC4, RSA, 12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * lhash, DES, etc., code; not just the SSL code. The SSL documentation 13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * included with this distribution is covered by the same copyright terms 14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * except that the holder is Tim Hudson (tjh@cryptsoft.com). 15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Copyright remains Eric Young's, and as such any Copyright notices in 17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the code are not to be removed. 18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * If this package is used in a product, Eric Young should be given attribution 19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * as the author of the parts of the library used. 20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This can be in the form of a textual message at program startup or 21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * in documentation (online or textual) provided with the package. 22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Redistribution and use in source and binary forms, with or without 24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * modification, are permitted provided that the following conditions 25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * are met: 26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 1. Redistributions of source code must retain the copyright 27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * notice, this list of conditions and the following disclaimer. 28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * notice, this list of conditions and the following disclaimer in the 30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * documentation and/or other materials provided with the distribution. 31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 3. All advertising materials mentioning features or use of this software 32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * must display the following acknowledgement: 33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * "This product includes cryptographic software written by 34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Eric Young (eay@cryptsoft.com)" 35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The word 'cryptographic' can be left out if the rouines from the library 36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * being used are not cryptographic related :-). 37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 4. If you include any Windows specific code (or a derivative thereof) from 38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the apps directory (application code) you must include an acknowledgement: 39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * SUCH DAMAGE. 52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The licence and distribution terms for any publically available version or 54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * derivative of this code cannot be changed. i.e. this code cannot simply be 55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * copied and put under another distribution licence 56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * [including the GNU Public Licence.] 57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <stdio.h> 60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "cryptlib.h" 61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef OPENSSL_NO_DES 62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/evp.h> 63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/objects.h> 64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "evp_locl.h" 65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/des.h> 66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/rand.h> 67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int des_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const unsigned char *iv, int enc); 70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int des_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr); 71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Because of various casts and different names can't use IMPLEMENT_BLOCK_CIPHER */ 73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int des_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 75221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom const unsigned char *in, size_t inl) 76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ 77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BLOCK_CIPHER_ecb_loop() 78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DES_ecb_encrypt((DES_cblock *)(in + i), (DES_cblock *)(out + i), ctx->cipher_data, ctx->encrypt); 79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 1; 80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int des_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 83221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom const unsigned char *in, size_t inl) 84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ 85221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom while(inl>=EVP_MAXCHUNK) 86221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom { 87221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom DES_ofb64_encrypt(in, out, (long)EVP_MAXCHUNK, ctx->cipher_data, 88221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom (DES_cblock *)ctx->iv, &ctx->num); 89221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom inl-=EVP_MAXCHUNK; 90221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom in +=EVP_MAXCHUNK; 91221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom out+=EVP_MAXCHUNK; 92221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 93221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom if (inl) 94221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom DES_ofb64_encrypt(in, out, (long)inl, ctx->cipher_data, 95221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom (DES_cblock *)ctx->iv, &ctx->num); 96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 1; 97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int des_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 100221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom const unsigned char *in, size_t inl) 101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ 102221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom while(inl>=EVP_MAXCHUNK) 103221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom { 104221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom DES_ncbc_encrypt(in, out, (long)EVP_MAXCHUNK, ctx->cipher_data, 105221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom (DES_cblock *)ctx->iv, ctx->encrypt); 106221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom inl-=EVP_MAXCHUNK; 107221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom in +=EVP_MAXCHUNK; 108221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom out+=EVP_MAXCHUNK; 109221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 110221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom if (inl) 111221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom DES_ncbc_encrypt(in, out, (long)inl, ctx->cipher_data, 112221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom (DES_cblock *)ctx->iv, ctx->encrypt); 113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 1; 114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int des_cfb64_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 117221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom const unsigned char *in, size_t inl) 118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ 119221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom while(inl>=EVP_MAXCHUNK) 120221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom { 121221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom DES_cfb64_encrypt(in,out, (long)EVP_MAXCHUNK, ctx->cipher_data, 122221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom (DES_cblock *)ctx->iv, &ctx->num, ctx->encrypt); 123221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom inl-=EVP_MAXCHUNK; 124221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom in +=EVP_MAXCHUNK; 125221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom out+=EVP_MAXCHUNK; 126221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 127221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom if (inl) 128221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom DES_cfb64_encrypt(in, out, (long)inl, ctx->cipher_data, 129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (DES_cblock *)ctx->iv, &ctx->num, ctx->encrypt); 130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 1; 131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Although we have a CFB-r implementation for DES, it doesn't pack the right 134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project way, so wrap it here */ 135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int des_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 136221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom const unsigned char *in, size_t inl) 137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 138221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom size_t n,chunk=EVP_MAXCHUNK/8; 139656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project unsigned char c[1],d[1]; 140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 141221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom if (inl<chunk) chunk=inl; 142221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 143221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom while (inl && inl>=chunk) 144656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 145221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom for(n=0 ; n < chunk*8; ++n) 146221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom { 147221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom c[0]=(in[n/8]&(1 << (7-n%8))) ? 0x80 : 0; 148221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom DES_cfb_encrypt(c,d,1,1,ctx->cipher_data,(DES_cblock *)ctx->iv, 149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ctx->encrypt); 150221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom out[n/8]=(out[n/8]&~(0x80 >> (unsigned int)(n%8))) | 151221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ((d[0]&0x80) >> (unsigned int)(n%8)); 152221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 153221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom inl-=chunk; 154221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom in +=chunk; 155221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom out+=chunk; 156221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom if (inl<chunk) chunk=inl; 157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 158221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 1; 160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int des_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 163221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom const unsigned char *in, size_t inl) 164656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 165221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom while (inl>=EVP_MAXCHUNK) 166221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom { 167221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom DES_cfb_encrypt(in,out,8,(long)EVP_MAXCHUNK,ctx->cipher_data, 168221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom (DES_cblock *)ctx->iv,ctx->encrypt); 169221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom inl-=EVP_MAXCHUNK; 170221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom in +=EVP_MAXCHUNK; 171221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom out+=EVP_MAXCHUNK; 172221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 173221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom if (inl) 174221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom DES_cfb_encrypt(in,out,8,(long)inl,ctx->cipher_data, 175221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom (DES_cblock *)ctx->iv,ctx->encrypt); 176656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 1; 177656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 178656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectBLOCK_CIPHER_defs(des, DES_key_schedule, NID_des, 8, 8, 8, 64, 180221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom EVP_CIPH_RAND_KEY, des_init_key, NULL, 181656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EVP_CIPHER_set_asn1_iv, 182656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EVP_CIPHER_get_asn1_iv, 183656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project des_ctrl) 184656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 185656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectBLOCK_CIPHER_def_cfb(des,DES_key_schedule,NID_des,8,8,1, 186221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom EVP_CIPH_RAND_KEY, des_init_key,NULL, 187656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EVP_CIPHER_set_asn1_iv, 188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EVP_CIPHER_get_asn1_iv,des_ctrl) 189656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 190656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectBLOCK_CIPHER_def_cfb(des,DES_key_schedule,NID_des,8,8,8, 191221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom EVP_CIPH_RAND_KEY,des_init_key,NULL, 192656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EVP_CIPHER_set_asn1_iv, 193656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EVP_CIPHER_get_asn1_iv,des_ctrl) 194656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 195656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int des_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 196656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const unsigned char *iv, int enc) 197656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 198656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DES_cblock *deskey = (DES_cblock *)key; 199656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef EVP_CHECK_DES_KEY 200656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if(DES_set_key_checked(deskey,ctx->cipher_data) != 0) 201656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 0; 202656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else 203656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DES_set_key_unchecked(deskey,ctx->cipher_data); 204656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 205656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 1; 206656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 207656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 208656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int des_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr) 209656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 210656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 211656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project switch(type) 212656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 213656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project case EVP_CTRL_RAND_KEY: 214656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (RAND_bytes(ptr, 8) <= 0) 215656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 0; 216656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DES_set_odd_parity((DES_cblock *)ptr); 217656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 1; 218656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 219656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project default: 220656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return -1; 221656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 222656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 223656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 224656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 225