コード例 #1
0
ファイル: cms_smime.c プロジェクト: hlcherub/src
int CMS_EncryptedData_decrypt(CMS_ContentInfo *cms,
				const unsigned char *key, size_t keylen,
				BIO *dcont, BIO *out, unsigned int flags)
	{
	BIO *cont;
	int r;
	if (OBJ_obj2nid(CMS_get0_type(cms)) != NID_pkcs7_encrypted)
		{
		CMSerr(CMS_F_CMS_ENCRYPTEDDATA_DECRYPT,
					CMS_R_TYPE_NOT_ENCRYPTED_DATA);
		return 0;
		}

	if (!dcont && !check_content(cms))
		return 0;

	if (CMS_EncryptedData_set1_key(cms, NULL, key, keylen) <= 0)
		return 0;
	cont = CMS_dataInit(cms, dcont);
	if (!cont)
		return 0;
	r = cms_copy_content(out, cont, flags);
	do_free_upto(cont, dcont);
	return r;
	}
コード例 #2
0
ファイル: cms_asn1.c プロジェクト: aburgh/openbsd
/* CMS streaming support */
static int
cms_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg)
{
	ASN1_STREAM_ARG *sarg = exarg;
	CMS_ContentInfo *cms = NULL;

	if (pval)
		cms = (CMS_ContentInfo *)*pval;
	else
		return 1;

	switch (operation) {
	case ASN1_OP_STREAM_PRE:
		if (CMS_stream(&sarg->boundary, cms) <= 0)
			return 0;
	case ASN1_OP_DETACHED_PRE:
		sarg->ndef_bio = CMS_dataInit(cms, sarg->out);
		if (!sarg->ndef_bio)
			return 0;
		break;
	case ASN1_OP_STREAM_POST:
	case ASN1_OP_DETACHED_POST:
		if (CMS_dataFinal(cms, sarg->ndef_bio) <= 0)
			return 0;
		break;
	}
	return 1;
}
コード例 #3
0
ファイル: cms.c プロジェクト: witchu/lua-openssl
static int openssl_cms_datainit(lua_State *L)
{
  CMS_ContentInfo *cms = CHECK_OBJECT(1, CMS_ContentInfo, "openssl.cms");
  BIO* icont = load_bio_object(L, 2);
  icont = CMS_dataInit(cms, icont);
  PUSH_OBJECT(icont, "openssl.bio");
  return 1;
}
コード例 #4
0
int CMS_data(CMS_ContentInfo *cms, BIO *out, unsigned int flags)
{
    BIO *cont;
    int r;
    if (OBJ_obj2nid(CMS_get0_type(cms)) != NID_pkcs7_data) {
        CMSerr(CMS_F_CMS_DATA, CMS_R_TYPE_NOT_DATA);
        return 0;
    }
    cont = CMS_dataInit(cms, NULL);
    if (!cont)
        return 0;
    r = cms_copy_content(out, cont, flags);
    BIO_free_all(cont);
    return r;
}
コード例 #5
0
ファイル: cms_io.c プロジェクト: GrayKing/Leakfix-on-OpenSSL
/* Callback for int_smime_write_ASN1 */
static int cms_output_data(BIO *out, BIO *data, ASN1_VALUE *val, int flags,
                           const ASN1_ITEM *it)
{
    CMS_ContentInfo *cms = (CMS_ContentInfo *)val;
    BIO *tmpbio, *cmsbio;
    int r = 0;

    if (!(flags & SMIME_DETACHED)) {
        SMIME_crlf_copy(data, out, flags);
        return 1;
    }

    /* Let CMS code prepend any needed BIOs */

    cmsbio = CMS_dataInit(cms, out);

    if (!cmsbio)
        return 0;

    /* Copy data across, passing through filter BIOs for processing */
    SMIME_crlf_copy(data, cmsbio, flags);

    /* Finalize structure */
    if (CMS_dataFinal(cms, cmsbio) <= 0)
        goto err;

    r = 1;

err:

    /* Now remove any digests prepended to the BIO */

    while (cmsbio != out) {
        tmpbio = BIO_pop(cmsbio);
        BIO_free(cmsbio);
        cmsbio = tmpbio;
    }

    return r;

}
コード例 #6
0
int CMS_digest_verify(CMS_ContentInfo *cms, BIO *dcont, BIO *out,
                      unsigned int flags)
{
    BIO *cont;
    int r;
    if (OBJ_obj2nid(CMS_get0_type(cms)) != NID_pkcs7_digest) {
        CMSerr(CMS_F_CMS_DIGEST_VERIFY, CMS_R_TYPE_NOT_DIGESTED_DATA);
        return 0;
    }

    if (!dcont && !check_content(cms))
        return 0;

    cont = CMS_dataInit(cms, dcont);
    if (!cont)
        return 0;
    r = cms_copy_content(out, cont, flags);
    if (r)
        r = cms_DigestedData_do_final(cms, cont, 1);
    do_free_upto(cont, dcont);
    return r;
}