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

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

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

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

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

示例1: digiSign

//Create base 64 encoded digital signature of given databool digiSign(StringBuffer &b64Signature, size32_t dataSz, const void *data, const CLoadedKey &signingKey){    OwnedEVPMdCtx signingCtx(EVP_MD_CTX_create());    //initialize context for SHA-256 hashing function    int rc = EVP_DigestSignInit(signingCtx, nullptr, EVP_sha256(), nullptr, signingKey);    if (rc <= 0)        throwEVPException(-1, "digiSign:EVP_DigestSignInit");    //add string to the context    if (EVP_DigestSignUpdate(signingCtx, data, dataSz) <= 0)        throwEVPException(-1, "digiSign:EVP_DigestSignUpdate");    //compute length of signature    size_t encMsgLen;    if (EVP_DigestSignFinal(signingCtx, nullptr, &encMsgLen) <= 0)        throwEVPException(-1, "digiSign:EVP_DigestSignFinal1");    if (encMsgLen == 0)        throwEVPException(-1, "digiSign:EVP_DigestSignFinal length returned 0");    //compute signature (signed digest)    OwnedEVPMemory encMsg = OPENSSL_malloc(encMsgLen);    if (encMsg == nullptr)        throw MakeStringException(-1, "digiSign:OPENSSL_malloc(%u) returned NULL", (unsigned)encMsgLen);    if (EVP_DigestSignFinal(signingCtx, (unsigned char *)encMsg.get(), &encMsgLen) <= 0)        throwEVPException(-1, "digiSign:EVP_DigestSignFinal2");    //convert to base64    JBASE64_Encode(encMsg, encMsgLen, b64Signature, false);    return true;}
开发者ID:Michael-Gardner,项目名称:HPCC-Platform,代码行数:34,


示例2: PKCS7_SIGNER_INFO_sign_0

static int PKCS7_SIGNER_INFO_sign_0(PKCS7_SIGNER_INFO *si){  EVP_MD_CTX mctx;  EVP_PKEY_CTX *pctx;  unsigned char *abuf = NULL;  int alen;  size_t siglen;  const EVP_MD *md = NULL;  md = EVP_get_digestbyobj(si->digest_alg->algorithm);  if (md == NULL)    return 0;  EVP_MD_CTX_init(&mctx);  if (EVP_DigestSignInit(&mctx, &pctx, md, NULL, si->pkey) <= 0)    goto err;  if (EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_SIGN,                        EVP_PKEY_CTRL_PKCS7_SIGN, 0, si) <= 0)  {    PKCS7err(PKCS7_F_PKCS7_SIGNER_INFO_SIGN, PKCS7_R_CTRL_ERROR);    goto err;  }  alen = ASN1_item_i2d((ASN1_VALUE *) si->auth_attr, &abuf,                       ASN1_ITEM_rptr(PKCS7_ATTR_SIGN));  if (!abuf)    goto err;  if (EVP_DigestSignUpdate(&mctx, abuf, alen) <= 0)    goto err;  OPENSSL_free(abuf);  abuf = NULL;  if (EVP_DigestSignFinal(&mctx, NULL, &siglen) <= 0)    goto err;  abuf = OPENSSL_malloc(siglen);  if (!abuf)    goto err;  if (EVP_DigestSignFinal(&mctx, abuf, &siglen) <= 0)    goto err;  if (EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_SIGN,                        EVP_PKEY_CTRL_PKCS7_SIGN, 1, si) <= 0)  {    PKCS7err(PKCS7_F_PKCS7_SIGNER_INFO_SIGN, PKCS7_R_CTRL_ERROR);    goto err;  }  EVP_MD_CTX_cleanup(&mctx);  ASN1_STRING_set0(si->enc_digest, abuf, siglen);  return 1;err:  if (abuf)    OPENSSL_free(abuf);  EVP_MD_CTX_cleanup(&mctx);  return 0;}
开发者ID:chk-jxcn,项目名称:lua-openssl,代码行数:60,


示例3: RSA_PKCS1_sign

Handle<std::string> RSA_PKCS1_sign(Handle<ScopedEVP_PKEY> hKey, const EVP_MD *md, Handle<std::string> hData) {    LOG_FUNC();    ScopedEVP_MD_CTX ctx(EVP_MD_CTX_create());    EVP_PKEY_CTX* pctx = nullptr;    size_t siglen = 0;    if (ctx.isEmpty() ||            !EVP_DigestSignInit(ctx.Get(), &pctx, md, nullptr, hKey->Get())) {        THROW_OPENSSL("EVP_DigestSignInit");    }    byte* data = (byte*)hData->c_str();    size_t datalen = hData->length();    if (1 != EVP_DigestSignUpdate(ctx.Get(), data, datalen)) {        THROW_OPENSSL("EVP_DigestSignUpdate");    }    if (1 != EVP_DigestSignFinal(ctx.Get(), nullptr, &siglen)) {        THROW_OPENSSL("EVP_DigestSignFinal");    }    Handle<std::string> hOutput(new std::string());    hOutput->resize(siglen);    byte *output = (byte*)hOutput->c_str();    if (!EVP_DigestSignFinal(ctx.Get(), output, &siglen))        THROW_OPENSSL("EVP_DigestSignFinal");    return hOutput;}
开发者ID:kiskovacs,项目名称:node-webcrypto-ossl,代码行数:31,


示例4: signMsgRSA

int signMsgRSA(EVP_PKEY* key, const unsigned char* msg, 	unsigned char** sig, size_t* slen, size_t msglen){		EVP_MD_CTX* ctx = NULL;	const EVP_MD* md = NULL;		if(msg == NULL || sig == NULL || slen == NULL)		return 0;	ctx = EVP_MD_CTX_create();	md = EVP_get_digestbyname(hn);	if(md == NULL){		printf("ERR EVP_get_digestbyname/n");		return 0;			}	if(ctx == NULL){		printf("ERR EVP_MD_CTX_create/n");		return 0;			}	if(1 != EVP_DigestInit_ex(ctx, md, NULL)){		printf("ERR EVP_DigestInit_ex/n");		return 0;	}	if(1 != EVP_DigestSignInit(ctx, NULL, md, NULL, key)){		printf("ERR EVP_DigestSignInit/n");		return 0;	}	/*SE FIRMA EL MENSAJE*/	if(1 != EVP_DigestSignUpdate(ctx, msg, msglen)){		printf("ERR EVP_DigestSignUpdate/n");		return 0;	}	if(1 != EVP_DigestSignFinal(ctx, NULL, slen)){		printf("ERR EVP_DigestSignFinal/n");		return 0;		}	*sig = OPENSSL_malloc(*slen);		if(*sig == NULL){		printf("ERR OPENSSL_malloc/n");	}	if(1 != EVP_DigestSignFinal(ctx, *sig, slen)){		printf("ERR EVP_DigestSignFinal/n");		return 0;	}	EVP_MD_CTX_destroy(ctx);	ctx = NULL;	return 1;}
开发者ID:made1993,项目名称:chatlibgroupsig,代码行数:57,


