summaryrefslogtreecommitdiff
path: root/ssh-rsa.c
diff options
context:
space:
mode:
authorBen Lindstrom <mouring@eviladmin.org>2002-07-07 22:13:31 +0000
committerBen Lindstrom <mouring@eviladmin.org>2002-07-07 22:13:31 +0000
commit2bf759cba5f24c09e450bb8fcabfd9e6e32c137d (patch)
tree5eb3a30c6207558c8f8502afac3086cde4517cb6 /ssh-rsa.c
parent8b2eecdf9f6769520e2601d5de58991d5810873d (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.c18
1 files changed, 8 insertions, 10 deletions
diff --git a/ssh-rsa.c b/ssh-rsa.c
index c7f5ed0b3..d6729b045 100644
--- a/ssh-rsa.c
+++ b/ssh-rsa.c
@@ -23,7 +23,7 @@
23 */ 23 */
24 24
25#include "includes.h" 25#include "includes.h"
26RCSID("$OpenBSD: ssh-rsa.c,v 1.22 2002/07/04 04:15:33 deraadt Exp $"); 26RCSID("$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