コード例 #1
0
ファイル: cms_signed_data_utils.c プロジェクト: unizeto/bmd
// Funkcja umieszcza w ContentInfo struktur�SignedData. Jeeli
// w ContentInfo istniay ju jakie dane, zostan zwolnione,
// a na ich miejsce umieszczona podana strukturka
// Wykonywana jest kopia struktury SignedData
long ContentInfo_set_SignedData(ContentInfo_t* content, SignedData_t* sigData)
{
	long OID_id_signedData[] 	= {OID_CMS_ID_SIGNED_DATA_LONG};
	long ret;
	if ((content == NULL) || (sigData == NULL))
		return ERR_WRONG_ARGUMENT;

	// wyzeruj strukture ContentInfo
	asn_DEF_ContentInfo.free_struct( &asn_DEF_ContentInfo,
		content, 1);
	memset(content, 0, sizeof(ContentInfo_t));

	// ustaw identyfikator
	OBJECT_IDENTIFIER_set_arcs(
		&(content->contentType),
		OID_id_signedData,
		sizeof(*OID_id_signedData),
		sizeof(OID_id_signedData)/sizeof(*OID_id_signedData));
	// umiesc dane
	ret = ANY_fromType(&content->content, &asn_DEF_SignedData, sigData);

	if ( ret )
		return ret;
	return 0;
}
コード例 #2
0
ファイル: cms_enveloped_data.c プロジェクト: unizeto/bmd
// Umieszczenie danych zaszyfrowanych i informacji o algorytmie
// szyfrujacym w strukturze
// WYKONYWANE SA KOPIE iv oraz data
long EnvelopedData_set_EncryptedData(EnvelopedData_t *envData,GenBuf_t *iv,GenBuf_t *data,bmd_encryption_params_t *options)
{
	long OID_id_data[] = {OID_CMS_ID_DATA_LONG};
	/*long OID_id_DES_CBC[] = {1,3,14,3,2,7};*/
	long OID_id_DES_EDE3_CBC[] = {1,2,840,113549,3,7};
	long *oid;
	long oidsize;

	long err = 0;
	OCTET_STRING_t *oiv = NULL;

	// set data OID
	err = OBJECT_IDENTIFIER_set_arcs(&(envData->encryptedContentInfo.contentType),OID_id_data, sizeof(OID_id_data[0]),
									 sizeof(OID_id_data)/sizeof(OID_id_data[0]));
	if ( err )
		return err;

	// set Algorithm OID
	if ( options->encryption_algo == BMD_CRYPT_ALGO_DES3 )
	{
		oid = OID_id_DES_EDE3_CBC;
		oidsize = sizeof(OID_id_DES_EDE3_CBC)/sizeof(OID_id_DES_EDE3_CBC[0]);
	}
	else
		return BMD_ERR_UNIMPLEMENTED;

	err = AlgorithmIdentifier_set_OID(&(envData->encryptedContentInfo.contentEncryptionAlgorithm),oid, oidsize);
	if ( err )
		return err;

	// set Algorithm IV
	oiv = mallocStructure(sizeof(OCTET_STRING_t));
	OCTET_STRING_fromBuf(oiv,(char *)iv->buf, iv->size);
	envData->encryptedContentInfo.contentEncryptionAlgorithm.parameters = mallocStructure(sizeof(ANY_t));
	err = ANY_fromType(envData->encryptedContentInfo.contentEncryptionAlgorithm.parameters,	&asn_DEF_OCTET_STRING, oiv);
	if ( err )
		return ERR_OPERATION_FAILED;
	asn_DEF_OCTET_STRING.free_struct(&asn_DEF_OCTET_STRING,oiv, 0);

	if( options->encryption_type==BMD_CMS_ENV_INTERNAL )
	{
		// set Encrypted Data
		envData->encryptedContentInfo.encryptedContent = mallocStructure(sizeof(EncryptedContent_t));
		OCTET_STRING_fromBuf(envData->encryptedContentInfo.encryptedContent,(char *)data->buf, data->size);
	}
	return err;
}
コード例 #3
0
ファイル: cms_enveloped_data.c プロジェクト: unizeto/bmd
// Funkcja umieszcza w ContentInfo struktur�EnvelopedData. Jeeli
// w ContentInfo istniay ju jakie dane, zostan zwolnione,
// a na ich miejsce umieszczona podana strukturka
// Wykonywana jest kopia struktury EnvelopedData
long ContentInfo_set_EnvelopedData(ContentInfo_t* content, EnvelopedData_t* envData)
{
	long OID_id_envelopedData[] = {OID_CMS_ID_ENVELOPED_DATA_LONG};
	long err = 0;
	if ((content == NULL) || (envData == NULL))
		return ERR_WRONG_ARGUMENT;
	// wyzeruj strukture ContentInfo
	asn_DEF_ContentInfo.free_struct( &asn_DEF_ContentInfo,
		content, 1);
	memset(content, 0, sizeof(ContentInfo_t));

	// ustaw identyfikator
	OBJECT_IDENTIFIER_set_arcs(
		&(content->contentType),
		OID_id_envelopedData,
		sizeof(*OID_id_envelopedData),
		sizeof(OID_id_envelopedData)/sizeof(*OID_id_envelopedData));
	// umiesc dane
	err = ANY_fromType(&content->content, &asn_DEF_EnvelopedData, envData);
	if ( err )
		return err;
	return err;
}
コード例 #4
0
ファイル: ANY.c プロジェクト: bibou1324/clienteafirma
ANY_t *
ANY_new_fromType(asn_TYPE_descriptor_t *td, void *sptr) {
	ANY_t tmp;
	ANY_t *st;

	if(!td || !sptr) {
		errno = EINVAL;
		return 0;
	}

	memset(&tmp, 0, sizeof(tmp));

	if(ANY_fromType(&tmp, td, sptr)) return 0;

	st = (ANY_t *)CALLOC(1, sizeof(ANY_t));
	if(st) {
		*st = tmp;
		return st;
	} else {
		FREEMEM(tmp.buf);
		return 0;
	}
}