示例5: test_EVP_DigestSignInit

static int test_EVP_DigestSignInit(void) {  int ret = 0;  EVP_PKEY *pkey = NULL;  uint8_t *sig = NULL;  size_t sig_len = 0;  EVP_MD_CTX md_ctx, md_ctx_verify;  EVP_MD_CTX_init(&md_ctx);  EVP_MD_CTX_init(&md_ctx_verify);  pkey = load_example_rsa_key();  if (pkey == NULL ||      !EVP_DigestSignInit(&md_ctx, NULL, EVP_sha256(), NULL, pkey) ||      !EVP_DigestSignUpdate(&md_ctx, kMsg, sizeof(kMsg))) {    goto out;  }  /* Determine the size of the signature. */  if (!EVP_DigestSignFinal(&md_ctx, NULL, &sig_len)) {    goto out;  }  /* Sanity check for testing. */  if (sig_len != EVP_PKEY_size(pkey)) {    fprintf(stderr, "sig_len mismatch/n");    goto out;  }  sig = malloc(sig_len);  if (sig == NULL || !EVP_DigestSignFinal(&md_ctx, sig, &sig_len)) {    goto out;  }  /* Ensure that the signature round-trips. */  if (!EVP_DigestVerifyInit(&md_ctx_verify, NULL, EVP_sha256(), NULL, pkey) ||      !EVP_DigestVerifyUpdate(&md_ctx_verify, kMsg, sizeof(kMsg)) ||      !EVP_DigestVerifyFinal(&md_ctx_verify, sig, sig_len)) {    goto out;  }  ret = 1;out:  if (!ret) {    BIO_print_errors_fp(stderr);  }  EVP_MD_CTX_cleanup(&md_ctx);  EVP_MD_CTX_cleanup(&md_ctx_verify);  if (pkey) {    EVP_PKEY_free(pkey);  }  if (sig) {    free(sig);  }  return ret;}
开发者ID:randombit,项目名称:hacrypto,代码行数:56,


示例6: test_EVP_DigestSignInit

static int test_EVP_DigestSignInit(void){    int ret = 0;    EVP_PKEY *pkey = NULL;    unsigned char *sig = NULL;    size_t sig_len = 0;    EVP_MD_CTX *md_ctx, *md_ctx_verify;    md_ctx = EVP_MD_CTX_new();    md_ctx_verify = EVP_MD_CTX_new();    if (md_ctx == NULL || md_ctx_verify == NULL)        goto out;    pkey = load_example_rsa_key();    if (pkey == NULL ||        !EVP_DigestSignInit(md_ctx, NULL, EVP_sha256(), NULL, pkey) ||        !EVP_DigestSignUpdate(md_ctx, kMsg, sizeof(kMsg))) {        goto out;    }    /* Determine the size of the signature. */    if (!EVP_DigestSignFinal(md_ctx, NULL, &sig_len)) {        goto out;    }    /* Sanity check for testing. */    if (sig_len != (size_t)EVP_PKEY_size(pkey)) {        fprintf(stderr, "sig_len mismatch/n");        goto out;    }    sig = OPENSSL_malloc(sig_len);    if (sig == NULL || !EVP_DigestSignFinal(md_ctx, sig, &sig_len)) {        goto out;    }    /* Ensure that the signature round-trips. */    if (!EVP_DigestVerifyInit(md_ctx_verify, NULL, EVP_sha256(), NULL, pkey)        || !EVP_DigestVerifyUpdate(md_ctx_verify, kMsg, sizeof(kMsg))        || !EVP_DigestVerifyFinal(md_ctx_verify, sig, sig_len)) {        goto out;    }    ret = 1; out:    if (!ret) {        ERR_print_errors_fp(stderr);    }    EVP_MD_CTX_free(md_ctx);    EVP_MD_CTX_free(md_ctx_verify);    EVP_PKEY_free(pkey);    OPENSSL_free(sig);    return ret;}
开发者ID:erbridge,项目名称:openssl,代码行数:55,


示例7: test_algorithm_roundtrip

/* test_algorithm_roundtrip signs a message using an already-initialized * |md_ctx|, sampling the AlgorithmIdentifier. It then uses |pkey| and the * AlgorithmIdentifier to verify the signature. */static int test_algorithm_roundtrip(EVP_MD_CTX *md_ctx, EVP_PKEY *pkey) {  int ret = 0;  uint8_t *sig = NULL;  size_t sig_len = 0;  EVP_MD_CTX md_ctx_verify;  X509_ALGOR *algor = NULL;  EVP_MD_CTX_init(&md_ctx_verify);  if (!EVP_DigestSignUpdate(md_ctx, kMsg, sizeof(kMsg))) {    goto out;  }  /* Save the algorithm. */  algor = X509_ALGOR_new();  if (algor == NULL || !EVP_DigestSignAlgorithm(md_ctx, algor)) {    goto out;  }  /* Determine the size of the signature. */  if (!EVP_DigestSignFinal(md_ctx, NULL, &sig_len)) {    goto out;  }  /* Sanity check for testing. */  if (sig_len != EVP_PKEY_size(pkey)) {    fprintf(stderr, "sig_len mismatch/n");    goto out;  }  sig = malloc(sig_len);  if (sig == NULL || !EVP_DigestSignFinal(md_ctx, sig, &sig_len)) {    goto out;  }  /* Ensure that the signature round-trips. */  if (!EVP_DigestVerifyInitFromAlgorithm(&md_ctx_verify, algor, pkey) ||      !EVP_DigestVerifyUpdate(&md_ctx_verify, kMsg, sizeof(kMsg)) ||      !EVP_DigestVerifyFinal(&md_ctx_verify, sig, sig_len)) {    goto out;  }  ret = 1;out:  EVP_MD_CTX_cleanup(&md_ctx_verify);  if (sig) {    free(sig);  }  if (algor) {    X509_ALGOR_free(algor);  }  return ret;}
开发者ID:randombit,项目名称:hacrypto,代码行数:57,


