Changeset 341

Show
Ignore:
Timestamp:
01/30/06 13:08:26
Author:
ben
Message:

More decryption, missing file.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • openpgpsdk/trunk/include/openpgpsdk/crypto.h

    r339 r341  
    2727    }; 
    2828 
     29typedef void ops_decrypt_set_iv_t(ops_decrypt_t *decrypt, 
     30                                  const unsigned char *iv); 
     31typedef void ops_decrypt_set_key_t(ops_decrypt_t *decrypt, 
     32                                   const unsigned char *key); 
    2933typedef void ops_decrypt_init_t(ops_decrypt_t *decrypt); 
    3034typedef size_t ops_decrypt_decrypt_t(ops_decrypt_t *decrypt,void *out, 
     
    3539    { 
    3640    ops_symmetric_algorithm_t algorithm; 
     41    size_t blocksize; 
     42    size_t keysize; 
     43    ops_decrypt_set_iv_t *set_iv; /* Call this before init! */ 
     44    ops_decrypt_set_iv_t *set_key; /* Call this before init! */ 
    3745    ops_decrypt_init_t *init; 
    3846    ops_decrypt_decrypt_t *decrypt; 
    3947    ops_decrypt_finish_t *finish; 
     48    unsigned char iv[OPS_MAX_BLOCK_SIZE]; 
     49    unsigned char civ[OPS_MAX_BLOCK_SIZE]; 
     50    unsigned char key[OPS_MAX_KEY_SIZE]; 
     51    int num; 
    4052    void *data; 
    4153    }; 
     
    6779int ops_decrypt_data(ops_region_t *region,ops_parse_info_t *parse_info); 
    6880 
    69 void ops_decrypt_any(ops_decrypt_t *decrypt, 
    70                      ops_symmetric_algorithm_t algorithm); 
     81void ops_decrypt_any(ops_decrypt_t *decrypt,ops_symmetric_algorithm_t alg); 
     82 
     83void ops_reader_push_decrypt(ops_parse_info_t *pinfo,ops_decrypt_t *decrypt, 
     84                             ops_region_t *region); 
     85void ops_reader_pop_decrypt(ops_parse_info_t *pinfo); 
    7186 
    7287#endif 
  • openpgpsdk/trunk/include/openpgpsdk/packet-parse.h

    r336 r341  
    7272void ops_reader_set(ops_parse_info_t *pinfo,ops_reader_t *reader,void *arg); 
    7373void ops_reader_push(ops_parse_info_t *pinfo,ops_reader_t *reader,void *arg); 
     74void ops_reader_pop(ops_parse_info_t *pinfo); 
    7475void *ops_reader_get_arg_from_pinfo(ops_parse_info_t *pinfo); 
    7576 
  • openpgpsdk/trunk/include/openpgpsdk/packet.h

    r340 r341  
    415415// Maximum block size for symmetric crypto 
    416416#define OPS_MAX_BLOCK_SIZE      16 
     417 
     418// Maximum key size for symmetric crypto 
     419#define OPS_MAX_KEY_SIZE        32 
    417420 
    418421// Salt size for hashing 
  • openpgpsdk/trunk/src/packet-parse.c

    r340 r341  
    17891789    ops_parser_content_t content; 
    17901790    unsigned char c[1]; 
     1791    ops_decrypt_t decrypt; 
     1792    int ret=1; 
     1793    ops_region_t encregion; 
     1794    ops_region_t *saved_region=NULL; 
    17911795 
    17921796    memset(&content,'\0',sizeof content); 
     
    18631867        ops_hash(hash,C.secret_key.hash_algorithm,passphrase, 
    18641868                 strlen(passphrase)); 
     1869 
     1870        ops_decrypt_any(&decrypt,C.secret_key.algorithm); 
     1871        decrypt.set_iv(&decrypt,C.secret_key.iv); 
     1872        decrypt.set_key(&decrypt,hash); 
     1873 
     1874        ops_reader_push_decrypt(parse_info,&decrypt,region); 
     1875 
     1876        /* Since all known encryption for PGP doesn't compress, we can limit 
     1877           to the same length as the current region (for now) */ 
     1878        ops_init_subregion(&encregion,NULL); 
     1879        encregion.length=region->length-region->length_read; 
     1880        saved_region=region; 
     1881        region=&encregion; 
    18651882        } 
    18661883 
     
    18741891           || !limited_read_mpi(&C.secret_key.key.rsa.q,region,parse_info) 
    18751892           || !limited_read_mpi(&C.secret_key.key.rsa.u,region,parse_info)) 
    1876             return 0; 
     1893            ret=0; 
    18771894        break; 
    18781895 
     
    18801897    case OPS_PKA_DSA: 
    18811898        if(!limited_read_mpi(&C.secret_key.key.dsa.x,region,parse_info)) 
    1882             return 0; 
     1899            ret=0; 
    18831900        break; 
    18841901 
     
    18861903        fprintf(stderr,"Unexpected aglorithm: %d\n", 
    18871904                C.secret_key.public_key.algorithm); 
     1905        ret=0; 
    18881906        assert(0); 
    18891907        } 
     1908 
     1909    if(saved_region) 
     1910        { 
     1911        ops_reader_pop_decrypt(parse_info); 
     1912        region=saved_region; 
     1913        } 
     1914 
     1915    if(!ret) 
     1916        return 0; 
    18901917 
    18911918    if(!limited_read_scalar(&C.secret_key.checksum,2,region,parse_info)) 
     
    23182345    } 
    23192346 
     2347void ops_reader_pop(ops_parse_info_t *pinfo) 
     2348    {  
     2349    ops_reader_info_t *next=pinfo->rinfo.next; 
     2350 
     2351    pinfo->rinfo=*next; 
     2352    free(next); 
     2353    } 
     2354 
    23202355void *ops_reader_get_arg(ops_reader_info_t *rinfo) 
    23212356    { return rinfo->arg; }