1/* 2 * crl.c 3 * "CertificateRevokationList" ASN.1 module encode/decode/extracting/matching/free C src. 4 * This file was generated by modified eSMACC compiler Fri Jan 21 11:25:24 2005 5 * The generated files are supposed to be compiled as a module for OpenLDAP Software 6 */ 7 8#include "crl.h" 9 10BDecComponentCertificateListTop( void* mem_op, GenBuf* b, void *v, AsnLen* bytesDecoded,int mode) { 11 AsnTag tag; 12 AsnLen elmtLen; 13 14 tag = BDecTag ( b, bytesDecoded ); 15 elmtLen = BDecLen ( b, bytesDecoded ); 16 if ( elmtLen <= 0 ) return (-1); 17 if ( tag != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE) ) { 18 return (-1); 19 } 20 21 return BDecComponentCertificateList( mem_op, b, tag, elmtLen, ( ComponentCertificateList**)v, (AsnLen*)bytesDecoded, mode ); 22} 23 24 25void init_module_CertificateRevokationList() { 26 InstallOidDecoderMapping( "2.5.4.39", NULL, 27 GDecComponentCertificateList, 28 BDecComponentCertificateListTop, 29 ExtractingComponentCertificateList, 30 MatchingComponentCertificateList); 31} 32 33int 34MatchingComponentTBSCertListSeqOfSeq ( char* oid, ComponentSyntaxInfo* csi_attr, ComponentSyntaxInfo* csi_assert ) { 35 int rc; 36 MatchingRule* mr; 37 38 if ( oid ) { 39 mr = retrieve_matching_rule( oid, csi_attr->csi_comp_desc->cd_type_id); 40 if ( mr ) return component_value_match( mr, csi_attr, csi_assert ); 41 } 42 43 rc = 1; 44 rc = MatchingComponentCertificateSerialNumber ( oid, (ComponentSyntaxInfo*)&((ComponentTBSCertListSeqOfSeq*)csi_attr)->userCertificate, (ComponentSyntaxInfo*)&((ComponentTBSCertListSeqOfSeq*)csi_assert)->userCertificate ); 45 if ( rc != LDAP_COMPARE_TRUE ) 46 return rc; 47 rc = MatchingComponentTime ( oid, (ComponentSyntaxInfo*)((ComponentTBSCertListSeqOfSeq*)csi_attr)->revocationDate, (ComponentSyntaxInfo*)((ComponentTBSCertListSeqOfSeq*)csi_assert)->revocationDate ); 48 if ( rc != LDAP_COMPARE_TRUE ) 49 return rc; 50 if(COMPONENTNOT_NULL( ((ComponentTBSCertListSeqOfSeq*)csi_attr)->crlEntryExtensions ) ) { 51 rc = MatchingComponentExtensions ( oid, (ComponentSyntaxInfo*)((ComponentTBSCertListSeqOfSeq*)csi_attr)->crlEntryExtensions, (ComponentSyntaxInfo*)((ComponentTBSCertListSeqOfSeq*)csi_assert)->crlEntryExtensions ); 52 if ( rc != LDAP_COMPARE_TRUE ) 53 return rc; 54 } 55 return LDAP_COMPARE_TRUE; 56} /* BMatchingComponentTBSCertListSeqOfSeq */ 57 58void* 59ExtractingComponentTBSCertListSeqOfSeq ( void* mem_op, ComponentReference* cr, ComponentTBSCertListSeqOfSeq *comp ) 60{ 61 62 if ( ( comp->userCertificate.identifier.bv_val && strncmp(comp->userCertificate.identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) || ( strncmp(comp->userCertificate.id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) ) { 63 if ( cr->cr_curr->ci_next == NULL ) 64 return &comp->userCertificate; 65 else 66 return NULL; 67 } 68 if ( ( comp->revocationDate->identifier.bv_val && strncmp(comp->revocationDate->identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) || ( strncmp(comp->revocationDate->id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) ) { 69 if ( cr->cr_curr->ci_next == NULL ) 70 return comp->revocationDate; 71 else { 72 cr->cr_curr = cr->cr_curr->ci_next; 73 return ExtractingComponentTime ( mem_op, cr, comp->revocationDate ); 74 } 75 } 76 if ( ( comp->crlEntryExtensions->identifier.bv_val && strncmp(comp->crlEntryExtensions->identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) || ( strncmp(comp->crlEntryExtensions->id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) ) { 77 if ( cr->cr_curr->ci_next == NULL ) 78 return comp->crlEntryExtensions; 79 else { 80 cr->cr_curr = cr->cr_curr->ci_next; 81 return ExtractingComponentExtensions ( mem_op, cr, comp->crlEntryExtensions ); 82 } 83 } 84 return NULL; 85} /* ExtractingComponentTBSCertListSeqOfSeq */ 86 87int 88BDecComponentTBSCertListSeqOfSeq PARAMS ((b, tagId0, elmtLen0, v, bytesDecoded, mode), 89void* mem_op _AND_ 90GenBuf * b _AND_ 91AsnTag tagId0 _AND_ 92AsnLen elmtLen0 _AND_ 93ComponentTBSCertListSeqOfSeq **v _AND_ 94AsnLen *bytesDecoded _AND_ 95int mode) 96{ 97 int seqDone = FALSE; 98 AsnLen totalElmtsLen1 = 0; 99 AsnLen elmtLen1; 100 AsnTag tagId1; 101 int mandatoryElmtCount1 = 0; 102 AsnLen totalElmtsLen2 = 0; 103 AsnLen elmtLen2; 104 AsnTag tagId2; 105 int old_mode = mode; 106 int rc; 107 ComponentTBSCertListSeqOfSeq *k, *t, c_temp; 108 109 110 if ( !(mode & DEC_ALLOC_MODE_1) ) { 111 memset(&c_temp,0,sizeof(c_temp)); 112 k = &c_temp; 113 } else 114 k = t = *v; 115 mode = DEC_ALLOC_MODE_2; 116 tagId1 = BDecTag (b, &totalElmtsLen1 ); 117 118 if (((tagId1 == MAKE_TAG_ID (UNIV, PRIM, INTEGER_TAG_CODE)))) 119 { 120 elmtLen1 = BDecLen (b, &totalElmtsLen1 ); 121 rc = BDecComponentCertificateSerialNumber (mem_op, b, tagId1, elmtLen1, (&k->userCertificate), &totalElmtsLen1, mode); 122 if ( rc != LDAP_SUCCESS ) return rc; 123 (&k->userCertificate)->identifier.bv_val = (&k->userCertificate)->id_buf; 124 (&k->userCertificate)->identifier.bv_len = strlen("userCertificate"); 125 strcpy( (&k->userCertificate)->identifier.bv_val, "userCertificate"); 126 tagId1 = BDecTag (b, &totalElmtsLen1); 127 } 128 else 129 return -1; 130 131 132 133 if (((tagId1 == MAKE_TAG_ID (UNIV, PRIM, UTCTIME_TAG_CODE)) || 134(tagId1 == MAKE_TAG_ID (UNIV, CONS, UTCTIME_TAG_CODE)) || 135 (tagId1 ==MAKE_TAG_ID (UNIV, PRIM, GENERALIZEDTIME_TAG_CODE))|| 136 (tagId1 == MAKE_TAG_ID (UNIV, CONS, GENERALIZEDTIME_TAG_CODE)))) 137 { 138 elmtLen1 = BDecLen (b, &totalElmtsLen1 ); 139 rc = BDecComponentTime (mem_op, b, tagId1, elmtLen1, (&k->revocationDate), &totalElmtsLen1, mode); 140 if ( rc != LDAP_SUCCESS ) return rc; 141 (k->revocationDate)->identifier.bv_val = (k->revocationDate)->id_buf; 142 (k->revocationDate)->identifier.bv_len = strlen("revocationDate"); 143 strcpy( (k->revocationDate)->identifier.bv_val, "revocationDate"); 144 if ((elmtLen0 != INDEFINITE_LEN) && (totalElmtsLen1 == elmtLen0)) 145 seqDone = TRUE; 146 else 147 { 148 tagId1 = BDecTag (b, &totalElmtsLen1 ); 149 150 if ((elmtLen0 == INDEFINITE_LEN) && (tagId1 == EOC_TAG_ID)) 151 { 152 BDEC_2ND_EOC_OCTET (b, &totalElmtsLen1 ) 153 seqDone = TRUE; 154 } 155 } 156 } 157 else 158 return -1; 159 160 161 162 if ((!seqDone) && ((tagId1 == MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE)))) 163 { 164 elmtLen1 = BDecLen (b, &totalElmtsLen1 ); 165 rc = BDecComponentExtensions (mem_op, b, tagId1, elmtLen1, (&k->crlEntryExtensions), &totalElmtsLen1, mode); 166 if ( rc != LDAP_SUCCESS ) return rc; 167 (k->crlEntryExtensions)->identifier.bv_val = (k->crlEntryExtensions)->id_buf; 168 (k->crlEntryExtensions)->identifier.bv_len = strlen("crlEntryExtensions"); 169 strcpy( (k->crlEntryExtensions)->identifier.bv_val, "crlEntryExtensions"); 170 seqDone = TRUE; 171 if (elmtLen0 == INDEFINITE_LEN) 172 BDecEoc (b, &totalElmtsLen1 ); 173 else if (totalElmtsLen1 != elmtLen0) 174 return -1; 175 176 } 177 178 179 if (!seqDone) 180 return -1; 181 182 if( !(old_mode & DEC_ALLOC_MODE_1) ) { 183 *v = t = (ComponentTBSCertListSeqOfSeq*) CompAlloc( mem_op, sizeof(ComponentTBSCertListSeqOfSeq) ); 184 if ( !t ) return -1; 185 *t = *k; 186 } 187 t->syntax = (Syntax*)NULL; 188 t->comp_desc = CompAlloc( mem_op, sizeof( ComponentDesc ) ); 189 if ( !t->comp_desc ) { 190 free ( t ); 191 return -1; 192 } 193 t->comp_desc->cd_ldap_encoder = (encoder_func*)NULL; 194 t->comp_desc->cd_gser_encoder = (encoder_func*)NULL; 195 t->comp_desc->cd_ber_encoder = (encoder_func*)NULL; 196 t->comp_desc->cd_gser_decoder = (gser_decoder_func*)GDecComponentTBSCertListSeqOfSeq ; 197 t->comp_desc->cd_ber_decoder = (ber_decoder_func*)BDecComponentTBSCertListSeqOfSeq ; 198 t->comp_desc->cd_free = (comp_free_func*)NULL; 199 t->comp_desc->cd_extract_i = (extract_component_from_id_func*)ExtractingComponentTBSCertListSeqOfSeq; 200 t->comp_desc->cd_type = ASN_COMPOSITE; 201 t->comp_desc->cd_type_id = COMPOSITE_ASN1_TYPE; 202 t->comp_desc->cd_all_match = (allcomponent_matching_func*)MatchingComponentTBSCertListSeqOfSeq; 203 (*bytesDecoded) += totalElmtsLen1; 204 return LDAP_SUCCESS; 205} /* BDecTBSCertListSeqOfSeq*/ 206 207int 208GDecComponentTBSCertListSeqOfSeq PARAMS (( mem_op,b, v, bytesDecoded, mode), 209void* mem_op _AND_ 210GenBuf * b _AND_ 211ComponentTBSCertListSeqOfSeq **v _AND_ 212AsnLen *bytesDecoded _AND_ 213int mode) 214{ 215 char* peek_head,*peek_head2; 216 int i, strLen,strLen2, rc, old_mode = mode; 217 ComponentTBSCertListSeqOfSeq *k,*t, c_temp; 218 219 220 if ( !(mode & DEC_ALLOC_MODE_1) ) { 221 memset(&c_temp,0,sizeof(c_temp)); 222 k = &c_temp; 223 } else 224 k = t = *v; 225 mode = DEC_ALLOC_MODE_2; 226 *bytesDecoded = 0; 227 if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){ 228 Asn1Error("Error during Reading { in encoded data"); 229 return LDAP_PROTOCOL_ERROR; 230 } 231 if(*peek_head != '{'){ 232 Asn1Error("Missing { in encoded data"); 233 return LDAP_PROTOCOL_ERROR; 234 } 235 236 if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){ 237 Asn1Error("Error during Reading identifier"); 238 return LDAP_PROTOCOL_ERROR; 239 } 240 if ( strncmp( peek_head, "userCertificate", strlen("userCertificate") ) == 0 ) { 241 rc = GDecComponentCertificateSerialNumber (mem_op, b, (&k->userCertificate), bytesDecoded, mode); 242 if ( rc != LDAP_SUCCESS ) return rc; 243 (&k->userCertificate)->identifier.bv_val = peek_head; 244 (&k->userCertificate)->identifier.bv_len = strLen; 245 if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){ 246 Asn1Error("Error during Reading , "); 247 return LDAP_PROTOCOL_ERROR; 248 } 249 if(*peek_head != ','){ 250 Asn1Error("Missing , in encoding"); 251 return LDAP_PROTOCOL_ERROR; 252 } 253 if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){ 254 Asn1Error("Error during Reading identifier"); 255 return LDAP_PROTOCOL_ERROR; 256 } 257 } 258 if ( strncmp( peek_head, "revocationDate", strlen("revocationDate") ) == 0 ) { 259 rc = GDecComponentTime (mem_op, b, (&k->revocationDate), bytesDecoded, mode); 260 if ( rc != LDAP_SUCCESS ) return rc; 261 ( k->revocationDate)->identifier.bv_val = peek_head; 262 ( k->revocationDate)->identifier.bv_len = strLen; 263 if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){ 264 Asn1Error("Error during Reading , "); 265 return LDAP_PROTOCOL_ERROR; 266 } 267 if(*peek_head != ','){ 268 Asn1Error("Missing , in encoding"); 269 return LDAP_PROTOCOL_ERROR; 270 } 271 if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){ 272 Asn1Error("Error during Reading identifier"); 273 return LDAP_PROTOCOL_ERROR; 274 } 275 } 276 if ( strncmp( peek_head, "crlEntryExtensions", strlen("crlEntryExtensions") ) == 0 ) { 277 rc = GDecComponentExtensions (mem_op, b, (&k->crlEntryExtensions), bytesDecoded, mode); 278 if ( rc != LDAP_SUCCESS ) return rc; 279 ( k->crlEntryExtensions)->identifier.bv_val = peek_head; 280 ( k->crlEntryExtensions)->identifier.bv_len = strLen; 281 } 282 if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ) { 283 Asn1Error("Error during Reading } in encoding"); 284 return LDAP_PROTOCOL_ERROR; 285 } 286 if(*peek_head != '}'){ 287 Asn1Error("Missing } in encoding"); 288 return LDAP_PROTOCOL_ERROR; 289 } 290 if( !(old_mode & DEC_ALLOC_MODE_1) ) { 291 *v = t = (ComponentTBSCertListSeqOfSeq*) CompAlloc( mem_op, sizeof(ComponentTBSCertListSeqOfSeq) ); 292 if ( !t ) return -1; 293 *t = *k; 294 } 295 t->syntax = (Syntax*)NULL; 296 t->comp_desc = CompAlloc( mem_op, sizeof( ComponentDesc ) ); 297 if ( !t->comp_desc ) { 298 free ( t ); 299 return -1; 300 } 301 t->comp_desc->cd_ldap_encoder = (encoder_func*)NULL; 302 t->comp_desc->cd_gser_encoder = (encoder_func*)NULL; 303 t->comp_desc->cd_ber_encoder = (encoder_func*)NULL; 304 t->comp_desc->cd_gser_decoder = (gser_decoder_func*)GDecComponentTBSCertListSeqOfSeq ; 305 t->comp_desc->cd_ber_decoder = (ber_decoder_func*)BDecComponentTBSCertListSeqOfSeq ; 306 t->comp_desc->cd_free = (comp_free_func*)NULL; 307 t->comp_desc->cd_extract_i = (extract_component_from_id_func*)ExtractingComponentTBSCertListSeqOfSeq; 308 t->comp_desc->cd_type = ASN_COMPOSITE; 309 t->comp_desc->cd_type_id = COMPOSITE_ASN1_TYPE; 310 t->comp_desc->cd_all_match = (allcomponent_matching_func*)MatchingComponentTBSCertListSeqOfSeq; 311 return LDAP_SUCCESS; 312} /* GDecTBSCertListSeqOfSeq*/ 313 314 315int 316MatchingComponentTBSCertListSeqOf ( char* oid, ComponentSyntaxInfo* csi_attr, ComponentSyntaxInfo* csi_assert ) { 317 int rc; 318 MatchingRule* mr; 319 void* component1, *component2; 320 AsnList *v1, *v2, t_list; 321 322 323 if ( oid ) { 324 mr = retrieve_matching_rule( oid, csi_attr->csi_comp_desc->cd_type_id); 325 if ( mr ) return component_value_match( mr, csi_attr, csi_assert ); 326 } 327 328 v1 = &((ComponentTBSCertListSeqOf*)csi_attr)->comp_list; 329 v2 = &((ComponentTBSCertListSeqOf*)csi_assert)->comp_list; 330 FOR_EACH_LIST_PAIR_ELMT(component1, component2, v1, v2) 331 { 332 if( MatchingComponentTBSCertListSeqOfSeq(oid, (ComponentSyntaxInfo*)component1, (ComponentSyntaxInfo*)component2) == LDAP_COMPARE_FALSE) { 333 return LDAP_COMPARE_FALSE; 334 } 335 } /* end of for */ 336 337 AsnListFirst( v1 ); 338 AsnListFirst( v2 ); 339 if( (!component1 && component2) || (component1 && !component2)) 340 return LDAP_COMPARE_FALSE; 341 else 342 return LDAP_COMPARE_TRUE; 343} /* BMatchingComponentTBSCertListSeqOfContent */ 344 345void* 346ExtractingComponentTBSCertListSeqOf ( void* mem_op, ComponentReference* cr, ComponentTBSCertListSeqOf *comp ) 347{ 348 int count = 0; 349 int total; 350 AsnList *v = &comp->comp_list; 351 ComponentInt *k; 352 ComponentTBSCertListSeqOfSeq *component; 353 354 355 switch ( cr->cr_curr->ci_type ) { 356 case LDAP_COMPREF_FROM_BEGINNING : 357 count = cr->cr_curr->ci_val.ci_from_beginning; 358 FOR_EACH_LIST_ELMT( component , v ) { 359 if( --count == 0 ) { 360 if( cr->cr_curr->ci_next == NULL ) 361 return component; 362 else { 363 cr->cr_curr = cr->cr_curr->ci_next; 364 return ExtractingComponentTBSCertListSeqOfSeq ( mem_op, cr, component ); 365 } 366 } 367 } 368 break; 369 case LDAP_COMPREF_FROM_END : 370 total = AsnListCount ( v ); 371 count = cr->cr_curr->ci_val.ci_from_end; 372 count = total + count +1; 373 FOR_EACH_LIST_ELMT ( component, v ) { 374 if( --count == 0 ) { 375 if( cr->cr_curr->ci_next == NULL ) 376 return component; 377 else { 378 cr->cr_curr = cr->cr_curr->ci_next; 379 return ExtractingComponentTBSCertListSeqOfSeq ( mem_op, cr, component ); 380 } 381 } 382 } 383 break; 384 case LDAP_COMPREF_ALL : 385 return comp; 386 case LDAP_COMPREF_COUNT : 387 k = (ComponentInt*)CompAlloc( mem_op, sizeof(ComponentInt)); 388 k->comp_desc = CompAlloc( mem_op, sizeof( ComponentDesc ) ); 389 k->comp_desc->cd_tag = (-1); 390 k->comp_desc->cd_gser_decoder = (gser_decoder_func*)GDecComponentInt; 391 k->comp_desc->cd_ber_decoder = (ber_decoder_func*)BDecComponentInt; 392 k->comp_desc->cd_extract_i = (extract_component_from_id_func*)NULL; 393 k->comp_desc->cd_type = ASN_BASIC; 394 k->comp_desc->cd_type_id = BASICTYPE_INTEGER; 395 k->comp_desc->cd_all_match = (allcomponent_matching_func*)MatchingComponentInt; 396 k->value = AsnListCount(v); 397 return k; 398 default : 399 return NULL; 400 } 401} /* ExtractingComponentTBSCertListSeqOf */ 402 403int 404BDecComponentTBSCertListSeqOf PARAMS ((b, tagId0, elmtLen0, v, bytesDecoded, mode), 405void* mem_op _AND_ 406GenBuf * b _AND_ 407AsnTag tagId0 _AND_ 408AsnLen elmtLen0 _AND_ 409ComponentTBSCertListSeqOf **v _AND_ 410AsnLen *bytesDecoded _AND_ 411int mode) 412{ 413 int seqDone = FALSE; 414 AsnLen totalElmtsLen1 = 0; 415 AsnLen elmtLen1; 416 AsnTag tagId1; 417 int mandatoryElmtCount1 = 0; 418 int old_mode = mode; 419 int rc; 420 ComponentTBSCertListSeqOf *k, *t, c_temp; 421 422 423 if ( !(mode & DEC_ALLOC_MODE_1) ) { 424 memset(&c_temp,0,sizeof(c_temp)); 425 k = &c_temp; 426 } else 427 k = t = *v; 428 mode = DEC_ALLOC_MODE_2; 429 AsnListInit(&k->comp_list,sizeof(ComponentTBSCertListSeqOfSeq)); 430 for (totalElmtsLen1 = 0; (totalElmtsLen1 < elmtLen0) || (elmtLen0 == INDEFINITE_LEN);) 431 { 432 ComponentTBSCertListSeqOfSeq **tmpVar; 433 tagId1 = BDecTag (b, &totalElmtsLen1 ); 434 435 if ((tagId1 == EOC_TAG_ID) && (elmtLen0 == INDEFINITE_LEN)) 436 { 437 BDEC_2ND_EOC_OCTET (b, &totalElmtsLen1 ) 438 break; /* got EOC so can exit this SET OF/SEQ OF's for loop*/ 439 } 440 if ((tagId1 == MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE))) 441 { 442 elmtLen1 = BDecLen (b, &totalElmtsLen1 ); 443 tmpVar = (ComponentTBSCertListSeqOfSeq**) CompAsnListAppend (mem_op,&k->comp_list); 444 rc = BDecComponentTBSCertListSeqOfSeq (mem_op, b, tagId1, elmtLen1, tmpVar, &totalElmtsLen1, mode); 445 if ( rc != LDAP_SUCCESS ) return rc; 446 } /* end of tag check if */ 447 else /* wrong tag */ 448 { 449 Asn1Error ("Unexpected Tag\n"); 450 return -1; 451 } 452 } /* end of for */ 453 454 if( !(old_mode & DEC_ALLOC_MODE_1) ) { 455 *v = t = (ComponentTBSCertListSeqOf*) CompAlloc( mem_op, sizeof(ComponentTBSCertListSeqOf) ); 456 if ( !t ) return -1; 457 *t = *k; 458 } 459 t->syntax = (Syntax*)NULL; 460 t->comp_desc = CompAlloc( mem_op, sizeof( ComponentDesc ) ); 461 if ( !t->comp_desc ) { 462 free ( t ); 463 return -1; 464 } 465 t->comp_desc->cd_ldap_encoder = (encoder_func*)NULL; 466 t->comp_desc->cd_gser_encoder = (encoder_func*)NULL; 467 t->comp_desc->cd_ber_encoder = (encoder_func*)NULL; 468 t->comp_desc->cd_gser_decoder = (gser_decoder_func*)GDecComponentTBSCertListSeqOf ; 469 t->comp_desc->cd_ber_decoder = (ber_decoder_func*)BDecComponentTBSCertListSeqOf ; 470 t->comp_desc->cd_free = (comp_free_func*)NULL; 471 t->comp_desc->cd_extract_i = (extract_component_from_id_func*)ExtractingComponentTBSCertListSeqOf; 472 t->comp_desc->cd_type = ASN_COMPOSITE; 473 t->comp_desc->cd_type_id = COMPOSITE_ASN1_TYPE; 474 t->comp_desc->cd_all_match = (allcomponent_matching_func*)MatchingComponentTBSCertListSeqOf; 475 (*bytesDecoded) += totalElmtsLen1; 476 return LDAP_SUCCESS; 477} /* BDecTBSCertListSeqOfContent */ 478 479int 480GDecComponentTBSCertListSeqOf PARAMS (( mem_op,b, v, bytesDecoded, mode), 481void* mem_op _AND_ 482GenBuf * b _AND_ 483ComponentTBSCertListSeqOf **v _AND_ 484AsnLen *bytesDecoded _AND_ 485int mode) 486{ 487 char* peek_head,*peek_head2; 488 int i, strLen,strLen2, rc, old_mode = mode; 489 ComponentTBSCertListSeqOf *k,*t, c_temp; 490 491 492 int ElmtsLen1; 493 if ( !(mode & DEC_ALLOC_MODE_1) ) { 494 memset(&c_temp,0,sizeof(c_temp)); 495 k = &c_temp; 496 } else 497 k = t = *v; 498 mode = DEC_ALLOC_MODE_2; 499 AsnListInit( &k->comp_list, sizeof( ComponentTBSCertListSeqOfSeq ) ); 500 *bytesDecoded = 0; 501 if( !(strLen = LocateNextGSERToken(mem_op,b, &peek_head, GSER_PEEK)) ){ 502 Asn1Error("Error during Reading { in encoding"); 503 return LDAP_PROTOCOL_ERROR; 504 } 505 if(*peek_head != '{'){ 506 Asn1Error("Missing { in encoded data"); 507 return LDAP_PROTOCOL_ERROR; 508 } 509 510 for (ElmtsLen1 = 0; ElmtsLen1 >= INDEFINITE_LEN; ElmtsLen1++) 511 { 512 ComponentTBSCertListSeqOfSeq **tmpVar; 513 if( !(strLen = LocateNextGSERToken(mem_op,b, &peek_head, GSER_NO_COPY)) ){ 514 Asn1Error("Error during Reading{ in encoding"); 515 return LDAP_PROTOCOL_ERROR; 516 } 517 if(*peek_head == '}') break; 518 if( !(*peek_head == '{' || *peek_head ==',') ) { 519 return LDAP_PROTOCOL_ERROR; 520 } 521 tmpVar = (ComponentTBSCertListSeqOfSeq**) CompAsnListAppend (mem_op, &k->comp_list); 522 if ( tmpVar == NULL ) { 523 Asn1Error("Error during Reading{ in encoding"); 524 return LDAP_PROTOCOL_ERROR; 525 } 526 rc = GDecComponentTBSCertListSeqOfSeq (mem_op, b, tmpVar, bytesDecoded, mode); 527 if ( rc != LDAP_SUCCESS ) return rc; 528 } /* end of for */ 529 530 if( !(old_mode & DEC_ALLOC_MODE_1) ) { 531 *v = t = (ComponentTBSCertListSeqOf*) CompAlloc( mem_op, sizeof(ComponentTBSCertListSeqOf) ); 532 if ( !t ) return -1; 533 *t = *k; 534 } 535 t->syntax = (Syntax*)NULL; 536 t->comp_desc = CompAlloc( mem_op, sizeof( ComponentDesc ) ); 537 if ( !t->comp_desc ) { 538 free ( t ); 539 return -1; 540 } 541 t->comp_desc->cd_ldap_encoder = (encoder_func*)NULL; 542 t->comp_desc->cd_gser_encoder = (encoder_func*)NULL; 543 t->comp_desc->cd_ber_encoder = (encoder_func*)NULL; 544 t->comp_desc->cd_gser_decoder = (gser_decoder_func*)GDecComponentTBSCertListSeqOf ; 545 t->comp_desc->cd_ber_decoder = (ber_decoder_func*)BDecComponentTBSCertListSeqOf ; 546 t->comp_desc->cd_free = (comp_free_func*)NULL; 547 t->comp_desc->cd_extract_i = (extract_component_from_id_func*)ExtractingComponentTBSCertListSeqOf; 548 t->comp_desc->cd_type = ASN_COMPOSITE; 549 t->comp_desc->cd_type_id = COMPOSITE_ASN1_TYPE; 550 t->comp_desc->cd_all_match = (allcomponent_matching_func*)MatchingComponentTBSCertListSeqOf; 551 return LDAP_SUCCESS; 552} /* GDecTBSCertListSeqOfContent */ 553 554int 555MatchingComponentTBSCertList ( char* oid, ComponentSyntaxInfo* csi_attr, ComponentSyntaxInfo* csi_assert ) { 556 int rc; 557 MatchingRule* mr; 558 559 if ( oid ) { 560 mr = retrieve_matching_rule( oid, csi_attr->csi_comp_desc->cd_type_id); 561 if ( mr ) return component_value_match( mr, csi_attr, csi_assert ); 562 } 563 564 rc = 1; 565 if(COMPONENTNOT_NULL( ((ComponentTBSCertList*)csi_attr)->version ) ) { 566 rc = MatchingComponentVersion ( oid, (ComponentSyntaxInfo*)((ComponentTBSCertList*)csi_attr)->version, (ComponentSyntaxInfo*)((ComponentTBSCertList*)csi_assert)->version ); 567 if ( rc != LDAP_COMPARE_TRUE ) 568 return rc; 569 } 570 rc = MatchingComponentAlgorithmIdentifier ( oid, (ComponentSyntaxInfo*)((ComponentTBSCertList*)csi_attr)->signature, (ComponentSyntaxInfo*)((ComponentTBSCertList*)csi_assert)->signature ); 571 if ( rc != LDAP_COMPARE_TRUE ) 572 return rc; 573 rc = MatchingComponentName ( oid, (ComponentSyntaxInfo*)((ComponentTBSCertList*)csi_attr)->issuer, (ComponentSyntaxInfo*)((ComponentTBSCertList*)csi_assert)->issuer ); 574 if ( rc != LDAP_COMPARE_TRUE ) 575 return rc; 576 rc = MatchingComponentTime ( oid, (ComponentSyntaxInfo*)((ComponentTBSCertList*)csi_attr)->thisUpdate, (ComponentSyntaxInfo*)((ComponentTBSCertList*)csi_assert)->thisUpdate ); 577 if ( rc != LDAP_COMPARE_TRUE ) 578 return rc; 579 if(COMPONENTNOT_NULL( ((ComponentTBSCertList*)csi_attr)->nextUpdate ) ) { 580 rc = MatchingComponentTime ( oid, (ComponentSyntaxInfo*)((ComponentTBSCertList*)csi_attr)->nextUpdate, (ComponentSyntaxInfo*)((ComponentTBSCertList*)csi_assert)->nextUpdate ); 581 if ( rc != LDAP_COMPARE_TRUE ) 582 return rc; 583 } 584 rc = MatchingComponentTBSCertListSeqOf ( oid, (ComponentSyntaxInfo*)((ComponentTBSCertList*)csi_attr)->revokedCertificates, (ComponentSyntaxInfo*)((ComponentTBSCertList*)csi_assert)->revokedCertificates ); 585 if ( rc != LDAP_COMPARE_TRUE ) 586 return rc; 587 if(COMPONENTNOT_NULL( ((ComponentTBSCertList*)csi_attr)->crlExtensions ) ) { 588 rc = MatchingComponentExtensions ( oid, (ComponentSyntaxInfo*)((ComponentTBSCertList*)csi_attr)->crlExtensions, (ComponentSyntaxInfo*)((ComponentTBSCertList*)csi_assert)->crlExtensions ); 589 if ( rc != LDAP_COMPARE_TRUE ) 590 return rc; 591 } 592 return LDAP_COMPARE_TRUE; 593} /* BMatchingComponentTBSCertList */ 594 595void* 596ExtractingComponentTBSCertList ( void* mem_op, ComponentReference* cr, ComponentTBSCertList *comp ) 597{ 598 599 if ( ( comp->version->identifier.bv_val && strncmp(comp->version->identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) || ( strncmp(comp->version->id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) ) { 600 if ( cr->cr_curr->ci_next == NULL ) 601 return comp->version; 602 else { 603 cr->cr_curr = cr->cr_curr->ci_next; 604 return ExtractingComponentVersion ( mem_op, cr, comp->version ); 605 } 606 } 607 if ( ( comp->signature->identifier.bv_val && strncmp(comp->signature->identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) || ( strncmp(comp->signature->id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) ) { 608 if ( cr->cr_curr->ci_next == NULL ) 609 return comp->signature; 610 else { 611 cr->cr_curr = cr->cr_curr->ci_next; 612 return ExtractingComponentAlgorithmIdentifier ( mem_op, cr, comp->signature ); 613 } 614 } 615 if ( ( comp->issuer->identifier.bv_val && strncmp(comp->issuer->identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) || ( strncmp(comp->issuer->id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) ) { 616 if ( cr->cr_curr->ci_next == NULL ) 617 return comp->issuer; 618 else { 619 cr->cr_curr = cr->cr_curr->ci_next; 620 return ExtractingComponentName ( mem_op, cr, comp->issuer ); 621 } 622 } 623 if ( ( comp->thisUpdate->identifier.bv_val && strncmp(comp->thisUpdate->identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) || ( strncmp(comp->thisUpdate->id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) ) { 624 if ( cr->cr_curr->ci_next == NULL ) 625 return comp->thisUpdate; 626 else { 627 cr->cr_curr = cr->cr_curr->ci_next; 628 return ExtractingComponentTime ( mem_op, cr, comp->thisUpdate ); 629 } 630 } 631 if ( ( comp->nextUpdate->identifier.bv_val && strncmp(comp->nextUpdate->identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) || ( strncmp(comp->nextUpdate->id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) ) { 632 if ( cr->cr_curr->ci_next == NULL ) 633 return comp->nextUpdate; 634 else { 635 cr->cr_curr = cr->cr_curr->ci_next; 636 return ExtractingComponentTime ( mem_op, cr, comp->nextUpdate ); 637 } 638 } 639 if ( ( comp->revokedCertificates->identifier.bv_val && strncmp(comp->revokedCertificates->identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) || ( strncmp(comp->revokedCertificates->id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) ) { 640 if ( cr->cr_curr->ci_next == NULL ) 641 return comp->revokedCertificates; 642 else { 643 cr->cr_curr = cr->cr_curr->ci_next; 644 return ExtractingComponentTBSCertListSeqOf ( mem_op, cr, comp->revokedCertificates ); 645 } 646 } 647 if ( ( comp->crlExtensions->identifier.bv_val && strncmp(comp->crlExtensions->identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) || ( strncmp(comp->crlExtensions->id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) ) { 648 if ( cr->cr_curr->ci_next == NULL ) 649 return comp->crlExtensions; 650 else { 651 cr->cr_curr = cr->cr_curr->ci_next; 652 return ExtractingComponentExtensions ( mem_op, cr, comp->crlExtensions ); 653 } 654 } 655 return NULL; 656} /* ExtractingComponentTBSCertList */ 657 658int 659BDecComponentTBSCertList PARAMS ((b, tagId0, elmtLen0, v, bytesDecoded, mode), 660void* mem_op _AND_ 661GenBuf * b _AND_ 662AsnTag tagId0 _AND_ 663AsnLen elmtLen0 _AND_ 664ComponentTBSCertList **v _AND_ 665AsnLen *bytesDecoded _AND_ 666int mode) 667{ 668 int seqDone = FALSE; 669 AsnLen totalElmtsLen1 = 0; 670 AsnLen elmtLen1; 671 AsnTag tagId1; 672 int mandatoryElmtCount1 = 0; 673 AsnLen totalElmtsLen2 = 0; 674 AsnLen elmtLen2; 675 AsnTag tagId2; 676 int old_mode = mode; 677 int rc; 678 ComponentTBSCertList *k, *t, c_temp; 679 680 681 if ( !(mode & DEC_ALLOC_MODE_1) ) { 682 memset(&c_temp,0,sizeof(c_temp)); 683 k = &c_temp; 684 } else 685 k = t = *v; 686 mode = DEC_ALLOC_MODE_2; 687 tagId1 = BDecTag (b, &totalElmtsLen1 ); 688 689 if (((tagId1 == MAKE_TAG_ID (UNIV, PRIM, INTEGER_TAG_CODE)))) 690 { 691 elmtLen1 = BDecLen (b, &totalElmtsLen1 ); 692 rc = BDecComponentVersion (mem_op, b, tagId1, elmtLen1, (&k->version), &totalElmtsLen1, DEC_ALLOC_MODE_0 ); 693 if ( rc != LDAP_SUCCESS ) return rc; 694 (k->version)->identifier.bv_val = (k->version)->id_buf; 695 (k->version)->identifier.bv_len = strlen("version"); 696 strcpy( (k->version)->identifier.bv_val, "version"); 697 tagId1 = BDecTag (b, &totalElmtsLen1); 698 } 699 700 701 if (((tagId1 == MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE)))) 702 { 703 elmtLen1 = BDecLen (b, &totalElmtsLen1 ); 704 rc = BDecComponentAlgorithmIdentifier (mem_op, b, tagId1, elmtLen1, (&k->signature), &totalElmtsLen1, mode); 705 if ( rc != LDAP_SUCCESS ) return rc; 706 (k->signature)->identifier.bv_val = (k->signature)->id_buf; 707 (k->signature)->identifier.bv_len = strlen("signature"); 708 strcpy( (k->signature)->identifier.bv_val, "signature"); 709 tagId1 = BDecTag (b, &totalElmtsLen1); 710 } 711 else 712 return -1; 713 714 715 716 if (((tagId1 == MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE)))) 717 { 718 elmtLen1 = BDecLen (b, &totalElmtsLen1 ); 719 rc = BDecComponentName (mem_op, b, tagId1, elmtLen1, (&k->issuer), &totalElmtsLen1, mode); 720 if ( rc != LDAP_SUCCESS ) return rc; 721 (k->issuer)->identifier.bv_val = (k->issuer)->id_buf; 722 (k->issuer)->identifier.bv_len = strlen("issuer"); 723 strcpy( (k->issuer)->identifier.bv_val, "issuer"); 724 tagId1 = BDecTag (b, &totalElmtsLen1); 725 } 726 else 727 return -1; 728 729 730 731 if (((tagId1 == MAKE_TAG_ID (UNIV, PRIM, UTCTIME_TAG_CODE)) || 732(tagId1 == MAKE_TAG_ID (UNIV, CONS, UTCTIME_TAG_CODE)) || 733 (tagId1 ==MAKE_TAG_ID (UNIV, PRIM, GENERALIZEDTIME_TAG_CODE))|| 734 (tagId1 == MAKE_TAG_ID (UNIV, CONS, GENERALIZEDTIME_TAG_CODE)))) 735 { 736 elmtLen1 = BDecLen (b, &totalElmtsLen1 ); 737 rc = BDecComponentTime (mem_op, b, tagId1, elmtLen1, (&k->thisUpdate), &totalElmtsLen1, mode); 738 if ( rc != LDAP_SUCCESS ) return rc; 739 (k->thisUpdate)->identifier.bv_val = (k->thisUpdate)->id_buf; 740 (k->thisUpdate)->identifier.bv_len = strlen("thisUpdate"); 741 strcpy( (k->thisUpdate)->identifier.bv_val, "thisUpdate"); 742 tagId1 = BDecTag (b, &totalElmtsLen1); 743 } 744 else 745 return -1; 746 747 748 749 if (((tagId1 == MAKE_TAG_ID (UNIV, PRIM, UTCTIME_TAG_CODE)) || 750(tagId1 == MAKE_TAG_ID (UNIV, CONS, UTCTIME_TAG_CODE)) || 751 (tagId1 ==MAKE_TAG_ID (UNIV, PRIM, GENERALIZEDTIME_TAG_CODE))|| 752 (tagId1 == MAKE_TAG_ID (UNIV, CONS, GENERALIZEDTIME_TAG_CODE)))) 753 { 754 elmtLen1 = BDecLen (b, &totalElmtsLen1 ); 755 rc = BDecComponentTime (mem_op, b, tagId1, elmtLen1, (&k->nextUpdate), &totalElmtsLen1, mode); 756 if ( rc != LDAP_SUCCESS ) return rc; 757 (k->nextUpdate)->identifier.bv_val = (k->nextUpdate)->id_buf; 758 (k->nextUpdate)->identifier.bv_len = strlen("nextUpdate"); 759 strcpy( (k->nextUpdate)->identifier.bv_val, "nextUpdate"); 760 tagId1 = BDecTag (b, &totalElmtsLen1); 761 } 762 763 764 if (((tagId1 == MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE)))) 765 { 766 elmtLen1 = BDecLen (b, &totalElmtsLen1 ); 767 rc = BDecComponentTBSCertListSeqOf (mem_op, b, tagId1, elmtLen1, (&k->revokedCertificates), &totalElmtsLen1, mode); 768 if ( rc != LDAP_SUCCESS ) return rc; 769 (k->revokedCertificates)->identifier.bv_val = (k->revokedCertificates)->id_buf; 770 (k->revokedCertificates)->identifier.bv_len = strlen("revokedCertificates"); 771 strcpy( (k->revokedCertificates)->identifier.bv_val, "revokedCertificates"); 772 if ((elmtLen0 != INDEFINITE_LEN) && (totalElmtsLen1 == elmtLen0)) 773 seqDone = TRUE; 774 else 775 { 776 tagId1 = BDecTag (b, &totalElmtsLen1 ); 777 778 if ((elmtLen0 == INDEFINITE_LEN) && (tagId1 == EOC_TAG_ID)) 779 { 780 BDEC_2ND_EOC_OCTET (b, &totalElmtsLen1 ) 781 seqDone = TRUE; 782 } 783 } 784 } 785 else 786 return -1; 787 788 789 790 if ((!seqDone) && ((tagId1 == MAKE_TAG_ID (CNTX, CONS, 0)))) 791 { 792 elmtLen1 = BDecLen (b, &totalElmtsLen1 ); 793 tagId2 = BDecTag (b, &totalElmtsLen1 ); 794 795 if (tagId2 != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE)) 796 { 797 Asn1Error ("Unexpected Tag\n"); 798 return -1; 799 } 800 801 elmtLen2 = BDecLen (b, &totalElmtsLen1 ); 802 rc = BDecComponentExtensions (mem_op, b, tagId2, elmtLen2, (&k->crlExtensions), &totalElmtsLen1, mode); 803 if ( rc != LDAP_SUCCESS ) return rc; 804 (k->crlExtensions)->identifier.bv_val = (k->crlExtensions)->id_buf; 805 (k->crlExtensions)->identifier.bv_len = strlen("crlExtensions"); 806 strcpy( (k->crlExtensions)->identifier.bv_val, "crlExtensions"); 807 if (elmtLen1 == INDEFINITE_LEN) 808 BDecEoc (b, &totalElmtsLen1 ); 809 seqDone = TRUE; 810 if (elmtLen0 == INDEFINITE_LEN) 811 BDecEoc (b, &totalElmtsLen1 ); 812 else if (totalElmtsLen1 != elmtLen0) 813 return -1; 814 815 } 816 817 818 if (!seqDone) 819 return -1; 820 821 if( !(old_mode & DEC_ALLOC_MODE_1) ) { 822 *v = t = (ComponentTBSCertList*) CompAlloc( mem_op, sizeof(ComponentTBSCertList) ); 823 if ( !t ) return -1; 824 *t = *k; 825 } 826 t->syntax = (Syntax*)NULL; 827 t->comp_desc = CompAlloc( mem_op, sizeof( ComponentDesc ) ); 828 if ( !t->comp_desc ) { 829 free ( t ); 830 return -1; 831 } 832 t->comp_desc->cd_ldap_encoder = (encoder_func*)NULL; 833 t->comp_desc->cd_gser_encoder = (encoder_func*)NULL; 834 t->comp_desc->cd_ber_encoder = (encoder_func*)NULL; 835 t->comp_desc->cd_gser_decoder = (gser_decoder_func*)GDecComponentTBSCertList ; 836 t->comp_desc->cd_ber_decoder = (ber_decoder_func*)BDecComponentTBSCertList ; 837 t->comp_desc->cd_free = (comp_free_func*)NULL; 838 t->comp_desc->cd_extract_i = (extract_component_from_id_func*)ExtractingComponentTBSCertList; 839 t->comp_desc->cd_type = ASN_COMPOSITE; 840 t->comp_desc->cd_type_id = COMPOSITE_ASN1_TYPE; 841 t->comp_desc->cd_all_match = (allcomponent_matching_func*)MatchingComponentTBSCertList; 842 (*bytesDecoded) += totalElmtsLen1; 843 return LDAP_SUCCESS; 844} /* BDecTBSCertList*/ 845 846int 847GDecComponentTBSCertList PARAMS (( mem_op,b, v, bytesDecoded, mode), 848void* mem_op _AND_ 849GenBuf * b _AND_ 850ComponentTBSCertList **v _AND_ 851AsnLen *bytesDecoded _AND_ 852int mode) 853{ 854 char* peek_head,*peek_head2; 855 int i, strLen,strLen2, rc, old_mode = mode; 856 ComponentTBSCertList *k,*t, c_temp; 857 858 859 if ( !(mode & DEC_ALLOC_MODE_1) ) { 860 memset(&c_temp,0,sizeof(c_temp)); 861 k = &c_temp; 862 } else 863 k = t = *v; 864 mode = DEC_ALLOC_MODE_2; 865 *bytesDecoded = 0; 866 if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){ 867 Asn1Error("Error during Reading { in encoded data"); 868 return LDAP_PROTOCOL_ERROR; 869 } 870 if(*peek_head != '{'){ 871 Asn1Error("Missing { in encoded data"); 872 return LDAP_PROTOCOL_ERROR; 873 } 874 875 if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){ 876 Asn1Error("Error during Reading identifier"); 877 return LDAP_PROTOCOL_ERROR; 878 } 879 if ( strncmp( peek_head, "version", strlen("version") ) == 0 ) { 880 rc = GDecComponentVersion (mem_op, b, (&k->version), bytesDecoded, DEC_ALLOC_MODE_0 ); 881 if ( rc != LDAP_SUCCESS ) return rc; 882 ( k->version)->identifier.bv_val = peek_head; 883 ( k->version)->identifier.bv_len = strLen; 884 if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){ 885 Asn1Error("Error during Reading , "); 886 return LDAP_PROTOCOL_ERROR; 887 } 888 if(*peek_head != ','){ 889 Asn1Error("Missing , in encoding"); 890 return LDAP_PROTOCOL_ERROR; 891 } 892 if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){ 893 Asn1Error("Error during Reading identifier"); 894 return LDAP_PROTOCOL_ERROR; 895 } 896 } 897 if ( strncmp( peek_head, "signature", strlen("signature") ) == 0 ) { 898 rc = GDecComponentAlgorithmIdentifier (mem_op, b, (&k->signature), bytesDecoded, mode); 899 if ( rc != LDAP_SUCCESS ) return rc; 900 ( k->signature)->identifier.bv_val = peek_head; 901 ( k->signature)->identifier.bv_len = strLen; 902 if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){ 903 Asn1Error("Error during Reading , "); 904 return LDAP_PROTOCOL_ERROR; 905 } 906 if(*peek_head != ','){ 907 Asn1Error("Missing , in encoding"); 908 return LDAP_PROTOCOL_ERROR; 909 } 910 if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){ 911 Asn1Error("Error during Reading identifier"); 912 return LDAP_PROTOCOL_ERROR; 913 } 914 } 915 if ( strncmp( peek_head, "issuer", strlen("issuer") ) == 0 ) { 916 rc = GDecComponentName (mem_op, b, (&k->issuer), bytesDecoded, mode); 917 if ( rc != LDAP_SUCCESS ) return rc; 918 ( k->issuer)->identifier.bv_val = peek_head; 919 ( k->issuer)->identifier.bv_len = strLen; 920 if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){ 921 Asn1Error("Error during Reading , "); 922 return LDAP_PROTOCOL_ERROR; 923 } 924 if(*peek_head != ','){ 925 Asn1Error("Missing , in encoding"); 926 return LDAP_PROTOCOL_ERROR; 927 } 928 if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){ 929 Asn1Error("Error during Reading identifier"); 930 return LDAP_PROTOCOL_ERROR; 931 } 932 } 933 if ( strncmp( peek_head, "thisUpdate", strlen("thisUpdate") ) == 0 ) { 934 rc = GDecComponentTime (mem_op, b, (&k->thisUpdate), bytesDecoded, mode); 935 if ( rc != LDAP_SUCCESS ) return rc; 936 ( k->thisUpdate)->identifier.bv_val = peek_head; 937 ( k->thisUpdate)->identifier.bv_len = strLen; 938 if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){ 939 Asn1Error("Error during Reading , "); 940 return LDAP_PROTOCOL_ERROR; 941 } 942 if(*peek_head != ','){ 943 Asn1Error("Missing , in encoding"); 944 return LDAP_PROTOCOL_ERROR; 945 } 946 if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){ 947 Asn1Error("Error during Reading identifier"); 948 return LDAP_PROTOCOL_ERROR; 949 } 950 } 951 if ( strncmp( peek_head, "nextUpdate", strlen("nextUpdate") ) == 0 ) { 952 rc = GDecComponentTime (mem_op, b, (&k->nextUpdate), bytesDecoded, mode); 953 if ( rc != LDAP_SUCCESS ) return rc; 954 ( k->nextUpdate)->identifier.bv_val = peek_head; 955 ( k->nextUpdate)->identifier.bv_len = strLen; 956 if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){ 957 Asn1Error("Error during Reading , "); 958 return LDAP_PROTOCOL_ERROR; 959 } 960 if(*peek_head != ','){ 961 Asn1Error("Missing , in encoding"); 962 return LDAP_PROTOCOL_ERROR; 963 } 964 if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){ 965 Asn1Error("Error during Reading identifier"); 966 return LDAP_PROTOCOL_ERROR; 967 } 968 } 969 if ( strncmp( peek_head, "revokedCertificates", strlen("revokedCertificates") ) == 0 ) { 970 rc = GDecComponentTBSCertListSeqOf (mem_op, b, (&k->revokedCertificates), bytesDecoded, mode); 971 if ( rc != LDAP_SUCCESS ) return rc; 972 ( k->revokedCertificates)->identifier.bv_val = peek_head; 973 ( k->revokedCertificates)->identifier.bv_len = strLen; 974 if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){ 975 Asn1Error("Error during Reading , "); 976 return LDAP_PROTOCOL_ERROR; 977 } 978 if(*peek_head != ','){ 979 Asn1Error("Missing , in encoding"); 980 return LDAP_PROTOCOL_ERROR; 981 } 982 if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){ 983 Asn1Error("Error during Reading identifier"); 984 return LDAP_PROTOCOL_ERROR; 985 } 986 } 987 if ( strncmp( peek_head, "crlExtensions", strlen("crlExtensions") ) == 0 ) { 988 rc = GDecComponentExtensions (mem_op, b, (&k->crlExtensions), bytesDecoded, mode); 989 if ( rc != LDAP_SUCCESS ) return rc; 990 ( k->crlExtensions)->identifier.bv_val = peek_head; 991 ( k->crlExtensions)->identifier.bv_len = strLen; 992 } 993 if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ) { 994 Asn1Error("Error during Reading } in encoding"); 995 return LDAP_PROTOCOL_ERROR; 996 } 997 if(*peek_head != '}'){ 998 Asn1Error("Missing } in encoding"); 999 return LDAP_PROTOCOL_ERROR; 1000 } 1001 if( !(old_mode & DEC_ALLOC_MODE_1) ) { 1002 *v = t = (ComponentTBSCertList*) CompAlloc( mem_op, sizeof(ComponentTBSCertList) ); 1003 if ( !t ) return -1; 1004 *t = *k; 1005 } 1006 t->syntax = (Syntax*)NULL; 1007 t->comp_desc = CompAlloc( mem_op, sizeof( ComponentDesc ) ); 1008 if ( !t->comp_desc ) { 1009 free ( t ); 1010 return -1; 1011 } 1012 t->comp_desc->cd_ldap_encoder = (encoder_func*)NULL; 1013 t->comp_desc->cd_gser_encoder = (encoder_func*)NULL; 1014 t->comp_desc->cd_ber_encoder = (encoder_func*)NULL; 1015 t->comp_desc->cd_gser_decoder = (gser_decoder_func*)GDecComponentTBSCertList ; 1016 t->comp_desc->cd_ber_decoder = (ber_decoder_func*)BDecComponentTBSCertList ; 1017 t->comp_desc->cd_free = (comp_free_func*)NULL; 1018 t->comp_desc->cd_extract_i = (extract_component_from_id_func*)ExtractingComponentTBSCertList; 1019 t->comp_desc->cd_type = ASN_COMPOSITE; 1020 t->comp_desc->cd_type_id = COMPOSITE_ASN1_TYPE; 1021 t->comp_desc->cd_all_match = (allcomponent_matching_func*)MatchingComponentTBSCertList; 1022 return LDAP_SUCCESS; 1023} /* GDecTBSCertList*/ 1024 1025 1026int 1027MatchingComponentCertificateList ( char* oid, ComponentSyntaxInfo* csi_attr, ComponentSyntaxInfo* csi_assert ) { 1028 int rc; 1029 MatchingRule* mr; 1030 1031 if ( oid ) { 1032 mr = retrieve_matching_rule( oid, csi_attr->csi_comp_desc->cd_type_id); 1033 if ( mr ) return component_value_match( mr, csi_attr, csi_assert ); 1034 } 1035 1036 rc = 1; 1037 rc = MatchingComponentTBSCertList ( oid, (ComponentSyntaxInfo*)((ComponentCertificateList*)csi_attr)->tbsCertList, (ComponentSyntaxInfo*)((ComponentCertificateList*)csi_assert)->tbsCertList ); 1038 if ( rc != LDAP_COMPARE_TRUE ) 1039 return rc; 1040 rc = MatchingComponentAlgorithmIdentifier ( oid, (ComponentSyntaxInfo*)((ComponentCertificateList*)csi_attr)->signatureAlgorithm, (ComponentSyntaxInfo*)((ComponentCertificateList*)csi_assert)->signatureAlgorithm ); 1041 if ( rc != LDAP_COMPARE_TRUE ) 1042 return rc; 1043 rc = MatchingComponentBits ( oid, (ComponentSyntaxInfo*)&((ComponentCertificateList*)csi_attr)->signature, (ComponentSyntaxInfo*)&((ComponentCertificateList*)csi_assert)->signature ); 1044 if ( rc != LDAP_COMPARE_TRUE ) 1045 return rc; 1046 return LDAP_COMPARE_TRUE; 1047} /* BMatchingComponentCertificateList */ 1048 1049void* 1050ExtractingComponentCertificateList ( void* mem_op, ComponentReference* cr, ComponentCertificateList *comp ) 1051{ 1052 1053 if ( ( comp->tbsCertList->identifier.bv_val && strncmp(comp->tbsCertList->identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) || ( strncmp(comp->tbsCertList->id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) ) { 1054 if ( cr->cr_curr->ci_next == NULL ) 1055 return comp->tbsCertList; 1056 else { 1057 cr->cr_curr = cr->cr_curr->ci_next; 1058 return ExtractingComponentTBSCertList ( mem_op, cr, comp->tbsCertList ); 1059 } 1060 } 1061 if ( ( comp->signatureAlgorithm->identifier.bv_val && strncmp(comp->signatureAlgorithm->identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) || ( strncmp(comp->signatureAlgorithm->id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) ) { 1062 if ( cr->cr_curr->ci_next == NULL ) 1063 return comp->signatureAlgorithm; 1064 else { 1065 cr->cr_curr = cr->cr_curr->ci_next; 1066 return ExtractingComponentAlgorithmIdentifier ( mem_op, cr, comp->signatureAlgorithm ); 1067 } 1068 } 1069 if ( ( comp->signature.identifier.bv_val && strncmp(comp->signature.identifier.bv_val, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) || ( strncmp(comp->signature.id_buf, cr->cr_curr->ci_val.ci_identifier.bv_val,cr->cr_curr->ci_val.ci_identifier.bv_len) == 0 ) ) { 1070 if ( cr->cr_curr->ci_next == NULL ) 1071 return &comp->signature; 1072 else if ( cr->cr_curr->ci_next->ci_type == LDAP_COMPREF_CONTENT) { 1073 cr->cr_curr = cr->cr_curr->ci_next; 1074 return &comp->signature; 1075 } else { 1076 return NULL; 1077 } 1078 } 1079 return NULL; 1080} /* ExtractingComponentCertificateList */ 1081 1082int 1083BDecComponentCertificateList PARAMS ((b, tagId0, elmtLen0, v, bytesDecoded, mode), 1084void* mem_op _AND_ 1085GenBuf * b _AND_ 1086AsnTag tagId0 _AND_ 1087AsnLen elmtLen0 _AND_ 1088ComponentCertificateList **v _AND_ 1089AsnLen *bytesDecoded _AND_ 1090int mode) 1091{ 1092 int seqDone = FALSE; 1093 AsnLen totalElmtsLen1 = 0; 1094 AsnLen elmtLen1; 1095 AsnTag tagId1; 1096 int mandatoryElmtCount1 = 0; 1097 int old_mode = mode; 1098 int rc; 1099 ComponentCertificateList *k, *t, c_temp; 1100 1101 1102 if ( !(mode & DEC_ALLOC_MODE_1) ) { 1103 memset(&c_temp,0,sizeof(c_temp)); 1104 k = &c_temp; 1105 } else 1106 k = t = *v; 1107 mode = DEC_ALLOC_MODE_2; 1108 tagId1 = BDecTag (b, &totalElmtsLen1 ); 1109 1110 if (((tagId1 == MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE)))) 1111 { 1112 elmtLen1 = BDecLen (b, &totalElmtsLen1 ); 1113 rc = BDecComponentTBSCertList (mem_op, b, tagId1, elmtLen1, (&k->tbsCertList), &totalElmtsLen1, mode); 1114 if ( rc != LDAP_SUCCESS ) return rc; 1115 (k->tbsCertList)->identifier.bv_val = (k->tbsCertList)->id_buf; 1116 (k->tbsCertList)->identifier.bv_len = strlen("tbsCertList"); 1117 strcpy( (k->tbsCertList)->identifier.bv_val, "tbsCertList"); 1118 tagId1 = BDecTag (b, &totalElmtsLen1); 1119 } 1120 else 1121 return -1; 1122 1123 1124 1125 if (((tagId1 == MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE)))) 1126 { 1127 elmtLen1 = BDecLen (b, &totalElmtsLen1 ); 1128 rc = BDecComponentAlgorithmIdentifier (mem_op, b, tagId1, elmtLen1, (&k->signatureAlgorithm), &totalElmtsLen1, mode); 1129 if ( rc != LDAP_SUCCESS ) return rc; 1130 (k->signatureAlgorithm)->identifier.bv_val = (k->signatureAlgorithm)->id_buf; 1131 (k->signatureAlgorithm)->identifier.bv_len = strlen("signatureAlgorithm"); 1132 strcpy( (k->signatureAlgorithm)->identifier.bv_val, "signatureAlgorithm"); 1133 tagId1 = BDecTag (b, &totalElmtsLen1); 1134 } 1135 else 1136 return -1; 1137 1138 1139 1140 if (((tagId1 == MAKE_TAG_ID (UNIV, PRIM, BITSTRING_TAG_CODE)) || 1141(tagId1 == MAKE_TAG_ID (UNIV, CONS, BITSTRING_TAG_CODE)))) 1142 { 1143 elmtLen1 = BDecLen (b, &totalElmtsLen1 ); 1144 rc = BDecComponentBits (mem_op, b, tagId1, elmtLen1, (&k->signature), &totalElmtsLen1, mode); 1145 if ( rc != LDAP_SUCCESS ) return rc; 1146 (&k->signature)->identifier.bv_val = (&k->signature)->id_buf; 1147 (&k->signature)->identifier.bv_len = strlen("signature"); 1148 strcpy( (&k->signature)->identifier.bv_val, "signature"); 1149 seqDone = TRUE; 1150 if (elmtLen0 == INDEFINITE_LEN) 1151 BDecEoc (b, &totalElmtsLen1 ); 1152 else if (totalElmtsLen1 != elmtLen0) 1153 return -1; 1154 1155 } 1156 else 1157 return -1; 1158 1159 1160 1161 if (!seqDone) 1162 return -1; 1163 1164 if( !(old_mode & DEC_ALLOC_MODE_1) ) { 1165 *v = t = (ComponentCertificateList*) CompAlloc( mem_op, sizeof(ComponentCertificateList) ); 1166 if ( !t ) return -1; 1167 *t = *k; 1168 } 1169 t->syntax = (Syntax*)NULL; 1170 t->comp_desc = CompAlloc( mem_op, sizeof( ComponentDesc ) ); 1171 if ( !t->comp_desc ) { 1172 free ( t ); 1173 return -1; 1174 } 1175 t->comp_desc->cd_ldap_encoder = (encoder_func*)NULL; 1176 t->comp_desc->cd_gser_encoder = (encoder_func*)NULL; 1177 t->comp_desc->cd_ber_encoder = (encoder_func*)NULL; 1178 t->comp_desc->cd_gser_decoder = (gser_decoder_func*)GDecComponentCertificateList ; 1179 t->comp_desc->cd_ber_decoder = (ber_decoder_func*)BDecComponentCertificateList ; 1180 t->comp_desc->cd_free = (comp_free_func*)NULL; 1181 t->comp_desc->cd_extract_i = (extract_component_from_id_func*)ExtractingComponentCertificateList; 1182 t->comp_desc->cd_type = ASN_COMPOSITE; 1183 t->comp_desc->cd_type_id = COMPOSITE_ASN1_TYPE; 1184 t->comp_desc->cd_all_match = (allcomponent_matching_func*)MatchingComponentCertificateList; 1185 (*bytesDecoded) += totalElmtsLen1; 1186 return LDAP_SUCCESS; 1187} /* BDecCertificateList*/ 1188 1189int 1190GDecComponentCertificateList PARAMS (( mem_op,b, v, bytesDecoded, mode), 1191void* mem_op _AND_ 1192GenBuf * b _AND_ 1193ComponentCertificateList **v _AND_ 1194AsnLen *bytesDecoded _AND_ 1195int mode) 1196{ 1197 char* peek_head,*peek_head2; 1198 int i, strLen,strLen2, rc, old_mode = mode; 1199 ComponentCertificateList *k,*t, c_temp; 1200 1201 1202 if ( !(mode & DEC_ALLOC_MODE_1) ) { 1203 memset(&c_temp,0,sizeof(c_temp)); 1204 k = &c_temp; 1205 } else 1206 k = t = *v; 1207 mode = DEC_ALLOC_MODE_2; 1208 *bytesDecoded = 0; 1209 if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){ 1210 Asn1Error("Error during Reading { in encoded data"); 1211 return LDAP_PROTOCOL_ERROR; 1212 } 1213 if(*peek_head != '{'){ 1214 Asn1Error("Missing { in encoded data"); 1215 return LDAP_PROTOCOL_ERROR; 1216 } 1217 1218 if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){ 1219 Asn1Error("Error during Reading identifier"); 1220 return LDAP_PROTOCOL_ERROR; 1221 } 1222 if ( strncmp( peek_head, "tbsCertList", strlen("tbsCertList") ) == 0 ) { 1223 rc = GDecComponentTBSCertList (mem_op, b, (&k->tbsCertList), bytesDecoded, mode); 1224 if ( rc != LDAP_SUCCESS ) return rc; 1225 ( k->tbsCertList)->identifier.bv_val = peek_head; 1226 ( k->tbsCertList)->identifier.bv_len = strLen; 1227 if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){ 1228 Asn1Error("Error during Reading , "); 1229 return LDAP_PROTOCOL_ERROR; 1230 } 1231 if(*peek_head != ','){ 1232 Asn1Error("Missing , in encoding"); 1233 return LDAP_PROTOCOL_ERROR; 1234 } 1235 if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){ 1236 Asn1Error("Error during Reading identifier"); 1237 return LDAP_PROTOCOL_ERROR; 1238 } 1239 } 1240 if ( strncmp( peek_head, "signatureAlgorithm", strlen("signatureAlgorithm") ) == 0 ) { 1241 rc = GDecComponentAlgorithmIdentifier (mem_op, b, (&k->signatureAlgorithm), bytesDecoded, mode); 1242 if ( rc != LDAP_SUCCESS ) return rc; 1243 ( k->signatureAlgorithm)->identifier.bv_val = peek_head; 1244 ( k->signatureAlgorithm)->identifier.bv_len = strLen; 1245 if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){ 1246 Asn1Error("Error during Reading , "); 1247 return LDAP_PROTOCOL_ERROR; 1248 } 1249 if(*peek_head != ','){ 1250 Asn1Error("Missing , in encoding"); 1251 return LDAP_PROTOCOL_ERROR; 1252 } 1253 if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ){ 1254 Asn1Error("Error during Reading identifier"); 1255 return LDAP_PROTOCOL_ERROR; 1256 } 1257 } 1258 if ( strncmp( peek_head, "signature", strlen("signature") ) == 0 ) { 1259 rc = GDecComponentBits (mem_op, b, (&k->signature), bytesDecoded, mode); 1260 if ( rc != LDAP_SUCCESS ) return rc; 1261 (&k->signature)->identifier.bv_val = peek_head; 1262 (&k->signature)->identifier.bv_len = strLen; 1263 } 1264 if( !(strLen = LocateNextGSERToken(mem_op,b,&peek_head,GSER_NO_COPY)) ) { 1265 Asn1Error("Error during Reading } in encoding"); 1266 return LDAP_PROTOCOL_ERROR; 1267 } 1268 if(*peek_head != '}'){ 1269 Asn1Error("Missing } in encoding"); 1270 return LDAP_PROTOCOL_ERROR; 1271 } 1272 if( !(old_mode & DEC_ALLOC_MODE_1) ) { 1273 *v = t = (ComponentCertificateList*) CompAlloc( mem_op, sizeof(ComponentCertificateList) ); 1274 if ( !t ) return -1; 1275 *t = *k; 1276 } 1277 t->syntax = (Syntax*)NULL; 1278 t->comp_desc = CompAlloc( mem_op, sizeof( ComponentDesc ) ); 1279 if ( !t->comp_desc ) { 1280 free ( t ); 1281 return -1; 1282 } 1283 t->comp_desc->cd_ldap_encoder = (encoder_func*)NULL; 1284 t->comp_desc->cd_gser_encoder = (encoder_func*)NULL; 1285 t->comp_desc->cd_ber_encoder = (encoder_func*)NULL; 1286 t->comp_desc->cd_gser_decoder = (gser_decoder_func*)GDecComponentCertificateList ; 1287 t->comp_desc->cd_ber_decoder = (ber_decoder_func*)BDecComponentCertificateList ; 1288 t->comp_desc->cd_free = (comp_free_func*)NULL; 1289 t->comp_desc->cd_extract_i = (extract_component_from_id_func*)ExtractingComponentCertificateList; 1290 t->comp_desc->cd_type = ASN_COMPOSITE; 1291 t->comp_desc->cd_type_id = COMPOSITE_ASN1_TYPE; 1292 t->comp_desc->cd_all_match = (allcomponent_matching_func*)MatchingComponentCertificateList; 1293 return LDAP_SUCCESS; 1294} /* GDecCertificateList*/ 1295