示例8: sign_it

static int sign_it(const unsigned char *msg, size_t mlen, unsigned char **sig, size_t *slen, EVP_PKEY *pkey) {    int result = GS_FAILED;        *sig = NULL;    *slen = 0;        EVP_MD_CTX *ctx = EVP_MD_CTX_create();    if (ctx == NULL)        return GS_FAILED;        const EVP_MD *md = EVP_get_digestbyname("SHA256");    if (md == NULL)        goto cleanup;        int rc = EVP_DigestInit_ex(ctx, md, NULL);    if (rc != 1)        goto cleanup;        rc = EVP_DigestSignInit(ctx, NULL, md, NULL, pkey);    if (rc != 1)        goto cleanup;        rc = EVP_DigestSignUpdate(ctx, msg, mlen);    if (rc != 1)        goto cleanup;        size_t req = 0;    rc = EVP_DigestSignFinal(ctx, NULL, &req);    if (rc != 1 || !(req > 0))        goto cleanup;        *sig = OPENSSL_malloc(req);    if (*sig == NULL)        goto cleanup;        *slen = req;    rc = EVP_DigestSignFinal(ctx, *sig, slen);    if (rc != 1 || req != *slen)        goto cleanup;        result = GS_OK;    cleanup:    EVP_MD_CTX_destroy(ctx);    ctx = NULL;        return result;}
开发者ID:wk1990ok,项目名称:moonlight-chrome,代码行数:48,


示例9: sign

static int sign(void *ctx,char *file,void *in,int ilen,void *out,int *olen){	int r=NOCARD;	size_t slen=*olen;	ENGINE *e=(ENGINE *)ctx;	EVP_PKEY *key;	EVP_MD_CTX *mdc;	resume_engine(e,engbits);	if(!(key=ENGINE_load_private_key(e,file,NULL,NULL)))goto err1;	r=CRYPTOFAIL;	if(!(mdc=EVP_MD_CTX_create()))goto err2;	if(EVP_DigestInit_ex(mdc,EVP_sha256(),NULL)!=1)goto err3;	if(EVP_DigestSignInit(mdc,NULL,EVP_sha256(),NULL,key)!=1)goto err3;	if(EVP_DigestSignUpdate(mdc,in,ilen)!=1)goto err3;	if(EVP_DigestSignFinal(mdc,out,&slen)!=1)goto err3;	*olen=slen;	r=OK;err3:	EVP_MD_CTX_destroy(mdc);err2:	EVP_PKEY_free(key);err1:	suspend_engine(e,&engbits);	return r;}
开发者ID:not1337,项目名称:pam_pivcard,代码行数:26,


示例10: tls13_final_finish_mac

/* * Generates the mac for the Finished message. Returns the length of the MAC or * 0 on error. */size_t tls13_final_finish_mac(SSL *s, const char *str, size_t slen,                             unsigned char *out){    const EVP_MD *md = ssl_handshake_md(s);    unsigned char hash[EVP_MAX_MD_SIZE];    size_t hashlen, ret = 0;    EVP_PKEY *key = NULL;    EVP_MD_CTX *ctx = EVP_MD_CTX_new();    if (!ssl_handshake_hash(s, hash, sizeof(hash), &hashlen))        goto err;    if (str == s->method->ssl3_enc->server_finished_label)        key = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, NULL,                                   s->server_finished_secret, hashlen);    else        key = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, NULL,                                   s->client_finished_secret, hashlen);    if (key == NULL            || ctx == NULL            || EVP_DigestSignInit(ctx, NULL, md, NULL, key) <= 0            || EVP_DigestSignUpdate(ctx, hash, hashlen) <= 0            || EVP_DigestSignFinal(ctx, out, &hashlen) <= 0)        goto err;    ret = hashlen; err:    EVP_PKEY_free(key);    EVP_MD_CTX_free(ctx);    return ret;}
开发者ID:G-P-S,项目名称:openssl,代码行数:36,


示例11: NDN_THROW

voidSignerFilter::finalize(){  size_t sigLen = 0;  if (EVP_DigestSignFinal(m_impl->ctx, nullptr, &sigLen) != 1)    NDN_THROW(Error(getIndex(), "Failed to estimate buffer length"));  auto buffer = make_unique<OBuffer>(sigLen);  if (EVP_DigestSignFinal(m_impl->ctx, buffer->data(), &sigLen) != 1)    NDN_THROW(Error(getIndex(), "Failed to finalize signature"));  buffer->erase(buffer->begin() + sigLen, buffer->end());  setOutputBuffer(std::move(buffer));  flushAllOutput();}
开发者ID:named-data,项目名称:ndn-cxx,代码行数:16,


示例12: ssl_sign_ecdsa

static int ssl_sign_ecdsa(SSL *ssl, uint8_t *out, size_t *out_len,                          size_t max_out, int curve, const EVP_MD *md,                          const uint8_t *in, size_t in_len) {  EC_KEY *ec_key = EVP_PKEY_get0_EC_KEY(ssl->cert->privatekey);  if (ec_key == NULL) {    OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_SIGNATURE_TYPE);    return 0;  }  /* In TLS 1.3, the curve is also specified by the signature algorithm. */  if (ssl3_protocol_version(ssl) >= TLS1_3_VERSION &&      (curve == NID_undef ||       EC_GROUP_get_curve_name(EC_KEY_get0_group(ec_key)) != curve)) {    OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_SIGNATURE_TYPE);    return 0;  }  EVP_MD_CTX ctx;  EVP_MD_CTX_init(&ctx);  *out_len = max_out;  int ret = EVP_DigestSignInit(&ctx, NULL, md, NULL, ssl->cert->privatekey) &&            EVP_DigestSignUpdate(&ctx, in, in_len) &&            EVP_DigestSignFinal(&ctx, out, out_len);  EVP_MD_CTX_cleanup(&ctx);  return ret;}
开发者ID:baiwyc119,项目名称:proto-quic,代码行数:26,


