您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ DH_compute_key函数代码示例

51自学网 2021-06-01 20:21:42
  C++
这篇教程C++ DH_compute_key函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中DH_compute_key函数的典型用法代码示例。如果您正苦于以下问题:C++ DH_compute_key函数的具体用法?C++ DH_compute_key怎么用?C++ DH_compute_key使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了DH_compute_key函数的26个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: openssl_dh_crypt

void openssl_dh_crypt(){	BIO *b;	DH *d1, *d2;	int i, len1, len2;	unsigned char skey1[COMM_LEN], skey2[COMM_LEN];	d1 = DH_new();	d2 = DH_new();	DH_generate_parameters_ex(d1, 64, DH_GENERATOR_2, NULL);	DH_check(d1, &i);	printf("/nDH key size: %d/n", DH_size(d1));	DH_generate_key(d1);	d2->p = BN_dup(d1->p);	d2->g = BN_dup(d1->g);	DH_generate_key(d2);	DH_check_pub_key(d1, d1->pub_key, &i);	len1 = DH_compute_key(skey1, d2->pub_key, d1);	len2 = DH_compute_key(skey2, d1->pub_key, d2);	if ((len1 != len2) || (memcmp(skey1, skey2, len1) != 0)) {		printf("DH_compute_key err!/n");		DH_free(d1);		DH_free(d2);		return;	}	b = BIO_new(BIO_s_file());	BIO_set_fp(b, stdout, BIO_NOCLOSE);	DHparams_print(b, d1);	BIO_free(b);	DH_free(d1);	DH_free(d2);}
开发者ID:beike2020,项目名称:source,代码行数:35,


示例2: run_rfc5114_tests

static int run_rfc5114_tests(void){    int i;    for (i = 0; i < (int)(sizeof(rfctd) / sizeof(rfc5114_td)); i++) {        DH *dhA, *dhB;        unsigned char *Z1 = NULL, *Z2 = NULL;        const rfc5114_td *td = rfctd + i;        /* Set up DH structures setting key components */        dhA = td->get_param();        dhB = td->get_param();        if (!dhA || !dhB)            goto bad_err;        dhA->priv_key = BN_bin2bn(td->xA, td->xA_len, NULL);        dhA->pub_key = BN_bin2bn(td->yA, td->yA_len, NULL);        dhB->priv_key = BN_bin2bn(td->xB, td->xB_len, NULL);        dhB->pub_key = BN_bin2bn(td->yB, td->yB_len, NULL);        if (!dhA->priv_key || !dhA->pub_key            || !dhB->priv_key || !dhB->pub_key)            goto bad_err;        if ((td->Z_len != (size_t)DH_size(dhA))            || (td->Z_len != (size_t)DH_size(dhB)))            goto err;        Z1 = OPENSSL_malloc(DH_size(dhA));        Z2 = OPENSSL_malloc(DH_size(dhB));        /*         * Work out shared secrets using both sides and compare with expected         * values.         */        if (!DH_compute_key(Z1, dhB->pub_key, dhA))            goto bad_err;        if (!DH_compute_key(Z2, dhA->pub_key, dhB))            goto bad_err;        if (memcmp(Z1, td->Z, td->Z_len))            goto err;        if (memcmp(Z2, td->Z, td->Z_len))            goto err;        printf("RFC5114 parameter test %d OK/n", i + 1);        DH_free(dhA);        DH_free(dhB);        OPENSSL_free(Z1);        OPENSSL_free(Z2);    }    return 1; bad_err:    fprintf(stderr, "Initalisation error RFC5114 set %d/n", i + 1);    ERR_print_errors_fp(stderr);    return 0; err:    fprintf(stderr, "Test failed RFC5114 set %d/n", i + 1);    return 0;}
开发者ID:Adallom,项目名称:openssl,代码行数:60,


