コード例 #1
0
ファイル: keyfiles.c プロジェクト: CUEBoxer/OpenStudio
static int read_dsa_privatekey(FILE *fp, gcry_sexp_t *r, ssh_auth_callback cb,
    void *userdata, const char *desc) {
  ssh_buffer buffer = NULL;
  ssh_string p = NULL;
  ssh_string q = NULL;
  ssh_string g = NULL;
  ssh_string y = NULL;
  ssh_string x = NULL;
  ssh_string v = NULL;
  int rc = 1;

  buffer = privatekey_file_to_buffer(fp, TYPE_DSS, cb, userdata, desc);
  if (buffer == NULL) {
    return 0;
  }

  if (!asn1_check_sequence(buffer)) {
    buffer_free(buffer);
    return 0;
  }

  v = asn1_get_int(buffer);
  if (ntohl(v->size) != 1 || v->string[0] != 0) {
    buffer_free(buffer);
    return 0;
  }

  p = asn1_get_int(buffer);
  q = asn1_get_int(buffer);
  g = asn1_get_int(buffer);
  y = asn1_get_int(buffer);
  x = asn1_get_int(buffer);
  buffer_free(buffer);

  if (p == NULL || q == NULL || g == NULL || y == NULL || x == NULL) {
    rc = 0;
    goto error;
  }

  if (gcry_sexp_build(r, NULL,
        "(private-key(dsa(p %b)(q %b)(g %b)(y %b)(x %b)))",
        ntohl(p->size), p->string,
        ntohl(q->size), q->string,
        ntohl(g->size), g->string,
        ntohl(y->size), y->string,
        ntohl(x->size), x->string)) {
    rc = 0;
  }

error:
  string_free(p);
  string_free(q);
  string_free(g);
  string_free(y);
  string_free(x);
  string_free(v);

  return rc;
}
コード例 #2
0
ファイル: pki_gcrypt.c プロジェクト: nviennot/libssh
static int b64decode_dsa_privatekey(const char *pkey, gcry_sexp_t *r, ssh_auth_callback cb,
                                    void *userdata, const char *desc) {
    const unsigned char *data;
    ssh_buffer buffer = NULL;
    ssh_string p = NULL;
    ssh_string q = NULL;
    ssh_string g = NULL;
    ssh_string y = NULL;
    ssh_string x = NULL;
    ssh_string v = NULL;
    int rc = 1;

    buffer = privatekey_string_to_buffer(pkey, SSH_KEYTYPE_DSS, cb, userdata, desc);
    if (buffer == NULL) {
        return 0;
    }

    if (!asn1_check_sequence(buffer)) {
        ssh_buffer_free(buffer);
        return 0;
    }

    v = asn1_get_int(buffer);
    if (v == NULL) {
        ssh_buffer_free(buffer);
        return 0;
    }

    data = ssh_string_data(v);
    if (ssh_string_len(v) != 1 || data[0] != 0) {
        ssh_buffer_free(buffer);
        return 0;
    }

    p = asn1_get_int(buffer);
    q = asn1_get_int(buffer);
    g = asn1_get_int(buffer);
    y = asn1_get_int(buffer);
    x = asn1_get_int(buffer);
    ssh_buffer_free(buffer);

    if (p == NULL || q == NULL || g == NULL || y == NULL || x == NULL) {
        rc = 0;
        goto error;
    }

    if (gcry_sexp_build(r, NULL,
                        "(private-key(dsa(p %b)(q %b)(g %b)(y %b)(x %b)))",
                        ssh_string_len(p), ssh_string_data(p),
                        ssh_string_len(q), ssh_string_data(q),
                        ssh_string_len(g), ssh_string_data(g),
                        ssh_string_len(y), ssh_string_data(y),
                        ssh_string_len(x), ssh_string_data(x))) {
        rc = 0;
    }

error:
    ssh_string_free(p);
    ssh_string_free(q);
    ssh_string_free(g);
    ssh_string_free(y);
    ssh_string_free(x);
    ssh_string_free(v);

    return rc;
}
コード例 #3
0
ファイル: pki_gcrypt.c プロジェクト: nviennot/libssh
static int b64decode_rsa_privatekey(const char *pkey, gcry_sexp_t *r,
                                    ssh_auth_callback cb, void *userdata, const char *desc) {
    const unsigned char *data;
    ssh_string n = NULL;
    ssh_string e = NULL;
    ssh_string d = NULL;
    ssh_string p = NULL;
    ssh_string q = NULL;
    ssh_string unused1 = NULL;
    ssh_string unused2 = NULL;
    ssh_string u = NULL;
    ssh_string v = NULL;
    ssh_buffer buffer = NULL;
    int rc = 1;

    buffer = privatekey_string_to_buffer(pkey, SSH_KEYTYPE_RSA, cb, userdata, desc);
    if (buffer == NULL) {
        return 0;
    }

    if (!asn1_check_sequence(buffer)) {
        ssh_buffer_free(buffer);
        return 0;
    }

    v = asn1_get_int(buffer);
    if (v == NULL) {
        ssh_buffer_free(buffer);
        return 0;
    }

    data = ssh_string_data(v);
    if (ssh_string_len(v) != 1 || data[0] != 0) {
        ssh_buffer_free(buffer);
        return 0;
    }

    n = asn1_get_int(buffer);
    e = asn1_get_int(buffer);
    d = asn1_get_int(buffer);
    q = asn1_get_int(buffer);
    p = asn1_get_int(buffer);
    unused1 = asn1_get_int(buffer);
    unused2 = asn1_get_int(buffer);
    u = asn1_get_int(buffer);

    ssh_buffer_free(buffer);

    if (n == NULL || e == NULL || d == NULL || p == NULL || q == NULL ||
            unused1 == NULL || unused2 == NULL|| u == NULL) {
        rc = 0;
        goto error;
    }

    if (gcry_sexp_build(r, NULL,
                        "(private-key(rsa(n %b)(e %b)(d %b)(p %b)(q %b)(u %b)))",
                        ssh_string_len(n), ssh_string_data(n),
                        ssh_string_len(e), ssh_string_data(e),
                        ssh_string_len(d), ssh_string_data(d),
                        ssh_string_len(p), ssh_string_data(p),
                        ssh_string_len(q), ssh_string_data(q),
                        ssh_string_len(u), ssh_string_data(u))) {
        rc = 0;
    }

error:
    ssh_string_free(n);
    ssh_string_free(e);
    ssh_string_free(d);
    ssh_string_free(p);
    ssh_string_free(q);
    ssh_string_free(unused1);
    ssh_string_free(unused2);
    ssh_string_free(u);
    ssh_string_free(v);

    return rc;
}
コード例 #4
0
ファイル: keyfiles.c プロジェクト: CUEBoxer/OpenStudio
static int read_rsa_privatekey(FILE *fp, gcry_sexp_t *r,
    ssh_auth_callback cb, void *userdata, const char *desc) {
  ssh_string n = NULL;
  ssh_string e = NULL;
  ssh_string d = NULL;
  ssh_string p = NULL;
  ssh_string q = NULL;
  ssh_string unused1 = NULL;
  ssh_string unused2 = NULL;
  ssh_string u = NULL;
  ssh_string v = NULL;
  ssh_buffer buffer = NULL;
  int rc = 1;

  buffer = privatekey_file_to_buffer(fp, TYPE_RSA, cb, userdata, desc);
  if (buffer == NULL) {
    return 0;
  }

  if (!asn1_check_sequence(buffer)) {
    buffer_free(buffer);
    return 0;
  }

  v = asn1_get_int(buffer);
  if (ntohl(v->size) != 1 || v->string[0] != 0) {
    buffer_free(buffer);
    return 0;
  }

  n = asn1_get_int(buffer);
  e = asn1_get_int(buffer);
  d = asn1_get_int(buffer);
  q = asn1_get_int(buffer);
  p = asn1_get_int(buffer);
  unused1 = asn1_get_int(buffer);
  unused2 = asn1_get_int(buffer);
  u = asn1_get_int(buffer);

  buffer_free(buffer);

  if (n == NULL || e == NULL || d == NULL || p == NULL || q == NULL ||
      unused1 == NULL || unused2 == NULL|| u == NULL) {
    rc = 0;
    goto error;
  }

  if (gcry_sexp_build(r, NULL,
      "(private-key(rsa(n %b)(e %b)(d %b)(p %b)(q %b)(u %b)))",
      ntohl(n->size), n->string,
      ntohl(e->size), e->string,
      ntohl(d->size), d->string,
      ntohl(p->size), p->string,
      ntohl(q->size), q->string,
      ntohl(u->size), u->string)) {
    rc = 0;
  }

error:
  string_free(n);
  string_free(e);
  string_free(d);
  string_free(p);
  string_free(q);
  string_free(unused1);
  string_free(unused2);
  string_free(u);
  string_free(v);

  return rc;
}