示例13: s2n_evp_hmac_p_hash_digest

static int s2n_evp_hmac_p_hash_digest(struct s2n_prf_working_space *ws, void *digest, uint32_t size){    /* EVP_DigestSign API's require size_t data structures */    size_t digest_size = size;    GUARD_OSSL(EVP_DigestSignFinal(ws->tls.p_hash.evp_hmac.evp_digest.ctx, (unsigned char *)digest, &digest_size), S2N_ERR_P_HASH_FINAL_FAILED);    return 0;}
开发者ID:alexw91,项目名称:s2n,代码行数:9,


示例14: EVP_DigestSign

int EVP_DigestSign(EVP_MD_CTX *ctx, unsigned char *sigret, size_t *siglen,                   const unsigned char *tbs, size_t tbslen){    if (ctx->pctx->pmeth->digestsign != NULL)        return ctx->pctx->pmeth->digestsign(ctx, sigret, siglen, tbs, tbslen);    if (sigret != NULL && EVP_DigestSignUpdate(ctx, tbs, tbslen) <= 0)        return 0;    return EVP_DigestSignFinal(ctx, sigret, siglen);}
开发者ID:Bilibili,项目名称:openssl,代码行数:9,


示例15: test_EVP_DigestSignInit

static int test_EVP_DigestSignInit(void){    int ret = 0;    EVP_PKEY *pkey = NULL;    unsigned char *sig = NULL;    size_t sig_len = 0;    EVP_MD_CTX *md_ctx, *md_ctx_verify = NULL;    if (!TEST_ptr(md_ctx = EVP_MD_CTX_new())            || !TEST_ptr(md_ctx_verify = EVP_MD_CTX_new())            || !TEST_ptr(pkey = load_example_rsa_key()))        goto out;    if (!TEST_true(EVP_DigestSignInit(md_ctx, NULL, EVP_sha256(), NULL, pkey))            || !TEST_true(EVP_DigestSignUpdate(md_ctx, kMsg, sizeof(kMsg))))        goto out;    /* Determine the size of the signature. */    if (!TEST_true(EVP_DigestSignFinal(md_ctx, NULL, &sig_len))            || !TEST_size_t_eq(sig_len, (size_t)EVP_PKEY_size(pkey)))        goto out;    if (!TEST_ptr(sig = OPENSSL_malloc(sig_len))            || !TEST_true(EVP_DigestSignFinal(md_ctx, sig, &sig_len)))        goto out;    /* Ensure that the signature round-trips. */    if (!TEST_true(EVP_DigestVerifyInit(md_ctx_verify, NULL, EVP_sha256(),                                        NULL, pkey))            || !TEST_true(EVP_DigestVerifyUpdate(md_ctx_verify,                                                 kMsg, sizeof(kMsg)))            || !TEST_true(EVP_DigestVerifyFinal(md_ctx_verify, sig, sig_len)))        goto out;    ret = 1; out:    EVP_MD_CTX_free(md_ctx);    EVP_MD_CTX_free(md_ctx_verify);    EVP_PKEY_free(pkey);    OPENSSL_free(sig);    return ret;}
开发者ID:IIJ-NetBSD,项目名称:netbsd-src,代码行数:44,


示例16: openssl_digest_from_algorithm

char *compute_and_encode_signature(const grpc_auth_json_key *json_key,                                   const char *signature_algorithm,                                   const char *to_sign) {  const EVP_MD *md = openssl_digest_from_algorithm(signature_algorithm);  EVP_MD_CTX *md_ctx = NULL;  EVP_PKEY *key = EVP_PKEY_new();  size_t sig_len = 0;  unsigned char *sig = NULL;  char *result = NULL;  if (md == NULL) return NULL;  md_ctx = EVP_MD_CTX_create();  if (md_ctx == NULL) {    gpr_log(GPR_ERROR, "Could not create MD_CTX");    goto end;  }  EVP_PKEY_set1_RSA(key, json_key->private_key);  if (EVP_DigestSignInit(md_ctx, NULL, md, NULL, key) != 1) {    gpr_log(GPR_ERROR, "DigestInit failed.");    goto end;  }  if (EVP_DigestSignUpdate(md_ctx, to_sign, strlen(to_sign)) != 1) {    gpr_log(GPR_ERROR, "DigestUpdate failed.");    goto end;  }  if (EVP_DigestSignFinal(md_ctx, NULL, &sig_len) != 1) {    gpr_log(GPR_ERROR, "DigestFinal (get signature length) failed.");    goto end;  }  sig = gpr_malloc(sig_len);  if (EVP_DigestSignFinal(md_ctx, sig, &sig_len) != 1) {    gpr_log(GPR_ERROR, "DigestFinal (signature compute) failed.");    goto end;  }  result = grpc_base64_encode(sig, sig_len, 1, 0);end:  if (key != NULL) EVP_PKEY_free(key);  if (md_ctx != NULL) EVP_MD_CTX_destroy(md_ctx);  if (sig != NULL) gpr_free(sig);  return result;}
开发者ID:201528013359030,项目名称:grpc,代码行数:41,


示例17: sig_done

static boolsig_done(jose_io_t *io){    io_t *i = containerof(io, io_t, io);    size_t len = 0;    if (EVP_DigestSignFinal(i->emc, NULL, &len) <= 0)        return false;    uint8_t buf[len];    if (EVP_DigestSignFinal(i->emc, buf, &len) <= 0)        return false;    if (json_object_set_new(i->sig, "signature",                            jose_b64_enc(buf, len)) < 0)        return false;    return add_entity(i->obj, i->sig,                      "signatures", "signature", "protected", "header", NULL);}
开发者ID:latchset,项目名称:jose,代码行数:21,


示例18: lws_genhmac_destroy

intlws_genhmac_destroy(struct lws_genhmac_ctx *ctx, void *result){	size_t size = lws_genhmac_size(ctx->type);	int n = EVP_DigestSignFinal(ctx->ctx, result, &size);	EVP_MD_CTX_destroy(ctx->ctx);	if (n != 1)		return -1;	return 0;}
开发者ID:PKRoma,项目名称:libwebsockets,代码行数:12,


