diff options
Diffstat (limited to 'src/common/crypto.c')
-rw-r--r-- | src/common/crypto.c | 267 |
1 files changed, 140 insertions, 127 deletions
diff --git a/src/common/crypto.c b/src/common/crypto.c index 5304180e32..5afa8e36e3 100644 --- a/src/common/crypto.c +++ b/src/common/crypto.c @@ -2,6 +2,12 @@ /* See LICENSE for licensing information */ /* $Id$ */ +/** + * \file crypto.c + * + * \brief Low-level cryptographic functions. + **/ + #include "orconfig.h" #ifdef MS_WINDOWS @@ -65,9 +71,9 @@ #define RETURN_SSL_OUTCOME(exp) return !(exp) #endif -/* Macro: is k a valid RSA public or private key? */ +/** Macro: is k a valid RSA public or private key? */ #define PUBLIC_KEY_OK(k) ((k) && (k)->key && (k)->key->n) -/* Macro: is k a valid RSA private key? */ +/** Macro: is k a valid RSA private key? */ #define PRIVATE_KEY_OK(k) ((k) && (k)->key && (k)->key->p) struct crypto_pk_env_t @@ -86,7 +92,7 @@ struct crypto_dh_env_t { DH *dh; }; -/* Return the number of bytes added by padding method 'padding' +/** Return the number of bytes added by padding method <b>padding</b>. */ static INLINE int crypto_get_rsa_padding_overhead(int padding) { @@ -99,7 +105,7 @@ crypto_get_rsa_padding_overhead(int padding) { } } -/* Given a padding method 'padding', return the correct OpenSSL constant. +/** Given a padding method <b>padding</b>, return the correct OpenSSL constant. */ static INLINE int crypto_get_rsa_padding(int padding) { @@ -112,11 +118,11 @@ crypto_get_rsa_padding(int padding) { } } -/* Boolen: has OpenSSL's crypto been initialized? */ +/** Boolean: has OpenSSL's crypto been initialized? */ static int _crypto_global_initialized = 0; -/* Log all pending crypto errors at level 'severity'. Use 'doing' to describe - * our current activities. +/** Log all pending crypto errors at level <b>severity</b>. Use + * <b>doing</b> to describe our current activities. */ static void crypto_log_errors(int severity, const char *doing) @@ -135,7 +141,8 @@ crypto_log_errors(int severity, const char *doing) } } } -/* Initialize the crypto library. + +/** Initialize the crypto library. */ int crypto_global_init() { @@ -146,7 +153,7 @@ int crypto_global_init() return 0; } -/* Uninitialize the crypto library. +/** Uninitialize the crypto library. */ int crypto_global_cleanup() { @@ -154,7 +161,7 @@ int crypto_global_cleanup() return 0; } -/* used by tortls.c: wrap an RSA* in a crypto_pk_env_t. */ +/** used by tortls.c: wrap an RSA* in a crypto_pk_env_t. */ crypto_pk_env_t *_crypto_new_pk_env_rsa(RSA *rsa) { crypto_pk_env_t *env; @@ -165,13 +172,13 @@ crypto_pk_env_t *_crypto_new_pk_env_rsa(RSA *rsa) return env; } -/* used by tortls.c: return the RSA* from a crypto_pk_env_t */ +/** used by tortls.c: return the RSA* from a crypto_pk_env_t */ RSA *_crypto_pk_env_get_rsa(crypto_pk_env_t *env) { return env->key; } -/* used by tortls.c: get an equivalent EVP_PKEY* for a crypto_pk_env_t. Iff +/** used by tortls.c: get an equivalent EVP_PKEY* for a crypto_pk_env_t. Iff * private is set, include the private-key portion of the key. */ EVP_PKEY *_crypto_pk_env_get_evp_pkey(crypto_pk_env_t *env, int private) { @@ -198,14 +205,14 @@ EVP_PKEY *_crypto_pk_env_get_evp_pkey(crypto_pk_env_t *env, int private) return NULL; } -/* Used by tortls.c: Get the DH* from a crypto_dh_env_t. +/** Used by tortls.c: Get the DH* from a crypto_dh_env_t. */ DH *_crypto_dh_env_get_dh(crypto_dh_env_t *dh) { return dh->dh; } -/* Allocate and return storage for a public key. The key itself will not yet +/** Allocate and return storage for a public key. The key itself will not yet * be set. */ crypto_pk_env_t *crypto_new_pk_env(void) @@ -217,7 +224,7 @@ crypto_pk_env_t *crypto_new_pk_env(void) return _crypto_new_pk_env_rsa(rsa); } -/* Release a reference to an asymmetric key; when all the references +/** Release a reference to an asymmetric key; when all the references * are released, free the key. */ void crypto_free_pk_env(crypto_pk_env_t *env) @@ -233,7 +240,7 @@ void crypto_free_pk_env(crypto_pk_env_t *env) free(env); } -/* Create a new symmetric cipher for a given key and encryption flag +/** Create a new symmetric cipher for a given key and encryption flag * (1=encrypt, 0=decrypt). Return the crypto object on success; NULL * on failure. */ @@ -268,7 +275,7 @@ crypto_create_init_cipher(const char *key, int encrypt_mode) return NULL; } -/* Allocate and return a new symmetric cipher. +/** Allocate and return a new symmetric cipher. */ crypto_cipher_env_t *crypto_new_cipher_env() { @@ -279,7 +286,7 @@ crypto_cipher_env_t *crypto_new_cipher_env() return env; } -/* Free a symmetric cipher. +/** Free a symmetric cipher. */ void crypto_free_cipher_env(crypto_cipher_env_t *env) { @@ -292,7 +299,7 @@ void crypto_free_cipher_env(crypto_cipher_env_t *env) /* public key crypto */ -/* Generate a new public/private keypair in 'env'. Return 0 on +/** Generate a new public/private keypair in <b>env</b>. Return 0 on * success, -1 on failure. */ int crypto_pk_generate_key(crypto_pk_env_t *env) @@ -310,7 +317,7 @@ int crypto_pk_generate_key(crypto_pk_env_t *env) return 0; } -/* Read a PEM-encoded private key from 'src' into 'env'. +/** Read a PEM-encoded private key from <b>src</b> into <b>env</b>. */ static int crypto_pk_read_private_key_from_file(crypto_pk_env_t *env, FILE *src) @@ -328,8 +335,8 @@ static int crypto_pk_read_private_key_from_file(crypto_pk_env_t *env, return 0; } -/* Read a PEM-encoded private key from the file named by 'keyfile' into 'env'. - * Return 0 on success, -1 on failure. +/** Read a PEM-encoded private key from the file named by + * <b>keyfile</b> into <b>env</b>. Return 0 on success, -1 on failure. */ int crypto_pk_read_private_key_from_filename(crypto_pk_env_t *env, const char *keyfile) { @@ -361,9 +368,10 @@ int crypto_pk_read_private_key_from_filename(crypto_pk_env_t *env, const char *k return 0; } -/* PEM-encode the public key portion of 'env' and write it to a newly - * allocated string. On success, set *dest to the new string, *len to - * the string's length, and return 0. On failure, return -1. +/** PEM-encode the public key portion of <b>env</b> and write it to a + * newly allocated string. On success, set *<b>dest</b> to the new + * string, *<b>len</b> to the string's length, and return 0. On + * failure, return -1. */ int crypto_pk_write_public_key_to_string(crypto_pk_env_t *env, char **dest, int *len) { BUF_MEM *buf; @@ -394,8 +402,8 @@ int crypto_pk_write_public_key_to_string(crypto_pk_env_t *env, char **dest, int return 0; } -/* Read a PEM-encoded public key from the first 'len' characters of - * 'src', and store the result in 'env'. Return 0 on success, -1 on +/** Read a PEM-encoded public key from the first <b>len</b> characters of + * <b>src</b>, and store the result in <b>env</b>. Return 0 on success, -1 on * failure. */ int crypto_pk_read_public_key_from_string(crypto_pk_env_t *env, const char *src, int len) { @@ -452,7 +460,7 @@ crypto_pk_write_private_key_to_filename(crypto_pk_env_t *env, return r; } -/* Return true iff env has a valid key. +/** Return true iff <b>env</b> has a valid key. */ int crypto_pk_check_key(crypto_pk_env_t *env) { @@ -465,8 +473,8 @@ int crypto_pk_check_key(crypto_pk_env_t *env) return r; } -/* Compare the public-key components of a and b. Return -1 if a<b, 0 - * if a==b, and 1 if a>b. +/** Compare the public-key components of a and b. Return -1 if a\<b, 0 + * if a==b, and 1 if a\>b. */ int crypto_pk_cmp_keys(crypto_pk_env_t *a, crypto_pk_env_t *b) { int result; @@ -485,7 +493,7 @@ int crypto_pk_cmp_keys(crypto_pk_env_t *a, crypto_pk_env_t *b) { return BN_cmp((a->key)->e, (b->key)->e); } -/* Return the size of the public key modulus in 'env', in bytes. */ +/** Return the size of the public key modulus in <b>env</b>, in bytes. */ int crypto_pk_keysize(crypto_pk_env_t *env) { tor_assert(env && env->key); @@ -493,7 +501,7 @@ int crypto_pk_keysize(crypto_pk_env_t *env) return RSA_size(env->key); } -/* Increase the reference count of 'env'. +/** Increase the reference count of <b>env</b>. */ crypto_pk_env_t *crypto_pk_dup_key(crypto_pk_env_t *env) { tor_assert(env && env->key); @@ -502,10 +510,10 @@ crypto_pk_env_t *crypto_pk_dup_key(crypto_pk_env_t *env) { return env; } -/* Encrypt 'fromlen' bytes from 'from' with the public key in 'env', - * using the padding method 'padding'. On success, write the result - * to 'to', and return the number of bytes written. On failure, - * return -1. +/** Encrypt <b>fromlen</b> bytes from <b>from</b> with the public key + * in <b>env</b>, using the padding method <b>padding</b>. On success, + * write the result to <b>to</b>, and return the number of bytes + * written. On failure, return -1. */ int crypto_pk_public_encrypt(crypto_pk_env_t *env, const unsigned char *from, int fromlen, unsigned char *to, int padding) { @@ -521,10 +529,10 @@ int crypto_pk_public_encrypt(crypto_pk_env_t *env, const unsigned char *from, in return r; } -/* Decrypt 'fromlen' bytes from 'from' with the private key in 'env', - * using the padding method 'padding'. On success, write the result - * to 'to', and return the number of bytes written. On failure, - * return -1. +/** Decrypt <b>fromlen</b> bytes from <b>from</b> with the private key + * in <b>env</b>, using the padding method <b>padding</b>. On success, + * write the result to <b>to</b>, and return the number of bytes + * written. On failure, return -1. */ int crypto_pk_private_decrypt(crypto_pk_env_t *env, const unsigned char *from, int fromlen, unsigned char *to, int padding) { @@ -543,9 +551,9 @@ int crypto_pk_private_decrypt(crypto_pk_env_t *env, const unsigned char *from, i return r; } -/* Check the signature in 'from' ('fromlen' bytes long) with the - * public key in 'env', using PKCS1 padding. On success, write the - * signed data to 'to', and return the number of bytes written. +/** Check the signature in <b>from</b> (<b>fromlen</b> bytes long) with the + * public key in <b>env</b>, using PKCS1 padding. On success, write the + * signed data to <b>to</b>, and return the number of bytes written. * On failure, return -1. */ int crypto_pk_public_checksig(crypto_pk_env_t *env, const unsigned char *from, int fromlen, unsigned char *to) @@ -561,9 +569,9 @@ int crypto_pk_public_checksig(crypto_pk_env_t *env, const unsigned char *from, i return r; } -/* Sign 'fromlen' bytes of data from 'from' with the private key in - * 'env', using PKCS1 padding. On success, write the signature to - * 'to', and return the number of bytes written. On failure, return +/** Sign <b>fromlen</b> bytes of data from <b>from</b> with the private key in + * <b>env</b>, using PKCS1 padding. On success, write the signature to + * <b>to</b>, and return the number of bytes written. On failure, return * -1. */ int crypto_pk_private_sign(crypto_pk_env_t *env, const unsigned char *from, int fromlen, unsigned char *to) @@ -582,9 +590,10 @@ int crypto_pk_private_sign(crypto_pk_env_t *env, const unsigned char *from, int return r; } -/* Check a siglen-byte long signature at 'sig' against 'datalen' bytes - * of data at 'data', using the public key in 'env'. Return 0 if 'sig' - * is a correct signature for SHA1(data). Else return -1. +/** Check a siglen-byte long signature at <b>sig</b> against + * <b>datalen</b> bytes of data at <b>data</b>, using the public key + * in <b>env</b>. Return 0 if <b>sig</b> is a correct signature for + * SHA1(data). Else return -1. */ int crypto_pk_public_checksig_digest(crypto_pk_env_t *env, const unsigned char *data, int datalen, const unsigned char *sig, int siglen) { @@ -611,9 +620,10 @@ int crypto_pk_public_checksig_digest(crypto_pk_env_t *env, const unsigned char * return 0; } -/* Compute a SHA1 digest of 'fromlen' bytes of data stored at 'from'; - * sign the data with the private key in 'env', and store it in 'to'. - * Return the number of bytes written on success, and -1 on failure. +/** Compute a SHA1 digest of <b>fromlen</b> bytes of data stored at + * <b>from</b>; sign the data with the private key in <b>env</b>, and + * store it in <b>to</b>. Return the number of bytes written on + * success, and -1 on failure. */ int crypto_pk_private_sign_digest(crypto_pk_env_t *env, const unsigned char *from, int fromlen, unsigned char *to) { @@ -624,24 +634,22 @@ int crypto_pk_private_sign_digest(crypto_pk_env_t *env, const unsigned char *fro } -/* Perform a hybrid (public/secret) encryption on 'fromlen' bytes of data - * from 'from', with padding type 'padding', storing the results on 'to'. +/** Perform a hybrid (public/secret) encryption on <b>fromlen</b> + * bytes of data from <b>from</b>, with padding type 'padding', + * storing the results on <b>to</b>. * * If no padding is used, the public key must be at least as large as - * 'from'. + * <b>from</b>. * * Returns the number of bytes written on success, -1 on failure. * * The encrypted data consists of: - * - * The source data, padded and encrypted with the public key, if the - * padded source data is no longer than the public key, and "force" - * is false. - * OR - * The beginning of the source data prefixed with a 16-byte symmetric key, - * padded and encrypted with the public key; followed by the rest of - * the source data encrypted in AES-CTR mode with the symmetric key. - * + * - The source data, padded and encrypted with the public key, if the + * padded source data is no longer than the public key, and <b>force</b> + * is false, OR + * - The beginning of the source data prefixed with a 16-byte symmetric key, + * padded and encrypted with the public key; followed by the rest of + * the source data encrypted in AES-CTR mode with the symmetric key. */ int crypto_pk_public_hybrid_encrypt(crypto_pk_env_t *env, const unsigned char *from, @@ -702,7 +710,7 @@ int crypto_pk_public_hybrid_encrypt(crypto_pk_env_t *env, return -1; } -/* Invert crypto_pk_public_hybrid_encrypt. */ +/** Invert crypto_pk_public_hybrid_encrypt. */ int crypto_pk_private_hybrid_decrypt(crypto_pk_env_t *env, const unsigned char *from, int fromlen, unsigned char *to, @@ -748,8 +756,8 @@ int crypto_pk_private_hybrid_decrypt(crypto_pk_env_t *env, return -1; } -/* ASN.1-encode the public portion of 'pk' into 'dest'. Return -1 on - * error, or the number of characters used on success. +/** ASN.1-encode the public portion of <b>pk</b> into <b>dest</b>. + * Return -1 on error, or the number of characters used on success. */ int crypto_pk_asn1_encode(crypto_pk_env_t *pk, char *dest, int dest_len) { @@ -773,7 +781,7 @@ int crypto_pk_asn1_encode(crypto_pk_env_t *pk, char *dest, int dest_len) return len; } -/* Decode an ASN.1-encoded public key from str; return the result on +/** Decode an ASN.1-encoded public key from <b>str</b>; return the result on * success and NULL on failure. */ crypto_pk_env_t *crypto_pk_asn1_decode(const char *str, int len) @@ -799,8 +807,8 @@ crypto_pk_env_t *crypto_pk_asn1_decode(const char *str, int len) return _crypto_new_pk_env_rsa(rsa); } -/* Given a private or public key pk, put a SHA1 hash of the public key into - * digest_out (must have DIGEST_LEN bytes of space). +/** Given a private or public key <b>pk</b>, put a SHA1 hash of the + * public key into <b>digest_out</b> (must have DIGEST_LEN bytes of space). */ int crypto_pk_get_digest(crypto_pk_env_t *pk, char *digest_out) { @@ -825,9 +833,13 @@ int crypto_pk_get_digest(crypto_pk_env_t *pk, char *digest_out) return 0; } -/* Given a private or public key pk, put a fingerprint of the - * public key into fp_out (must have at least FINGERPRINT_LEN+1 bytes of +/** Given a private or public key <b>pk</b>, put a fingerprint of the + * public key into <b>fp_out</b> (must have at least FINGERPRINT_LEN+1 bytes of * space). + * + * Fingerprints are computed as the SHA1 digest of the ASN.1 encoding + * of the public key, converted to hexadecimal, with a space after every + * four digits. */ int crypto_pk_get_fingerprint(crypto_pk_env_t *pk, char *fp_out) @@ -854,7 +866,7 @@ crypto_pk_get_fingerprint(crypto_pk_env_t *pk, char *fp_out) return 0; } -/* Return true iff 's' is in the correct format for a fingerprint. +/** Return true iff <b>s</b> is in the correct format for a fingerprint. */ int crypto_pk_check_fingerprint_syntax(const char *s) @@ -873,7 +885,7 @@ crypto_pk_check_fingerprint_syntax(const char *s) /* symmetric crypto */ -/* Generate a new random key for the symmetric cipher in 'env'. +/** Generate a new random key for the symmetric cipher in <b>env</b>. * Return 0 on success, -1 on failure. Does not initialize the cipher. */ int crypto_cipher_generate_key(crypto_cipher_env_t *env) @@ -883,8 +895,8 @@ int crypto_cipher_generate_key(crypto_cipher_env_t *env) return crypto_rand(CIPHER_KEY_LEN, env->key); } -/* Set the symmetric key for the cipher in 'env' to the first - * CIPHER_KEY_LEN bytes of 'key'. Does not initialize the cipher. +/** Set the symmetric key for the cipher in <b>env</b> to the first + * CIPHER_KEY_LEN bytes of <b>key</b>. Does not initialize the cipher. */ int crypto_cipher_set_key(crypto_cipher_env_t *env, const unsigned char *key) { @@ -898,14 +910,14 @@ int crypto_cipher_set_key(crypto_cipher_env_t *env, const unsigned char *key) return 0; } -/* Return a pointer to the key set for the cipher in 'env'. +/** Return a pointer to the key set for the cipher in <b>env</b>. */ const unsigned char *crypto_cipher_get_key(crypto_cipher_env_t *env) { return env->key; } -/* Initialize the cipher in 'env' for encryption. +/** Initialize the cipher in <b>env</b> for encryption. */ int crypto_cipher_encrypt_init_cipher(crypto_cipher_env_t *env) { @@ -915,7 +927,7 @@ int crypto_cipher_encrypt_init_cipher(crypto_cipher_env_t *env) return 0; } -/* Initialize the cipher in 'env' for decryption. +/** Initialize the cipher in <b>env</b> for decryption. */ int crypto_cipher_decrypt_init_cipher(crypto_cipher_env_t *env) { @@ -925,9 +937,9 @@ int crypto_cipher_decrypt_init_cipher(crypto_cipher_env_t *env) return 0; } -/* Encrypt 'fromlen' bytes from 'from' using the cipher 'env'; on - * success, store the result to 'to' and return 0. On failure, return - * -1. +/** Encrypt <b>fromlen</b> bytes from <b>from</b> using the cipher + * <b>env</b>; on success, store the result to <b>to</b> and return 0. + * On failure, return -1. */ int crypto_cipher_encrypt(crypto_cipher_env_t *env, const unsigned char *from, unsigned int fromlen, unsigned char *to) { @@ -937,9 +949,9 @@ int crypto_cipher_encrypt(crypto_cipher_env_t *env, const unsigned char *from, u return 0; } -/* Decrypt 'fromlen' bytes from 'from' using the cipher 'env'; on - * success, store the result to 'to' and return 0. On failure, return - * -1. +/** Decrypt <b>fromlen</b> bytes from <b>from</b> using the cipher + * <b>env</b>; on success, store the result to <b>to</b> and return 0. + * On failure, return -1. */ int crypto_cipher_decrypt(crypto_cipher_env_t *env, const unsigned char *from, unsigned int fromlen, unsigned char *to) { @@ -949,7 +961,7 @@ int crypto_cipher_decrypt(crypto_cipher_env_t *env, const unsigned char *from, u return 0; } -/* Move the position of the cipher stream backwards by 'delta' bytes. +/** Move the position of the cipher stream backwards by <b>delta</b> bytes. */ int crypto_cipher_rewind(crypto_cipher_env_t *env, long delta) @@ -957,7 +969,7 @@ crypto_cipher_rewind(crypto_cipher_env_t *env, long delta) return crypto_cipher_advance(env, -delta); } -/* Move the position of the cipher stream forwards by 'delta' bytes. +/** Move the position of the cipher stream forwards by <b>delta</b> bytes. */ int crypto_cipher_advance(crypto_cipher_env_t *env, long delta) @@ -968,8 +980,8 @@ crypto_cipher_advance(crypto_cipher_env_t *env, long delta) /* SHA-1 */ -/* Compute the SHA1 digest of 'len' bytes in data stored in 'm'. Write the - * DIGEST_LEN byte result into 'digest'. +/** Compute the SHA1 digest of <b>len</b> bytes in data stored in + * <b>m</b>. Write the DIGEST_LEN byte result into <b>digest</b>. */ int crypto_digest(const unsigned char *m, int len, unsigned char *digest) { @@ -981,7 +993,7 @@ struct crypto_digest_env_t { SHA_CTX d; }; -/* Allocate and return a new digest object. +/** Allocate and return a new digest object. */ crypto_digest_env_t * crypto_new_digest_env(void) @@ -992,14 +1004,14 @@ crypto_new_digest_env(void) return r; } -/* Deallocate a digest object. +/** Deallocate a digest object. */ void crypto_free_digest_env(crypto_digest_env_t *digest) { tor_free(digest); } -/* Add 'len' bytes from 'data' to the digest object. +/** Add <b>len</b> bytes from <b>data</b> to the digest object. */ void crypto_digest_add_bytes(crypto_digest_env_t *digest, const char *data, @@ -1010,9 +1022,9 @@ crypto_digest_add_bytes(crypto_digest_env_t *digest, const char *data, SHA1_Update(&digest->d, (void*)data, len); } -/* Compute the hash of the data that has been passed to the digest object; - * write the first out_len bytes of the result to 'out'. 'out_len' must be - * <= DIGEST_LEN. +/** Compute the hash of the data that has been passed to the digest + * object; write the first out_len bytes of the result to <b>out</b>. + * <b>out_len</b> must be \<= DIGEST_LEN. */ void crypto_digest_get_digest(crypto_digest_env_t *digest, char *out, size_t out_len) @@ -1024,7 +1036,8 @@ void crypto_digest_get_digest(crypto_digest_env_t *digest, memcpy(out, r, out_len); } -/* Allocate and return a new digest object with the same state as 'digest' +/** Allocate and return a new digest object with the same state as + * <b>digest</b> */ crypto_digest_env_t * crypto_digest_dup(const crypto_digest_env_t *digest) @@ -1036,8 +1049,8 @@ crypto_digest_dup(const crypto_digest_env_t *digest) return r; } -/* Replace the state of the digest object 'into' with the state of the digest - * object 'from'. +/** Replace the state of the digest object <b>into</b> with the state + * of the digest object <b>from</b>. */ void crypto_digest_assign(crypto_digest_env_t *into, @@ -1049,12 +1062,12 @@ crypto_digest_assign(crypto_digest_env_t *into, /* DH */ -/* Shared P parameter for our DH key exchanged */ +/** Shared P parameter for our DH key exchanged */ static BIGNUM *dh_param_p = NULL; -/* Shared G parameter for our DH key exchanges */ +/** Shared G parameter for our DH key exchanges */ static BIGNUM *dh_param_g = NULL; -/* Initialize dh_param_p and dh_param_g if they are not already +/** Initialize dh_param_p and dh_param_g if they are not already * set. */ static void init_dh_param() { BIGNUM *p, *g; @@ -1101,7 +1114,7 @@ static void init_dh_param() { dh_param_g = g; } -/* Allocate and return a new DH object for a key echange. +/** Allocate and return a new DH object for a key echange. */ crypto_dh_env_t *crypto_dh_new() { @@ -1130,7 +1143,7 @@ crypto_dh_env_t *crypto_dh_new() return NULL; } -/* Return the length of the DH key in 'dh', in bytes. +/** Return the length of the DH key in <b>dh</b>, in bytes. */ int crypto_dh_get_bytes(crypto_dh_env_t *dh) { @@ -1138,7 +1151,7 @@ int crypto_dh_get_bytes(crypto_dh_env_t *dh) return DH_size(dh->dh); } -/* Generate <x,g^x> for our part of the key exchange. Return 0 on +/** Generate \<x,g^x\> for our part of the key exchange. Return 0 on * success, -1 on failure. */ int crypto_dh_generate_public(crypto_dh_env_t *dh) @@ -1150,9 +1163,9 @@ int crypto_dh_generate_public(crypto_dh_env_t *dh) return 0; } -/* Generate g^x as necessary, and write the g^x for the key exchange - * as a pubkey_len-byte value into 'pubkey'. Return 0 on success, -1 - * on failure. pubkey_len must be >= DH_BYTES. +/** Generate g^x as necessary, and write the g^x for the key exchange + * as a <b>pubkey_len</b>-byte value into <b>pubkey</b>. Return 0 on + * success, -1 on failure. <b>pubkey_len</b> must be \>= DH_BYTES. */ int crypto_dh_get_public(crypto_dh_env_t *dh, char *pubkey, int pubkey_len) { @@ -1176,14 +1189,14 @@ int crypto_dh_get_public(crypto_dh_env_t *dh, char *pubkey, int pubkey_len) #undef MIN #define MIN(a,b) ((a)<(b)?(a):(b)) -/* Given a DH key exchange object, and our peer's value of g^y (as a - * pubkey_len byte value in 'pubkey') generate 'secret_bytes_out' - * bytes of shared key material and write them to 'secret_out'. +/** Given a DH key exchange object, and our peer's value of g^y (as a + * <b>pubkey_len</b> byte value in <b>pubkey</b>) generate + * <b>secret_bytes_out</b> bytes of shared key material and write them + * to <b>secret_out</b>. * * (We generate key material by computing * SHA1( g^xy || "\x00" ) || SHA1( g^xy || "\x01" ) || ... * where || is concatenation.) - * */ int crypto_dh_compute_secret(crypto_dh_env_t *dh, const char *pubkey, int pubkey_len, @@ -1220,7 +1233,7 @@ int crypto_dh_compute_secret(crypto_dh_env_t *dh, tor_free(secret_tmp); return secret_len; } -/* Free a DH key exchange object. +/** Free a DH key exchange object. */ void crypto_dh_free(crypto_dh_env_t *dh) { @@ -1231,7 +1244,7 @@ void crypto_dh_free(crypto_dh_env_t *dh) /* random numbers */ -/* Seed OpenSSL's random number generator with DIGEST_LEN bytes from the +/** Seed OpenSSL's random number generator with DIGEST_LEN bytes from the * operating system. */ int crypto_seed_rng() @@ -1292,8 +1305,8 @@ int crypto_seed_rng() #endif } -/* Write n bytes of strong random data to 'to'. Return 0 on success, -1 on - * failure. +/** Write n bytes of strong random data to <b>to</b>. Return 0 on + * success, -1 on failure. */ int crypto_rand(unsigned int n, unsigned char *to) { @@ -1305,8 +1318,8 @@ int crypto_rand(unsigned int n, unsigned char *to) return (r == 1) ? 0 : -1; } -/* Write n bytes of pseudorandom data to 'to'. Return 0 on success, -1 - * on failure. +/** Write n bytes of pseudorandom data to <b>to</b>. Return 0 on + * success, -1 on failure. */ void crypto_pseudo_rand(unsigned int n, unsigned char *to) { @@ -1318,7 +1331,7 @@ void crypto_pseudo_rand(unsigned int n, unsigned char *to) } } -/* Return a pseudorandom integer, choosen uniformly from the values +/** Return a pseudorandom integer, choosen uniformly from the values * between 0 and max-1 */ int crypto_pseudo_rand_int(unsigned int max) { unsigned int val; @@ -1338,10 +1351,10 @@ int crypto_pseudo_rand_int(unsigned int max) { } } -/* Base-64 encode 'srclen' bytes of data from 'src'. Write the result - * into 'dest', if it will fit within 'destlen' bytes. Return the - * number of bytes written on success; -1 if destlen is too short, - * or other failure. +/** Base-64 encode <b>srclen</b> bytes of data from <b>src</b>. Write + * the result into <b>dest</b>, if it will fit within <b>destlen</b> + * bytes. Return the number of bytes written on success; -1 if + * destlen is too short, or other failure. */ int base64_encode(char *dest, int destlen, const char *src, int srclen) @@ -1362,10 +1375,10 @@ base64_encode(char *dest, int destlen, const char *src, int srclen) return ret; } -/* Base-64 decode 'srclen' bytes of data from 'src'. Write the result - * into 'dest', if it will fit within 'destlen' bytes. Return the - * number of bytes written on success; -1 if destlen is too short, - * or other failure. +/** Base-64 decode <b>srclen</b> bytes of data from <b>src</b>. Write + * the result into <b>dest</b>, if it will fit within <b>destlen</b> + * bytes. Return the number of bytes written on success; -1 if + * destlen is too short, or other failure. */ int base64_decode(char *dest, int destlen, const char *src, int srclen) @@ -1385,7 +1398,7 @@ base64_decode(char *dest, int destlen, const char *src, int srclen) return ret; } -/* Implements base32 encoding as in rfc3548. Limitation: Requires +/** Implements base32 encoding as in rfc3548. Limitation: Requires * that srclen is a multiple of 5. */ int |