diff options
author | Ben Lindstrom <mouring@eviladmin.org> | 2002-07-07 22:13:31 +0000 |
---|---|---|
committer | Ben Lindstrom <mouring@eviladmin.org> | 2002-07-07 22:13:31 +0000 |
commit | 2bf759cba5f24c09e450bb8fcabfd9e6e32c137d (patch) | |
tree | 5eb3a30c6207558c8f8502afac3086cde4517cb6 /ssh-rsa.c | |
parent | 8b2eecdf9f6769520e2601d5de58991d5810873d (diff) |
- markus@cvs.openbsd.org 2002/07/04 10:41:47
[key.c monitor_wrap.c ssh-dss.c ssh-rsa.c]
don't allocate, copy, and discard if there is not interested in the data;
ok deraadt@
Diffstat (limited to 'ssh-rsa.c')
-rw-r--r-- | ssh-rsa.c | 18 |
1 files changed, 8 insertions, 10 deletions
@@ -23,7 +23,7 @@ | |||
23 | */ | 23 | */ |
24 | 24 | ||
25 | #include "includes.h" | 25 | #include "includes.h" |
26 | RCSID("$OpenBSD: ssh-rsa.c,v 1.22 2002/07/04 04:15:33 deraadt Exp $"); | 26 | RCSID("$OpenBSD: ssh-rsa.c,v 1.23 2002/07/04 10:41:47 markus Exp $"); |
27 | 27 | ||
28 | #include <openssl/evp.h> | 28 | #include <openssl/evp.h> |
29 | #include <openssl/err.h> | 29 | #include <openssl/err.h> |
@@ -44,7 +44,7 @@ ssh_rsa_sign(Key *key, u_char **sigp, u_int *lenp, | |||
44 | { | 44 | { |
45 | const EVP_MD *evp_md; | 45 | const EVP_MD *evp_md; |
46 | EVP_MD_CTX md; | 46 | EVP_MD_CTX md; |
47 | u_char digest[EVP_MAX_MD_SIZE], *sig, *ret; | 47 | u_char digest[EVP_MAX_MD_SIZE], *sig; |
48 | u_int slen, dlen, len; | 48 | u_int slen, dlen, len; |
49 | int ok, nid; | 49 | int ok, nid; |
50 | Buffer b; | 50 | Buffer b; |
@@ -90,18 +90,16 @@ ssh_rsa_sign(Key *key, u_char **sigp, u_int *lenp, | |||
90 | buffer_put_cstring(&b, "ssh-rsa"); | 90 | buffer_put_cstring(&b, "ssh-rsa"); |
91 | buffer_put_string(&b, sig, slen); | 91 | buffer_put_string(&b, sig, slen); |
92 | len = buffer_len(&b); | 92 | len = buffer_len(&b); |
93 | ret = xmalloc(len); | 93 | if (lenp != NULL) |
94 | memcpy(ret, buffer_ptr(&b), len); | 94 | *lenp = len; |
95 | if (sigp != NULL) { | ||
96 | *sigp = xmalloc(len); | ||
97 | memcpy(*sigp, buffer_ptr(&b), len); | ||
98 | } | ||
95 | buffer_free(&b); | 99 | buffer_free(&b); |
96 | memset(sig, 's', slen); | 100 | memset(sig, 's', slen); |
97 | xfree(sig); | 101 | xfree(sig); |
98 | 102 | ||
99 | if (lenp != NULL) | ||
100 | *lenp = len; | ||
101 | if (sigp != NULL) | ||
102 | *sigp = ret; | ||
103 | else | ||
104 | xfree(ret); | ||
105 | return 0; | 103 | return 0; |
106 | } | 104 | } |
107 | 105 | ||