示例19: ssl_sign_rsa_pkcs1

static int ssl_sign_rsa_pkcs1(SSL *ssl, uint8_t *out, size_t *out_len,                              size_t max_out, const EVP_MD *md,                              const uint8_t *in, size_t in_len) {  EVP_MD_CTX ctx;  EVP_MD_CTX_init(&ctx);  *out_len = max_out;  int ret = EVP_DigestSignInit(&ctx, NULL, md, NULL, ssl->cert->privatekey) &&            EVP_DigestSignUpdate(&ctx, in, in_len) &&            EVP_DigestSignFinal(&ctx, out, out_len);  EVP_MD_CTX_cleanup(&ctx);  return ret;}
开发者ID:baiwyc119,项目名称:proto-quic,代码行数:12,


示例20: EVP_MD_CTX_create

QByteArrayNvPairingManager::signMessage(QByteArray message){    EVP_MD_CTX *ctx = EVP_MD_CTX_create();    THROW_BAD_ALLOC_IF_NULL(ctx);    const EVP_MD *md = EVP_get_digestbyname("SHA256");    THROW_BAD_ALLOC_IF_NULL(md);    EVP_DigestInit_ex(ctx, md, NULL);    EVP_DigestSignInit(ctx, NULL, md, NULL, m_PrivateKey);    EVP_DigestSignUpdate(ctx, reinterpret_cast<unsigned char*>(message.data()), message.length());    size_t signatureLength = 0;    EVP_DigestSignFinal(ctx, NULL, &signatureLength);    QByteArray signature((int)signatureLength, 0);    EVP_DigestSignFinal(ctx, reinterpret_cast<unsigned char*>(signature.data()), &signatureLength);    EVP_MD_CTX_destroy(ctx);    return signature;}
开发者ID:wwssr3,项目名称:moonlight-qt,代码行数:23,


示例21: tls13_final_finish_mac

/* * Generates the mac for the Finished message. Returns the length of the MAC or * 0 on error. */size_t tls13_final_finish_mac(SSL *s, const char *str, size_t slen,                             unsigned char *out){    const EVP_MD *md = ssl_handshake_md(s);    unsigned char hash[EVP_MAX_MD_SIZE];    size_t hashlen, ret = 0;    EVP_PKEY *key = NULL;    EVP_MD_CTX *ctx = EVP_MD_CTX_new();    if (!ssl_handshake_hash(s, hash, sizeof(hash), &hashlen)) {        /* SSLfatal() already called */        goto err;    }    if (str == s->method->ssl3_enc->server_finished_label) {        key = EVP_PKEY_new_raw_private_key(EVP_PKEY_HMAC, NULL,                                           s->server_finished_secret, hashlen);    } else if (SSL_IS_FIRST_HANDSHAKE(s)) {        key = EVP_PKEY_new_raw_private_key(EVP_PKEY_HMAC, NULL,                                           s->client_finished_secret, hashlen);    } else {        unsigned char finsecret[EVP_MAX_MD_SIZE];        if (!tls13_derive_finishedkey(s, ssl_handshake_md(s),                                      s->client_app_traffic_secret,                                      finsecret, hashlen))            goto err;        key = EVP_PKEY_new_raw_private_key(EVP_PKEY_HMAC, NULL, finsecret,                                           hashlen);        OPENSSL_cleanse(finsecret, sizeof(finsecret));    }    if (key == NULL            || ctx == NULL            || EVP_DigestSignInit(ctx, NULL, md, NULL, key) <= 0            || EVP_DigestSignUpdate(ctx, hash, hashlen) <= 0            || EVP_DigestSignFinal(ctx, out, &hashlen) <= 0) {        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS13_FINAL_FINISH_MAC,                 ERR_R_INTERNAL_ERROR);        goto err;    }    ret = hashlen; err:    EVP_PKEY_free(key);    EVP_MD_CTX_free(ctx);    return ret;}
开发者ID:t8m,项目名称:openssl,代码行数:53,


示例22: soter_sign_final_rsa_pss_pkcs8

soter_status_t soter_sign_final_rsa_pss_pkcs8(soter_sign_ctx_t* ctx, void* signature, size_t* signature_length){    EVP_PKEY* pkey = EVP_PKEY_CTX_get0_pkey(ctx->pkey_ctx);    if (!pkey) {        return SOTER_INVALID_PARAMETER;    }    if ((*signature_length) < (size_t)EVP_PKEY_size(pkey)) {        (*signature_length) = (size_t)EVP_PKEY_size(pkey);        return SOTER_BUFFER_TOO_SMALL;    }    if (!EVP_DigestSignFinal(ctx->md_ctx, signature, signature_length)) {        return SOTER_FAIL;    }    return SOTER_SUCCESS;}
开发者ID:cossacklabs,项目名称:themis,代码行数:15,


示例23: ssl_sign_rsa_pss

static int ssl_sign_rsa_pss(SSL *ssl, uint8_t *out, size_t *out_len,                              size_t max_out, const EVP_MD *md,                              const uint8_t *in, size_t in_len) {  EVP_MD_CTX ctx;  EVP_MD_CTX_init(&ctx);  *out_len = max_out;  EVP_PKEY_CTX *pctx;  int ret =      EVP_DigestSignInit(&ctx, &pctx, md, NULL, ssl->cert->privatekey) &&      EVP_PKEY_CTX_set_rsa_padding(pctx, RSA_PKCS1_PSS_PADDING) &&      EVP_PKEY_CTX_set_rsa_pss_saltlen(pctx, -1 /* salt len = hash len */) &&      EVP_DigestSignUpdate(&ctx, in, in_len) &&      EVP_DigestSignFinal(&ctx, out, out_len);  EVP_MD_CTX_cleanup(&ctx);  return ret;}
开发者ID:baiwyc119,项目名称:proto-quic,代码行数:16,


示例24: soter_sign_final_ecdsa_none_pkcs8

