本文整理汇总了C++中OBJ_cmp函数的典型用法代码示例。如果您正苦于以下问题:C++ OBJ_cmp函数的具体用法?C++ OBJ_cmp怎么用?C++ OBJ_cmp使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了OBJ_cmp函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: nussl_buffer_create
char *nussl_ssl_readable_dname(const nussl_ssl_dname * name)
{
int n, flag = 0;
nussl_buffer *dump = nussl_buffer_create();
const ASN1_OBJECT *const cname = OBJ_nid2obj(NID_commonName),
*const email = OBJ_nid2obj(NID_pkcs9_emailAddress);
for (n = X509_NAME_entry_count(name->dn); n > 0; n--) {
X509_NAME_ENTRY *ent =
X509_NAME_get_entry(name->dn, n - 1);
/* Skip commonName or emailAddress except if there is no other
* attribute in dname. */
if ((OBJ_cmp(ent->object, cname)
&& OBJ_cmp(ent->object, email)) || (!flag
&& n == 1)) {
if (flag++)
nussl_buffer_append(dump, ", ", 2);
if (append_dirstring(dump, ent->value))
nussl_buffer_czappend(dump, "???");
}
}
return nussl_buffer_finish(dump);
}
开发者ID:regit,项目名称:nufw,代码行数:26,代码来源:nussl_openssl.c
示例2: X509_get_subject_name
void OpenSSLCertificate::parse() {
if (!cert) {
return;
}
// Subject name
X509_NAME* subjectName = X509_get_subject_name(cert.get());
if (subjectName) {
// Subject name
ByteArray subjectNameData;
subjectNameData.resize(256);
X509_NAME_oneline(X509_get_subject_name(cert.get()), reinterpret_cast<char*>(subjectNameData.getData()), subjectNameData.getSize());
this->subjectName = std::string(reinterpret_cast<const char*>(subjectNameData.getData()));
// Common name
int cnLoc = X509_NAME_get_index_by_NID(subjectName, NID_commonName, -1);
while (cnLoc != -1) {
X509_NAME_ENTRY* cnEntry = X509_NAME_get_entry(subjectName, cnLoc);
ASN1_STRING* cnData = X509_NAME_ENTRY_get_data(cnEntry);
commonNames.push_back(ByteArray(cnData->data, cnData->length).toString());
cnLoc = X509_NAME_get_index_by_NID(subjectName, NID_commonName, cnLoc);
}
}
// subjectAltNames
int subjectAltNameLoc = X509_get_ext_by_NID(cert.get(), NID_subject_alt_name, -1);
if(subjectAltNameLoc != -1) {
X509_EXTENSION* extension = X509_get_ext(cert.get(), subjectAltNameLoc);
boost::shared_ptr<GENERAL_NAMES> generalNames(reinterpret_cast<GENERAL_NAMES*>(X509V3_EXT_d2i(extension)), GENERAL_NAMES_free);
boost::shared_ptr<ASN1_OBJECT> xmppAddrObject(OBJ_txt2obj(ID_ON_XMPPADDR_OID, 1), ASN1_OBJECT_free);
boost::shared_ptr<ASN1_OBJECT> dnsSRVObject(OBJ_txt2obj(ID_ON_DNSSRV_OID, 1), ASN1_OBJECT_free);
for (int i = 0; i < sk_GENERAL_NAME_num(generalNames.get()); ++i) {
GENERAL_NAME* generalName = sk_GENERAL_NAME_value(generalNames.get(), i);
if (generalName->type == GEN_OTHERNAME) {
OTHERNAME* otherName = generalName->d.otherName;
if (OBJ_cmp(otherName->type_id, xmppAddrObject.get()) == 0) {
// XmppAddr
if (otherName->value->type != V_ASN1_UTF8STRING) {
continue;
}
ASN1_UTF8STRING* xmppAddrValue = otherName->value->value.utf8string;
addXMPPAddress(ByteArray(ASN1_STRING_data(xmppAddrValue), ASN1_STRING_length(xmppAddrValue)).toString());
}
else if (OBJ_cmp(otherName->type_id, dnsSRVObject.get()) == 0) {
// SRVName
if (otherName->value->type != V_ASN1_IA5STRING) {
continue;
}
ASN1_IA5STRING* srvNameValue = otherName->value->value.ia5string;
addSRVName(ByteArray(ASN1_STRING_data(srvNameValue), ASN1_STRING_length(srvNameValue)).toString());
}
}
else if (generalName->type == GEN_DNS) {
// DNSName
addDNSName(ByteArray(ASN1_STRING_data(generalName->d.dNSName), ASN1_STRING_length(generalName->d.dNSName)).toString());
}
}
}
}
开发者ID:bessey,项目名称:picnic-doc-server,代码行数:59,代码来源:OpenSSLCertificate.cpp
示例3: X509_NAME_cmp
int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b)
{
int i,j;
X509_NAME_ENTRY *na,*nb;
if (sk_X509_NAME_ENTRY_num(a->entries)
!= sk_X509_NAME_ENTRY_num(b->entries))
return sk_X509_NAME_ENTRY_num(a->entries)
-sk_X509_NAME_ENTRY_num(b->entries);
for (i=sk_X509_NAME_ENTRY_num(a->entries)-1; i>=0; i--)
{
na=sk_X509_NAME_ENTRY_value(a->entries,i);
nb=sk_X509_NAME_ENTRY_value(b->entries,i);
j=na->value->length-nb->value->length;
if (j) return(j);
j=memcmp(na->value->data,nb->value->data,
na->value->length);
if (j) return(j);
j=na->set-nb->set;
if (j) return(j);
}
/* We will check the object types after checking the values
* since the values will more often be different than the object
* types. */
for (i=sk_X509_NAME_ENTRY_num(a->entries)-1; i>=0; i--)
{
na=sk_X509_NAME_ENTRY_value(a->entries,i);
nb=sk_X509_NAME_ENTRY_value(b->entries,i);
j=OBJ_cmp(na->object,nb->object);
if (j) return(j);
}
return(0);
}
开发者ID:houzhenggang,项目名称:mt7688_mips_ecos,代码行数:34,代码来源:x509_cmp.c
示例4: PKI_OID_cmp
int PKI_OID_cmp( PKI_OID *a, PKI_OID *b ) {
if ( !a || !b ) {
return(-1);
}
return ( OBJ_cmp ( a, b ));
}
开发者ID:Brenhilt,项目名称:libpki,代码行数:8,代码来源:pki_oid.c
示例5: OCSP_id_issuer_cmp
EXPORT_C int OCSP_id_issuer_cmp(OCSP_CERTID *a, OCSP_CERTID *b)
{
int ret;
ret = OBJ_cmp(a->hashAlgorithm->algorithm, b->hashAlgorithm->algorithm);
if (ret) return ret;
ret = ASN1_OCTET_STRING_cmp(a->issuerNameHash, b->issuerNameHash);
if (ret) return ret;
return ASN1_OCTET_STRING_cmp(a->issuerKeyHash, b->issuerKeyHash);
}
开发者ID:cdaffara,项目名称:symbiandump-os2,代码行数:9,代码来源:ocsp_lib.c
示例6: X509_ALGOR_cmp
/*
* X509_ALGOR_cmp returns 0 if |a| and |b| are equal and non-zero otherwise.
*/
int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b)
{
int rv;
rv = OBJ_cmp(a->algorithm, b->algorithm);
if (rv)
return rv;
if (!a->parameter && !b->parameter)
return 0;
return ASN1_TYPE_cmp(a->parameter, b->parameter);
}
开发者ID:Cyril2004,项目名称:proto-quic,代码行数:13,代码来源:x_algor.c
示例7: X509_ALGOR_cmp
/* Returns 0 if they are equal, != 0 otherwise. */
int
X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b)
{
int rv = OBJ_cmp(a->algorithm, b->algorithm);
if (!rv) {
if (!a->parameter && !b->parameter)
rv = 0;
else
rv = ASN1_TYPE_cmp(a->parameter, b->parameter);
}
return(rv);
}
开发者ID:Heratom,项目名称:Firefly-project,代码行数:13,代码来源:x_algor.c
示例8: OTHERNAME_cmp
/* Returns 0 if they are equal, != 0 otherwise. */
int OTHERNAME_cmp(OTHERNAME *a, OTHERNAME *b)
{
int result = -1;
if (!a || !b)
return -1;
/* Check their type first. */
if ((result = OBJ_cmp(a->type_id, b->type_id)) != 0)
return result;
/* Check the value. */
result = ASN1_TYPE_cmp(a->value, b->value);
return result;
}
开发者ID:Ana06,项目名称:openssl,代码行数:14,代码来源:v3_genn.c
示例9: X509_NAME_cmp
int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b)
{
int i,j;
X509_NAME_ENTRY *na,*nb;
unsigned long nabit, nbbit;
j = sk_X509_NAME_ENTRY_num(a->entries)
- sk_X509_NAME_ENTRY_num(b->entries);
if (j)
return j;
for (i=sk_X509_NAME_ENTRY_num(a->entries)-1; i>=0; i--)
{
na=sk_X509_NAME_ENTRY_value(a->entries,i);
nb=sk_X509_NAME_ENTRY_value(b->entries,i);
j=na->value->type-nb->value->type;
if (j)
{
nabit = ASN1_tag2bit(na->value->type);
nbbit = ASN1_tag2bit(nb->value->type);
if (!(nabit & STR_TYPE_CMP) ||
!(nbbit & STR_TYPE_CMP))
return j;
if (!asn1_string_memcmp(na->value, nb->value))
j = 0;
}
else if (na->value->type == V_ASN1_PRINTABLESTRING)
j=nocase_spacenorm_cmp(na->value, nb->value);
else if (na->value->type == V_ASN1_IA5STRING
&& OBJ_obj2nid(na->object) == NID_pkcs9_emailAddress)
j=nocase_cmp(na->value, nb->value);
else
j = asn1_string_memcmp(na->value, nb->value);
if (j) return(j);
j=na->set-nb->set;
if (j) return(j);
}
/* We will check the object types after checking the values
* since the values will more often be different than the object
* types. */
for (i=sk_X509_NAME_ENTRY_num(a->entries)-1; i>=0; i--)
{
na=sk_X509_NAME_ENTRY_value(a->entries,i);
nb=sk_X509_NAME_ENTRY_value(b->entries,i);
j=OBJ_cmp(na->object,nb->object);
if (j) return(j);
}
return(0);
}
开发者ID:1310701102,项目名称:sl4a,代码行数:50,代码来源:x509_cmp.c
示例10: ASN1_TYPE_cmp
/* Returns 0 if they are equal, != 0 otherwise. */
int ASN1_TYPE_cmp(const ASN1_TYPE *a, const ASN1_TYPE *b)
{
int result = -1;
if (!a || !b || a->type != b->type)
return -1;
switch (a->type) {
case V_ASN1_OBJECT:
result = OBJ_cmp(a->value.object, b->value.object);
break;
case V_ASN1_NULL:
result = 0; /* They do not have content. */
break;
case V_ASN1_BOOLEAN:
result = a->value.boolean - b->value.boolean;
break;
case V_ASN1_INTEGER:
case V_ASN1_NEG_INTEGER:
case V_ASN1_ENUMERATED:
case V_ASN1_NEG_ENUMERATED:
case V_ASN1_BIT_STRING:
case V_ASN1_OCTET_STRING:
case V_ASN1_SEQUENCE:
case V_ASN1_SET:
case V_ASN1_NUMERICSTRING:
case V_ASN1_PRINTABLESTRING:
case V_ASN1_T61STRING:
case V_ASN1_VIDEOTEXSTRING:
case V_ASN1_IA5STRING:
case V_ASN1_UTCTIME:
case V_ASN1_GENERALIZEDTIME:
case V_ASN1_GRAPHICSTRING:
case V_ASN1_VISIBLESTRING:
case V_ASN1_GENERALSTRING:
case V_ASN1_UNIVERSALSTRING:
case V_ASN1_BMPSTRING:
case V_ASN1_UTF8STRING:
case V_ASN1_OTHER:
default:
result = ASN1_STRING_cmp((ASN1_STRING *)a->value.ptr,
(ASN1_STRING *)b->value.ptr);
break;
}
return result;
}
开发者ID:BridgeFi,项目名称:ParkingTicketTracker,代码行数:48,代码来源:a_type.c
示例11: X509_NAME_cmp
int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b)
{
int i,j;
X509_NAME_ENTRY *na,*nb;
if (sk_X509_NAME_ENTRY_num(a->entries)
!= sk_X509_NAME_ENTRY_num(b->entries))
return sk_X509_NAME_ENTRY_num(a->entries)
-sk_X509_NAME_ENTRY_num(b->entries);
for (i=sk_X509_NAME_ENTRY_num(a->entries)-1; i>=0; i--)
{
na=sk_X509_NAME_ENTRY_value(a->entries,i);
nb=sk_X509_NAME_ENTRY_value(b->entries,i);
j=na->value->type-nb->value->type;
if (j) return(j);
if (na->value->type == V_ASN1_PRINTABLESTRING)
j=nocase_spacenorm_cmp(na->value, nb->value);
else if (na->value->type == V_ASN1_IA5STRING
&& OBJ_obj2nid(na->object) == NID_pkcs9_emailAddress)
j=nocase_cmp(na->value, nb->value);
else
{
j=na->value->length-nb->value->length;
if (j) return(j);
j=memcmp(na->value->data,nb->value->data,
na->value->length);
}
if (j) return(j);
j=na->set-nb->set;
if (j) return(j);
}
/* We will check the object types after checking the values
* since the values will more often be different than the object
* types. */
for (i=sk_X509_NAME_ENTRY_num(a->entries)-1; i>=0; i--)
{
na=sk_X509_NAME_ENTRY_value(a->entries,i);
nb=sk_X509_NAME_ENTRY_value(b->entries,i);
j=OBJ_cmp(na->object,nb->object);
if (j) return(j);
}
return(0);
}
开发者ID:aosm,项目名称:OpenSSL096,代码行数:44,代码来源:x509_cmp.c
示例12: X509_NAME_get_index_by_OBJ
/* NOTE: you should be passsing -1, not 0 as lastpos */
int X509_NAME_get_index_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj,
int lastpos)
{
int n;
X509_NAME_ENTRY *ne;
STACK_OF(X509_NAME_ENTRY) *sk;
if (name == NULL) return(-1);
if (lastpos < 0)
lastpos= -1;
sk=name->entries;
n=sk_X509_NAME_ENTRY_num(sk);
for (lastpos++; lastpos < n; lastpos++)
{
ne=sk_X509_NAME_ENTRY_value(sk,lastpos);
if (OBJ_cmp(ne->object,obj) == 0)
return(lastpos);
}
return(-1);
}
开发者ID:1310701102,项目名称:sl4a,代码行数:21,代码来源:x509name.c
示例13: X509_NAME_wildcmp
static int X509_NAME_wildcmp(const X509_NAME *a, const X509_NAME *b)
{
int i,j;
X509_NAME_ENTRY *na,*nb;
if (sk_X509_NAME_ENTRY_num(a->entries)
!= sk_X509_NAME_ENTRY_num(b->entries))
return sk_X509_NAME_ENTRY_num(a->entries)
-sk_X509_NAME_ENTRY_num(b->entries);
for (i=sk_X509_NAME_ENTRY_num(a->entries)-1; i>=0; i--)
{
na=sk_X509_NAME_ENTRY_value(a->entries,i);
nb=sk_X509_NAME_ENTRY_value(b->entries,i);
j=OBJ_cmp(na->object,nb->object);
if (j) return(j);
if ((na->value->length == 1 && na->value->data[0] == '*')
|| (nb->value->length == 1 && nb->value->data[0] == '*'))
continue;
j=na->value->type-nb->value->type;
if (j) return(j);
if (na->value->type == V_ASN1_PRINTABLESTRING)
j=nocase_spacenorm_cmp(na->value, nb->value);
else if (na->value->type == V_ASN1_IA5STRING
&& OBJ_obj2nid(na->object) == NID_pkcs9_emailAddress)
j=nocase_cmp(na->value, nb->value);
else
{
j=na->value->length-nb->value->length;
if (j) return(j);
j=memcmp(na->value->data,nb->value->data,
na->value->length);
}
if (j) return(j);
j=na->set-nb->set;
if (j) return(j);
}
return(0);
}
开发者ID:aosm,项目名称:ipsec,代码行数:39,代码来源:crypto_openssl.c
示例14: GENERAL_NAME_cmp
/* Returns 0 if they are equal, != 0 otherwise. */
int
GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b)
{
int result = -1;
if (!a || !b || a->type != b->type)
return -1;
switch (a->type) {
case GEN_X400:
case GEN_EDIPARTY:
result = ASN1_TYPE_cmp(a->d.other, b->d.other);
break;
case GEN_OTHERNAME:
result = OTHERNAME_cmp(a->d.otherName, b->d.otherName);
break;
case GEN_EMAIL:
case GEN_DNS:
case GEN_URI:
result = ASN1_STRING_cmp(a->d.ia5, b->d.ia5);
break;
case GEN_DIRNAME:
result = X509_NAME_cmp(a->d.dirn, b->d.dirn);
break;
case GEN_IPADD:
result = ASN1_OCTET_STRING_cmp(a->d.ip, b->d.ip);
break;
case GEN_RID:
result = OBJ_cmp(a->d.rid, b->d.rid);
break;
}
return result;
}
开发者ID:2trill2spill,项目名称:nextgen,代码行数:38,代码来源:v3_genn.c
示例15: cms_copy_messageDigest
static int cms_copy_messageDigest(CMS_ContentInfo *cms, CMS_SignerInfo *si)
{
STACK_OF(CMS_SignerInfo) *sinfos;
CMS_SignerInfo *sitmp;
int i;
sinfos = CMS_get0_SignerInfos(cms);
for (i = 0; i < sk_CMS_SignerInfo_num(sinfos); i++)
{
ASN1_OCTET_STRING *messageDigest;
sitmp = sk_CMS_SignerInfo_value(sinfos, i);
if (sitmp == si)
continue;
if (CMS_signed_get_attr_count(sitmp) < 0)
continue;
if (OBJ_cmp(si->digestAlgorithm->algorithm,
sitmp->digestAlgorithm->algorithm))
continue;
messageDigest = CMS_signed_get0_data_by_OBJ(sitmp,
OBJ_nid2obj(NID_pkcs9_messageDigest),
-3, V_ASN1_OCTET_STRING);
if (!messageDigest)
{
CMSerr(CMS_F_CMS_COPY_MESSAGEDIGEST,
CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE);
return 0;
}
if (CMS_signed_add1_attr_by_NID(si, NID_pkcs9_messageDigest,
V_ASN1_OCTET_STRING,
messageDigest, -1))
return 1;
else
return 0;
}
CMSerr(CMS_F_CMS_COPY_MESSAGEDIGEST, CMS_R_NO_MATCHING_DIGEST);
return 0;
}
开发者ID:LucidOne,项目名称:Rovio,代码行数:37,代码来源:cms_sd.c
示例16: node_cmp
static int node_cmp(const X509_POLICY_NODE *const *a,
const X509_POLICY_NODE *const *b)
{
return OBJ_cmp((*a)->data->valid_policy, (*b)->data->valid_policy);
}
开发者ID:crypto-org-ua,项目名称:openssl-ua,代码行数:5,代码来源:pcy_node.c
示例17: LiteralValue
LiteralValue_Priv::LiteralValue_Priv(GENERAL_NAME *gen)
: LiteralValue()
{
char oline[256], htmp[5];
unsigned char *p = NULL;
int nid = 0;
int i;
ASN1_OBJECT *id_ms_san_upn;
ASN1_OBJECT *id_pkinit_san;
#define CREATE_OBJ_IF_NEEDED(oid, vn, sn, ln) \
nid = OBJ_txt2nid(oid); \
if (nid == NID_undef) { \
nid = OBJ_create(oid, sn, ln); \
if (nid == NID_undef) { \
LOGIT_ERROR("Error creating oid object for " << oid); \
return; \
} \
} \
vn = OBJ_nid2obj(nid);
CREATE_OBJ_IF_NEEDED("1.3.6.1.5.2.2", id_pkinit_san,
"id-pkinit-san", "KRB5PrincipalName");
CREATE_OBJ_IF_NEEDED("1.3.6.1.4.1.311.20.2.3", id_ms_san_upn,
"id-ms-san-upn", "Microsoft Universal Principal Name");
switch (gen->type)
{
case GEN_EMAIL:
setLiteral("email", asn1string2string(gen->d.ia5));
break;
case GEN_DNS:
setLiteral("DNS", asn1string2string(gen->d.ia5));
break;
case GEN_URI:
setLiteral("URI", asn1string2string(gen->d.ia5));
break;
case GEN_DIRNAME:
X509_NAME_oneline(gen->d.dirn, oline, 256);
setLiteral("DirName", oline);
break;
case GEN_IPADD:
p = gen->d.ip->data;
/* BUG: doesn't support IPV6 */
if(gen->d.ip->length == 4) {
BIO_snprintf(oline, sizeof oline,
"%d.%d.%d.%d", p[0], p[1], p[2], p[3]);
}
else if(gen->d.ip->length == 16)
{
oline[0] = 0;
for (i = 0; i < 8; i++)
{
BIO_snprintf(htmp, sizeof htmp,
"%X", p[0] << 8 | p[1]);
p += 2;
strcat(oline, htmp);
if (i != 7)
strcat(oline, ":");
}
}
else
{
LOGIT_ERROR("Invalid IP Address");
CA_MGM_THROW(ca_mgm::SyntaxException, "Invalid IP Address");
break;
}
setLiteral("IP", oline);
break;
case GEN_RID:
i2t_ASN1_OBJECT(oline, 256, gen->d.rid);
setLiteral("RID", oline);
break;
case GEN_OTHERNAME:
// krb5PrincipalName || Microsoft Universal Principal Name
if(OBJ_cmp(id_pkinit_san, gen->d.otherName->type_id) == 0)
{
decode_krb5_principal_name(gen->d.otherName->value->value.sequence->data,
gen->d.otherName->value->value.sequence->length);
}
else if (OBJ_cmp(id_ms_san_upn, gen->d.otherName->type_id) == 0)
{
setLiteral("1.3.6.1.4.1.311.20.2.3", (char*)gen->d.otherName->value->value.sequence->data);
}
else
{
setLiteral("othername",
std::string("unsupported(") + str::numstring(OBJ_obj2nid(gen->d.otherName->type_id)) + ")");
}
break;
case GEN_X400:
setLiteral("X400Name", "unsupported");
break;
case GEN_EDIPARTY:
//.........这里部分代码省略.........
开发者ID:openSUSE,项目名称:libcamgm,代码行数:101,代码来源:LiteralValues_Priv.cpp
示例18: STACK_OF
ASN1_OCTET_STRING *sigattr_asn1_octet(scep_t *scep, char *attrname) {
STACK_OF(X509_ATTRIBUTE) *sig_attribs;
ASN1_OBJECT *asn1_obj;
ASN1_TYPE *asn1_type;
X509_ATTRIBUTE *attr;
int i;
scepmsg_t *msg;
int single;
if (debug)
BIO_printf(bio_err, "%s:%d: looking for attribute '%s'\n",
__FILE__, __LINE__, attrname);
/* decide which message to study: client reads attrs from reply */
if (scep->client)
msg = &scep->reply;
else
msg = &scep->request;
/* find the object we by name */
asn1_obj = OBJ_nid2obj(OBJ_sn2nid(attrname));
asn1_type = NULL;
/* retrieve the stack of signed attributes */
if (NULL == (sig_attribs = PKCS7_get_signed_attributes(msg->si))) {
BIO_printf(bio_err, "%s:%d: signed attributes not found\n",
__FILE__, __LINE__);
return NULL;
}
/* scan all attributes for the one we are looking for */
for (i = 0; i < sk_X509_ATTRIBUTE_num(sig_attribs); i++) {
attr = sk_X509_ATTRIBUTE_value(sig_attribs, i);
if (OBJ_cmp(attr->object, asn1_obj) == 0) {
#if OPENSSL_VERSION_NUMBER < 0x00907000L
/* attr->set was replaced with attr->single (with opposite
meaning) somewhere between 0.9.6m-engine and 0.9.7d */
single = !attr->set;
#else
single = attr->single;
#endif
if (single || (sk_ASN1_TYPE_num(attr->value.set) == 0)) {
BIO_printf(bio_err, "%s:%d: attr has no val\n",__FILE__, __LINE__);
goto err;
BIO_printf(bio_err, "%s:%d: attr has no val\n",
__FILE__, __LINE__);
goto err;
}
if (debug)
BIO_printf(bio_err, "%s:%d: found matching "
"attribute with %d values\n", __FILE__,
__LINE__,
sk_ASN1_TYPE_num(attr->value.set));
asn1_type = sk_ASN1_TYPE_value(attr->value.set, 0);
if (debug)
BIO_printf(bio_err, "%s:%d: type found: %p\n",
__FILE__, __LINE__, asn1_type);
break;
}
}
/* if we cannot find the required argument, we just return NULL */
if (debug)
BIO_printf(bio_err, "%s:%d: checking for attribute\n",
__FILE__, __LINE__);
if (asn1_type == NULL) {
BIO_printf(bio_err, "%s:%d: attribute has no type\n",
__FILE__, __LINE__);
goto err;
}
if (ASN1_TYPE_get(asn1_type) != V_ASN1_OCTET_STRING) {
BIO_printf(bio_err, "%s:%d: attribute has wrong type\n",
__FILE__, __LINE__);
goto err;
}
if (debug)
BIO_printf(bio_err, "%s:%d: found attribute '%s'\n",
__FILE__, __LINE__, attrname);
/* this is an ASN1_OCTET_STRING, so we can retrieve the */
/* appropriate element of the union */
return asn1_type->value.octet_string;
/* error return, or attribute not found */
err:
if (debug)
BIO_printf(bio_err, "%s:%d: attribute not found or error\n",
__FILE__, __LINE__);
ERR_print_errors(bio_err);
return NULL;
}
开发者ID:xman1979,项目名称:openscep,代码行数:92,代码来源:sigattr.c
示例19: ndn_verify_signature
int ndn_verify_signature(const unsigned char *msg,
size_t size,
const struct ndn_parsed_ContentObject *co,
const struct ndn_pkey *verification_pubkey)
{
EVP_MD_CTX verc;
EVP_MD_CTX *ver_ctx = &verc;
X509_SIG *digest_info = NULL;
const unsigned char *dd = NULL;
MP_info *merkle_path_info = NULL;
unsigned char *root_hash = NULL;
size_t root_hash_size;
int res;
const EVP_MD *digest = NULL;
const EVP_MD *merkle_path_digest = NULL;
const unsigned char *signature_bits = NULL;
size_t signature_bits_size = 0;
const unsigned char *witness = NULL;
size_t witness_size = 0;
const unsigned char *digest_algorithm = NULL;
size_t digest_algorithm_size;
EVP_PKEY *pkey = (EVP_PKEY *)verification_pubkey;
res = ndn_ref_tagged_BLOB(NDN_DTAG_SignatureBits, msg,
co->offset[NDN_PCO_B_SignatureBits],
co->offset[NDN_PCO_E_SignatureBits],
&signature_bits,
&signature_bits_size);
if (res < 0)
return (-1);
if (co->offset[NDN_PCO_B_DigestAlgorithm] == co->offset[NDN_PCO_E_DigestAlgorithm]) {
digest_algorithm = (const unsigned char *)NDN_SIGNING_DEFAULT_DIGEST_ALGORITHM;
}
else {
/* figure out what algorithm the OID represents */
res = ndn_ref_tagged_string(NDN_DTAG_DigestAlgorithm, msg,
co->offset[NDN_PCO_B_DigestAlgorithm],
co->offset[NDN_PCO_E_DigestAlgorithm],
&digest_algorithm,
&digest_algorithm_size);
if (res < 0)
return (-1);
/* NOTE: since the element closer is a 0, and the element is well formed,
* the string will be null terminated
*/
}
digest = md_from_digest_and_pkey((const char *)digest_algorithm, verification_pubkey);
EVP_MD_CTX_init(ver_ctx);
res = EVP_VerifyInit_ex(ver_ctx, digest, NULL);
if (!res) {
EVP_MD_CTX_cleanup(ver_ctx);
return (-1);
}
if (co->offset[NDN_PCO_B_Witness] != co->offset[NDN_PCO_E_Witness]) {
/* The witness is a DigestInfo, where the octet-string therein encapsulates
* a sequence of [integer (origin 1 node#), sequence of [octet-string]]
* where the inner octet-string is the concatenated hashes on the merkle-path
*/
res = ndn_ref_tagged_BLOB(NDN_DTAG_Witness, msg,
co->offset[NDN_PCO_B_Witness],
co->offset[NDN_PCO_E_Witness],
&witness,
&witness_size);
if (res < 0) {
EVP_MD_CTX_cleanup(ver_ctx);
return (-1);
}
digest_info = d2i_X509_SIG(NULL, &witness, witness_size);
/* digest_info->algor->algorithm->{length, data}
* digest_info->digest->{length, type, data}
*/
/* ...2.2 is an MHT w/ SHA256 */
ASN1_OBJECT *merkle_hash_tree_oid = OBJ_txt2obj("1.2.840.113550.11.1.2.2", 1);
if (0 != OBJ_cmp(digest_info->algor->algorithm, merkle_hash_tree_oid)) {
fprintf(stderr, "A witness is present without an MHT OID!\n");
EVP_MD_CTX_cleanup(ver_ctx);
ASN1_OBJECT_free(merkle_hash_tree_oid);
return (-1);
}
/* we're doing an MHT */
ASN1_OBJECT_free(merkle_hash_tree_oid);
merkle_path_digest = EVP_sha256();
/* DER-encoded in the digest_info's digest ASN.1 octet string is the Merkle path info */
dd = digest_info->digest->data;
merkle_path_info = d2i_MP_info(NULL, &dd, digest_info->digest->length);
X509_SIG_free(digest_info);
#ifdef DEBUG
int x,h;
int node = ASN1_INTEGER_get(merkle_path_info->node);
int hash_count = sk_ASN1_OCTET_STRING_num(merkle_path_info->hashes);
ASN1_OCTET_STRING *hash;
fprintf(stderr, "A witness is present with an MHT OID\n");
fprintf(stderr, "This is node %d, with %d hashes\n", node, hash_count);
for (h = 0; h < hash_count; h++) {
//.........这里部分代码省略.........
开发者ID:cawka,项目名称:ndnd-tlv,代码行数:101,代码来源:ndn_signing.c
示例20: compare
inline int compare(const object& lhs, const object& rhs)
{
return OBJ_cmp(lhs.raw(), rhs.raw());
}
开发者ID:Cyarix,项目名称:freelan,代码行数:4,代码来源:object.hpp
注:本文中的OBJ_cmp函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论