Changeset 341
- Timestamp:
- 01/30/06 13:08:26
- Files:
-
- openpgpsdk/trunk/examples/create-crypted-gpg-key.sh (added)
- openpgpsdk/trunk/include/openpgpsdk/crypto.h (modified) (3 diffs)
- openpgpsdk/trunk/include/openpgpsdk/packet-parse.h (modified) (1 diff)
- openpgpsdk/trunk/include/openpgpsdk/packet.h (modified) (1 diff)
- openpgpsdk/trunk/src/packet-parse.c (modified) (6 diffs)
- openpgpsdk/trunk/src/symmetric.c (added)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
openpgpsdk/trunk/include/openpgpsdk/crypto.h
r339 r341 27 27 }; 28 28 29 typedef void ops_decrypt_set_iv_t(ops_decrypt_t *decrypt, 30 const unsigned char *iv); 31 typedef void ops_decrypt_set_key_t(ops_decrypt_t *decrypt, 32 const unsigned char *key); 29 33 typedef void ops_decrypt_init_t(ops_decrypt_t *decrypt); 30 34 typedef size_t ops_decrypt_decrypt_t(ops_decrypt_t *decrypt,void *out, … … 35 39 { 36 40 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! */ 37 45 ops_decrypt_init_t *init; 38 46 ops_decrypt_decrypt_t *decrypt; 39 47 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; 40 52 void *data; 41 53 }; … … 67 79 int ops_decrypt_data(ops_region_t *region,ops_parse_info_t *parse_info); 68 80 69 void ops_decrypt_any(ops_decrypt_t *decrypt, 70 ops_symmetric_algorithm_t algorithm); 81 void ops_decrypt_any(ops_decrypt_t *decrypt,ops_symmetric_algorithm_t alg); 82 83 void ops_reader_push_decrypt(ops_parse_info_t *pinfo,ops_decrypt_t *decrypt, 84 ops_region_t *region); 85 void ops_reader_pop_decrypt(ops_parse_info_t *pinfo); 71 86 72 87 #endif openpgpsdk/trunk/include/openpgpsdk/packet-parse.h
r336 r341 72 72 void ops_reader_set(ops_parse_info_t *pinfo,ops_reader_t *reader,void *arg); 73 73 void ops_reader_push(ops_parse_info_t *pinfo,ops_reader_t *reader,void *arg); 74 void ops_reader_pop(ops_parse_info_t *pinfo); 74 75 void *ops_reader_get_arg_from_pinfo(ops_parse_info_t *pinfo); 75 76 openpgpsdk/trunk/include/openpgpsdk/packet.h
r340 r341 415 415 // Maximum block size for symmetric crypto 416 416 #define OPS_MAX_BLOCK_SIZE 16 417 418 // Maximum key size for symmetric crypto 419 #define OPS_MAX_KEY_SIZE 32 417 420 418 421 // Salt size for hashing openpgpsdk/trunk/src/packet-parse.c
r340 r341 1789 1789 ops_parser_content_t content; 1790 1790 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; 1791 1795 1792 1796 memset(&content,'\0',sizeof content); … … 1863 1867 ops_hash(hash,C.secret_key.hash_algorithm,passphrase, 1864 1868 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; 1865 1882 } 1866 1883 … … 1874 1891 || !limited_read_mpi(&C.secret_key.key.rsa.q,region,parse_info) 1875 1892 || !limited_read_mpi(&C.secret_key.key.rsa.u,region,parse_info)) 1876 ret urn0;1893 ret=0; 1877 1894 break; 1878 1895 … … 1880 1897 case OPS_PKA_DSA: 1881 1898 if(!limited_read_mpi(&C.secret_key.key.dsa.x,region,parse_info)) 1882 ret urn0;1899 ret=0; 1883 1900 break; 1884 1901 … … 1886 1903 fprintf(stderr,"Unexpected aglorithm: %d\n", 1887 1904 C.secret_key.public_key.algorithm); 1905 ret=0; 1888 1906 assert(0); 1889 1907 } 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; 1890 1917 1891 1918 if(!limited_read_scalar(&C.secret_key.checksum,2,region,parse_info)) … … 2318 2345 } 2319 2346 2347 void 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 2320 2355 void *ops_reader_get_arg(ops_reader_info_t *rinfo) 2321 2356 { return rinfo->arg; }