soter_status_t soter_sign_final_ecdsa_none_pkcs8(soter_sign_ctx_t* ctx, void* signature, size_t *signature_length){  EVP_PKEY *pkey = EVP_PKEY_CTX_get0_pkey(ctx->pkey_ctx);  if (!pkey && EVP_PKEY_base_id(pkey)!=EVP_PKEY_EC){    return SOTER_INVALID_PARAMETER;  } /* TODO: need review */  soter_status_t res = SOTER_SUCCESS;  if(!signature || (*signature_length)<(size_t)EVP_PKEY_size(pkey)){    (*signature_length)=(size_t)EVP_PKEY_size(pkey);    res = SOTER_BUFFER_TOO_SMALL;  } else {      if(EVP_DigestSignFinal(ctx->md_ctx, signature, signature_length)!=1)	res = SOTER_INVALID_SIGNATURE;  }  return res;}
开发者ID:AlexeyDemedetskiy,项目名称:zka-example,代码行数:16,


示例25: LUA_FUNCTION

static LUA_FUNCTION(openssl_signFinal){  EVP_MD_CTX *ctx = CHECK_OBJECT(1, EVP_MD_CTX, "openssl.evp_digest_ctx");  EVP_PKEY *pkey = lua_gettop(L) > 1 ? CHECK_OBJECT(2, EVP_PKEY, "openssl.evp_pkey") : NULL;  size_t siglen = EVP_PKEY_size(pkey);  unsigned char *sigbuf = malloc(siglen + 1);  int ret = 0;  if (pkey)    ret = EVP_SignFinal(ctx, sigbuf, (unsigned int *)&siglen, pkey);  else    ret = EVP_DigestSignFinal(ctx, sigbuf, &siglen);  if (ret == 1)  {    lua_pushlstring(L, (char *)sigbuf, siglen);  }  free(sigbuf);  EVP_MD_CTX_cleanup(ctx);  if (ret == 1)    return 1;  return openssl_pushresult(L, ret);}
开发者ID:chk-jxcn,项目名称:lua-openssl,代码行数:21,


示例26: do_fp

int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,          EVP_PKEY *key, unsigned char *sigin, int siglen,          const char *sig_name, const char *md_name,          const char *file, BIO *bmd){    size_t len;    int i;    for (;;) {        i = BIO_read(bp, (char *)buf, BUFSIZE);        if (i < 0) {            BIO_printf(bio_err, "Read Error in %s/n", file);            ERR_print_errors(bio_err);            return 1;        }        if (i == 0)            break;    }    if (sigin) {        EVP_MD_CTX *ctx;        BIO_get_md_ctx(bp, &ctx);        i = EVP_DigestVerifyFinal(ctx, sigin, (unsigned int)siglen);        if (i > 0)            BIO_printf(out, "Verified OK/n");        else if (i == 0) {            BIO_printf(out, "Verification Failure/n");            return 1;        } else {            BIO_printf(bio_err, "Error Verifying Data/n");            ERR_print_errors(bio_err);            return 1;        }        return 0;    }    if (key) {        EVP_MD_CTX *ctx;        BIO_get_md_ctx(bp, &ctx);        len = BUFSIZE;        if (!EVP_DigestSignFinal(ctx, buf, &len)) {            BIO_printf(bio_err, "Error Signing Data/n");            ERR_print_errors(bio_err);            return 1;        }    } else {        len = BIO_gets(bp, (char *)buf, BUFSIZE);        if ((int)len < 0) {            ERR_print_errors(bio_err);            return 1;        }    }    if (binout)        BIO_write(out, buf, len);    else if (sep == 2) {        for (i = 0; i < (int)len; i++)            BIO_printf(out, "%02x", buf[i]);        BIO_printf(out, " *%s/n", file);    } else {        if (sig_name) {            BIO_puts(out, sig_name);            if (md_name)                BIO_printf(out, "-%s", md_name);            BIO_printf(out, "(%s)= ", file);        } else if (md_name)            BIO_printf(out, "%s(%s)= ", md_name, file);        else            BIO_printf(out, "(%s)= ", file);        for (i = 0; i < (int)len; i++) {            if (sep && (i != 0))                BIO_printf(out, ":");            BIO_printf(out, "%02x", buf[i]);        }        BIO_printf(out, "/n");    }    return 0;}
开发者ID:GH-JY,项目名称:openssl,代码行数:76,


示例27: tls1_mac

