Changeset 608

Show
Ignore:
Timestamp:
08/29/08 12:40:55
Author:
rachel
Message:

Finish V3 signature verification.
Add tests to detect successfull and failed V3 sig verification.

Files:

Legend:

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

    r602 r608  
    12391239    unsigned char c[1]; 
    12401240    ops_parser_content_t content; 
     1241 
     1242    // clear signature 
     1243    memset(&C.signature,'\0',sizeof C.signature); 
    12411244 
    12421245    C.signature.info.version=OPS_V3; 
  • openpgpsdk/trunk/src/lib/validate.c

    r602 r608  
    5555    hash.init(&hash); 
    5656    hash.add(&hash,data,len); 
    57     hash.add(&hash,sig->info.v4_hashed_data,sig->info.v4_hashed_data_length); 
    58  
    59     trailer[0]=0x04; // version 
    60     trailer[1]=0xFF; 
    61     hashedlen=sig->info.v4_hashed_data_length; 
    62     trailer[2]=hashedlen >> 24; 
    63     trailer[3]=hashedlen >> 16; 
    64     trailer[4]=hashedlen >> 8; 
    65     trailer[5]=hashedlen; 
    66     hash.add(&hash,&trailer[0],6); 
     57    switch (sig->info.version) 
     58        { 
     59    case OPS_V3: 
     60        trailer[0]=sig->info.type; 
     61        trailer[1]=sig->info.creation_time >> 24; 
     62        trailer[2]=sig->info.creation_time >> 16; 
     63        trailer[3]=sig->info.creation_time >> 8; 
     64        trailer[4]=sig->info.creation_time; 
     65        hash.add(&hash,&trailer[0],5); 
     66        break; 
     67 
     68    case OPS_V4: 
     69        hash.add(&hash,sig->info.v4_hashed_data,sig->info.v4_hashed_data_length); 
     70 
     71        trailer[0]=0x04; // version 
     72        trailer[1]=0xFF; 
     73        hashedlen=sig->info.v4_hashed_data_length; 
     74        trailer[2]=hashedlen >> 24; 
     75        trailer[3]=hashedlen >> 16; 
     76        trailer[4]=hashedlen >> 8; 
     77        trailer[5]=hashedlen; 
     78        hash.add(&hash,&trailer[0],6); 
     79         
     80        break; 
     81 
     82    default: 
     83        fprintf(stderr,"Invalid signature version %d\n", sig->info.version); 
     84        return ops_false; 
     85        } 
    6786 
    6887    n=hash.finish(&hash,hashout); 
     
    221240        return OPS_KEEP_MEMORY; 
    222241 
    223     case OPS_PTAG_CT_SIGNATURE_FOOTER: 
     242    case OPS_PTAG_CT_SIGNATURE: // V3 sigs 
     243    case OPS_PTAG_CT_SIGNATURE_FOOTER: // V4 sigs 
    224244        /* 
    225245        printf("  type=%02x signer_id=",content->signature.type); 
     
    305325    case OPS_PARSER_PTAG: 
    306326    case OPS_PTAG_CT_SIGNATURE_HEADER: 
    307     case OPS_PTAG_CT_SIGNATURE: 
    308  case OPS_PARSER_PACKET_END: 
     327    case OPS_PARSER_PACKET_END: 
    309328        break; 
    310329 
     
    366385 
    367386    case OPS_PTAG_CT_SIGNATURE: // V3 sigs 
    368         // this gives us a signature struct with all info about hash alg, etc from the packet 
    369         break; 
    370  
    371387    case OPS_PTAG_CT_SIGNATURE_FOOTER: // V4 sigs 
    372388         
     
    436452            { 
    437453        add_sig_to_valid_list(arg->result, &content->signature.info); 
    438         //          ++arg->result->valid_count; 
    439454            } 
    440455        else 
    441456            { 
    442457        OPS_ERROR(errors,OPS_E_V_BAD_SIGNATURE,"Bad Signature"); 
    443         //          printf(" BAD SIGNATURE\n"); 
    444         //          ++arg->result->invalid_count; 
    445458        add_sig_to_invalid_list(arg->result, &content->signature.info); 
    446459            } 
     
    454467 case OPS_PTAG_CT_ONE_PASS_SIGNATURE: 
    455468 case OPS_PARSER_PACKET_END: 
    456         //    case OPS_PTAG_CT_SIGNATURE: 
    457469        break; 
    458470 
  • openpgpsdk/trunk/tests/test_rsa_verify.c

    r607 r608  
    5454 
    5555static char *filename_rsa_v3sig="gpg_rsa_sign_v3sig.txt"; 
     56static char *filename_rsa_v3sig_fail_bad_sig="gpg_rsa_sign_v3sig_fail_bad_sig.txt"; 
    5657 
    5758static char *filename_rsa_hash_md5="gpg_rsa_hash_md5.txt"; 
     
    111112 
    112113    create_small_testfile(filename_rsa_v3sig); 
     114    create_small_testfile(filename_rsa_v3sig_fail_bad_sig); 
    113115    create_small_testfile(filename_rsa_hash_md5); 
    114116 
     
    155157             dir, filename_rsa_v3sig, 
    156158             gpgcmd, alpha_name, dir, filename_rsa_v3sig); 
     159    if (system(cmd)) 
     160        { return 1; } 
     161 
     162    // V3 signature to fail 
     163    snprintf(cmd,sizeof cmd,"cat %s/%s | %s --compress-level 0 --sign --force-v3-sigs --local-user %s > %s/%s.gpg", 
     164             dir, filename_rsa_v3sig_fail_bad_sig, 
     165             gpgcmd, alpha_name, dir, filename_rsa_v3sig_fail_bad_sig); 
    157166    if (system(cmd)) 
    158167        { return 1; } 
     
    474483    } 
    475484 
     485static void test_rsa_verify_v3sig_fail_bad_sig(void) 
     486    { 
     487    int armour=0; 
     488    assert(pub_keyring.nkeys); 
     489 
     490    test_rsa_verify_fail(armour,filename_rsa_v3sig_fail_bad_sig, callback_bad_sig, OPS_E_V_BAD_SIGNATURE); 
     491    } 
     492 
    476493static void test_rsa_verify_clearsign_fail_bad_sig(void) 
    477494    { 
     
    527544            return NULL; 
    528545 
     546    if (NULL == CU_add_test(suite, "V3 signature: should fail on bad sig", test_rsa_verify_v3sig_fail_bad_sig)) 
     547            return NULL; 
     548 
    529549    if (NULL == CU_add_test(suite, "MD5 Hash", test_rsa_verify_hash_md5)) 
    530550            return NULL;