示例3: DH_compute_key

 int SrsDH::copy_shared_key(const char* ppkey, int32_t ppkey_size, char* skey, int32_t& skey_size) {     int ret = ERROR_SUCCESS;          BIGNUM* ppk = NULL;     if ((ppk = BN_bin2bn((const unsigned char*)ppkey, ppkey_size, 0)) == NULL) {         ret = ERROR_OpenSslGetPeerPublicKey;         return ret;     }          // if failed, donot return, do cleanup, @see ./test/dhtest.c:168     // maybe the key_size is 127, but dh will write all 128bytes skey,     // so, donot need to set/initialize the skey.     // @see https://github.com/winlinvip/simple-rtmp-server/issues/165     int32_t key_size = DH_compute_key((unsigned char*)skey, ppk, pdh);          if (key_size < ppkey_size) {         srs_warn("shared key size=%d, ppk_size=%d", key_size, ppkey_size);     }          if (key_size < 0 || key_size > skey_size) {         ret = ERROR_OpenSslComputeSharedKey;     } else {         skey_size = key_size;     }          if (ppk) {         BN_free(ppk);     }          return ret; }
开发者ID:WilliamRen,项目名称:simple-rtmp-server,代码行数:32,


示例4: tr_cryptoComputeSecret

const uint8_t*tr_cryptoComputeSecret( tr_crypto *     crypto,                        const uint8_t * peerPublicKey ){    int      len;    uint8_t  secret[KEY_LEN];    BIGNUM * bn = BN_bin2bn( peerPublicKey, KEY_LEN, NULL );    DH *     dh;    ensureKeyExists( crypto );    dh = crypto->dh;    assert( DH_size( dh ) == KEY_LEN );    len = DH_compute_key( secret, bn, dh );    if( len == -1 )        logErrorFromSSL( );    else {        int offset;        assert( len <= KEY_LEN );        offset = KEY_LEN - len;        memset( crypto->mySecret, 0, offset );        memcpy( crypto->mySecret + offset, secret, len );        crypto->mySecretIsSet = 1;    }    BN_free( bn );    return crypto->mySecret;}
开发者ID:miracle2k,项目名称:transmission,代码行数:29,


示例5: DH_new

   bool diffie_hellman::compute_shared_key( const char* buf, uint32_t s ) {        ssl_dh dh = DH_new();#if OPENSSL_VERSION_NUMBER >= 0x10100000L        auto bn_p = BN_bin2bn( (unsigned char*)&p.front(), p.size(), NULL );        auto bn_pub_key = BN_bin2bn( (unsigned char*)&pub_key.front(), pub_key.size(), NULL );        auto bn_priv_key = BN_bin2bn( (unsigned char*)&priv_key.front(), priv_key.size(), NULL );        auto bn_g = BN_bin2bn( (unsigned char*)&g, 1, NULL );        DH_set0_pqg(dh.obj, bn_p, NULL, bn_g);        DH_set0_key(dh.obj, bn_pub_key, bn_priv_key);#else        dh->p = BN_bin2bn( (unsigned char*)&p.front(), p.size(), NULL );        dh->pub_key = BN_bin2bn( (unsigned char*)&pub_key.front(), pub_key.size(), NULL );        dh->priv_key = BN_bin2bn( (unsigned char*)&priv_key.front(), priv_key.size(), NULL );        dh->g = BN_bin2bn( (unsigned char*)&g, 1, NULL );#endif        int check;        DH_check(dh,&check);        if( !fc::validate( dh, valid ) )        {            return false;        }        ssl_bignum pk;        BN_bin2bn( (unsigned char*)buf, s, pk );        shared_key.resize( DH_size(dh) );         DH_compute_key( (unsigned char*)&shared_key.front(), pk, dh );        return true;   }
开发者ID:BestSilent,项目名称:eos,代码行数:30,


示例6: pkey_dh_derive

static int pkey_dh_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen)	{	int ret;	DH *dh;	DH_PKEY_CTX *dctx = ctx->data;	BIGNUM *dhpub;	if (!ctx->pkey || !ctx->peerkey)		{		DHerr(DH_F_PKEY_DH_DERIVE, DH_R_KEYS_NOT_SET);		return 0;		}	dh = ctx->pkey->pkey.dh;	dhpub = ctx->peerkey->pkey.dh->pub_key;	if (dctx->kdf_type == EVP_PKEY_DH_KDF_NONE)		{		if (key == NULL)			{			*keylen = DH_size(dh);			return 1;			}		ret = DH_compute_key(key, dhpub, dh);		if (ret < 0)			return ret;		*keylen = ret;		return 1;		}	else if (dctx->kdf_type == EVP_PKEY_DH_KDF_X9_42)		{		unsigned char *Z = NULL;		size_t Zlen = 0;		if (!dctx->kdf_outlen || !dctx->kdf_oid)			return 0;		if (key == NULL)			{			*keylen = dctx->kdf_outlen;			return 1;			}		if (*keylen != dctx->kdf_outlen)			return 0;		ret = 0;		Zlen = DH_size(dh);		Z = OPENSSL_malloc(Zlen);		if (DH_compute_key_padded(Z, dhpub, dh) <= 0)			goto err;		if (!DH_KDF_X9_42(key, *keylen, Z, Zlen, dctx->kdf_oid,					dctx->kdf_ukm, dctx->kdf_ukmlen,					dctx->kdf_md))			goto err;		*keylen = dctx->kdf_outlen;		ret = 1;		err:		if (Z)			{			OPENSSL_cleanse(Z, Zlen);			OPENSSL_free(Z);			}		return ret;		}	return 1;	}
开发者ID:0culus,项目名称:openssl,代码行数:60,


示例7: s2n_dh_compute_shared_secret_as_server

int s2n_dh_compute_shared_secret_as_server(struct s2n_dh_params *server_dh_params, struct s2n_stuffer *Yc_in, struct s2n_blob *shared_key){    uint16_t Yc_length;    struct s2n_blob Yc;    int shared_key_size;    BIGNUM *pub_key;    GUARD(s2n_check_all_dh_params(server_dh_params));    GUARD(s2n_stuffer_read_uint16(Yc_in, &Yc_length));    Yc.size = Yc_length;    Yc.data = s2n_stuffer_raw_read(Yc_in, Yc.size);    notnull_check(Yc.data);    pub_key = BN_bin2bn((const unsigned char *)Yc.data, Yc.size, NULL);    notnull_check(pub_key);    GUARD(s2n_alloc(shared_key, DH_size(server_dh_params->dh)));    shared_key_size = DH_compute_key(shared_key->data, pub_key, server_dh_params->dh);    if (shared_key_size <= 0) {        BN_free(pub_key);        S2N_ERROR(S2N_ERR_DH_SHARED_SECRET);    }    shared_key->size = shared_key_size;    BN_free(pub_key);    return 0;}
开发者ID:raycoll,项目名称:s2n,代码行数:30,


示例8: dh_compute_key_nif

ERL_NIF_TERM dh_compute_key_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]){/* (OthersPublicKey, MyPrivateKey, DHParams=[P,G]) */    BIGNUM *other_pub_key = NULL,        *dh_p = NULL,        *dh_g = NULL;    DH *dh_priv = DH_new();    /* Check the arguments and get          my private key (dh_priv),          the peer's public key (other_pub_key),          the parameters p & q    */    {        BIGNUM *dummy_pub_key = NULL,               *priv_key = NULL;        ERL_NIF_TERM head, tail;        if (!get_bn_from_bin(env, argv[0], &other_pub_key)            || !get_bn_from_bin(env, argv[1], &priv_key)            || !enif_get_list_cell(env, argv[2], &head, &tail)            || !get_bn_from_bin(env, head, &dh_p)            || !enif_get_list_cell(env, tail, &head, &tail)            || !get_bn_from_bin(env, head, &dh_g)            || !enif_is_empty_list(env, tail)            /* Note: DH_set0_key() does not allow setting only the             * private key, although DH_compute_key() does not use the             * public key. Work around this limitation by setting             * the public key to a copy of the private key.             */            || !(dummy_pub_key = BN_dup(priv_key))            || !DH_set0_key(dh_priv, dummy_pub_key, priv_key)            || !DH_set0_pqg(dh_priv, dh_p, NULL, dh_g)            ) {            if (dh_p) BN_free(dh_p);            if (dh_g) BN_free(dh_g);            if (other_pub_key) BN_free(other_pub_key);            if (dummy_pub_key) BN_free(dummy_pub_key);            if (priv_key) BN_free(priv_key);            return enif_make_badarg(env);        }    }    {        ErlNifBinary ret_bin;        int size;        enif_alloc_binary(DH_size(dh_priv), &ret_bin);        size = DH_compute_key(ret_bin.data, other_pub_key, dh_priv);        BN_free(other_pub_key);        DH_free(dh_priv);        if (size<=0) {            enif_release_binary(&ret_bin);            return atom_error;        }        if (size != ret_bin.size) enif_realloc_binary(&ret_bin, size);        return enif_make_binary(env, &ret_bin);    }}
开发者ID:KennethL,项目名称:otp,代码行数:60,


