Changeset 109

Show
Ignore:
Timestamp:
05/12/05 15:23:10
Author:
rachel
Message:

SS Notation Data

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • openpgpsdk/trunk/src/packet-decode.c

    r99 r109  
    7575    }; 
    7676 
     77bit_map_t ss_notation_data_map_byte0[] = 
     78    { 
     79    { 0x80,     "Human-readable" }, 
     80    { (unsigned char) NULL,     (char *) NULL }, 
     81    }; 
     82 
     83bit_map_t * ss_notation_data_map[] = 
     84    { 
     85    ss_notation_data_map_byte0, 
     86    (bit_map_t *) NULL, 
     87    }; 
     88 
    7789bit_map_t ss_feature_map_byte0[] = 
    7890    { 
     
    403415        } 
    404416    return decoded; 
     417    } 
     418 
     419/** char *decode_bit (unsigned char octet, bit_map_t *map) 
     420 */ 
     421 
     422char * 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 
     430decoded_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 
     459decoded_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)); 
    405462    } 
    406463 
  • openpgpsdk/trunk/src/packet-decode.h

    r99 r109  
    5555char *decode_single_ss_key_server_prefs(unsigned char octet, bit_map_t *map); 
    5656 
     57decoded_t *decode_ss_notation_data_flags(ops_ss_notation_data_t ss_notation_data); 
     58 
    5759/* vim:set textwidth=120: */ 
    5860/* vim:set ts=8: */ 
  • openpgpsdk/trunk/src/packet-dump.c

    r108 r109  
    109109 
    110110    hexdump(data,len); 
     111    printf("\n"); 
     112    } 
     113 
     114static 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); 
    111123    printf("\n"); 
    112124    } 
     
    373385        break; 
    374386 
     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 
    375410    case OPS_PTAG_SS_USERDEFINED00: 
    376411    case OPS_PTAG_SS_USERDEFINED01: 
  • openpgpsdk/trunk/src/packet-parse.c

    r108 r109  
    1919  
    2020/** 
    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 */ 
     24static 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 
    2244 */ 
    2345static int read_data(data_t *data, ops_region_t *subregion, ops_parse_options_t *opt) 
    2446    { 
    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)); 
    3652    } 
    3753 
     
    476492        break; 
    477493 
     494    case OPS_PTAG_SS_NOTATION_DATA: 
     495        ops_ss_notation_data_free(&c->content.ss_notation_data); 
     496        break; 
     497 
    478498    case OPS_PTAG_SS_USERDEFINED00: 
    479499    case OPS_PTAG_SS_USERDEFINED01: 
     
    923943        break; 
    924944 
     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 
    925981    case OPS_PTAG_SS_USERDEFINED00: 
    926982    case OPS_PTAG_SS_USERDEFINED01: 
     
    12521308    } 
    12531309 
     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 
    12541316void ops_ss_revocation_reason_free(ops_ss_revocation_reason_t *ss_revocation_reason) 
    12551317    { 
  • openpgpsdk/trunk/src/packet.h

    r108 r109  
    158158    OPS_PTAG_SS_REVOCATION_KEY          =0x200+12,      /*!< revocation key */ 
    159159    OPS_PTAG_SS_ISSUER_KEY_ID           =0x200+16, /*!< issuer key ID */ 
     160    OPS_PTAG_SS_NOTATION_DATA           =0x200+20, /*!< notation data */ 
    160161    OPS_PTAG_SS_PREFERRED_HASH          =0x200+21, /*!< preferred hash algorithms */ 
    161162    OPS_PTAG_SS_PREFERRED_COMPRESSION   =0x200+22, /*!< preferred compression algorithms */ 
     
    450451    unsigned char               key_id[OPS_KEY_ID_SIZE]; 
    451452    } ops_ss_key_id_t; 
     453 
     454typedef struct 
     455    { 
     456    data_t flags; 
     457    data_t name; 
     458    data_t value; 
     459    } ops_ss_notation_data_t; 
    452460 
    453461typedef struct 
     
    578586    ops_ss_time_t               ss_time; 
    579587    ops_ss_key_id_t             ss_issuer_key_id; 
     588    ops_ss_notation_data_t      ss_notation_data; 
    580589    ops_packet_t                packet; 
    581590    ops_compressed_t            compressed; 
     
    624633void ops_ss_key_server_prefs_free(ops_ss_key_server_prefs_t * ss_key_server_prefs); 
    625634void ops_ss_features_free(ops_ss_features_t * ss_features); 
     635void ops_ss_notation_data_free(ops_ss_notation_data_t *ss_notation_data); 
    626636void ops_ss_userdefined_free(ops_ss_userdefined_t *ss_userdefined); 
    627637void ops_ss_revocation_reason_free(ops_ss_revocation_reason_t *ss_revocation_reason);