|
@@ -93,7 +93,7 @@ struct crypto_pk_env_t
|
|
|
|
|
|
struct crypto_cipher_env_t
|
|
struct crypto_cipher_env_t
|
|
{
|
|
{
|
|
- unsigned char key[CIPHER_KEY_LEN];
|
|
+ char key[CIPHER_KEY_LEN];
|
|
aes_cnt_cipher_t *cipher;
|
|
aes_cnt_cipher_t *cipher;
|
|
};
|
|
};
|
|
|
|
|
|
@@ -597,12 +597,12 @@ int crypto_pk_cmp_keys(crypto_pk_env_t *a, crypto_pk_env_t *b) {
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
-int crypto_pk_keysize(crypto_pk_env_t *env)
|
|
+size_t crypto_pk_keysize(crypto_pk_env_t *env)
|
|
{
|
|
{
|
|
tor_assert(env);
|
|
tor_assert(env);
|
|
tor_assert(env->key);
|
|
tor_assert(env->key);
|
|
|
|
|
|
- return RSA_size(env->key);
|
|
+ return (size_t) RSA_size(env->key);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -621,16 +621,16 @@ crypto_pk_env_t *crypto_pk_dup_key(crypto_pk_env_t *env) {
|
|
* written. On failure, return -1.
|
|
* written. On failure, return -1.
|
|
*/
|
|
*/
|
|
int
|
|
int
|
|
-crypto_pk_public_encrypt(crypto_pk_env_t *env, unsigned char *to,
|
|
+crypto_pk_public_encrypt(crypto_pk_env_t *env, char *to,
|
|
- const unsigned char *from, int fromlen, int padding)
|
|
+ const char *from, size_t fromlen, int padding)
|
|
{
|
|
{
|
|
int r;
|
|
int r;
|
|
tor_assert(env);
|
|
tor_assert(env);
|
|
tor_assert(from);
|
|
tor_assert(from);
|
|
tor_assert(to);
|
|
tor_assert(to);
|
|
|
|
|
|
- r = RSA_public_encrypt(fromlen, (unsigned char*)from, to, env->key,
|
|
+ r = RSA_public_encrypt(fromlen, (unsigned char*)from, (unsigned char*)to,
|
|
- crypto_get_rsa_padding(padding));
|
|
+ env->key, crypto_get_rsa_padding(padding));
|
|
if (r<0) {
|
|
if (r<0) {
|
|
crypto_log_errors(LOG_WARN, "performing RSA encryption");
|
|
crypto_log_errors(LOG_WARN, "performing RSA encryption");
|
|
return -1;
|
|
return -1;
|
|
@@ -644,8 +644,8 @@ crypto_pk_public_encrypt(crypto_pk_env_t *env, unsigned char *to,
|
|
* written. On failure, return -1.
|
|
* written. On failure, return -1.
|
|
*/
|
|
*/
|
|
int
|
|
int
|
|
-crypto_pk_private_decrypt(crypto_pk_env_t *env, unsigned char *to,
|
|
+crypto_pk_private_decrypt(crypto_pk_env_t *env, char *to,
|
|
- const unsigned char *from, int fromlen,
|
|
+ const char *from, size_t fromlen,
|
|
int padding, int warnOnFailure)
|
|
int padding, int warnOnFailure)
|
|
{
|
|
{
|
|
int r;
|
|
int r;
|
|
@@ -657,8 +657,9 @@ crypto_pk_private_decrypt(crypto_pk_env_t *env, unsigned char *to,
|
|
|
|
|
|
return -1;
|
|
return -1;
|
|
|
|
|
|
- r = RSA_private_decrypt(fromlen, (unsigned char*)from, to, env->key,
|
|
+ r = RSA_private_decrypt(fromlen, (unsigned char*)from, (unsigned char*)to,
|
|
- crypto_get_rsa_padding(padding));
|
|
+ env->key, crypto_get_rsa_padding(padding));
|
|
|
|
+
|
|
if (r<0) {
|
|
if (r<0) {
|
|
crypto_log_errors(warnOnFailure?LOG_WARN:LOG_INFO,
|
|
crypto_log_errors(warnOnFailure?LOG_WARN:LOG_INFO,
|
|
"performing RSA decryption");
|
|
"performing RSA decryption");
|
|
@@ -673,14 +674,14 @@ crypto_pk_private_decrypt(crypto_pk_env_t *env, unsigned char *to,
|
|
* On failure, return -1.
|
|
* On failure, return -1.
|
|
*/
|
|
*/
|
|
int
|
|
int
|
|
-crypto_pk_public_checksig(crypto_pk_env_t *env, unsigned char *to,
|
|
+crypto_pk_public_checksig(crypto_pk_env_t *env, char *to,
|
|
- const unsigned char *from, int fromlen)
|
|
+ const char *from, size_t fromlen)
|
|
{
|
|
{
|
|
int r;
|
|
int r;
|
|
tor_assert(env);
|
|
tor_assert(env);
|
|
tor_assert(from);
|
|
tor_assert(from);
|
|
tor_assert(to);
|
|
tor_assert(to);
|
|
- r = RSA_public_decrypt(fromlen, (unsigned char*)from, to, env->key, RSA_PKCS1_PADDING);
|
|
+ r = RSA_public_decrypt(fromlen, (unsigned char*)from, (unsigned char*)to, env->key, RSA_PKCS1_PADDING);
|
|
|
|
|
|
if (r<0) {
|
|
if (r<0) {
|
|
crypto_log_errors(LOG_WARN, "checking RSA signature");
|
|
crypto_log_errors(LOG_WARN, "checking RSA signature");
|
|
@@ -695,8 +696,8 @@ crypto_pk_public_checksig(crypto_pk_env_t *env, unsigned char *to,
|
|
* SHA1(data). Else return -1.
|
|
* SHA1(data). Else return -1.
|
|
*/
|
|
*/
|
|
int
|
|
int
|
|
-crypto_pk_public_checksig_digest(crypto_pk_env_t *env, const unsigned char *data,
|
|
+crypto_pk_public_checksig_digest(crypto_pk_env_t *env, const char *data,
|
|
- int datalen, const unsigned char *sig, int siglen)
|
|
+ int datalen, const char *sig, int siglen)
|
|
{
|
|
{
|
|
char digest[DIGEST_LEN];
|
|
char digest[DIGEST_LEN];
|
|
char buf[PK_BYTES+1];
|
|
char buf[PK_BYTES+1];
|
|
@@ -729,8 +730,8 @@ crypto_pk_public_checksig_digest(crypto_pk_env_t *env, const unsigned char *data
|
|
* -1.
|
|
* -1.
|
|
*/
|
|
*/
|
|
int
|
|
int
|
|
-crypto_pk_private_sign(crypto_pk_env_t *env, unsigned char *to,
|
|
+crypto_pk_private_sign(crypto_pk_env_t *env, char *to,
|
|
- const unsigned char *from, int fromlen)
|
|
+ const char *from, size_t fromlen)
|
|
{
|
|
{
|
|
int r;
|
|
int r;
|
|
tor_assert(env);
|
|
tor_assert(env);
|
|
@@ -740,7 +741,7 @@ crypto_pk_private_sign(crypto_pk_env_t *env, unsigned char *to,
|
|
|
|
|
|
return -1;
|
|
return -1;
|
|
|
|
|
|
- r = RSA_private_encrypt(fromlen, (unsigned char*)from, to, env->key, RSA_PKCS1_PADDING);
|
|
+ r = RSA_private_encrypt(fromlen, (unsigned char*)from, (unsigned char*)to, env->key, RSA_PKCS1_PADDING);
|
|
if (r<0) {
|
|
if (r<0) {
|
|
crypto_log_errors(LOG_WARN, "generating RSA signature");
|
|
crypto_log_errors(LOG_WARN, "generating RSA signature");
|
|
return -1;
|
|
return -1;
|
|
@@ -754,8 +755,8 @@ crypto_pk_private_sign(crypto_pk_env_t *env, unsigned char *to,
|
|
* success, and -1 on failure.
|
|
* success, and -1 on failure.
|
|
*/
|
|
*/
|
|
int
|
|
int
|
|
-crypto_pk_private_sign_digest(crypto_pk_env_t *env, unsigned char *to,
|
|
+crypto_pk_private_sign_digest(crypto_pk_env_t *env, char *to,
|
|
- const unsigned char *from, int fromlen)
|
|
+ const char *from, size_t fromlen)
|
|
{
|
|
{
|
|
char digest[DIGEST_LEN];
|
|
char digest[DIGEST_LEN];
|
|
if (crypto_digest(digest,from,fromlen)<0)
|
|
if (crypto_digest(digest,from,fromlen)<0)
|
|
@@ -781,12 +782,13 @@ crypto_pk_private_sign_digest(crypto_pk_env_t *env, unsigned char *to,
|
|
* the source data encrypted in AES-CTR mode with the symmetric key.
|
|
* the source data encrypted in AES-CTR mode with the symmetric key.
|
|
*/
|
|
*/
|
|
int crypto_pk_public_hybrid_encrypt(crypto_pk_env_t *env,
|
|
int crypto_pk_public_hybrid_encrypt(crypto_pk_env_t *env,
|
|
- unsigned char *to,
|
|
+ char *to,
|
|
- const unsigned char *from,
|
|
+ const char *from,
|
|
- int fromlen,
|
|
+ size_t fromlen,
|
|
int padding, int force)
|
|
int padding, int force)
|
|
{
|
|
{
|
|
- int overhead, pkeylen, outlen, r, symlen;
|
|
+ int overhead, outlen, r, symlen;
|
|
|
|
+ size_t pkeylen;
|
|
crypto_cipher_env_t *cipher = NULL;
|
|
crypto_cipher_env_t *cipher = NULL;
|
|
char buf[PK_BYTES+1];
|
|
char buf[PK_BYTES+1];
|
|
|
|
|
|
@@ -825,7 +827,7 @@ int crypto_pk_public_hybrid_encrypt(crypto_pk_env_t *env,
|
|
symlen = fromlen-(pkeylen-overhead-CIPHER_KEY_LEN);
|
|
symlen = fromlen-(pkeylen-overhead-CIPHER_KEY_LEN);
|
|
|
|
|
|
outlen = crypto_pk_public_encrypt(env,to,buf,pkeylen-overhead,padding);
|
|
outlen = crypto_pk_public_encrypt(env,to,buf,pkeylen-overhead,padding);
|
|
- if (outlen!=pkeylen) {
|
|
+ if (outlen!=(int)pkeylen) {
|
|
goto err;
|
|
goto err;
|
|
}
|
|
}
|
|
r = crypto_cipher_encrypt(cipher, to+outlen,
|
|
r = crypto_cipher_encrypt(cipher, to+outlen,
|
|
@@ -843,12 +845,13 @@ int crypto_pk_public_hybrid_encrypt(crypto_pk_env_t *env,
|
|
|
|
|
|
|
|
|
|
int crypto_pk_private_hybrid_decrypt(crypto_pk_env_t *env,
|
|
int crypto_pk_private_hybrid_decrypt(crypto_pk_env_t *env,
|
|
- unsigned char *to,
|
|
+ char *to,
|
|
- const unsigned char *from,
|
|
+ const char *from,
|
|
- int fromlen,
|
|
+ size_t fromlen,
|
|
int padding, int warnOnFailure)
|
|
int padding, int warnOnFailure)
|
|
{
|
|
{
|
|
- int overhead, pkeylen, outlen, r;
|
|
+ int overhead, outlen, r;
|
|
|
|
+ size_t pkeylen;
|
|
crypto_cipher_env_t *cipher = NULL;
|
|
crypto_cipher_env_t *cipher = NULL;
|
|
char buf[PK_BYTES+1];
|
|
char buf[PK_BYTES+1];
|
|
|
|
|
|
@@ -913,7 +916,7 @@ int crypto_pk_asn1_encode(crypto_pk_env_t *pk, char *dest, int dest_len)
|
|
|
|
|
|
* success and NULL on failure.
|
|
* success and NULL on failure.
|
|
*/
|
|
*/
|
|
-crypto_pk_env_t *crypto_pk_asn1_decode(const char *str, int len)
|
|
+crypto_pk_env_t *crypto_pk_asn1_decode(const char *str, size_t len)
|
|
{
|
|
{
|
|
RSA *rsa;
|
|
RSA *rsa;
|
|
unsigned char *buf;
|
|
unsigned char *buf;
|
|
@@ -955,7 +958,7 @@ int crypto_pk_get_digest(crypto_pk_env_t *pk, char *digest_out)
|
|
free(buf);
|
|
free(buf);
|
|
return -1;
|
|
return -1;
|
|
}
|
|
}
|
|
- if (crypto_digest(digest_out, buf, len) < 0) {
|
|
+ if (crypto_digest(digest_out, (char*)buf, len) < 0) {
|
|
free(buf);
|
|
free(buf);
|
|
return -1;
|
|
return -1;
|
|
}
|
|
}
|
|
@@ -976,8 +979,8 @@ int crypto_pk_get_digest(crypto_pk_env_t *pk, char *digest_out)
|
|
int
|
|
int
|
|
crypto_pk_get_fingerprint(crypto_pk_env_t *pk, char *fp_out, int add_space)
|
|
crypto_pk_get_fingerprint(crypto_pk_env_t *pk, char *fp_out, int add_space)
|
|
{
|
|
{
|
|
- unsigned char digest[DIGEST_LEN];
|
|
+ char digest[DIGEST_LEN];
|
|
- unsigned char hexdigest[HEX_DIGEST_LEN+1];
|
|
+ char hexdigest[HEX_DIGEST_LEN+1];
|
|
if (crypto_pk_get_digest(pk, digest)) {
|
|
if (crypto_pk_get_digest(pk, digest)) {
|
|
return -1;
|
|
return -1;
|
|
}
|
|
}
|
|
@@ -1025,7 +1028,7 @@ int crypto_cipher_generate_key(crypto_cipher_env_t *env)
|
|
* CIPHER_KEY_LEN bytes of <b>key</b>. Does not initialize the cipher.
|
|
* CIPHER_KEY_LEN bytes of <b>key</b>. Does not initialize the cipher.
|
|
* Return 0 on success, -1 on failure.
|
|
* Return 0 on success, -1 on failure.
|
|
*/
|
|
*/
|
|
-int crypto_cipher_set_key(crypto_cipher_env_t *env, const unsigned char *key)
|
|
+int crypto_cipher_set_key(crypto_cipher_env_t *env, const char *key)
|
|
{
|
|
{
|
|
tor_assert(env);
|
|
tor_assert(env);
|
|
tor_assert(key);
|
|
tor_assert(key);
|
|
@@ -1040,7 +1043,7 @@ int crypto_cipher_set_key(crypto_cipher_env_t *env, const unsigned char *key)
|
|
|
|
|
|
|
|
|
|
*/
|
|
*/
|
|
-const unsigned char *crypto_cipher_get_key(crypto_cipher_env_t *env)
|
|
+const char *crypto_cipher_get_key(crypto_cipher_env_t *env)
|
|
{
|
|
{
|
|
return env->key;
|
|
return env->key;
|
|
}
|
|
}
|
|
@@ -1072,8 +1075,8 @@ int crypto_cipher_decrypt_init_cipher(crypto_cipher_env_t *env)
|
|
* On failure, return -1.
|
|
* On failure, return -1.
|
|
*/
|
|
*/
|
|
int
|
|
int
|
|
-crypto_cipher_encrypt(crypto_cipher_env_t *env, unsigned char *to,
|
|
+crypto_cipher_encrypt(crypto_cipher_env_t *env, char *to,
|
|
- const unsigned char *from, unsigned int fromlen)
|
|
+ const char *from, size_t fromlen)
|
|
{
|
|
{
|
|
tor_assert(env);
|
|
tor_assert(env);
|
|
tor_assert(env->cipher);
|
|
tor_assert(env->cipher);
|
|
@@ -1090,8 +1093,8 @@ crypto_cipher_encrypt(crypto_cipher_env_t *env, unsigned char *to,
|
|
* On failure, return -1.
|
|
* On failure, return -1.
|
|
*/
|
|
*/
|
|
int
|
|
int
|
|
-crypto_cipher_decrypt(crypto_cipher_env_t *env, unsigned char *to,
|
|
+crypto_cipher_decrypt(crypto_cipher_env_t *env, char *to,
|
|
- const unsigned char *from, unsigned int fromlen)
|
|
+ const char *from, size_t fromlen)
|
|
{
|
|
{
|
|
tor_assert(env);
|
|
tor_assert(env);
|
|
tor_assert(from);
|
|
tor_assert(from);
|
|
@@ -1126,11 +1129,11 @@ crypto_cipher_advance(crypto_cipher_env_t *env, long delta)
|
|
* <b>m</b>. Write the DIGEST_LEN byte result into <b>digest</b>.
|
|
* <b>m</b>. Write the DIGEST_LEN byte result into <b>digest</b>.
|
|
* Return 0 on success, -1 on failure.
|
|
* Return 0 on success, -1 on failure.
|
|
*/
|
|
*/
|
|
-int crypto_digest(unsigned char *digest, const unsigned char *m, int len)
|
|
+int crypto_digest(char *digest, const char *m, size_t len)
|
|
{
|
|
{
|
|
tor_assert(m);
|
|
tor_assert(m);
|
|
tor_assert(digest);
|
|
tor_assert(digest);
|
|
- return (SHA1(m,len,digest) == NULL);
|
|
+ return (SHA1((const unsigned char*)m,len,(unsigned char*)digest) == NULL);
|
|
}
|
|
}
|
|
|
|
|
|
struct crypto_digest_env_t {
|
|
struct crypto_digest_env_t {
|
|
@@ -1178,7 +1181,7 @@ crypto_digest_add_bytes(crypto_digest_env_t *digest, const char *data,
|
|
void crypto_digest_get_digest(crypto_digest_env_t *digest,
|
|
void crypto_digest_get_digest(crypto_digest_env_t *digest,
|
|
char *out, size_t out_len)
|
|
char *out, size_t out_len)
|
|
{
|
|
{
|
|
- static char r[DIGEST_LEN];
|
|
+ static unsigned char r[DIGEST_LEN];
|
|
SHA_CTX tmpctx;
|
|
SHA_CTX tmpctx;
|
|
tor_assert(digest);
|
|
tor_assert(digest);
|
|
tor_assert(out);
|
|
tor_assert(out);
|
|
@@ -1337,7 +1340,7 @@ int crypto_dh_get_public(crypto_dh_env_t *dh, char *pubkey, size_t pubkey_len)
|
|
return -1;
|
|
return -1;
|
|
|
|
|
|
memset(pubkey, 0, pubkey_len);
|
|
memset(pubkey, 0, pubkey_len);
|
|
- BN_bn2bin(dh->dh->pub_key, pubkey+(pubkey_len-bytes));
|
|
+ BN_bn2bin(dh->dh->pub_key, (unsigned char*)(pubkey+(pubkey_len-bytes)));
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
@@ -1358,8 +1361,8 @@ int crypto_dh_compute_secret(crypto_dh_env_t *dh,
|
|
const char *pubkey, size_t pubkey_len,
|
|
const char *pubkey, size_t pubkey_len,
|
|
char *secret_out, size_t secret_bytes_out)
|
|
char *secret_out, size_t secret_bytes_out)
|
|
{
|
|
{
|
|
- unsigned char hash[DIGEST_LEN];
|
|
+ char hash[DIGEST_LEN];
|
|
- unsigned char *secret_tmp = NULL;
|
|
+ char *secret_tmp = NULL;
|
|
BIGNUM *pubkey_bn = NULL;
|
|
BIGNUM *pubkey_bn = NULL;
|
|
size_t secret_len=0;
|
|
size_t secret_len=0;
|
|
unsigned int i;
|
|
unsigned int i;
|
|
@@ -1367,10 +1370,10 @@ int crypto_dh_compute_secret(crypto_dh_env_t *dh,
|
|
tor_assert(dh);
|
|
tor_assert(dh);
|
|
tor_assert(secret_bytes_out/DIGEST_LEN <= 255);
|
|
tor_assert(secret_bytes_out/DIGEST_LEN <= 255);
|
|
|
|
|
|
- if (!(pubkey_bn = BN_bin2bn(pubkey, pubkey_len, NULL)))
|
|
+ if (!(pubkey_bn = BN_bin2bn((const unsigned char*)pubkey, pubkey_len, NULL)))
|
|
goto error;
|
|
goto error;
|
|
secret_tmp = tor_malloc(crypto_dh_get_bytes(dh)+1);
|
|
secret_tmp = tor_malloc(crypto_dh_get_bytes(dh)+1);
|
|
- result = DH_compute_key(secret_tmp, pubkey_bn, dh->dh);
|
|
+ result = DH_compute_key((unsigned char*)secret_tmp, pubkey_bn, dh->dh);
|
|
if (result < 0) {
|
|
if (result < 0) {
|
|
log_fn(LOG_WARN,"DH_compute_key() failed.");
|
|
log_fn(LOG_WARN,"DH_compute_key() failed.");
|
|
goto error;
|
|
goto error;
|
|
@@ -1475,11 +1478,11 @@ int crypto_seed_rng(void)
|
|
|
|
|
|
* success, -1 on failure.
|
|
* success, -1 on failure.
|
|
*/
|
|
*/
|
|
-int crypto_rand(unsigned char *to, unsigned int n)
|
|
+int crypto_rand(char *to, size_t n)
|
|
{
|
|
{
|
|
int r;
|
|
int r;
|
|
tor_assert(to);
|
|
tor_assert(to);
|
|
- r = RAND_bytes(to, n);
|
|
+ r = RAND_bytes((unsigned char*)to, n);
|
|
if (r == 0)
|
|
if (r == 0)
|
|
crypto_log_errors(LOG_WARN, "generating random data");
|
|
crypto_log_errors(LOG_WARN, "generating random data");
|
|
return (r == 1) ? 0 : -1;
|
|
return (r == 1) ? 0 : -1;
|
|
@@ -1488,10 +1491,10 @@ int crypto_rand(unsigned char *to, unsigned int n)
|
|
|
|
|
|
* success, -1 on failure.
|
|
* success, -1 on failure.
|
|
*/
|
|
*/
|
|
-void crypto_pseudo_rand(unsigned char *to, unsigned int n)
|
|
+void crypto_pseudo_rand(char *to, size_t n)
|
|
{
|
|
{
|
|
tor_assert(to);
|
|
tor_assert(to);
|
|
- if (RAND_pseudo_bytes(to, n) == -1) {
|
|
+ if (RAND_pseudo_bytes((unsigned char*)to, n) == -1) {
|
|
log_fn(LOG_ERR, "RAND_pseudo_bytes failed unexpectedly.");
|
|
log_fn(LOG_ERR, "RAND_pseudo_bytes failed unexpectedly.");
|
|
crypto_log_errors(LOG_WARN, "generating random data");
|
|
crypto_log_errors(LOG_WARN, "generating random data");
|
|
exit(1);
|
|
exit(1);
|
|
@@ -1512,7 +1515,7 @@ int crypto_pseudo_rand_int(unsigned int max) {
|
|
*/
|
|
*/
|
|
cutoff = UINT_MAX - (UINT_MAX%max);
|
|
cutoff = UINT_MAX - (UINT_MAX%max);
|
|
while (1) {
|
|
while (1) {
|
|
- crypto_pseudo_rand((unsigned char*) &val, sizeof(val));
|
|
+ crypto_pseudo_rand((char*)&val, sizeof(val));
|
|
if (val < cutoff)
|
|
if (val < cutoff)
|
|
return val % max;
|
|
return val % max;
|
|
}
|
|
}
|
|
@@ -1548,8 +1551,8 @@ base64_encode(char *dest, size_t destlen, const char *src, size_t srclen)
|
|
return -1;
|
|
return -1;
|
|
|
|
|
|
EVP_EncodeInit(&ctx);
|
|
EVP_EncodeInit(&ctx);
|
|
- EVP_EncodeUpdate(&ctx, dest, &len, (char*) src, srclen);
|
|
+ EVP_EncodeUpdate(&ctx, (unsigned char*)dest, &len, (unsigned char*)src, srclen);
|
|
- EVP_EncodeFinal(&ctx, dest+len, &ret);
|
|
+ EVP_EncodeFinal(&ctx, (unsigned char*)(dest+len), &ret);
|
|
ret += len;
|
|
ret += len;
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
@@ -1577,8 +1580,8 @@ base64_decode(char *dest, size_t destlen, const char *src, size_t srclen)
|
|
return -1;
|
|
return -1;
|
|
|
|
|
|
EVP_DecodeInit(&ctx);
|
|
EVP_DecodeInit(&ctx);
|
|
- EVP_DecodeUpdate(&ctx, dest, &len, (char*) src, srclen);
|
|
+ EVP_DecodeUpdate(&ctx, (unsigned char*)dest, &len, (unsigned char*)src, srclen);
|
|
- EVP_DecodeFinal(&ctx, dest, &ret);
|
|
+ EVP_DecodeFinal(&ctx, (unsigned char*)dest, &ret);
|
|
ret += len;
|
|
ret += len;
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|