diff options
Diffstat (limited to 'src/lib/libcrypto/evp/e_rc4.c')
-rw-r--r-- | src/lib/libcrypto/evp/e_rc4.c | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/src/lib/libcrypto/evp/e_rc4.c b/src/lib/libcrypto/evp/e_rc4.c index c7e58a75cc..1c1e3b3857 100644 --- a/src/lib/libcrypto/evp/e_rc4.c +++ b/src/lib/libcrypto/evp/e_rc4.c | |||
@@ -63,14 +63,15 @@ | |||
63 | #include <openssl/evp.h> | 63 | #include <openssl/evp.h> |
64 | #include <openssl/objects.h> | 64 | #include <openssl/objects.h> |
65 | 65 | ||
66 | static void rc4_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key, | 66 | static int rc4_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, |
67 | unsigned char *iv,int enc); | 67 | const unsigned char *iv,int enc); |
68 | static void rc4_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, | 68 | static int rc4_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, |
69 | unsigned char *in, unsigned int inl); | 69 | const unsigned char *in, unsigned int inl); |
70 | static EVP_CIPHER r4_cipher= | 70 | static EVP_CIPHER r4_cipher= |
71 | { | 71 | { |
72 | NID_rc4, | 72 | NID_rc4, |
73 | 1,EVP_RC4_KEY_SIZE,0, | 73 | 1,EVP_RC4_KEY_SIZE,0, |
74 | EVP_CIPH_VARIABLE_LENGTH, | ||
74 | rc4_init_key, | 75 | rc4_init_key, |
75 | rc4_cipher, | 76 | rc4_cipher, |
76 | NULL, | 77 | NULL, |
@@ -78,14 +79,22 @@ static EVP_CIPHER r4_cipher= | |||
78 | sizeof((((EVP_CIPHER_CTX *)NULL)->c.rc4)), | 79 | sizeof((((EVP_CIPHER_CTX *)NULL)->c.rc4)), |
79 | NULL, | 80 | NULL, |
80 | NULL, | 81 | NULL, |
82 | NULL | ||
81 | }; | 83 | }; |
82 | 84 | ||
83 | static EVP_CIPHER r4_40_cipher= | 85 | static EVP_CIPHER r4_40_cipher= |
84 | { | 86 | { |
85 | NID_rc4_40, | 87 | NID_rc4_40, |
86 | 1,5 /* 40 bit */,0, | 88 | 1,5 /* 40 bit */,0, |
89 | EVP_CIPH_VARIABLE_LENGTH, | ||
87 | rc4_init_key, | 90 | rc4_init_key, |
88 | rc4_cipher, | 91 | rc4_cipher, |
92 | NULL, | ||
93 | sizeof(EVP_CIPHER_CTX)-sizeof((((EVP_CIPHER_CTX *)NULL)->c))+ | ||
94 | sizeof((((EVP_CIPHER_CTX *)NULL)->c.rc4)), | ||
95 | NULL, | ||
96 | NULL, | ||
97 | NULL | ||
89 | }; | 98 | }; |
90 | 99 | ||
91 | EVP_CIPHER *EVP_rc4(void) | 100 | EVP_CIPHER *EVP_rc4(void) |
@@ -98,18 +107,19 @@ EVP_CIPHER *EVP_rc4_40(void) | |||
98 | return(&r4_40_cipher); | 107 | return(&r4_40_cipher); |
99 | } | 108 | } |
100 | 109 | ||
101 | static void rc4_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key, | 110 | static int rc4_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, |
102 | unsigned char *iv, int enc) | 111 | const unsigned char *iv, int enc) |
103 | { | 112 | { |
104 | if (key != NULL) | 113 | memcpy(&(ctx->c.rc4.key[0]),key,EVP_CIPHER_CTX_key_length(ctx)); |
105 | memcpy(&(ctx->c.rc4.key[0]),key,EVP_CIPHER_CTX_key_length(ctx)); | ||
106 | RC4_set_key(&(ctx->c.rc4.ks),EVP_CIPHER_CTX_key_length(ctx), | 114 | RC4_set_key(&(ctx->c.rc4.ks),EVP_CIPHER_CTX_key_length(ctx), |
107 | ctx->c.rc4.key); | 115 | ctx->c.rc4.key); |
116 | return 1; | ||
108 | } | 117 | } |
109 | 118 | ||
110 | static void rc4_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, | 119 | static int rc4_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, |
111 | unsigned char *in, unsigned int inl) | 120 | const unsigned char *in, unsigned int inl) |
112 | { | 121 | { |
113 | RC4(&(ctx->c.rc4.ks),inl,in,out); | 122 | RC4(&(ctx->c.rc4.ks),inl,in,out); |
123 | return 1; | ||
114 | } | 124 | } |
115 | #endif | 125 | #endif |