Changeset 109
- Timestamp:
- 05/12/05 15:23:10
- Files:
-
- openpgpsdk/trunk/src/packet-decode.c (modified) (2 diffs)
- openpgpsdk/trunk/src/packet-decode.h (modified) (1 diff)
- openpgpsdk/trunk/src/packet-dump.c (modified) (2 diffs)
- openpgpsdk/trunk/src/packet-parse.c (modified) (4 diffs)
- openpgpsdk/trunk/src/packet.h (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
openpgpsdk/trunk/src/packet-decode.c
r99 r109 75 75 }; 76 76 77 bit_map_t ss_notation_data_map_byte0[] = 78 { 79 { 0x80, "Human-readable" }, 80 { (unsigned char) NULL, (char *) NULL }, 81 }; 82 83 bit_map_t * ss_notation_data_map[] = 84 { 85 ss_notation_data_map_byte0, 86 (bit_map_t *) NULL, 87 }; 88 77 89 bit_map_t ss_feature_map_byte0[] = 78 90 { … … 403 415 } 404 416 return decoded; 417 } 418 419 /** char *decode_bit (unsigned char octet, bit_map_t *map) 420 */ 421 422 char * decode_bit(unsigned char octet, bit_map_t * map) 423 { 424 return(search_bit_map(octet,map)); 425 } 426 427 /** decoded_t * decode_map (data_t *data, bit_map_t *map) 428 */ 429 430 decoded_t * decode_map(data_t *data, bit_map_t **map) 431 { 432 decoded_t *decoded=NULL; 433 char *str; 434 int i=0, j=0; 435 unsigned char mask, bit; 436 437 decoded=malloc(sizeof(decoded_t)); 438 if (!decoded) 439 return NULL; 440 441 decoded_init(decoded); 442 443 for ( i=0; i < data->len; i++) 444 { 445 for (j=0, mask=0x80; j<8; j++, mask = mask>>1 ) 446 { 447 bit = data->contents[i]&mask; 448 if (bit) 449 { 450 str=decode_bit ( bit, map[i] ); 451 if (!process_bitmap_str( decoded, str, bit)) 452 return NULL; 453 } 454 } 455 } 456 return decoded; 457 } 458 459 decoded_t * decode_ss_notation_data_flags(ops_ss_notation_data_t ss_notation_data) 460 { 461 return(decode_map(&ss_notation_data.flags,ss_notation_data_map)); 405 462 } 406 463 openpgpsdk/trunk/src/packet-decode.h
r99 r109 55 55 char *decode_single_ss_key_server_prefs(unsigned char octet, bit_map_t *map); 56 56 57 decoded_t *decode_ss_notation_data_flags(ops_ss_notation_data_t ss_notation_data); 58 57 59 /* vim:set textwidth=120: */ 58 60 /* vim:set ts=8: */ openpgpsdk/trunk/src/packet-dump.c
r108 r109 109 109 110 110 hexdump(data,len); 111 printf("\n"); 112 } 113 114 static void print_data(char *label, const data_t *data,int indentlevel) 115 { 116 if(label) 117 { 118 indent(indentlevel); 119 printf("%s: len=%d, data=0x", label, data->len); 120 } 121 122 hexdump(data->contents,data->len); 111 123 printf("\n"); 112 124 } … … 373 385 break; 374 386 387 case OPS_PTAG_SS_NOTATION_DATA: 388 indent(1); 389 printf("Notation Data:\n"); 390 print_data("Flags", 391 &content->ss_notation_data.flags, 392 2); 393 decoded = decode_ss_notation_data_flags(content->ss_notation_data); 394 print_decoded(NULL,decoded,2); 395 decoded_free(decoded); 396 397 /* xxx - TODO: print out UTF - rachel */ 398 399 print_data("Name", 400 &content->ss_notation_data.name, 401 2); 402 403 print_data("Value", 404 &content->ss_notation_data.value, 405 2); 406 407 break; 408 409 375 410 case OPS_PTAG_SS_USERDEFINED00: 376 411 case OPS_PTAG_SS_USERDEFINED01: openpgpsdk/trunk/src/packet-parse.c
r108 r109 19 19 20 20 /** 21 * read_data reads the remainder of the subregion's data into a data_t structure 21 * limited_read_data reads the specified amount of the subregion's data 22 * into a data_t structure 23 */ 24 static int limited_read_data(data_t *data, unsigned int len, ops_region_t *subregion, ops_parse_options_t *opt) 25 { 26 data->len = len; 27 28 assert ((subregion->length - subregion->length_read) >= len); 29 30 data->contents = malloc(data->len); 31 if (!data->contents) 32 return 0; 33 34 if (!ops_limited_read(data->contents, data->len, 35 subregion, opt)) 36 return 0; 37 38 return 1; 39 } 40 41 /** 42 * read_data reads the remainder of the subregion's data 43 * into a data_t structure 22 44 */ 23 45 static int read_data(data_t *data, ops_region_t *subregion, ops_parse_options_t *opt) 24 46 { 25 data->len = subregion->length - subregion->length_read; 26 27 data->contents = malloc(data->len); 28 if (!data->contents) 29 return 0; 30 31 if (!ops_limited_read(data->contents, data->len, 32 subregion, opt)) 33 return 0; 34 35 return 1; 47 int len; 48 49 len = subregion->length - subregion->length_read; 50 51 return(limited_read_data(data,len,subregion,opt)); 36 52 } 37 53 … … 476 492 break; 477 493 494 case OPS_PTAG_SS_NOTATION_DATA: 495 ops_ss_notation_data_free(&c->content.ss_notation_data); 496 break; 497 478 498 case OPS_PTAG_SS_USERDEFINED00: 479 499 case OPS_PTAG_SS_USERDEFINED01: … … 923 943 break; 924 944 945 case OPS_PTAG_SS_NOTATION_DATA: 946 947 /* 4 octets of flags */ 948 949 if (!limited_read_data(&C.ss_notation_data.flags, 4, 950 &subregion, opt)) 951 return 0; 952 953 /* 2 octets of name length */ 954 955 if (!limited_read_scalar(&C.ss_notation_data.name.len, 2, 956 &subregion, opt)) 957 return 0; 958 959 /* 2 octets of value length */ 960 961 if (!limited_read_scalar(&C.ss_notation_data.value.len, 2, 962 &subregion, opt)) 963 return 0; 964 965 /* name */ 966 967 if (!limited_read_data(&C.ss_notation_data.name, 968 C.ss_notation_data.name.len, 969 &subregion, opt)) 970 return 0; 971 972 /* value */ 973 974 if (!limited_read_data(&C.ss_notation_data.value, 975 C.ss_notation_data.value.len, 976 &subregion, opt)) 977 return 0; 978 979 break; 980 925 981 case OPS_PTAG_SS_USERDEFINED00: 926 982 case OPS_PTAG_SS_USERDEFINED01: … … 1252 1308 } 1253 1309 1310 void ops_ss_notation_data_free(ops_ss_notation_data_t *ss_notation_data) 1311 { 1312 data_free(&ss_notation_data->name); 1313 data_free(&ss_notation_data->value); 1314 } 1315 1254 1316 void ops_ss_revocation_reason_free(ops_ss_revocation_reason_t *ss_revocation_reason) 1255 1317 { openpgpsdk/trunk/src/packet.h
r108 r109 158 158 OPS_PTAG_SS_REVOCATION_KEY =0x200+12, /*!< revocation key */ 159 159 OPS_PTAG_SS_ISSUER_KEY_ID =0x200+16, /*!< issuer key ID */ 160 OPS_PTAG_SS_NOTATION_DATA =0x200+20, /*!< notation data */ 160 161 OPS_PTAG_SS_PREFERRED_HASH =0x200+21, /*!< preferred hash algorithms */ 161 162 OPS_PTAG_SS_PREFERRED_COMPRESSION =0x200+22, /*!< preferred compression algorithms */ … … 450 451 unsigned char key_id[OPS_KEY_ID_SIZE]; 451 452 } ops_ss_key_id_t; 453 454 typedef struct 455 { 456 data_t flags; 457 data_t name; 458 data_t value; 459 } ops_ss_notation_data_t; 452 460 453 461 typedef struct … … 578 586 ops_ss_time_t ss_time; 579 587 ops_ss_key_id_t ss_issuer_key_id; 588 ops_ss_notation_data_t ss_notation_data; 580 589 ops_packet_t packet; 581 590 ops_compressed_t compressed; … … 624 633 void ops_ss_key_server_prefs_free(ops_ss_key_server_prefs_t * ss_key_server_prefs); 625 634 void ops_ss_features_free(ops_ss_features_t * ss_features); 635 void ops_ss_notation_data_free(ops_ss_notation_data_t *ss_notation_data); 626 636 void ops_ss_userdefined_free(ops_ss_userdefined_t *ss_userdefined); 627 637 void ops_ss_revocation_reason_free(ops_ss_revocation_reason_t *ss_revocation_reason);