示例9: openssldh_computesecret

static isc_result_topenssldh_computesecret(const dst_key_t *pub, const dst_key_t *priv,			isc_buffer_t *secret){	DH *dhpub, *dhpriv;	int ret;	isc_region_t r;	unsigned int len;	REQUIRE(pub->keydata.dh != NULL);	REQUIRE(priv->keydata.dh != NULL);	dhpub = pub->keydata.dh;	dhpriv = priv->keydata.dh;	len = DH_size(dhpriv);	isc_buffer_availableregion(secret, &r);	if (r.length < len)		return (ISC_R_NOSPACE);	ret = DH_compute_key(r.base, dhpub->pub_key, dhpriv);	if (ret <= 0)		return (dst__openssl_toresult2("DH_compute_key",					       DST_R_COMPUTESECRETFAILURE));	isc_buffer_add(secret, len);	return (ISC_R_SUCCESS);}
开发者ID:krichter722,项目名称:bind9,代码行数:26,


示例10: x4_dh_shared

x4s_buf x4_dh_shared(const uint8 * g, size_t glen,                     const uint8 * p, size_t plen,                     const uint8 * x, size_t xlen,                     const uint8 * gx, size_t gxlen,                     const uint8 * gy, size_t gylen){  DH     * dh;  BIGNUM * bn;  x4s_buf gxy = { 0 };  /*  */  x4_assert(gx && gxlen && gy && gylen);  /*  */  dh = _dh_init(g,glen, p,plen, x,xlen);  x4_assert(dh);  dh->pub_key = BN_bin2bn(gx, gxlen, 0);  x4_assert(dh->pub_key);  bn = BN_bin2bn(gy, gylen, 0);  x4_assert(bn);  x4_buf_resize(&gxy, DH_size(dh));  DH_compute_key(gxy.data, bn, dh);  DH_free(dh);  return gxy;}
开发者ID:apankrat,项目名称:libike,代码行数:29,


