コード例 #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
ファイル: dh.c プロジェクト: randombit/hacrypto
void DH_free(DH *dh) {
    if (dh == NULL) {
        return;
    }

    if (CRYPTO_add(&dh->references, -1, CRYPTO_LOCK_DH) > 0) {
        return;
    }

    if (dh->meth->finish) {
        dh->meth->finish(dh);
    }
    METHOD_unref(dh->meth);

    CRYPTO_free_ex_data(CRYPTO_EX_INDEX_DH, dh, &dh->ex_data);

    if (dh->method_mont_p) BN_MONT_CTX_free(dh->method_mont_p);
    if (dh->p != NULL) BN_clear_free(dh->p);
    if (dh->g != NULL) BN_clear_free(dh->g);
    if (dh->q != NULL) BN_clear_free(dh->q);
    if (dh->j != NULL) BN_clear_free(dh->j);
    if (dh->seed) OPENSSL_free(dh->seed);
    if (dh->counter != NULL) BN_clear_free(dh->counter);
    if (dh->pub_key != NULL) BN_clear_free(dh->pub_key);
    if (dh->priv_key != NULL) BN_clear_free(dh->priv_key);

    OPENSSL_free(dh);
}
コード例 #4
0
ファイル: dsa.c プロジェクト: RobinWuDev/Qt
void DSA_free(DSA *dsa) {
  if (dsa == NULL) {
    return;
  }

  if (CRYPTO_add(&dsa->references, -1, CRYPTO_LOCK_DSA) > 0) {
    return;
  }

  if (dsa->meth->finish) {
    dsa->meth->finish(dsa);
  }
  METHOD_unref(dsa->meth);

  CRYPTO_free_ex_data(CRYPTO_EX_INDEX_DSA, dsa, &dsa->ex_data);

  if (dsa->p != NULL)
    BN_clear_free(dsa->p);
  if (dsa->q != NULL)
    BN_clear_free(dsa->q);
  if (dsa->g != NULL)
    BN_clear_free(dsa->g);
  if (dsa->pub_key != NULL)
    BN_clear_free(dsa->pub_key);
  if (dsa->priv_key != NULL)
    BN_clear_free(dsa->priv_key);
  if (dsa->kinv != NULL)
    BN_clear_free(dsa->kinv);
  if (dsa->r != NULL)
    BN_clear_free(dsa->r);
  OPENSSL_free(dsa);
}
コード例 #5
0
ファイル: dsa.c プロジェクト: gotomypc/tiny-webrtc-gw
void DSA_free(DSA *dsa) {
    if (dsa == NULL) {
        return;
    }

    if (!CRYPTO_refcount_dec_and_test_zero(&dsa->references)) {
        return;
    }

    if (dsa->meth->finish) {
        dsa->meth->finish(dsa);
    }
    METHOD_unref(dsa->meth);

    CRYPTO_free_ex_data(&g_ex_data_class, dsa, &dsa->ex_data);

    BN_clear_free(dsa->p);
    BN_clear_free(dsa->q);
    BN_clear_free(dsa->g);
    BN_clear_free(dsa->pub_key);
    BN_clear_free(dsa->priv_key);
    BN_clear_free(dsa->kinv);
    BN_clear_free(dsa->r);
    CRYPTO_MUTEX_cleanup(&dsa->method_mont_p_lock);
    OPENSSL_free(dsa);
}
コード例 #6
0
ファイル: dh.c プロジェクト: 360ground/Meda.et
void DH_free(DH *dh) {
  if (dh == NULL) {
    return;
  }

  if (!CRYPTO_refcount_dec_and_test_zero(&dh->references)) {
    return;
  }

  if (dh->meth->finish) {
    dh->meth->finish(dh);
  }
  METHOD_unref(dh->meth);

  CRYPTO_free_ex_data(&g_ex_data_class, dh, &dh->ex_data);

  if (dh->method_mont_p) BN_MONT_CTX_free(dh->method_mont_p);
  if (dh->p != NULL) BN_clear_free(dh->p);
  if (dh->g != NULL) BN_clear_free(dh->g);
  if (dh->q != NULL) BN_clear_free(dh->q);
  if (dh->j != NULL) BN_clear_free(dh->j);
  if (dh->seed) OPENSSL_free(dh->seed);
  if (dh->counter != NULL) BN_clear_free(dh->counter);
  if (dh->pub_key != NULL) BN_clear_free(dh->pub_key);
  if (dh->priv_key != NULL) BN_clear_free(dh->priv_key);
  CRYPTO_MUTEX_cleanup(&dh->method_mont_p_lock);

  OPENSSL_free(dh);
}
コード例 #7
0
ファイル: rsa.c プロジェクト: hoangmichel/webrtc
void RSA_free(RSA *rsa) {
  unsigned u;

  if (rsa == NULL) {
    return;
  }

  if (CRYPTO_add(&rsa->references, -1, CRYPTO_LOCK_RSA) > 0) {
    return;
  }

  if (rsa->meth->finish) {
    rsa->meth->finish(rsa);
  }
  METHOD_unref(rsa->meth);

  CRYPTO_free_ex_data(&g_ex_data_class, rsa, &rsa->ex_data);

  BN_clear_free(rsa->n);
  BN_clear_free(rsa->e);
  BN_clear_free(rsa->d);
  BN_clear_free(rsa->p);
  BN_clear_free(rsa->q);
  BN_clear_free(rsa->dmp1);
  BN_clear_free(rsa->dmq1);
  BN_clear_free(rsa->iqmp);
  for (u = 0; u < rsa->num_blindings; u++) {
    BN_BLINDING_free(rsa->blindings[u]);
  }
  OPENSSL_free(rsa->blindings);
  OPENSSL_free(rsa->blindings_inuse);
  CRYPTO_MUTEX_cleanup(&rsa->lock);
  OPENSSL_free(rsa);
}
コード例 #8
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;
}
コード例 #9
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;
}
コード例 #10
0
ファイル: rsa.c プロジェクト: RobinWuDev/Qt
void RSA_free(RSA *rsa) {
  unsigned u;

  if (rsa == NULL) {
    return;
  }

  if (CRYPTO_add(&rsa->references, -1, CRYPTO_LOCK_RSA) > 0) {
    return;
  }

  if (rsa->meth->finish) {
    rsa->meth->finish(rsa);
  }
  METHOD_unref(rsa->meth);

  CRYPTO_free_ex_data(CRYPTO_EX_INDEX_DSA, rsa, &rsa->ex_data);

  if (rsa->n != NULL)
    BN_clear_free(rsa->n);
  if (rsa->e != NULL)
    BN_clear_free(rsa->e);
  if (rsa->d != NULL)
    BN_clear_free(rsa->d);
  if (rsa->p != NULL)
    BN_clear_free(rsa->p);
  if (rsa->q != NULL)
    BN_clear_free(rsa->q);
  if (rsa->dmp1 != NULL)
    BN_clear_free(rsa->dmp1);
  if (rsa->dmq1 != NULL)
    BN_clear_free(rsa->dmq1);
  if (rsa->iqmp != NULL)
    BN_clear_free(rsa->iqmp);
  for (u = 0; u < rsa->num_blindings; u++) {
    BN_BLINDING_free(rsa->blindings[u]);
  }
  if (rsa->blindings != NULL)
    OPENSSL_free(rsa->blindings);
  if (rsa->blindings_inuse != NULL)
    OPENSSL_free(rsa->blindings_inuse);
  OPENSSL_free(rsa);
}
コード例 #11
0
ファイル: rsa.c プロジェクト: 0x64616E69656C/boringssl
void RSA_free(RSA *rsa) {
  unsigned u;

  if (rsa == NULL) {
    return;
  }

  if (!CRYPTO_refcount_dec_and_test_zero(&rsa->references)) {
    return;
  }

  if (rsa->meth->finish) {
    rsa->meth->finish(rsa);
  }
  METHOD_unref(rsa->meth);

  CRYPTO_free_ex_data(g_rsa_ex_data_class_bss_get(), rsa, &rsa->ex_data);

  BN_free(rsa->n);
  BN_free(rsa->e);
  BN_free(rsa->d);
  BN_free(rsa->p);
  BN_free(rsa->q);
  BN_free(rsa->dmp1);
  BN_free(rsa->dmq1);
  BN_free(rsa->iqmp);
  BN_MONT_CTX_free(rsa->mont_n);
  BN_MONT_CTX_free(rsa->mont_p);
  BN_MONT_CTX_free(rsa->mont_q);
  BN_free(rsa->d_fixed);
  BN_free(rsa->dmp1_fixed);
  BN_free(rsa->dmq1_fixed);
  BN_free(rsa->inv_small_mod_large_mont);
  for (u = 0; u < rsa->num_blindings; u++) {
    BN_BLINDING_free(rsa->blindings[u]);
  }
  OPENSSL_free(rsa->blindings);
  OPENSSL_free(rsa->blindings_inuse);
  CRYPTO_MUTEX_cleanup(&rsa->lock);
  OPENSSL_free(rsa);
}
コード例 #12
0
ファイル: rsa.c プロジェクト: Cyril2004/proto-quic
void RSA_free(RSA *rsa) {
  unsigned u;

  if (rsa == NULL) {
    return;
  }

  if (!CRYPTO_refcount_dec_and_test_zero(&rsa->references)) {
    return;
  }

  if (rsa->meth->finish) {
    rsa->meth->finish(rsa);
  }
  METHOD_unref(rsa->meth);

  CRYPTO_free_ex_data(&g_ex_data_class, rsa, &rsa->ex_data);

  BN_clear_free(rsa->n);
  BN_clear_free(rsa->e);
  BN_clear_free(rsa->d);
  BN_clear_free(rsa->p);
  BN_clear_free(rsa->q);
  BN_clear_free(rsa->dmp1);
  BN_clear_free(rsa->dmq1);
  BN_clear_free(rsa->iqmp);
  BN_MONT_CTX_free(rsa->mont_n);
  BN_MONT_CTX_free(rsa->mont_p);
  BN_MONT_CTX_free(rsa->mont_q);
  for (u = 0; u < rsa->num_blindings; u++) {
    BN_BLINDING_free(rsa->blindings[u]);
  }
  OPENSSL_free(rsa->blindings);
  OPENSSL_free(rsa->blindings_inuse);
  if (rsa->additional_primes != NULL) {
    sk_RSA_additional_prime_pop_free(rsa->additional_primes,
                                     RSA_additional_prime_free);
  }
  CRYPTO_MUTEX_cleanup(&rsa->lock);
  OPENSSL_free(rsa);
}