summaryrefslogtreecommitdiff
path: root/gss-genr.c
diff options
context:
space:
mode:
Diffstat (limited to 'gss-genr.c')
-rw-r--r--gss-genr.c29
1 files changed, 16 insertions, 13 deletions
diff --git a/gss-genr.c b/gss-genr.c
index 285fc29a5..491e62cee 100644
--- a/gss-genr.c
+++ b/gss-genr.c
@@ -39,11 +39,12 @@
39#include "xmalloc.h" 39#include "xmalloc.h"
40#include "ssherr.h" 40#include "ssherr.h"
41#include "sshbuf.h" 41#include "sshbuf.h"
42#include "sshkey.h"
42#include "log.h" 43#include "log.h"
43#include "ssh2.h" 44#include "ssh2.h"
44#include "cipher.h" 45#include "cipher.h"
45#include "kex.h" 46#include "kex.h"
46#include <openssl/evp.h> 47#include "digest.h"
47 48
48#include "ssh-gss.h" 49#include "ssh-gss.h"
49 50
@@ -110,10 +111,9 @@ ssh_gssapi_kex_mechs(gss_OID_set gss_supported, ssh_gssapi_check_fn *check,
110 size_t i; 111 size_t i;
111 int r, oidpos, enclen; 112 int r, oidpos, enclen;
112 char *mechs, *encoded; 113 char *mechs, *encoded;
113 u_char digest[EVP_MAX_MD_SIZE]; 114 u_char digest[SSH_DIGEST_MAX_LENGTH];
114 char deroid[2]; 115 char deroid[2];
115 const EVP_MD *evp_md = EVP_md5(); 116 struct ssh_digest_ctx *md;
116 EVP_MD_CTX md;
117 117
118 if (gss_enc2oid != NULL) { 118 if (gss_enc2oid != NULL) {
119 for (i = 0; gss_enc2oid[i].encoded != NULL; i++) 119 for (i = 0; gss_enc2oid[i].encoded != NULL; i++)
@@ -135,16 +135,19 @@ ssh_gssapi_kex_mechs(gss_OID_set gss_supported, ssh_gssapi_check_fn *check,
135 deroid[0] = SSH_GSS_OIDTYPE; 135 deroid[0] = SSH_GSS_OIDTYPE;
136 deroid[1] = gss_supported->elements[i].length; 136 deroid[1] = gss_supported->elements[i].length;
137 137
138 EVP_DigestInit(&md, evp_md); 138 if ((md = ssh_digest_start(SSH_DIGEST_MD5)) == NULL ||
139 EVP_DigestUpdate(&md, deroid, 2); 139 ssh_digest_update(md, deroid, 2) != 0 ||
140 EVP_DigestUpdate(&md, 140 ssh_digest_update(md,
141 gss_supported->elements[i].elements, 141 gss_supported->elements[i].elements,
142 gss_supported->elements[i].length); 142 gss_supported->elements[i].length) != 0 ||
143 EVP_DigestFinal(&md, digest, NULL); 143 ssh_digest_final(md, digest, sizeof(digest)) != 0)
144 144 fatal("%s: digest failed", __func__);
145 encoded = xmalloc(EVP_MD_size(evp_md) * 2); 145
146 enclen = __b64_ntop(digest, EVP_MD_size(evp_md), 146 encoded = xmalloc(ssh_digest_bytes(SSH_DIGEST_MD5)
147 encoded, EVP_MD_size(evp_md) * 2); 147 * 2);
148 enclen = __b64_ntop(digest,
149 ssh_digest_bytes(SSH_DIGEST_MD5), encoded,
150 ssh_digest_bytes(SSH_DIGEST_MD5) * 2);
148 151
149 if (oidpos != 0) { 152 if (oidpos != 0) {
150 if ((r = sshbuf_put_u8(buf, ',')) != 0) 153 if ((r = sshbuf_put_u8(buf, ',')) != 0)