示例11: performDH

struct sec performDH(char *pubkeyRec,DH *privkey){		struct sec s;	int secret_size;	/* Send the public key to the peer.	* How this occurs will be specific to your situation (see main text below) */	/* Receive the public key from the peer. In this example we're just hard coding a value */	BIGNUM *pubkey = NULL;	if(0 == (BN_dec2bn(&pubkey, pubkeyRec))) handleErrors();	/* Compute the shared secret */	unsigned char *secret;	if(NULL == (secret = OPENSSL_malloc(sizeof(unsigned char) * (DH_size(privkey))))) handleErrors();	if(0 > (secret_size = DH_compute_key(secret, pubkey, privkey))) handleErrors();	/* Do something with the shared secret */	/* Note secret_size may be less than DH_size(privkey) */	printf("The shared secret is:/n");		strcpy(s.value,secret);	s.length=secret_size;	/* Clean up */	OPENSSL_free(secret);	BN_free(pubkey);	DH_free(privkey);	return s;}
开发者ID:deepanshululla,项目名称:Network-security,代码行数:31,


示例12: tr_compute_dh_key

int tr_compute_dh_key(unsigned char **pbuf,		      BIGNUM *pub_key,		      DH *priv_dh) {  size_t buflen;  unsigned char *buf = NULL;;  int rc = 0;  if ((!pbuf) ||      (!pub_key) ||      (!priv_dh)) {    tr_debug("tr_compute_dh_key: Invalid parameters.");    return(-1);  }  *pbuf = NULL;  buflen = DH_size(priv_dh);  buf = malloc(buflen);  if (buf == NULL) {    tr_crit("tr_compute_dh_key: out of memory");    return -1;  }  rc = DH_compute_key(buf, pub_key, priv_dh);  if (0 <= rc) {    *pbuf = buf;  }else {    free(buf);  }  return rc;}
开发者ID:spaetow,项目名称:trust_router,代码行数:30,


示例13: usmDHSetKey

