コード例 #1
0
ファイル: dh.c プロジェクト: randombit/hacrypto
DH *DH_new_method(const ENGINE *engine) {
    DH *dh = (DH *)OPENSSL_malloc(sizeof(DH));
    if (dh == NULL) {
        OPENSSL_PUT_ERROR(DH, DH_new_method, ERR_R_MALLOC_FAILURE);
        return NULL;
    }

    memset(dh, 0, sizeof(DH));

    if (engine) {
        dh->meth = ENGINE_get_DH_method(engine);
    }

    if (dh->meth == NULL) {
        dh->meth = (DH_METHOD*) &DH_default_method;
    }
    METHOD_ref(dh->meth);

    dh->references = 1;
    if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_DH, dh, &dh->ex_data)) {
        OPENSSL_free(dh);
        return NULL;
    }

    if (dh->meth->init && !dh->meth->init(dh)) {
        CRYPTO_free_ex_data(CRYPTO_EX_INDEX_DH, dh, &dh->ex_data);
        METHOD_unref(dh->meth);
        OPENSSL_free(dh);
        return NULL;
    }

    return dh;
}
コード例 #2
0
RSA *RSA_new_method(const ENGINE *engine) {
  RSA *rsa = OPENSSL_malloc(sizeof(RSA));
  if (rsa == NULL) {
    OPENSSL_PUT_ERROR(RSA, ERR_R_MALLOC_FAILURE);
    return NULL;
  }

  OPENSSL_memset(rsa, 0, sizeof(RSA));

  if (engine) {
    rsa->meth = ENGINE_get_RSA_method(engine);
  }

  if (rsa->meth == NULL) {
    rsa->meth = (RSA_METHOD *) RSA_default_method();
  }
  METHOD_ref(rsa->meth);

  rsa->references = 1;
  rsa->flags = rsa->meth->flags;
  CRYPTO_MUTEX_init(&rsa->lock);
  CRYPTO_new_ex_data(&rsa->ex_data);

  if (rsa->meth->init && !rsa->meth->init(rsa)) {
    CRYPTO_free_ex_data(g_rsa_ex_data_class_bss_get(), rsa, &rsa->ex_data);
    CRYPTO_MUTEX_cleanup(&rsa->lock);
    METHOD_unref(rsa->meth);
    OPENSSL_free(rsa);
    return NULL;
  }

  return rsa;
}
コード例 #3
0
ファイル: dsa.c プロジェクト: gotomypc/tiny-webrtc-gw
DSA *DSA_new_method(const ENGINE *engine) {
    DSA *dsa = (DSA *)OPENSSL_malloc(sizeof(DSA));
    if (dsa == NULL) {
        OPENSSL_PUT_ERROR(DSA, DSA_new_method, ERR_R_MALLOC_FAILURE);
        return NULL;
    }

    memset(dsa, 0, sizeof(DSA));

    if (engine) {
        dsa->meth = ENGINE_get_DSA_method(engine);
    }

    if (dsa->meth == NULL) {
        dsa->meth = (DSA_METHOD*) &DSA_default_method;
    }
    METHOD_ref(dsa->meth);

    dsa->write_params = 1;
    dsa->references = 1;

    CRYPTO_MUTEX_init(&dsa->method_mont_p_lock);

    if (!CRYPTO_new_ex_data(&g_ex_data_class, dsa, &dsa->ex_data)) {
        METHOD_unref(dsa->meth);
        OPENSSL_free(dsa);
        return NULL;
    }

    if (dsa->meth->init && !dsa->meth->init(dsa)) {
        CRYPTO_free_ex_data(&g_ex_data_class, dsa, &dsa->ex_data);
        METHOD_unref(dsa->meth);
        OPENSSL_free(dsa);
        return NULL;
    }

    return dsa;
}
コード例 #4
0
ファイル: rsa.c プロジェクト: RobinWuDev/Qt
RSA *RSA_new_method(const ENGINE *engine) {
  RSA *rsa = (RSA *)OPENSSL_malloc(sizeof(RSA));
  if (rsa == NULL) {
    OPENSSL_PUT_ERROR(RSA, RSA_new_method, ERR_R_MALLOC_FAILURE);
    return NULL;
  }

  memset(rsa, 0, sizeof(RSA));

  if (engine) {
    rsa->meth = ENGINE_get_RSA_method(engine);
  }

  if (rsa->meth == NULL) {
    rsa->meth = (RSA_METHOD*) &RSA_default_method;
  }
  METHOD_ref(rsa->meth);

  rsa->references = 1;
  rsa->flags = rsa->meth->flags;

  if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_RSA, rsa, &rsa->ex_data)) {
    METHOD_unref(rsa->meth);
    OPENSSL_free(rsa);
    return NULL;
  }

  if (rsa->meth->init && !rsa->meth->init(rsa)) {
    CRYPTO_free_ex_data(CRYPTO_EX_INDEX_RSA, rsa, &rsa->ex_data);
    METHOD_unref(rsa->meth);
    OPENSSL_free(rsa);
    return NULL;
  }

  return rsa;
}