Commit 70da1760 authored by Niels Möller's avatar Niels Möller
Browse files

Intialize key exchange, using a fix dss key.

Rev: src/lshd.c:1.7
parent 6badc772
...@@ -30,9 +30,21 @@ ...@@ -30,9 +30,21 @@
#include "getopt.h" #include "getopt.h"
#include "alist.h"
#include "atoms.h"
#include "crypto.h"
#include "format.h"
#include "io.h" #include "io.h"
#include "werror.h" #include "randomness.h"
#include "server.h" #include "server.h"
#include "server_keyexchange.h"
#include "werror.h"
#include "xalloc.h"
#if 0
#include "crypto.h"
#include "publickey_crypto.h"
#endif
#define BLOCK_SIZE 32768 #define BLOCK_SIZE 32768
...@@ -50,11 +62,11 @@ struct signer *secret_key; ...@@ -50,11 +62,11 @@ struct signer *secret_key;
struct lsh_string *public_key; struct lsh_string *public_key;
/* A key generated by gnupg */ /* A key generated by gnupg */
void init_host_key(struct randomness *r) static void init_host_key(struct randomness *r)
{ {
mpz_t p, q, g, y, a; mpz_t p, q, g, y, a;
mpz_t tmp; mpz_t tmp;
lsh_string *s; struct lsh_string *s;
mpz_init_set_str(p, mpz_init_set_str(p,
"BC7797D55CF2449CA4B02396246AF5C75CA38C52B6F2E543" "BC7797D55CF2449CA4B02396246AF5C75CA38C52B6F2E543"
...@@ -62,7 +74,7 @@ void init_host_key(struct randomness *r) ...@@ -62,7 +74,7 @@ void init_host_key(struct randomness *r)
"B58D64762D40EAA8D70F282B3AC4A7771171B1B1D1AE89F4" "B58D64762D40EAA8D70F282B3AC4A7771171B1B1D1AE89F4"
"1CD091FE95A6F42A2340081F9E97A4B5F953DE223F10F878" "1CD091FE95A6F42A2340081F9E97A4B5F953DE223F10F878"
"4C0619A9979643E5325DF71C9C088F3BC82FA0A6C47B5C64" "4C0619A9979643E5325DF71C9C088F3BC82FA0A6C47B5C64"
"BC07A31B9CDB2B07", 6); "BC07A31B9CDB2B07", 16);
mpz_init_set_str(q, mpz_init_set_str(q,
"867F7E6563B3FAF19B65C83E9B843150C5CC2201", 16); "867F7E6563B3FAF19B65C83E9B843150C5CC2201", 16);
mpz_init_set_str(g, mpz_init_set_str(g,
...@@ -104,6 +116,47 @@ void init_host_key(struct randomness *r) ...@@ -104,6 +116,47 @@ void init_host_key(struct randomness *r)
mpz_clear(a); mpz_clear(a);
} }
struct simple_kexinit
{
struct make_kexinit super;
struct randomness *r;
};
static struct kexinit *do_make_kexinit(struct make_kexinit *c)
{
struct simple_kexinit *closure = (struct simple_kexinit *) c;
struct kexinit *res = xalloc(sizeof(struct kexinit));
static int kex_algorithms[] = { ATOM_DIFFIE_HELLMAN_GROUP1_SHA1, 0 };
static int server_hostkey_algorithms[] = { ATOM_SSH_DSS, 0 };
static int crypto_algorithms[] = { ATOM_ARCFOUR, ATOM_NONE, 0 };
static int mac_algorithms[] = { ATOM_HMAC_SHA1, 0 };
static int compression_algorithms[] = { ATOM_NONE, 0 };
RANDOM(closure->r, 16, res->cookie);
res->kex_algorithms = kex_algorithms;
res->server_hostkey_algorithms = server_hostkey_algorithms;
res->parameters[KEX_ENCRYPTION_CLIENT_TO_SERVER] = crypto_algorithms;
res->parameters[KEX_ENCRYPTION_SERVER_TO_CLIENT] = crypto_algorithms;
res->parameters[KEX_MAC_CLIENT_TO_SERVER] = mac_algorithms;
res->parameters[KEX_MAC_SERVER_TO_CLIENT] = mac_algorithms;
res->parameters[KEX_COMPRESSION_CLIENT_TO_SERVER] = compression_algorithms;
res->parameters[KEX_COMPRESSION_SERVER_TO_CLIENT] = compression_algorithms;
res->first_kex_packet_follows = 0;
return res;
}
struct make_kexinit *make_simple_kexinit(struct randomness *r)
{
struct simple_kexinit *res = xalloc(sizeof(struct simple_kexinit));
res->super.make = do_make_kexinit;
res->r = r;
return &res->super;
}
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
char *host = NULL; /* Interface to bind */ char *host = NULL; /* Interface to bind */
...@@ -111,7 +164,13 @@ int main(int argc, char **argv) ...@@ -111,7 +164,13 @@ int main(int argc, char **argv)
int option; int option;
struct sockaddr_in local; struct sockaddr_in local;
struct randomness *r;
struct diffie_hellman_method *dh;
struct keyexchange_algorithm *kex;
struct alist *algorithms;
struct packet_handler *kexinit_handler;
/* For filtering messages. Could perhaps also be used when converting /* For filtering messages. Could perhaps also be used when converting
* strings to and from UTF8. */ * strings to and from UTF8. */
setlocale(LC_CTYPE, ""); setlocale(LC_CTYPE, "");
...@@ -141,6 +200,17 @@ int main(int argc, char **argv) ...@@ -141,6 +200,17 @@ int main(int argc, char **argv)
if ( (argc - optind) != 0) if ( (argc - optind) != 0)
usage(); usage();
r = make_poor_random(&sha_algorithm, ssh_format("%z", "gazonk"));
dh = make_dh1(r);
init_host_key(r); /* Initializes public_key and secret_key */
kex = make_dh_server(dh, public_key, secret_key);
algorithms = make_alist(4,
ATOM_ARCFOUR, crypto_rc4_algorithm,
ATOM_HMAC_SHA1, make_hmac_algorithm(&sha_algorithm),
ATOM_DIFFIE_HELLMAN_GROUP1_SHA1, kex,
ATOM_SSH_DSS, make_dss_algorithm(r), -1);
kexinit_handler = make_kexinit_handler(make_simple_kexinit(r), algorithms);
if (!get_inaddr(&local, host, port, "tcp")) if (!get_inaddr(&local, host, port, "tcp"))
{ {
fprintf(stderr, "No such host or service"); fprintf(stderr, "No such host or service");
...@@ -149,8 +219,9 @@ int main(int argc, char **argv) ...@@ -149,8 +219,9 @@ int main(int argc, char **argv)
if (!io_listen(&backend, &local, if (!io_listen(&backend, &local,
make_server_callback(&backend, make_server_callback(&backend,
"lshd - a free ssh", "lsh - a free ssh",
BLOCK_SIZE))) BLOCK_SIZE,
kexinit_handler)))
{ {
werror("lsh: Connection failed: %s\n", strerror(errno)); werror("lsh: Connection failed: %s\n", strerror(errno));
return 1; return 1;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment