Commit dba31777 authored by Rich Salz's avatar Rich Salz Committed by Rich Salz
Browse files

Remove JPAKE

parent 6a78ae28
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -4,6 +4,9 @@

 Changes between 1.0.2f and 1.1.0  [xx XXX xxxx]

  *) Removed JPAKE code.  It was experimental and has no wide use.
     [Rich Salz]

  *) The INSTALL_PREFIX Makefile variable has been renamed to
     DESTDIR.  That makes for less confusion on what this variable
     is for.  Also, the configuration option --install_prefix is
+1 −4
Original line number Diff line number Diff line
@@ -226,7 +226,7 @@ $config{sdirs} = [
    "bn", "ec", "rsa", "dsa", "dh", "dso", "engine",
    "buffer", "bio", "stack", "lhash", "rand", "err",
    "evp", "asn1", "pem", "x509", "x509v3", "conf", "txt_db", "pkcs7", "pkcs12", "comp", "ocsp", "ui",
    "cms", "ts", "jpake", "srp", "cmac", "ct", "async", "kdf"
    "cms", "ts", "srp", "cmac", "ct", "async", "kdf"
    ];

# Known TLS and DTLS protocols
@@ -274,7 +274,6 @@ my @disablables = (
    "hmac",
    "hw(-.+)?",
    "idea",
    "jpake",
    "locking",			# Really???
    "md2",
    "md4",
@@ -327,7 +326,6 @@ foreach my $proto ((@tls, @dtls))
my %disabled = ( # "what"         => "comment" [or special keyword "experimental"]
		 "ec_nistp_64_gcc_128" => "default",
		 "egd"            => "default",
		 "jpake"          => "experimental",
		 "md2"            => "default",
		 "rc5"            => "default",
		 "sctp"           => "default",
@@ -351,7 +349,6 @@ my @disable_cascades = (
    "rijndael"		=> [ "aes" ],
    "des"		=> [ "mdc2" ],
    "ec"		=> [ "ecdsa", "ecdh" ],
    "psk"		=> [ "jpake" ],

    "dgram"		=> [ "dtls" ],
    "dtls"		=> [ @dtls ],
+0 −226
Original line number Diff line number Diff line
@@ -141,9 +141,6 @@
# include <openssl/rsa.h>
#endif
#include <openssl/bn.h>
#ifndef OPENSSL_NO_JPAKE
# include <openssl/jpake.h>
#endif
#include <openssl/ssl.h>

#include "apps.h"
@@ -1990,229 +1987,6 @@ void policies_print(X509_STORE_CTX *ctx)
    nodes_print("User", X509_policy_tree_get0_user_policies(tree));
}

#if !defined(OPENSSL_NO_JPAKE) && !defined(OPENSSL_NO_PSK)

static JPAKE_CTX *jpake_init(const char *us, const char *them,
                             const char *secret)
{
    BIGNUM *p = NULL;
    BIGNUM *g = NULL;
    BIGNUM *q = NULL;
    BIGNUM *bnsecret = BN_new();
    JPAKE_CTX *ctx;

    /* Use a safe prime for p (that we found earlier) */
    BN_hex2bn(&p,
              "F9E5B365665EA7A05A9C534502780FEE6F1AB5BD4F49947FD036DBD7E905269AF46EF28B0FC07487EE4F5D20FB3C0AF8E700F3A2FA3414970CBED44FEDFF80CE78D800F184BB82435D137AADA2C6C16523247930A63B85661D1FC817A51ACD96168E95898A1F83A79FFB529368AA7833ABD1B0C3AEDDB14D2E1A2F71D99F763F");
    g = BN_new();
    BN_set_word(g, 2);
    q = BN_new();
    BN_rshift1(q, p);

    BN_bin2bn((const unsigned char *)secret, strlen(secret), bnsecret);

    ctx = JPAKE_CTX_new(us, them, p, g, q, bnsecret);
    BN_free(bnsecret);
    BN_free(q);
    BN_free(g);
    BN_free(p);

    return ctx;
}

static void jpake_send_part(BIO *conn, const JPAKE_STEP_PART *p)
{
    BN_print(conn, p->gx);
    BIO_puts(conn, "\n");
    BN_print(conn, p->zkpx.gr);
    BIO_puts(conn, "\n");
    BN_print(conn, p->zkpx.b);
    BIO_puts(conn, "\n");
}

static void jpake_send_step1(BIO *bconn, JPAKE_CTX *ctx)
{
    JPAKE_STEP1 s1;

    JPAKE_STEP1_init(&s1);
    JPAKE_STEP1_generate(&s1, ctx);
    jpake_send_part(bconn, &s1.p1);
    jpake_send_part(bconn, &s1.p2);
    (void)BIO_flush(bconn);
    JPAKE_STEP1_release(&s1);
}

static void jpake_send_step2(BIO *bconn, JPAKE_CTX *ctx)
{
    JPAKE_STEP2 s2;

    JPAKE_STEP2_init(&s2);
    JPAKE_STEP2_generate(&s2, ctx);
    jpake_send_part(bconn, &s2);
    (void)BIO_flush(bconn);
    JPAKE_STEP2_release(&s2);
}

static void jpake_send_step3a(BIO *bconn, JPAKE_CTX *ctx)
{
    JPAKE_STEP3A s3a;

    JPAKE_STEP3A_init(&s3a);
    JPAKE_STEP3A_generate(&s3a, ctx);
    BIO_write(bconn, s3a.hhk, sizeof s3a.hhk);
    (void)BIO_flush(bconn);
    JPAKE_STEP3A_release(&s3a);
}

static void jpake_send_step3b(BIO *bconn, JPAKE_CTX *ctx)
{
    JPAKE_STEP3B s3b;

    JPAKE_STEP3B_init(&s3b);
    JPAKE_STEP3B_generate(&s3b, ctx);
    BIO_write(bconn, s3b.hk, sizeof s3b.hk);
    (void)BIO_flush(bconn);
    JPAKE_STEP3B_release(&s3b);
}

static void readbn(BIGNUM **bn, BIO *bconn)
{
    char buf[10240];
    int l;

    l = BIO_gets(bconn, buf, sizeof buf);
    assert(l > 0);
    assert(buf[l - 1] == '\n');
    buf[l - 1] = '\0';
    BN_hex2bn(bn, buf);
}

static void jpake_receive_part(JPAKE_STEP_PART *p, BIO *bconn)
{
    readbn(&p->gx, bconn);
    readbn(&p->zkpx.gr, bconn);
    readbn(&p->zkpx.b, bconn);
}

static void jpake_receive_step1(JPAKE_CTX *ctx, BIO *bconn)
{
    JPAKE_STEP1 s1;

    JPAKE_STEP1_init(&s1);
    jpake_receive_part(&s1.p1, bconn);
    jpake_receive_part(&s1.p2, bconn);
    if (!JPAKE_STEP1_process(ctx, &s1)) {
        ERR_print_errors(bio_err);
        exit(1);
    }
    JPAKE_STEP1_release(&s1);
}

static void jpake_receive_step2(JPAKE_CTX *ctx, BIO *bconn)
{
    JPAKE_STEP2 s2;

    JPAKE_STEP2_init(&s2);
    jpake_receive_part(&s2, bconn);
    if (!JPAKE_STEP2_process(ctx, &s2)) {
        ERR_print_errors(bio_err);
        exit(1);
    }
    JPAKE_STEP2_release(&s2);
}

static void jpake_receive_step3a(JPAKE_CTX *ctx, BIO *bconn)
{
    JPAKE_STEP3A s3a;
    int l;

    JPAKE_STEP3A_init(&s3a);
    l = BIO_read(bconn, s3a.hhk, sizeof s3a.hhk);
    assert(l == sizeof s3a.hhk);
    if (!JPAKE_STEP3A_process(ctx, &s3a)) {
        ERR_print_errors(bio_err);
        exit(1);
    }
    JPAKE_STEP3A_release(&s3a);
}

static void jpake_receive_step3b(JPAKE_CTX *ctx, BIO *bconn)
{
    JPAKE_STEP3B s3b;
    int l;

    JPAKE_STEP3B_init(&s3b);
    l = BIO_read(bconn, s3b.hk, sizeof s3b.hk);
    assert(l == sizeof s3b.hk);
    if (!JPAKE_STEP3B_process(ctx, &s3b)) {
        ERR_print_errors(bio_err);
        exit(1);
    }
    JPAKE_STEP3B_release(&s3b);
}

void jpake_client_auth(BIO *out, BIO *conn, const char *secret)
{
    JPAKE_CTX *ctx;
    BIO *bconn;

    BIO_puts(out, "Authenticating with JPAKE\n");

    ctx = jpake_init("client", "server", secret);

    bconn = BIO_new(BIO_f_buffer());
    BIO_push(bconn, conn);

    jpake_send_step1(bconn, ctx);
    jpake_receive_step1(ctx, bconn);
    jpake_send_step2(bconn, ctx);
    jpake_receive_step2(ctx, bconn);
    jpake_send_step3a(bconn, ctx);
    jpake_receive_step3b(ctx, bconn);

    BIO_puts(out, "JPAKE authentication succeeded, setting PSK\n");

    OPENSSL_free(psk_key);
    psk_key = BN_bn2hex(JPAKE_get_shared_key(ctx));

    BIO_pop(bconn);
    BIO_free(bconn);

    JPAKE_CTX_free(ctx);
}

void jpake_server_auth(BIO *out, BIO *conn, const char *secret)
{
    JPAKE_CTX *ctx;
    BIO *bconn;

    BIO_puts(out, "Authenticating with JPAKE\n");

    ctx = jpake_init("server", "client", secret);

    bconn = BIO_new(BIO_f_buffer());
    BIO_push(bconn, conn);

    jpake_receive_step1(ctx, bconn);
    jpake_send_step1(bconn, ctx);
    jpake_receive_step2(ctx, bconn);
    jpake_send_step2(bconn, ctx);
    jpake_receive_step3a(ctx, bconn);
    jpake_send_step3b(bconn, ctx);

    BIO_puts(out, "JPAKE authentication succeeded, setting PSK\n");

    OPENSSL_free(psk_key);
    psk_key = BN_bn2hex(JPAKE_get_shared_key(ctx));

    BIO_pop(bconn);
    BIO_free(bconn);

    JPAKE_CTX_free(ctx);
}

#endif

/*-
 * next_protos_parse parses a comma separated list of strings into a string
 * in a format suitable for passing to SSL_CTX_set_next_protos_advertised.
+0 −4
Original line number Diff line number Diff line
@@ -571,10 +571,6 @@ int do_X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md,
# ifndef OPENSSL_NO_PSK
extern char *psk_key;
# endif
# ifndef OPENSSL_NO_JPAKE
void jpake_client_auth(BIO *out, BIO *conn, const char *secret);
void jpake_server_auth(BIO *out, BIO *conn, const char *secret);
# endif

unsigned char *next_protos_parse(unsigned short *outlen, const char *in);

+0 −3
Original line number Diff line number Diff line
@@ -757,9 +757,6 @@ static void list_disabled(void)
#ifdef OPENSSL_NO_IDEA
    BIO_puts(bio_out, "IDEA\n");
#endif
#ifdef OPENSSL_NO_JPAKE
    BIO_puts(bio_out, "JPAKE\n");
#endif
#ifdef OPENSSL_NO_MD2
    BIO_puts(bio_out, "MD2\n");
#endif
Loading