aboutsummaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2004-04-01 20:04:54 +0000
committerNick Mathewson <nickm@torproject.org>2004-04-01 20:04:54 +0000
commit56b3d67149a96ad6d766be19a014d620b99dc34a (patch)
treec8558fab465af02f5c739c818a94b8eebcc565a3 /src/common
parentf05937355e6b2eb664ebb969b412c791a415cde9 (diff)
downloadtor-56b3d67149a96ad6d766be19a014d620b99dc34a.tar
tor-56b3d67149a96ad6d766be19a014d620b99dc34a.tar.gz
Separate "generate-DH-key" from "get-DH-key" without breaking old interface
svn:r1431
Diffstat (limited to 'src/common')
-rw-r--r--src/common/crypto.c12
-rw-r--r--src/common/crypto.h1
2 files changed, 11 insertions, 2 deletions
diff --git a/src/common/crypto.c b/src/common/crypto.c
index e0badacfc..7a548a2d1 100644
--- a/src/common/crypto.c
+++ b/src/common/crypto.c
@@ -1158,12 +1158,20 @@ int crypto_dh_get_bytes(crypto_dh_env_t *dh)
assert(dh);
return DH_size(dh->dh);
}
+int crypto_dh_generate_public(crypto_dh_env_t *dh)
+{
+ if (!DH_generate_key(dh->dh))
+ return -1;
+ return 0;
+}
int crypto_dh_get_public(crypto_dh_env_t *dh, char *pubkey, int pubkey_len)
{
int bytes;
assert(dh);
- if (!DH_generate_key(dh->dh))
- return -1;
+ if (!dh->dh->pub_key) {
+ if (!DH_generate_key(dh->dh))
+ return -1;
+ }
assert(dh->dh->pub_key);
bytes = BN_num_bytes(dh->dh->pub_key);
diff --git a/src/common/crypto.h b/src/common/crypto.h
index d256b1cb0..a09a4deda 100644
--- a/src/common/crypto.h
+++ b/src/common/crypto.h
@@ -86,6 +86,7 @@ typedef struct crypto_dh_env_st {
#define CRYPTO_DH_SIZE (1024 / 8)
crypto_dh_env_t *crypto_dh_new();
int crypto_dh_get_bytes(crypto_dh_env_t *dh);
+int crypto_dh_generate_public(crypto_dh_env_t *dh);
int crypto_dh_get_public(crypto_dh_env_t *dh, char *pubkey_out,
int pubkey_out_len);
int crypto_dh_compute_secret(crypto_dh_env_t *dh,