- /* Add the required DER encoding octets and MD5 hash */
- deroid[0]=0x06; /* Object Identifier */
- deroid[1]=supported->elements[i].length;
+ return(ssh_gssapi_kex_mechs(gss_supported, ssh_gssapi_check_mechanism,
+ (void *)host));
+}
+
+char *
+ssh_gssapi_kex_mechs(gss_OID_set gss_supported, ssh_gssapi_check_fn *check,
+ void *data) {
+ Buffer buf;
+ size_t i;
+ int oidpos, enclen;
+ char *mechs, *encoded;
+ u_char digest[EVP_MAX_MD_SIZE];
+ char deroid[2];
+ const EVP_MD *evp_md = EVP_md5();
+ EVP_MD_CTX md;
+
+ if (gss_enc2oid != NULL) {
+ for (i=0;gss_enc2oid[i].encoded!=NULL;i++)
+ xfree(gss_enc2oid[i].encoded);
+ xfree(gss_enc2oid);
+ }
+
+ gss_enc2oid = xmalloc(sizeof(ssh_gss_kex_mapping)*
+ (gss_supported->count+1));
+
+ buffer_init(&buf);
+
+ oidpos = 0;
+ for (i = 0;i < gss_supported->count;i++) {
+ if (gss_supported->elements[i].length < 128 &&
+ (*check)(&(gss_supported->elements[i]), data)) {
+
+ deroid[0] = SSH_GSS_OIDTYPE;
+ deroid[1] = gss_supported->elements[i].length;