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

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

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

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

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

示例1: PKCS12_key_gen_uni

int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt,                       int saltlen, int id, int iter, int n,                       unsigned char *out, const EVP_MD *md_type){    unsigned char *B, *D, *I, *p, *Ai;    int Slen, Plen, Ilen, Ijlen;    int i, j, u, v;    int ret = 0;    BIGNUM *Ij, *Bpl1;          /* These hold Ij and B + 1 */    EVP_MD_CTX ctx;#ifdef  DEBUG_KEYGEN    unsigned char *tmpout = out;    int tmpn = n;#endif    EVP_MD_CTX_init(&ctx);#ifdef  DEBUG_KEYGEN    fprintf(stderr, "KEYGEN DEBUG/n");    fprintf(stderr, "ID %d, ITER %d/n", id, iter);    fprintf(stderr, "Password (length %d):/n", passlen);    h__dump(pass, passlen);    fprintf(stderr, "Salt (length %d):/n", saltlen);    h__dump(salt, saltlen);#endif    v = EVP_MD_block_size(md_type);    u = EVP_MD_size(md_type);    if (u < 0)        return 0;    D = OPENSSL_malloc(v);    Ai = OPENSSL_malloc(u);    B = OPENSSL_malloc(v + 1);    Slen = v * ((saltlen + v - 1) / v);    if (passlen)        Plen = v * ((passlen + v - 1) / v);    else        Plen = 0;    Ilen = Slen + Plen;    I = OPENSSL_malloc(Ilen);    Ij = BN_new();    Bpl1 = BN_new();    if (!D || !Ai || !B || !I || !Ij || !Bpl1)        goto err;    for (i = 0; i < v; i++)        D[i] = id;    p = I;    for (i = 0; i < Slen; i++)        *p++ = salt[i % saltlen];    for (i = 0; i < Plen; i++)        *p++ = pass[i % passlen];    for (;;) {        if (!EVP_DigestInit_ex(&ctx, md_type, NULL)            || !EVP_DigestUpdate(&ctx, D, v)            || !EVP_DigestUpdate(&ctx, I, Ilen)            || !EVP_DigestFinal_ex(&ctx, Ai, NULL))            goto err;        for (j = 1; j < iter; j++) {            if (!EVP_DigestInit_ex(&ctx, md_type, NULL)                || !EVP_DigestUpdate(&ctx, Ai, u)                || !EVP_DigestFinal_ex(&ctx, Ai, NULL))                goto err;        }        memcpy(out, Ai, min(n, u));        if (u >= n) {#ifdef DEBUG_KEYGEN            fprintf(stderr, "Output KEY (length %d)/n", tmpn);            h__dump(tmpout, tmpn);#endif            ret = 1;            goto end;        }        n -= u;        out += u;        for (j = 0; j < v; j++)            B[j] = Ai[j % u];        /* Work out B + 1 first then can use B as tmp space */        if (!BN_bin2bn(B, v, Bpl1))            goto err;        if (!BN_add_word(Bpl1, 1))            goto err;        for (j = 0; j < Ilen; j += v) {            if (!BN_bin2bn(I + j, v, Ij))                goto err;            if (!BN_add(Ij, Ij, Bpl1))                goto err;            if (!BN_bn2bin(Ij, B))                goto err;            Ijlen = BN_num_bytes(Ij);            /* If more than 2^(v*8) - 1 cut off MSB */            if (Ijlen > v) {                if (!BN_bn2bin(Ij, B))                    goto err;                memcpy(I + j, B + 1, v);#ifndef PKCS12_BROKEN_KEYGEN                /* If less than v bytes pad with zeroes */            } else if (Ijlen < v) {                memset(I + j, 0, v - Ijlen);                if (!BN_bn2bin(Ij, I + j + v - Ijlen))                    goto err;#endif            } else if (!BN_bn2bin(Ij, I + j))//.........这里部分代码省略.........
开发者ID:375670450,项目名称:openssl,代码行数:101,


示例2: tls1_P_hash

/* seed1 through seed5 are virtually concatenated */static int tls1_P_hash(const EVP_MD *md, const unsigned char *sec,			int sec_len,			const void *seed1, int seed1_len,			const void *seed2, int seed2_len,			const void *seed3, int seed3_len,			const void *seed4, int seed4_len,			const void *seed5, int seed5_len,			unsigned char *out, int olen)	{	int chunk;	size_t j;	EVP_MD_CTX ctx, ctx_tmp;	EVP_PKEY *mac_key;	unsigned char A1[EVP_MAX_MD_SIZE];	size_t A1_len;	int ret = 0;		chunk=EVP_MD_size(md);	OPENSSL_assert(chunk >= 0);	EVP_MD_CTX_init(&ctx);	EVP_MD_CTX_init(&ctx_tmp);	EVP_MD_CTX_set_flags(&ctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW);	EVP_MD_CTX_set_flags(&ctx_tmp, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW);	mac_key = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, NULL, sec, sec_len);	if (!mac_key)		goto err;	if (!EVP_DigestSignInit(&ctx,NULL,md, NULL, mac_key))		goto err;	if (!EVP_DigestSignInit(&ctx_tmp,NULL,md, NULL, mac_key))		goto err;	if (seed1 && !EVP_DigestSignUpdate(&ctx,seed1,seed1_len))		goto err;	if (seed2 && !EVP_DigestSignUpdate(&ctx,seed2,seed2_len))		goto err;	if (seed3 && !EVP_DigestSignUpdate(&ctx,seed3,seed3_len))		goto err;	if (seed4 && !EVP_DigestSignUpdate(&ctx,seed4,seed4_len))		goto err;	if (seed5 && !EVP_DigestSignUpdate(&ctx,seed5,seed5_len))		goto err;	if (!EVP_DigestSignFinal(&ctx,A1,&A1_len))		goto err;	for (;;)		{		/* Reinit mac contexts */		if (!EVP_DigestSignInit(&ctx,NULL,md, NULL, mac_key))			goto err;		if (!EVP_DigestSignInit(&ctx_tmp,NULL,md, NULL, mac_key))			goto err;		if (!EVP_DigestSignUpdate(&ctx,A1,A1_len))			goto err;		if (!EVP_DigestSignUpdate(&ctx_tmp,A1,A1_len))			goto err;		if (seed1 && !EVP_DigestSignUpdate(&ctx,seed1,seed1_len))			goto err;		if (seed2 && !EVP_DigestSignUpdate(&ctx,seed2,seed2_len))			goto err;		if (seed3 && !EVP_DigestSignUpdate(&ctx,seed3,seed3_len))			goto err;		if (seed4 && !EVP_DigestSignUpdate(&ctx,seed4,seed4_len))			goto err;		if (seed5 && !EVP_DigestSignUpdate(&ctx,seed5,seed5_len))			goto err;		if (olen > chunk)			{			if (!EVP_DigestSignFinal(&ctx,out,&j))				goto err;			out+=j;			olen-=j;			/* calc the next A1 value */			if (!EVP_DigestSignFinal(&ctx_tmp,A1,&A1_len))				goto err;			}		else	/* last one */			{			if (!EVP_DigestSignFinal(&ctx,A1,&A1_len))				goto err;			memcpy(out,A1,olen);			break;			}		}	ret = 1;err:	EVP_PKEY_free(mac_key);	EVP_MD_CTX_cleanup(&ctx);	EVP_MD_CTX_cleanup(&ctx_tmp);	OPENSSL_cleanse(A1,sizeof(A1));	return ret;	}
开发者ID:bingos,项目名称:bitrig,代码行数:93,