int tls1_mac(SSL *ssl, unsigned char *md, int send)	{	SSL3_RECORD *rec;	unsigned char *seq;	EVP_MD_CTX *hash;	size_t md_size;	int i;	EVP_MD_CTX hmac, *mac_ctx;	unsigned char buf[5]; 	int stream_mac = (send?(ssl->mac_flags & SSL_MAC_FLAG_WRITE_MAC_STREAM):(ssl->mac_flags&SSL_MAC_FLAG_READ_MAC_STREAM));	int t;	if (send)		{		rec= &(ssl->s3->wrec);		seq= &(ssl->s3->write_sequence[0]);		hash=ssl->write_hash;		}	else		{		rec= &(ssl->s3->rrec);		seq= &(ssl->s3->read_sequence[0]);		hash=ssl->read_hash;		}	t=EVP_MD_CTX_size(hash);	TINYCLR_SSL_ASSERT(t >= 0);	md_size=t;	buf[0]=rec->type;	buf[1]=(unsigned char)(ssl->version>>8);	buf[2]=(unsigned char)(ssl->version);	buf[3]=rec->length>>8;	buf[4]=rec->length&0xff;	/* I should fix this up TLS TLS TLS TLS TLS XXXXXXXX */	if (stream_mac) 		{			mac_ctx = hash;		}		else		{			EVP_MD_CTX_copy(&hmac,hash);			mac_ctx = &hmac;		}	if (ssl->version == DTLS1_VERSION || ssl->version == DTLS1_BAD_VER)		{		unsigned char dtlsseq[8],*p=dtlsseq;		s2n(send?ssl->d1->w_epoch:ssl->d1->r_epoch, p);		TINYCLR_SSL_MEMCPY (p,&seq[2],6);		EVP_DigestSignUpdate(mac_ctx,dtlsseq,8);		}	else		EVP_DigestSignUpdate(mac_ctx,seq,8);	EVP_DigestSignUpdate(mac_ctx,buf,5);	EVP_DigestSignUpdate(mac_ctx,rec->input,rec->length);	t=EVP_DigestSignFinal(mac_ctx,md,&md_size);	TINYCLR_SSL_ASSERT(t > 0);			if (!stream_mac) EVP_MD_CTX_cleanup(&hmac);#ifdef TLS_DEBUGTINYCLR_SSL_PRINTF("sec=");{unsigned int z; for (z=0; z<md_size; z++) TINYCLR_SSL_PRINTF("%02X ",mac_sec[z]); TINYCLR_SSL_PRINTF("/n"); }TINYCLR_SSL_PRINTF("seq=");{int z; for (z=0; z<8; z++) TINYCLR_SSL_PRINTF("%02X ",seq[z]); TINYCLR_SSL_PRINTF("/n"); }TINYCLR_SSL_PRINTF("buf=");{int z; for (z=0; z<5; z++) TINYCLR_SSL_PRINTF("%02X ",buf[z]); TINYCLR_SSL_PRINTF("/n"); }TINYCLR_SSL_PRINTF("rec=");{unsigned int z; for (z=0; z<rec->length; z++) TINYCLR_SSL_PRINTF("%02X ",buf[z]); TINYCLR_SSL_PRINTF("/n"); }#endif	if (ssl->version != DTLS1_VERSION && ssl->version != DTLS1_BAD_VER)		{		for (i=7; i>=0; i--)			{			++seq[i];			if (seq[i] != 0) break; 			}		}#ifdef TLS_DEBUG{unsigned int z; for (z=0; z<md_size; z++) TINYCLR_SSL_PRINTF("%02X ",md[z]); TINYCLR_SSL_PRINTF("/n"); }#endif	return(md_size);	}
开发者ID:EddieGarmon,项目名称:netduino-netmf,代码行数:89,


示例28: main

//.........这里部分代码省略.........	}	siglen = ulen;	if (verbose) {		size_t i;		printf("signature (%zu bytes) = ", siglen);		for (i = 0; i < siglen; i++) {			printf("%02X", sig[i]);		}		printf("/n");	}	if (!EVP_VerifyInit_ex(mdctx, EVP_sm3(), engine)) {		fprintf(stderr, "error: %s %d/n", __FILE__, __LINE__);		goto end;	}	if (!EVP_VerifyUpdate(mdctx, msg, msglen)) {		fprintf(stderr, "error: %s %d/n", __FILE__, __LINE__);		goto end;	}	if (EVP_VerifyFinal(mdctx, sig, ulen, pkey) != SM2_VERIFY_SUCCESS) {		fprintf(stderr, "error: %s %d/n", __FILE__, __LINE__);		goto end;	}	/* EVP_DigestSignInit/Update/Final() */	// FIXME: return values might be different, not just 1 or 0	if (!EVP_DigestSignInit(mdctx, &pkctx, md, engine, pkey)) {		fprintf(stderr, "error: %s %d/n", __FILE__, __LINE__);		goto end;	}	if (!EVP_DigestSignUpdate(mdctx, msg, msglen)) {		fprintf(stderr, "error: %s %d/n", __FILE__, __LINE__);		goto end;	}	siglen = sizeof(sig);	if (!EVP_DigestSignFinal(mdctx, sig, &siglen)) {		fprintf(stderr, "error: %s %d/n", __FILE__, __LINE__);		goto end;	}	pkctx = NULL;		if (!EVP_DigestVerifyInit(mdctx, &pkctx, md, engine, pkey)) {		ERR_print_errors_fp(stderr);		fprintf(stderr, "error: %s %d/n", __FILE__, __LINE__);		goto end;	}	if (!EVP_DigestVerifyUpdate(mdctx, msg, msglen)) {		fprintf(stderr, "error: %s %d/n", __FILE__, __LINE__);		goto end;	}	if (!EVP_DigestVerifyFinal(mdctx, sig, siglen)) {		fprintf(stderr, "error: %s %d/n", __FILE__, __LINE__);		goto end;	}	/* EVP_SealInit/Update/Final() EVP_OpenInit/Update/Final() */	/*	EVP_PKEY *pk[NUM_PKEYS] = {0};	unsigned char iv[16];	unsigned char ek[NUM_PKEYS][256];	int eklen[NUM_PKEYS];	RAND_pseudo_bytes(iv, sizeof(iv));	int i;	for (i = 0; i < NUM_PKEYS; i++) {	}	if (!(cpctx = EVP_CIPHER_CTX_new())) {		goto end;	}	if (!EVP_SealInit(cpctx, cipher, ek, &ekl, iv, pubk, npubk)) {		goto end;	}	if (!EVP_SealUpdate(cpctx, msg, msglen)) {		goto end;	}	if (!EVP_SealFinal(cpctx, cbuf, (int *)&cbuflen)) {		goto end;	}	*/	printf("test success!/n");	ret = 1;end:	ERR_print_errors_fp(stderr);	return ret;}
开发者ID:BeyondChallenge,项目名称:GmSSL,代码行数:101,


示例29: ASN1_item_sign_ctx

int ASN1_item_sign_ctx(const ASN1_ITEM *it,                       X509_ALGOR *algor1, X509_ALGOR *algor2,                       ASN1_BIT_STRING *signature, void *asn, EVP_MD_CTX *ctx){    const EVP_MD *type;    EVP_PKEY *pkey;    unsigned char *buf_in = NULL, *buf_out = NULL;    size_t inl = 0, outl = 0, outll = 0;    int signid, paramtype;    int rv;    type = EVP_MD_CTX_md(ctx);    pkey = EVP_PKEY_CTX_get0_pkey(ctx->pctx);    if (!type || !pkey) {        ASN1err(ASN1_F_ASN1_ITEM_SIGN_CTX, ASN1_R_CONTEXT_NOT_INITIALISED);        return 0;    }    if (pkey->ameth->item_sign) {        rv = pkey->ameth->item_sign(ctx, it, asn, algor1, algor2, signature);        if (rv == 1)            outl = signature->length;        /*-         * Return value meanings:         * <=0: error.         *   1: method does everything.         *   2: carry on as normal.         *   3: ASN1 method sets algorithm identifiers: just sign.         */        if (rv <= 0)            ASN1err(ASN1_F_ASN1_ITEM_SIGN_CTX, ERR_R_EVP_LIB);        if (rv <= 1)            goto err;    } else        rv = 2;    if (rv == 2) {        if (type->flags & EVP_MD_FLAG_PKEY_METHOD_SIGNATURE) {            if (!pkey->ameth ||                !OBJ_find_sigid_by_algs(&signid,                                        EVP_MD_nid(type),                                        pkey->ameth->pkey_id)) {                ASN1err(ASN1_F_ASN1_ITEM_SIGN_CTX,                        ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED);                return 0;            }        } else            signid = type->pkey_type;        if (pkey->ameth->pkey_flags & ASN1_PKEY_SIGPARAM_NULL)            paramtype = V_ASN1_NULL;        else            paramtype = V_ASN1_UNDEF;        if (algor1)            X509_ALGOR_set0(algor1, OBJ_nid2obj(signid), paramtype, NULL);        if (algor2)            X509_ALGOR_set0(algor2, OBJ_nid2obj(signid), paramtype, NULL);    }    inl = ASN1_item_i2d(asn, &buf_in, it);    outll = outl = EVP_PKEY_size(pkey);    buf_out = OPENSSL_malloc((unsigned int)outl);    if ((buf_in == NULL) || (buf_out == NULL)) {        outl = 0;        ASN1err(ASN1_F_ASN1_ITEM_SIGN_CTX, ERR_R_MALLOC_FAILURE);        goto err;    }    if (!EVP_DigestSignUpdate(ctx, buf_in, inl)        || !EVP_DigestSignFinal(ctx, buf_out, &outl)) {        outl = 0;        ASN1err(ASN1_F_ASN1_ITEM_SIGN_CTX, ERR_R_EVP_LIB);        goto err;    }    if (signature->data != NULL)        OPENSSL_free(signature->data);    signature->data = buf_out;    buf_out = NULL;    signature->length = outl;    /*     * In the interests of compatibility, I'll make sure that the bit string     * has a 'not-used bits' value of 0     */    signature->flags &= ~(ASN1_STRING_FLAG_BITS_LEFT | 0x07);    signature->flags |= ASN1_STRING_FLAG_BITS_LEFT; err:    EVP_MD_CTX_cleanup(ctx);    if (buf_in != NULL) {        OPENSSL_cleanse((char *)buf_in, (unsigned int)inl);        OPENSSL_free(buf_in);    }    if (buf_out != NULL) {        OPENSSL_cleanse((char *)buf_out, outll);        OPENSSL_free(buf_out);    }    return (outl);//.........这里部分代码省略.........
开发者ID:johnjohnsp1,项目名称:opensgx,代码行数:101,


示例30: ngx_base64_encoded_length

//.........这里部分代码省略.........    ngx_free(tmp.data);    json_decref(header);    /*     * Create signature     */    /* Create signing input */    /* = ASCII(BASE64URL(UTF8(JWS Protected Header)) || '.' || BASE64URL(JWS Payload)) */    signing_input.len = encoded_protected_header.len + strlen(".") + encoded_payload.len;    signing_input.data = ngx_alloc(signing_input.len, cf->log);    tmp_char_p = ngx_copy(signing_input.data, encoded_protected_header.data, encoded_protected_header.len);    tmp_char_p = ngx_copy(tmp_char_p, ".", strlen("."));    tmp_char_p = ngx_copy(tmp_char_p, encoded_payload.data, encoded_payload.len);    /* Convert the RSA key to the EVP_PKEY structure */    evp_key = EVP_PKEY_new();    if(evp_key == NULL) {        ngx_log_error(NGX_LOG_ERR, cf->log, 0,                "Error signing the message digest for the JWS signature.");        return NGX_CONF_ERROR;    }    if(EVP_PKEY_set1_RSA(evp_key, key) == 0) {        ngx_log_error(NGX_LOG_ERR, cf->log, 0,                "Error signing the message digest for the JWS signature.");        return NGX_CONF_ERROR;    }    /* Create the message digest context */    ret = 0;    mdctx = EVP_MD_CTX_create();    if(mdctx == NULL)        goto err;    /* Initialize the DigestSign operation - SHA-256 has been selected as the message digest function */    if(EVP_DigestSignInit(mdctx, NULL, EVP_sha256(), NULL, evp_key) != 1)        goto err;    /* Call update with the message */    if(EVP_DigestSignUpdate(mdctx, signing_input.data, signing_input.len) != 1)        goto err;    /* Finalise the DigestSign operation */    /* First call EVP_DigestSignFinal with a NULL sig parameter to obtain the length of the */    /* signature. The length is returned in siglen. */    if(EVP_DigestSignFinal(mdctx, NULL, &signature.len) != 1)        goto err;    /* Allocate memory for the signature */    signature.data = ngx_alloc(signature.len, cf->log);    /* Obtain the signature */    if(EVP_DigestSignFinal(mdctx, signature.data, &signature.len) != 1)        goto err;    /* Success */    ret = 1;    err:    if(ret != 1) {        ngx_log_error(NGX_LOG_ERR, cf->log, 0,                "Error signing the message digest for the JWS signature. OpenSSL error 0x%xl", ERR_get_error());        return NGX_CONF_ERROR;    }    /* Clean up */    EVP_MD_CTX_destroy(mdctx);    EVP_PKEY_free(evp_key);    /* base64url encode the signature */    encoded_signature.len = ngx_base64_encoded_length(signature.len);    encoded_signature.data = ngx_alloc(encoded_signature.len, cf->log);    ngx_encode_base64url(&encoded_signature, &signature);    ngx_free(signature.data);    /*     * Create flattened JWS serialization     */    *flattened_jws = json_pack("{s:s%,s:s%,s:s%}",            "payload", encoded_payload.data, encoded_payload.len,            "protected", encoded_protected_header.data, encoded_protected_header.len,            "signature", encoded_signature.data, encoded_signature.len            );    ngx_free(serialized_payload.data);    // TODO (KK) Maybe this is too early for a free since the strings will be used in the flattened JWS (but when to free then?)    ngx_free(encoded_payload.data);    ngx_free(encoded_protected_header.data);    ngx_free(encoded_signature.data);    if(*flattened_jws == NULL) {        ngx_log_error(NGX_LOG_ERR, cf->log, 0, "Error serializing flattened JWS");        return NGX_CONF_ERROR;    }    return NGX_CONF_OK;} /* ngx_http_acme_sign_json */
开发者ID:nginx-modules,项目名称:ngx_http_acme_module,代码行数:101,



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


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