intusmDHSetKey(struct usmUser *user, int for_auth_key,            u_char *val, size_t val_len){    DH             *dh;    BIGNUM         *other_pub;    u_char         *key;    size_t          key_len;    DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHSetKey", "called/n"));    /*     * XXX: mem leaks on errors abound      */    dh = usmDHGetUserDHptr(user, for_auth_key);    if (!dh)        return MFD_ERROR;    other_pub = BN_bin2bn(val + val_len / 2, val_len / 2, NULL);    if (!other_pub)        return MFD_ERROR;    /*     * Set the new key for a user      */    key_len = DH_size(dh);    key = malloc(DH_size(dh));    if (!key)        return MFD_ERROR;    if (DH_compute_key(key, other_pub, dh)) {        u_char        **replkey;        size_t          replkey_size;        if (for_auth_key) {            replkey_size = user->authKeyLen;            replkey = &user->authKey;        } else {            replkey_size = user->privKeyLen;            replkey = &user->privKey;        }        /*         * is it large enough?          */        if (key_len < replkey_size)            return MFD_ERROR;        /*         * copy right most bits, per the object requirements          */        SNMP_FREE(*replkey);        memdup(replkey, key + key_len - replkey_size, replkey_size);        return MFD_SUCCESS;    }    return MFD_ERROR;}
开发者ID:schestowitz,项目名称:Cyrus,代码行数:59,


示例14: generate_dh_keyblock

static krb5_error_codegenerate_dh_keyblock(krb5_context context, pk_client_params *client_params,                     krb5_enctype enctype, krb5_keyblock *reply_key){    unsigned char *dh_gen_key = NULL;    krb5_keyblock key;    krb5_error_code ret;    size_t dh_gen_keylen, size;    memset(&key, 0, sizeof(key));    if (!DH_generate_key(client_params->dh)) {	ret = KRB5KRB_ERR_GENERIC;	krb5_set_error_message(context, ret, "Can't generate Diffie-Hellman keys");	goto out;    }    if (client_params->dh_public_key == NULL) {	ret = KRB5KRB_ERR_GENERIC;	krb5_set_error_message(context, ret, "dh_public_key");	goto out;    }    dh_gen_keylen = DH_size(client_params->dh);    size = BN_num_bytes(client_params->dh->p);    if (size < dh_gen_keylen)	size = dh_gen_keylen;    dh_gen_key = malloc(size);    if (dh_gen_key == NULL) {	ret = ENOMEM;	krb5_set_error_message(context, ret, "malloc: out of memory");	goto out;    }    memset(dh_gen_key, 0, size - dh_gen_keylen);    dh_gen_keylen = DH_compute_key(dh_gen_key + (size - dh_gen_keylen),				   client_params->dh_public_key,				   client_params->dh);    if (dh_gen_keylen == -1) {	ret = KRB5KRB_ERR_GENERIC;	krb5_set_error_message(context, ret, "Can't compute Diffie-Hellman key");	goto out;    }    ret = _krb5_pk_octetstring2key(context,				   enctype,				   dh_gen_key, dh_gen_keylen,				   NULL, NULL,				   reply_key); out:    if (dh_gen_key)	free(dh_gen_key);    if (key.keyvalue.data)	krb5_free_keyblock_contents(context, &key);    return ret;}
开发者ID:gojdic,项目名称:samba,代码行数:58,


示例15: assert

	// compute shared secret given remote public key	void DH_key_exchange::compute_secret (char const* remote_pubkey)	{		assert (remote_pubkey);		BIGNUM* bn_remote_pubkey = BN_bin2bn ((unsigned char*)remote_pubkey, 96, NULL);		int ret = 			DH_compute_key ( (unsigned char*)m_dh_secret, bn_remote_pubkey, m_DH); // TODO Check for errors		BN_free (bn_remote_pubkey);	}
开发者ID:codeboost,项目名称:libertv,代码行数:11,


示例16: DHKeyFree

int CDiffeHellman::GenPubKeyAndDHKey(const char* pszKey, char* pszPubKey, int &iPubLen,		uint8_t* pucDHKey, int &iKeyLen){	if(m_isInit)	{		return RT_DH_DH_NOT_INIT;	}	if(!DH_generate_key(m_pDH))	{		DHKeyFree();		return RT_DH_GEN_PUB_KEY;	}	/* 生成公共的key */	char *pKey       = BN_bn2hex(m_pDH->pub_key);	int  iPubKeyLen  = strlen(pKey);	if(iPubKeyLen > iPubLen)	{		OPENSSL_free(pKey);		DHKeyFree();		return RT_DH_PUB_KEY_BUFF_LEN;	}	iPubLen = iPubKeyLen;	memcpy(pszPubKey, pKey, iPubLen);	OPENSSL_free(pKey);	/* 生成DH key */	if(BN_hex2bn(&m_pPBig, pszKey) <= 0)	{		DHKeyFree();		return RT_DH_INVALID_PUB_KEY;	}	uint8_t aucDHKey[1024] = { 0 };	int iDHKeyLen = DH_compute_key(aucDHKey, m_pPBig, m_pDH);	if(iDHKeyLen <= 0)	{		DHKeyFree();		return RT_DH_GEN_DH_KEY;	}	if(iKeyLen < iDHKeyLen)	{		DHKeyFree();		return RT_DH_DH_KEY_BUFF_LEN;	}	iKeyLen = iDHKeyLen;	memcpy(pucDHKey, aucDHKey, iDHKeyLen);	DHKeyFree();	return RT_DH_SUCCESS;}
开发者ID:businiaowyf,项目名称:mycode,代码行数:54,


示例17: compute_pair_key_le

/* Computes Diffie-Hellman key and stores it into buffer in * little-endian byte order as expected by both versions of GOST 94 * algorithm */static int compute_pair_key_le(unsigned char *pair_key,BIGNUM *pub_key,DH *dh) 	{	unsigned char be_key[128];	int i,key_size;	key_size=DH_compute_key(be_key,pub_key,dh);	if (!key_size) return 0;	TINYCLR_SSL_MEMSET(pair_key,0,128);	for (i=0;i<key_size;i++)		{		pair_key[i]=be_key[key_size-1-i];		}	return key_size;		}	
开发者ID:Wampamba-Nooh,项目名称:MicroFrameworkSDK-Mono,代码行数:17,


示例18: assert

		size_t dh_key::compute_key(void* out, size_t out_len, bn::bignum pub_key) const		{			assert(out_len >= size());			if (out_len < size())			{				throw std::invalid_argument("out_len");			}			int result = DH_compute_key(static_cast<unsigned char*>(out), pub_key.raw(), ptr().get());			throw_error_if_not(result >= 0);			return result;		}
开发者ID:Cyarix,项目名称:freelan,代码行数:15,


示例19: DH_new

std::string avjackif::async_client_hello(boost::asio::yield_context yield_context){	proto::client_hello client_hello;	client_hello.set_client("avim");	client_hello.set_version(0001);	unsigned char to[512];	auto dh = DH_new();	DH_generate_parameters_ex(dh,64,DH_GENERATOR_5,NULL);	DH_generate_key(dh);	// 把 g,p, pubkey 传过去	client_hello.set_random_g((const void*)to, BN_bn2bin(dh->g, to));	client_hello.set_random_p((const void*)to, BN_bn2bin(dh->p, to));	client_hello.set_random_pub_key((const void*)to, BN_bn2bin(dh->pub_key, to));	auto tobesend = av_router::encode(client_hello);	boost::asio::async_write(*m_sock, boost::asio::buffer(tobesend), yield_context);	// 解码	std::unique_ptr<proto::server_hello> server_hello(		(proto::server_hello*)async_read_protobuf_message(*m_sock, yield_context));	m_remote_addr.reset(new proto::av_address(		av_address_from_string(server_hello->server_av_address())));	auto server_pubkey = BN_bin2bn((const unsigned char *) server_hello->random_pub_key().data(),		server_hello->random_pub_key().length(), NULL);	m_shared_key.resize(DH_size(dh));	// 密钥就算出来啦!	DH_compute_key(&m_shared_key[0], server_pubkey, dh);	BN_free(server_pubkey);    std::printf("key = 0x");    for (int i=0; i<DH_size(dh); ++i)	{        std::printf("%x%x", (m_shared_key[i] >> 4) & 0xf, m_shared_key[i] & 0xf);    }    std::printf("/n");	DH_free(dh);	return server_hello->random_pub_key();}
开发者ID:leangjia,项目名称:avim,代码行数:46,


示例20: DhComputeKey

/**  Computes exchanged common key.  Given peer's public key, this function computes the exchanged common key, based on its own  context including value of prime modulus and random secret exponent.  If DhContext is NULL, then return FALSE.  If PeerPublicKey is NULL, then return FALSE.  If KeySize is NULL, then return FALSE.  If Key is NULL, then return FALSE.  If KeySize is not large enough, then return FALSE.  @param[in, out]  DhContext          Pointer to the DH context.  @param[in]       PeerPublicKey      Pointer to the peer's public key.  @param[in]       PeerPublicKeySize  Size of peer's public key in bytes.  @param[out]      Key                Pointer to the buffer to receive generated key.  @param[in, out]  KeySize            On input, the size of Key buffer in bytes.                                      On output, the size of data returned in Key buffer in bytes.  @retval TRUE   DH exchanged key generation succeeded.  @retval FALSE  DH exchanged key generation failed.  @retval FALSE  KeySize is not large enough.**/BOOLEANEFIAPIDhComputeKey (  IN OUT  VOID         *DhContext,  IN      CONST UINT8  *PeerPublicKey,  IN      UINTN        PeerPublicKeySize,  OUT     UINT8        *Key,  IN OUT  UINTN        *KeySize  ){  BIGNUM  *Bn;  INTN    Size;  //  // Check input parameters.  //  if (DhContext == NULL || PeerPublicKey == NULL || KeySize == NULL || Key == NULL) {    return FALSE;  }  if (PeerPublicKeySize > INT_MAX) {    return FALSE;  }  Bn = BN_bin2bn (PeerPublicKey, (UINT32) PeerPublicKeySize, NULL);  if (Bn == NULL) {    return FALSE;  }  Size = DH_compute_key (Key, Bn, DhContext);  if (Size < 0) {    BN_free (Bn);    return FALSE;  }  if (*KeySize < (UINTN) Size) {    *KeySize = Size;    BN_free (Bn);    return FALSE;  }  *KeySize = Size;  BN_free (Bn);  return TRUE;}
开发者ID:lersek,项目名称:edk2,代码行数:69,


示例21: s2n_dh_compute_shared_secret_as_client

int s2n_dh_compute_shared_secret_as_client(struct s2n_dh_params *server_dh_params, struct s2n_stuffer *Yc_out, struct s2n_blob *shared_key){    struct s2n_dh_params client_params;    uint8_t *client_pub_key;    uint16_t client_pub_key_size;    int shared_key_size;    GUARD(s2n_dh_params_check(server_dh_params));    GUARD(s2n_dh_params_copy(server_dh_params, &client_params));    GUARD(s2n_dh_generate_ephemeral_key(&client_params));    GUARD(s2n_alloc(shared_key, DH_size(server_dh_params->dh)));    const BIGNUM *client_pub_key_bn = s2n_get_Ys_dh_param(&client_params);    client_pub_key_size = BN_num_bytes(client_pub_key_bn);    GUARD(s2n_stuffer_write_uint16(Yc_out, client_pub_key_size));    client_pub_key = s2n_stuffer_raw_write(Yc_out, client_pub_key_size);    if (client_pub_key == NULL) {        GUARD(s2n_free(shared_key));        GUARD(s2n_dh_params_free(&client_params));        S2N_ERROR(S2N_ERR_DH_WRITING_PUBLIC_KEY);    }    if (BN_bn2bin(client_pub_key_bn, client_pub_key) != client_pub_key_size) {        GUARD(s2n_free(shared_key));        GUARD(s2n_dh_params_free(&client_params));        S2N_ERROR(S2N_ERR_DH_COPYING_PUBLIC_KEY);    }    /* server_dh_params already validated */    const BIGNUM *server_pub_key_bn = s2n_get_Ys_dh_param(server_dh_params);    shared_key_size = DH_compute_key(shared_key->data, server_pub_key_bn, client_params.dh);    if (shared_key_size < 0) {        GUARD(s2n_free(shared_key));        GUARD(s2n_dh_params_free(&client_params));        S2N_ERROR(S2N_ERR_DH_SHARED_SECRET);    }    shared_key->size = shared_key_size;    GUARD(s2n_dh_params_free(&client_params));    return 0;}
开发者ID:raycoll,项目名称:s2n,代码行数:43,


示例22: ERROR_MSG

bool OSSLDH::deriveKey(SymmetricKey **ppSymmetricKey, PublicKey* publicKey, PrivateKey* privateKey){	// Check parameters	if ((ppSymmetricKey == NULL) ||	    (publicKey == NULL) ||	    (privateKey == NULL))	{		return false;	}	// Get keys	DH *pub = ((OSSLDHPublicKey *)publicKey)->getOSSLKey();	DH *priv = ((OSSLDHPrivateKey *)privateKey)->getOSSLKey();	if (pub == NULL || pub->pub_key == NULL || priv == NULL)	{		ERROR_MSG("Failed to get OpenSSL DH keys");		return false;	}	// Derive the secret	ByteString secret;	secret.resize(DH_size(priv));;	if (DH_compute_key(&secret[0], pub->pub_key, priv) <= 0)	{		ERROR_MSG("DH key derivation failed (0x%08X)", ERR_get_error());		return false;	}	*ppSymmetricKey = new SymmetricKey;	if (*ppSymmetricKey == NULL)		return false;	if (!(*ppSymmetricKey)->setKeyBits(secret))	{		delete *ppSymmetricKey;		*ppSymmetricKey = NULL;		return false;	}	return true;}
开发者ID:rene-post,项目名称:SoftHSMv2,代码行数:43,


示例23: compute_shared_secret

int Condor_Diffie_Hellman :: compute_shared_secret(const char * pk){    // the input pk is assumed to be an encoded string representing    // the binary data for the remote party's public key -- y (or x)    // the local DH knows about g and x, now, it will compute    // (g^x)^y, or (g^y)^x    BIGNUM * remote_pubKey = NULL;    if (BN_hex2bn(&remote_pubKey, pk) == 0) {        dprintf(D_ALWAYS, "Unable to obtain remote public key/n");        goto error;    }    if ((dh_ != NULL) && (remote_pubKey != NULL)) {        secret_ = (unsigned char *) malloc(DH_size(dh_));        // Now compute        keySize_ = DH_compute_key(secret_, remote_pubKey, dh_);        BN_clear_free(remote_pubKey);        if (keySize_ == -1) {            dprintf(D_ALWAYS, "Unable to compute shared secret/n");            goto error;        }    }       else {        goto error;    }    return 1; error:    if (remote_pubKey) {        BN_clear_free(remote_pubKey);    }    if (secret_) {        free(secret_);        secret_ = NULL;    }    return 0;}
开发者ID:AlainRoy,项目名称:htcondor,代码行数:42,


示例24: ossl_dh_compute_key

/* *  call-seq: *     dh.compute_key(pub_bn) -> aString * * Returns a String containing a shared secret computed from the other party's public value. * See DH_compute_key() for further information. * * === Parameters * * +pub_bn+ is a OpenSSL::BN, *not* the DH instance returned by * DH#public_key as that contains the DH parameters only. */static VALUEossl_dh_compute_key(VALUE self, VALUE pub){    DH *dh;    EVP_PKEY *pkey;    BIGNUM *pub_key;    VALUE str;    int len;    GetPKeyDH(self, pkey);    dh = pkey->pkey.dh;    pub_key = GetBNPtr(pub);    len = DH_size(dh);    str = rb_str_new(0, len);    if ((len = DH_compute_key((unsigned char *)RSTRING_PTR(str), pub_key, dh)) < 0) {	ossl_raise(eDHError, NULL);    }    rb_str_set_len(str, len);    return str;}
开发者ID:graalvm,项目名称:jrubytruffle,代码行数:32,


示例25: finishDiffieHellman

//terminar DiffieHellmanint	finishDiffieHellman(DH *dh, char* messageReceived,int  messageSize,unsigned char* masterKey){	char pubKeyString[MASTER_KEY_SIZE];	int result;	BIGNUM *pubKey;	result = messageGetSingleValue(messageReceived, messageSize, 		"/diffie-hellman/B/text()",pubKeyString, MASTER_KEY_SIZE,1);	if (result < 0) return -1;	pubKey = BN_new();	result = BN_hex2bn(&pubKey, pubKeyString);	if (result < 0) return -1;		result = DH_compute_key(masterKey, pubKey, dh);	if (result < 0) return -1;	BN_free(pubKey);		return result;}
开发者ID:CCardosoDev,项目名称:LinuxActivityLog,代码行数:22,


示例26: telex_get_shared_secret

// shared_secret should be allocated to hold at least 128-bytes (256-bytes for 2048 bit dh).// given the priv_key from the client, the agreed upon modulus p, and the server's dh_pub_key,// this will generate the shared secretint telex_get_shared_secret(BIGNUM *client_dh_priv_key, BIGNUM *p, BIGNUM *server_dh_pub_key, char *shared_secret){    //server_dh_pub_key ^ client_dh_priv_key % p    int n;    DH *dh_clnt;    dh_clnt = DH_new(); // Sets dh_clnt->meth.    if (!dh_clnt) {        printf("Error: can't DH_new() in telex_get_shared_secret/n");        return -1;    }    dh_clnt->p = p;    dh_clnt->priv_key = client_dh_priv_key;    n = DH_compute_key((unsigned char*)shared_secret, server_dh_pub_key, dh_clnt);     DH_free(dh_clnt);    return n;}
开发者ID:ewust,项目名称:tapdance,代码行数:24,



注:本文中的DH_compute_key函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ DH_generate_key函数代码示例
C++ DH_check函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。