示例3: PKCS7_signatureVerify

int PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si,                          X509 *x509){    ASN1_OCTET_STRING *os;    EVP_MD_CTX mdc_tmp, *mdc;    int ret = 0, i;    int md_type;    STACK_OF(X509_ATTRIBUTE) *sk;    BIO *btmp;    EVP_PKEY *pkey;    EVP_MD_CTX_init(&mdc_tmp);    if (!PKCS7_type_is_signed(p7) && !PKCS7_type_is_signedAndEnveloped(p7)) {        PKCS7err(PKCS7_F_PKCS7_SIGNATUREVERIFY, PKCS7_R_WRONG_PKCS7_TYPE);        goto err;    }    md_type = OBJ_obj2nid(si->digest_alg->algorithm);    btmp = bio;    for (;;) {        if ((btmp == NULL) ||            ((btmp = BIO_find_type(btmp, BIO_TYPE_MD)) == NULL)) {            PKCS7err(PKCS7_F_PKCS7_SIGNATUREVERIFY,                     PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST);            goto err;        }        BIO_get_md_ctx(btmp, &mdc);        if (mdc == NULL) {            PKCS7err(PKCS7_F_PKCS7_SIGNATUREVERIFY, ERR_R_INTERNAL_ERROR);            goto err;        }        if (EVP_MD_CTX_type(mdc) == md_type)            break;        /*         * Workaround for some broken clients that put the signature OID         * instead of the digest OID in digest_alg->algorithm         */        if (EVP_MD_pkey_type(EVP_MD_CTX_md(mdc)) == md_type)            break;        btmp = BIO_next(btmp);    }    /*     * mdc is the digest ctx that we want, unless there are attributes, in     * which case the digest is the signed attributes     */    if (!EVP_MD_CTX_copy_ex(&mdc_tmp, mdc))        goto err;    sk = si->auth_attr;    if ((sk != NULL) && (sk_X509_ATTRIBUTE_num(sk) != 0)) {        unsigned char md_dat[EVP_MAX_MD_SIZE], *abuf = NULL;        unsigned int md_len;        int alen;        ASN1_OCTET_STRING *message_digest;        if (!EVP_DigestFinal_ex(&mdc_tmp, md_dat, &md_len))            goto err;        message_digest = PKCS7_digest_from_attributes(sk);        if (!message_digest) {            PKCS7err(PKCS7_F_PKCS7_SIGNATUREVERIFY,                     PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST);            goto err;        }        if ((message_digest->length != (int)md_len) ||            (memcmp(message_digest->data, md_dat, md_len))) {            PKCS7err(PKCS7_F_PKCS7_SIGNATUREVERIFY, PKCS7_R_DIGEST_FAILURE);            ret = -1;            goto err;        }        if (!EVP_VerifyInit_ex(&mdc_tmp, EVP_get_digestbynid(md_type), NULL))            goto err;        alen = ASN1_item_i2d((ASN1_VALUE *)sk, &abuf,                             ASN1_ITEM_rptr(PKCS7_ATTR_VERIFY));        if (alen <= 0) {            PKCS7err(PKCS7_F_PKCS7_SIGNATUREVERIFY, ERR_R_ASN1_LIB);            ret = -1;            goto err;        }        if (!EVP_VerifyUpdate(&mdc_tmp, abuf, alen))            goto err;        OPENSSL_free(abuf);    }    os = si->enc_digest;    pkey = X509_get_pubkey(x509);    if (!pkey) {        ret = -1;        goto err;    }    i = EVP_VerifyFinal(&mdc_tmp, os->data, os->length, pkey);    EVP_PKEY_free(pkey);    if (i <= 0) {        PKCS7err(PKCS7_F_PKCS7_SIGNATUREVERIFY, PKCS7_R_SIGNATURE_FAILURE);//.........这里部分代码省略.........
开发者ID:AmesianX,项目名称:openssl,代码行数:101,


示例4: _getCertificateDigest

/** * Funkcja generuje skrót z certyfikatu wykorzystuj
C++ EVP_MD_CTX_md函数代码示例
C++ EVP_MD_CTX_free函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。