Changeset 558
- Timestamp:
- 05/02/08 11:25:27
- Files:
-
- openpgpsdk/trunk/examples/build-keyring.c (modified) (1 diff)
- openpgpsdk/trunk/examples/decrypt.c (modified) (2 diffs)
- openpgpsdk/trunk/examples/encrypt.c (modified) (2 diffs)
- openpgpsdk/trunk/examples/packet-dump.c (modified) (1 diff)
- openpgpsdk/trunk/examples/sign-detached.c (modified) (1 diff)
- openpgpsdk/trunk/examples/sign-inline.c (modified) (3 diffs)
- openpgpsdk/trunk/examples/verify2.c (modified) (1 diff)
- openpgpsdk/trunk/include/openpgpsdk/create.h (modified) (3 diffs)
- openpgpsdk/trunk/include/openpgpsdk/crypto.h (modified) (2 diffs)
- openpgpsdk/trunk/include/openpgpsdk/keyring.h (modified) (3 diffs)
- openpgpsdk/trunk/include/openpgpsdk/readerwriter.h (modified) (1 diff)
- openpgpsdk/trunk/include/openpgpsdk/std_print.h (modified) (1 diff)
- openpgpsdk/trunk/include/openpgpsdk/validate.h (modified) (4 diffs)
- openpgpsdk/trunk/plan/OpenPGP.omniplan/contents.xml (modified) (85 diffs)
- openpgpsdk/trunk/src/lib/adv_accumulate.c (modified) (2 diffs)
- openpgpsdk/trunk/src/lib/adv_create.c (modified) (8 diffs)
- openpgpsdk/trunk/src/lib/adv_crypto.c (modified) (1 diff)
- openpgpsdk/trunk/src/lib/adv_keyring.c (modified) (4 diffs)
- openpgpsdk/trunk/src/lib/adv_openssl_crypto.c (modified) (4 diffs)
- openpgpsdk/trunk/src/lib/adv_packet-parse.c (modified) (13 diffs)
- openpgpsdk/trunk/src/lib/adv_readerwriter.c (modified) (2 diffs)
- openpgpsdk/trunk/src/lib/adv_symmetric.c (modified) (7 diffs)
- openpgpsdk/trunk/src/lib/adv_validate.c (modified) (12 diffs)
- openpgpsdk/trunk/src/lib/adv_writer_encrypt.c (modified) (3 diffs)
- openpgpsdk/trunk/src/lib/keyring_local.h (modified) (2 diffs)
- openpgpsdk/trunk/src/lib/parse_local.h (modified) (1 diff)
- openpgpsdk/trunk/src/lib/std_keyring.c (modified) (4 diffs)
- openpgpsdk/trunk/src/lib/std_print.c (modified) (11 diffs)
- openpgpsdk/trunk/tests/Makefile.template (modified) (1 diff)
- openpgpsdk/trunk/tests/test_common.c (modified) (3 diffs)
- openpgpsdk/trunk/tests/test_crypt_mpi.c (modified) (1 diff)
- openpgpsdk/trunk/tests/test_packet_types.c (modified) (1 diff)
- openpgpsdk/trunk/tests/test_rsa_encrypt.c (modified) (1 diff)
- openpgpsdk/trunk/tests/test_rsa_signature.c (modified) (1 diff)
- openpgpsdk/trunk/tests/test_rsa_verify.c (modified) (1 diff)
- openpgpsdk/trunk/tests/tests.c (modified) (1 diff)
- openpgpsdk/trunk/tests/tests.h (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
openpgpsdk/trunk/examples/build-keyring.c
r436 r558 422 422 ops_text_t *text; 423 423 const char *str; 424 const ops_key _data_t *decrypter;424 const ops_keydata_t *decrypter; 425 425 const ops_secret_key_t *secret; 426 426 static ops_boolean_t unarmoured; openpgpsdk/trunk/examples/decrypt.c
r451 r558 21 21 ops_parser_content_union_t* content=(ops_parser_content_union_t *)&content_->content; 22 22 static ops_boolean_t skipping; 23 static const ops_key _data_t *decrypter;23 static const ops_keydata_t *decrypter; 24 24 25 25 OPS_USED(cbinfo); … … 78 78 case OPS_PARSER_CMD_GET_SECRET_KEY: 79 79 printf("TBD: OPS_PARSER_CMD_GET_SECRET_KEY\n"); 80 const ops_key _data_t* key=ops_keyring_find_key_by_id(&keyring,content->get_secret_key.pk_session_key->key_id);80 const ops_keydata_t* key=ops_keyring_find_key_by_id(&keyring,content->get_secret_key.pk_session_key->key_id); 81 81 if (!key || !ops_key_is_secret(key)) 82 82 return 0; openpgpsdk/trunk/examples/encrypt.c
r444 r558 11 11 const char *user_id; 12 12 ops_keyring_t keyring; 13 const ops_key _data_t *key;13 const ops_keydata_t *key; 14 14 ops_create_info_t *info; 15 15 … … 35 35 info = ops_create_info_new(); 36 36 ops_writer_set_fd(info, 1); // stdout for now 37 ops_writer_push_encrypt (info, key);37 ops_writer_push_encrypt_keydata(info, key); 38 38 39 39 for( ; ; ) openpgpsdk/trunk/examples/packet-dump.c
r548 r558 424 424 ops_text_t *text; 425 425 const char *str; 426 const ops_key _data_t *decrypter;426 const ops_keydata_t *decrypter; 427 427 const ops_secret_key_t *secret; 428 428 static ops_boolean_t unarmoured; openpgpsdk/trunk/examples/sign-detached.c
r371 r558 51 51 52 52 sig=ops_create_signature_new(); 53 ops_signature_start_ plaintext_signature(sig,skey,alg,OPS_SIG_BINARY);53 ops_signature_start_cleartext_signature(sig,skey,alg,OPS_SIG_BINARY); 54 54 55 55 fd=open(plainfile,O_RDONLY); openpgpsdk/trunk/examples/sign-inline.c
r371 r558 53 53 54 54 sig=ops_create_signature_new(); 55 ops_signature_start_ plaintext_signature(sig,skey,alg,OPS_SIG_BINARY);55 ops_signature_start_cleartext_signature(sig,skey,alg,OPS_SIG_BINARY); 56 56 57 57 fd=open(sigfile,O_CREAT|O_TRUNC|O_WRONLY,0666); … … 64 64 info=ops_create_info_new(); 65 65 ops_writer_set_fd(info,fd); 66 ops_writer_push_ dash_escaped(info,sig);66 ops_writer_push_clearsigned(info,sig); 67 67 68 68 fd=open(plainfile,O_RDONLY); … … 91 91 close(fd); 92 92 93 ops_writer_switch_to_ signature(info);93 ops_writer_switch_to_armoured_signature(info); 94 94 95 95 ops_signature_add_creation_time(sig,time(NULL)); openpgpsdk/trunk/examples/verify2.c
r397 r558 32 32 { 33 33 const ops_parser_content_union_t *content=&content_->content; 34 const ops_key _data_t *signer;34 const ops_keydata_t *signer; 35 35 36 36 OPS_USED(cbinfo); openpgpsdk/trunk/include/openpgpsdk/create.h
r557 r558 59 59 ops_create_info_t *opt); 60 60 ops_boolean_t ops_write_mpi(const BIGNUM *bn,ops_create_info_t *opt); 61 ops_boolean_t ops_write_encrypted_mpi(const BIGNUM *bn, ops_crypt_t* crypt, ops_create_info_t *info); 61 62 ops_boolean_t ops_write_ss_header(unsigned length,ops_content_tag_t type, 62 63 ops_create_info_t *opt); … … 87 88 BIGNUM *n,BIGNUM *e); 88 89 ops_boolean_t ops_write_struct_secret_key(const ops_secret_key_t *key, 90 const unsigned char* passphrase, 91 const size_t pplen, 89 92 ops_create_info_t *info); 90 93 … … 120 123 ops_boolean_t ops_write_one_pass_sig(const ops_secret_key_t* skey, const ops_hash_algorithm_t hash_alg, const ops_sig_type_t sig_type, ops_create_info_t* info); 121 124 125 ops_boolean_t ops_write_transferable_public_key(const ops_keydata_t *key, ops_create_info_t *info); 126 ops_boolean_t ops_write_transferable_secret_key(const ops_keydata_t *key, const unsigned char* passphrase, size_t pplen, ops_create_info_t *info); 127 122 128 #endif openpgpsdk/trunk/include/openpgpsdk/crypto.h
r557 r558 129 129 int ops_decrypt_and_unencode_mpi(unsigned char *buf,unsigned buflen,const BIGNUM *encmpi, 130 130 const ops_secret_key_t *skey); 131 ops_boolean_t ops_ encrypt_mpi(const unsigned char *buf, const size_t buflen,131 ops_boolean_t ops_rsa_encrypt_mpi(const unsigned char *buf, const size_t buflen, 132 132 const ops_public_key_t *pkey, 133 133 ops_pk_session_key_parameters_t *spk); … … 142 142 143 143 // Keys 144 ops_boolean_t ops_generate_rsa_keypair(const int numbits, const unsigned long e, ops_secret_key_t* skey); 144 ops_boolean_t ops_rsa_generate_keypair(const int numbits, const unsigned long e, ops_keydata_t* keydata); 145 ops_keydata_t* ops_rsa_create_selfsigned_keypair(const int numbits, const unsigned long e, ops_user_id_t * userid); 145 146 146 147 #endif openpgpsdk/trunk/include/openpgpsdk/keyring.h
r557 r558 6 6 7 7 #include "packet.h" 8 #include "memory.h" 8 9 9 10 typedef struct ops_keydata ops_keydata_t; … … 34 35 const ops_secret_key_t * 35 36 ops_get_secret_key_from_data(const ops_keydata_t *data); 37 ops_secret_key_t * 38 ops_get_writable_secret_key_from_data(ops_keydata_t *data); 36 39 ops_secret_key_t *ops_decrypt_secret_key_from_data(const ops_keydata_t *key, 37 40 const char *pphrase); … … 52 55 const ops_keydata_t* ops_keyring_get_key(const ops_keyring_t *keyring, int index); 53 56 57 ops_user_id_t* ops_add_userid_to_keydata(ops_keydata_t* keydata, const ops_user_id_t* userid); 58 ops_packet_t* ops_add_packet_to_keydata(ops_keydata_t* keydata, const ops_packet_t* packet); 59 void ops_add_signed_userid_to_keydata(ops_keydata_t* keydata, const ops_user_id_t* userid, const ops_packet_t* packet); 60 61 ops_boolean_t ops_add_selfsigned_userid_to_keydata(ops_keydata_t* keydata, ops_user_id_t* userid); 62 63 ops_keydata_t *ops_keydata_new(void); 64 void ops_keydata_init(ops_keydata_t* keydata, const ops_content_tag_t type); 65 54 66 #endif openpgpsdk/trunk/include/openpgpsdk/readerwriter.h
r557 r558 39 39 void ops_writer_push_encrypt_se_ip(ops_create_info_t *cinfo, 40 40 const ops_keydata_t *pub_key); 41 // Secret Key checksum 42 43 void ops_push_skey_checksum_writer(ops_create_info_t *cinfo, ops_secret_key_t *skey); 44 ops_boolean_t ops_pop_skey_checksum_writer(ops_create_info_t *cinfo); 41 45 42 46 43 // 47 // memory writing 44 48 void ops_setup_memory_write(ops_create_info_t **cinfo, ops_memory_t **mem, size_t bufsz); 45 49 void ops_teardown_memory_write(ops_create_info_t *cinfo, ops_memory_t *mem); 46 50 51 // memory reading 47 52 void ops_setup_memory_read(ops_parse_info_t **pinfo, ops_memory_t *mem, 48 53 ops_parse_cb_return_t callback(const ops_parser_content_t *, ops_parse_cb_info_t *)); 49 54 void ops_teardown_memory_read(ops_parse_info_t *pinfo, ops_memory_t *mem); 50 55 56 // file writing 57 int ops_setup_file_write(ops_create_info_t **cinfo, char* filename); 58 void ops_teardown_file_write(ops_create_info_t *cinfo, int fd); 59 60 // file reading 61 int ops_setup_file_read(ops_parse_info_t **pinfo, char *filename, void* arg, 62 ops_parse_cb_return_t callback(const ops_parser_content_t *, ops_parse_cb_info_t *), ops_boolean_t accumulate); 63 void ops_teardown_file_read(ops_parse_info_t *pinfo, int fd); 64 51 65 #endif /*OPS_READERWRITER_H__*/ openpgpsdk/trunk/include/openpgpsdk/std_print.h
r557 r558 13 13 void ops_print_pk_session_key(ops_content_tag_t tag, 14 14 const ops_pk_session_key_t *key); 15 void ops_print_public_key (const ops_keydata_t *key);15 void ops_print_public_keydata(const ops_keydata_t *key); 16 16 17 void ops_print_public_key_verbose(const ops_keydata_t *key); 17 void ops_print_public_keydata_verbose(const ops_keydata_t *key); 18 void ops_print_public_key_t(const ops_public_key_t *pkey); 18 19 19 void ops_print_secret_key (const ops_keydata_t *key);20 void ops_print_secret_key _verbose(const ops_keydata_t *key);21 20 void ops_print_secret_keydata(const ops_keydata_t *key); 21 void ops_print_secret_keydata_verbose(const ops_keydata_t *key); 22 void ops_print_secret_key(const ops_content_tag_t type, const ops_secret_key_t* skey); 22 23 int ops_print_packet(const ops_parser_content_t *content_); 23 24 #endif openpgpsdk/trunk/include/openpgpsdk/validate.h
r557 r558 11 11 void ops_validate_result_free(ops_validate_result_t *result); 12 12 13 void ops_validate_key_signatures(ops_validate_result_t *result, 14 const ops_keydata_t* keydata, 15 const ops_keyring_t *ring, 16 ops_parse_cb_return_t cb (const ops_parser_content_t *, ops_parse_cb_info_t *)); 13 17 void ops_validate_all_signatures(ops_validate_result_t *result, 14 const ops_keyring_t *ring); 18 const ops_keyring_t *ring, 19 ops_parse_cb_return_t (const ops_parser_content_t *, ops_parse_cb_info_t *)); 20 15 21 void ops_keydata_reader_set(ops_parse_info_t *pinfo, 16 22 const ops_keydata_t *key); … … 27 33 ops_public_key_t pkey; 28 34 ops_public_key_t subkey; 35 ops_secret_key_t skey; 29 36 enum 30 37 { 31 ATTRIBUTE ,38 ATTRIBUTE=1, 32 39 ID, 33 40 } last_seen; … … 38 45 validate_reader_arg_t *rarg; 39 46 ops_validate_result_t *result; 47 ops_parse_cb_return_t (*cb_get_passphrase) (const ops_parser_content_t *, ops_parse_cb_info_t *); 40 48 } validate_key_cb_arg_t; 41 49 … … 62 70 const ops_signature_t *sig, 63 71 const ops_public_key_t *signer); 72 ops_parse_cb_return_t 73 ops_validate_key_cb(const ops_parser_content_t *content_,ops_parse_cb_info_t *cbinfo); 74 64 75 // EOF openpgpsdk/trunk/plan/OpenPGP.omniplan/contents.xml
r551 r558 31 31 <false/> 32 32 <key>GanttVisibleRect</key> 33 <string>{{ 762, 0}, {614, 740}}</string>33 <string>{{-35, 1318}, {614, 740}}</string> 34 34 <key>OutlineVisibleRect</key> 35 <string>{{0, 0}, {802, 740}}</string>35 <string>{{0, 1318}, {802, 740}}</string> 36 36 <key>ScaleWidths</key> 37 37 <dict> … … 89 89 <dict> 90 90 <key>OutlineVisibleRect</key> 91 <string>{{0, 0}, { 323, 453}}</string>91 <string>{{0, 0}, {440, 553}}</string> 92 92 <key>activeColumnIdentifiers</key> 93 93 <array> … … 104 104 <real>20</real> 105 105 <key>Resource</key> 106 <real> 297</real>106 <real>347</real> 107 107 <key>Type</key> 108 108 <real>48</real> … … 110 110 </dict> 111 111 <key>calendarSplit</key> 112 <real>0.6820 3198909759521</real>112 <real>0.6820405125617981</real> 113 113 <key>columnWidths</key> 114 114 <dict> … … 169 169 <string>Automatic</string> 170 170 <key>TimelineVisibleRect</key> 171 <string>{{ -227, 330}, {959, 740}}</string>171 <string>{{1003, 670}, {959, 740}}</string> 172 172 <key>activeColumnIdentifiers</key> 173 173 <array> … … 253 253 <key>NSScalingFactor</key> 254 254 <real>1</real> 255 <key>OPPrintSettingPrintDisplayOption</key> 256 <integer>0</integer> 257 <key>OPPrintSettingPrintOption</key> 258 <integer>2</integer> 255 259 </dict> 256 260 <key>projectUserKeys</key> … … 594 598 <dict> 595 599 <key>nextId</key> 596 <integer>2 15</integer>600 <integer>239</integer> 597 601 </dict> 598 602 <key>taskUserKeys</key> … … 730 734 <integer>184</integer> 731 735 <integer>201</integer> 736 <integer>231</integer> 737 <integer>232</integer> 738 <integer>233</integer> 732 739 </array> 733 740 <key>objectId</key> … … 963 970 <integer>166</integer> 964 971 </array> 965 <key>isExpanded</key>966 <false/>967 972 <key>objectId</key> 968 973 <integer>12</integer> … … 1097 1102 </array> 1098 1103 <key>desiredStart</key> 1099 <string>20080521090000</string> 1100 <key>effort</key> 1104 <string>20080516160000</string> 1105 <key>doneSeconds</key> 1106 <real>57600</real> 1107 <key>effort</key> 1108 <real>28800</real> 1109 <key>effortDone</key> 1101 1110 <real>28800</real> 1102 1111 <key>objectId</key> 1103 1112 <integer>19</integer> 1104 <key>prerequisites</key>1105 <array>1106 <dict>1107 <key>id</key>1108 <integer>191</integer>1109 <key>isResource</key>1110 <string>YES</string>1111 <key>kind</key>1112 <integer>2</integer>1113 </dict>1114 </array>1115 1113 <key>task</key> 1116 1114 <string>Create Key Pair</string> 1115 <key>workDone</key> 1116 <real>16</real> 1117 1117 <key>workSeconds</key> 1118 1118 <real>57600</real> … … 1127 1127 <integer>122</integer> 1128 1128 <integer>123</integer> 1129 </array> 1130 <key>isExpanded</key> 1131 <false/> 1129 <integer>236</integer> 1130 </array> 1132 1131 <key>objectId</key> 1133 1132 <integer>20</integer> … … 1160 1159 </dict> 1161 1160 </array> 1161 <key>completionPercentage</key> 1162 <real>1</real> 1162 1163 <key>effort</key> 1163 1164 <real>0.0</real> … … 1177 1178 </dict> 1178 1179 </array> 1180 <key>completionPercentage</key> 1181 <real>1</real> 1179 1182 <key>effort</key> 1180 1183 <real>0.0</real> … … 1190 1193 <integer>57</integer> 1191 1194 <integer>28</integer> 1195 <integer>223</integer> 1192 1196 <integer>203</integer> 1193 1197 </array> … … 1303 1307 </dict> 1304 1308 </array> 1309 <key>completionPercentage</key> 1310 <real>1</real> 1305 1311 <key>effort</key> 1306 1312 <real>0.0</real> … … 1451 1457 </dict> 1452 1458 </array> 1459 <key>completionPercentage</key> 1460 <real>1</real> 1453 1461 <key>effort</key> 1454 1462 <real>0.0</real> … … 1478 1486 </array> 1479 1487 <key>desiredStart</key> 1480 <string>20080408160000</string> 1481 <key>effort</key> 1488 <string>20080402160000</string> 1489 <key>doneSeconds</key> 1490 <real>7200</real> 1491 <key>effort</key> 1492 <real>3600</real> 1493 <key>effortDone</key> 1482 1494 <real>3600</real> 1483 1495 <key>objectId</key> … … 1491 1503 <integer>2</integer> 1492 1504 </dict> 1493 <dict>1494 <key>id</key>1495 <integer>166</integer>1496 <key>isResource</key>1497 <string>YES</string>1498 <key>kind</key>1499 <integer>2</integer>1500 </dict>1501 1505 </array> 1502 1506 <key>task</key> 1503 1507 <string>Armoured/No Passphrase</string> 1504 <key>workSeconds</key> 1505 <real>7200</real> 1506 <key>workTime</key> 1507 <real>2</real> 1508 </dict> 1509 <dict> 1510 <key>assignments</key> 1511 <array> 1512 <dict> 1513 <key>id</key> 1514 <integer>1</integer> 1515 <key>units</key> 1516 <real>0.5</real> 1517 </dict> 1518 </array> 1519 <key>desiredStart</key> 1520 <string>20080501110000</string> 1521 <key>effort</key> 1508 <key>workDone</key> 1509 <real>2</real> 1510 <key>workSeconds</key> 1511 <real>7200</real> 1512 <key>workTime</key> 1513 <real>2</real> 1514 </dict> 1515 <dict> 1516 <key>assignments</key> 1517 <array> 1518 <dict> 1519 <key>id</key> 1520 <integer>1</integer> 1521 <key>units</key> 1522 <real>0.5</real> 1523 </dict> 1524 </array> 1525 <key>desiredStart</key> 1526 <string>20080403090000</string> 1527 <key>doneSeconds</key> 1528 <real>7200</real> 1529 <key>effort</key> 1530 <real>3600</real> 1531 <key>effortDone</key> 1522 1532 <real>3600</real> 1523 1533 <key>objectId</key> … … 1527 1537 <dict> 1528 1538 <key>id</key> 1529 <integer>91</integer>1530 <key>isResource</key>1531 <string>YES</string>1532 <key>kind</key>1533 <integer>2</integer>1534 </dict>1535 <dict>1536 <key>id</key>1537 1539 <integer>104</integer> 1538 1540 <key>kind</key> … … 1542 1544 <key>task</key> 1543 1545 <string>Unarmoured/Passphrase</string> 1544 <key>workSeconds</key> 1545 <real>7200</real> 1546 <key>workTime</key> 1547 <real>2</real> 1548 </dict> 1549 <dict> 1550 <key>assignments</key> 1551 <array> 1552 <dict> 1553 <key>id</key> 1554 <integer>1</integer> 1555 <key>units</key> 1556 <real>0.5</real> 1557 </dict> 1558 </array> 1559 <key>desiredStart</key> 1560 <string>20080501140000</string> 1561 <key>effort</key> 1546 <key>workDone</key> 1547 <real>2</real> 1548 <key>workSeconds</key> 1549 <real>7200</real> 1550 <key>workTime</key> 1551 <real>2</real> 1552 </dict> 1553 <dict> 1554 <key>assignments</key> 1555 <array> 1556 <dict> 1557 <key>id</key> 1558 <integer>1</integer> 1559 <key>units</key> 1560 <real>0.5</real> 1561 </dict> 1562 </array> 1563 <key>desiredStart</key> 1564 <string>20080403110000</string> 1565 <key>doneSeconds</key> 1566 <real>7200</real> 1567 <key>effort</key> 1568 <real>3600</real> 1569 <key>effortDone</key> 1562 1570 <real>3600</real> 1563 1571 <key>objectId</key> … … 1567 1575 <dict> 1568 1576 <key>id</key> 1569 <integer>49</integer>1570 <key>isResource</key>1571 <string>YES</string>1572 <key>kind</key>1573 <integer>2</integer>1574 </dict>1575 <dict>1576 <key>id</key>1577 1577 <integer>101</integer> 1578 1578 <key>kind</key> … … 1582 1582 <key>task</key> 1583 1583 <string>Armoured/Passphrase</string> 1584 <key>workDone</key> 1585 <real>2</real> 1584 1586 <key>workSeconds</key> 1585 1587 <real>7200</real> … … 1621 1623 </dict> 1622 1624 </array> 1625 <key>completionPercentage</key> 1626 <real>1</real> 1623 1627 <key>effort</key> 1624 1628 <real>0.0</real> … … 1648 1652 </array> 1649 1653 <key>desiredStart</key> 1650 <string>20080501160000</string> 1651 <key>effort</key> 1654 <string>20080425160000</string> 1655 <key>doneSeconds</key> 1656 <real>7200</real> 1657 <key>effort</key> 1658 <real>3600</real> 1659 <key>effortDone</key> 1652 1660 <real>3600</real> 1653 1661 <key>objectId</key> … … 1657 1665 <dict> 1658 1666 <key>id</key> 1659 <integer>50</integer>1660 <key>isResource</key>1661 <string>YES</string>1662 <key>kind</key>1663 <integer>2</integer>1664 </dict>1665 <dict>1666 <key>id</key>1667 1667 <integer>101</integer> 1668 1668 <key>kind</key> … … 1672 1672 <key>task</key> 1673 1673 <string>Armoured/No Passphrase</string> 1674 <key>workSeconds</key> 1675 <real>7200</real> 1676 <key>workTime</key> 1677 <real>2</real> 1678 </dict> 1679 <dict> 1680 <key>assignments</key> 1681 <array> 1682 <dict> 1683 <key>id</key> 1684 <integer>1</integer> 1685 <key>units</key> 1686 <real>0.5</real> 1687 </dict> 1688 </array> 1689 <key>desiredStart</key> 1690 <string>20080502090000</string> 1691 <key>effort</key> 1674 <key>workDone</key> 1675 <real>2</real> 1676 <key>workSeconds</key> 1677 <real>7200</real> 1678 <key>workTime</key> 1679 <real>2</real> 1680 </dict> 1681 <dict> 1682 <key>assignments</key> 1683 <array> 1684 <dict> 1685 <key>id</key> 1686 <integer>1</integer> 1687 <key>units</key> 1688 <real>0.5</real> 1689 </dict> 1690 </array> 1691 <key>desiredStart</key> 1692 <string>20080428090000</string> 1693 <key>doneSeconds</key> 1694 <real>7200</real> 1695 <key>effort</key> 1696 <real>3600</real> 1697 <key>effortDone</key> 1692 1698 <real>3600</real> 1693 1699 <key>objectId</key> … … 1697 1703 <dict> 1698 1704 <key>id</key> 1699 <integer>53</integer>1700 <key>isResource</key>1701 <string>YES</string>1702 <key>kind</key>1703 <integer>2</integer>1704 </dict>1705 <dict>1706 <key>id</key>1707 1705 <integer>104</integer> 1708 1706 <key>kind</key> … … 1712 1710 <key>task</key> 1713 1711 <string>Unarmoured/Passphrase</string> 1714 <key>workSeconds</key> 1715 <real>7200</real> 1716 <key>workTime</key> 1717 <real>2</real> 1718 </dict> 1719 <dict> 1720 <key>assignments</key> 1721 <array> 1722 <dict> 1723 <key>id</key> 1724 <integer>1</integer> 1725 <key>units</key> 1726 <real>0.5</real> 1727 </dict> 1728 </array> 1729 <key>desiredStart</key> 1730 <string>20080502110000</string> 1731 <key>effort</key> 1712 <key>workDone</key> 1713 <real>2</real> 1714 <key>workSeconds</key> 1715 <real>7200</real> 1716 <key>workTime</key> 1717 <real>2</real> 1718 </dict> 1719 <dict> 1720 <key>assignments</key> 1721 <array> 1722 <dict> 1723 <key>id</key> 1724 <integer>1</integer> 1725 <key>units</key> 1726 <real>0.5</real> 1727 </dict> 1728 </array> 1729 <key>desiredStart</key> 1730 <string>20080428110000</string> 1731 <key>doneSeconds</key> 1732 <real>7200</real> 1733 <key>effort</key> 1734 <real>3600</real> 1735 <key>effortDone</key> 1732 1736 <real>3600</real> 1733 1737 <key>objectId</key> … … 1737 1741 <dict> 1738 1742 <key>id</key> 1739 <integer>54</integer>1740 <key>isResource</key>1741 <string>YES</string>1742 <key>kind</key>1743 <integer>2</integer>1744 </dict>1745 <dict>1746 <key>id</key>1747 1743 <integer>101</integer> 1748 1744 <key>kind</key> … … 1752 1748 <key>task</key> 1753 1749 <string>Armoured/Passphrase</string> 1750 <key>workDone</key> 1751 <real>2</real> 1754 1752 <key>workSeconds</key> 1755 1753 <real>7200</real> … … 1806 1804 </dict> 1807 1805 </array> 1806 <key>completionPercentage</key> 1807 <real>1</real> 1808 1808 <key>effort</key> 1809 1809 <real>0.0</real> … … 1826 1826 </array> 1827 1827 <key>desiredStart</key> 1828 <string>20080618110000</string> 1829 <key>effort</key> 1828 <string>20080611110000</string> 1829 <key>doneSeconds</key> 1830 <real>7200</real> 1831 <key>effort</key> 1832 <real>3600</real> 1833 <key>effortDone</key> 1830 1834 <real>3600</real> 1831 1835 <key>objectId</key> 1832 1836 <integer>59</integer> 1833 <key>prerequisites</key>1834 <array>1835 <dict>1836 <key>id</key>1837 <integer>60</integer>1838 <key>isResource</key>1839 <string>YES</string>1840 <key>kind</key>1841 <integer>2</integer>1842 </dict>1843 </array>1844 1837 <key>task</key> 1845 1838 <string>Armoured/No Passphrase</string> 1846 <key>workSeconds</key> 1847 <real>7200</real> 1848 <key>workTime</key> 1849 <real>2</real> 1850 </dict> 1851 <dict> 1852 <key>assignments</key> 1853 <array> 1854 <dict> 1855 <key>id</key> 1856 <integer>1</integer> 1857 <key>units</key> 1858 <real>0.5</real> 1859 </dict> 1860 </array> 1861 <key>desiredStart</key> 1862 <string>20080618090000</string> 1863 <key>effort</key> 1839 <key>workDone</key> 1840 <real>2</real> 1841 <key>workSeconds</key> 1842 <real>7200</real> 1843 <key>workTime</key> 1844 <real>2</real> 1845 </dict> 1846 <dict> 1847 <key>assignments</key> 1848 <array> 1849 <dict> 1850 <key>id</key> 1851 <integer>1</integer> 1852 <key>units</key> 1853 <real>0.5</real> 1854 </dict> 1855 </array> 1856 <key>desiredStart</key> 1857 <string>20080611090000</string> 1858 <key>doneSeconds</key> 1859 <real>7200</real> 1860 <key>effort</key> 1861 <real>3600</real> 1862 <key>effortDone</key> 1864 1863 <real>3600</real> 1865 1864 <key>objectId</key> 1866 1865 <integer>60</integer> 1867 <key>prerequisites</key>1868 <array>1869 <dict>1870 <key>id</key>1871 <integer>200</integer>1872 <key>isResource</key>1873 <string>YES</string>1874 <key>kind</key>1875 <integer>2</integer>1876 </dict>1877 </array>1878 1866 <key>task</key> 1879 1867 <string>Unarmoured/Passphrase</string> 1880 <key>workSeconds</key> 1881 <real>7200</real> 1882 <key>workTime</key> 1883 <real>2</real> 1884 </dict> 1885 <dict> 1886 <key>assignments</key> 1887 <array> 1888 <dict> 1889 <key>id</key> 1890 <integer>1</integer> 1891 <key>units</key> 1892 <real>0.5</real> 1893 </dict> 1894 </array> 1895 <key>desiredStart</key> 1896 <string>20080618140000</string> 1897 <key>effort</key> 1868 <key>workDone</key> 1869 <real>2</real> 1870 <key>workSeconds</key> 1871 <real>7200</real> 1872 <key>workTime</key> 1873 <real>2</real> 1874 </dict> 1875 <dict> 1876 <key>assignments</key> 1877 <array> 1878 <dict> 1879 <key>id</key> 1880 <integer>1</integer> 1881 <key>units</key> 1882 <real>0.5</real> 1883 </dict> 1884 </array> 1885 <key>desiredStart</key> 1886 <string>20080611140000</string> 1887 <key>doneSeconds</key> 1888 <real>7200</real> 1889 <key>effort</key> 1890 <real>3600</real> 1891 <key>effortDone</key> 1898 1892 <real>3600</real> 1899 1893 <key>objectId</key> 1900 1894 <integer>61</integer> 1901 <key>prerequisites</key>1902 <array>1903 <dict>1904 <key>id</key>1905 <integer>59</integer>1906 <key>isResource</key>1907 <string>YES</string>1908 <key>kind</key>1909 <integer>2</integer>1910 </dict>1911 </array>1912 1895 <key>task</key> 1913 1896 <string>Armoured/Passphrase</string> 1914 <key>workSeconds</key> 1915 <real>7200</real> 1916 <key>workTime</key> 1917 <real>2</real> 1918 </dict> 1919 <dict> 1920 <key>assignments</key> 1921 <array> 1922 <dict> 1923 <key>id</key> 1924 <integer>1</integer> 1925 <key>units</key> 1926 <real>0.5</real> 1927 </dict> 1928 </array> 1897 <key>workDone</key> 1898 <real>2</real> 1899 <key>workSeconds</key> 1900 <real>7200</real> 1901 <key>workTime</key> 1902 <real>2</real> 1903 </dict> 1904 <dict> 1905 <key>assignments</key> 1906 <array> 1907 <dict> 1908 <key>id</key> 1909 <integer>1</integer> 1910 <key>units</key> 1911 <real>0.5</real> 1912 </dict> 1913 </array> 1914 <key>completionPercentage</key> 1915 <real>1</real> 1929 1916 <key>effort</key> 1930 1917 <real>0.0</real> … … 2033 2020 </dict> 2034 2021 </array> 2022 <key>completionPercentage</key> 2023 <real>1</real> 2035 2024 <key>effort</key> 2036 2025 <real>0.0</real> … … 2053 2042 </array> 2054 2043 <key>desiredStart</key> 2055 <string>20080619090000</string> 2056 <key>effort</key> 2044 <string>20080612090000</string> 2045 <key>doneSeconds</key> 2046 <real>7200</real> 2047 <key>effort</key> 2048 <real>3600</real> 2049 <key>effortDone</key> 2057 2050 <real>3600</real> 2058 2051 <key>objectId</key> 2059 2052 <integer>68</integer> 2060 <key>prerequisites</key>2061 <array>2062 <dict>2063 <key>id</key>2064 <integer>69</integer>2065 <key>isResource</key>2066 <string>YES</string>2067 <key>kind</key>2068 <integer>2</integer>2069 </dict>2070 </array>2071 2053 <key>task</key> 2072 2054 <string>Armoured/No Passphrase</string> 2073 <key>workSeconds</key> 2074 <real>7200</real> 2075 <key>workTime</key> 2076 <real>2</real> 2077 </dict> 2078 <dict> 2079 <key>assignments</key> 2080 <array> 2081 <dict> 2082 <key>id</key> 2083 <integer>1</integer> 2084 <key>units</key> 2085 <real>0.5</real> 2086 </dict> 2087 </array> 2088 <key>desiredStart</key> 2089 <string>20080618160000</string> 2090 <key>effort</key> 2055 <key>workDone</key> 2056 <real>2</real> 2057 <key>workSeconds</key> 2058 <real>7200</real> 2059 <key>workTime</key> 2060 <real>2</real> 2061 </dict> 2062 <dict> 2063 <key>assignments</key> 2064 <array> 2065 <dict> 2066 <key>id</key> 2067 <integer>1</integer> 2068 <key>units</key> 2069 <real>0.5</real> 2070 </dict> 2071 </array> 2072 <key>desiredStart</key> 2073 <string>20080611160000</string> 2074 <key>doneSeconds</key> 2075 <real>7200</real> 2076 <key>effort</key> 2077 <real>3600</real> 2078 <key>effortDone</key> 2091 2079 <real>3600</real> 2092 2080 <key>objectId</key> 2093 2081 <integer>69</integer> 2094 <key>prerequisites</key>2095 <array>2096 <dict>2097 <key>id</key>2098 <integer>61</integer>2099 <key>isResource</key>2100 <string>YES</string>2101 <key>kind</key>2102 <integer>2</integer>2103 </dict>2104 </array>2105 2082 <key>task</key> 2106 2083 <string>Unarmoured/Passphrase</string> 2107 <key>workSeconds</key> 2108 <real>7200</real> 2109 <key>workTime</key> 2110 <real>2</real> 2111 </dict> 2112 <dict> 2113 <key>assignments</key> 2114 <array> 2115 <dict> 2116 <key>id</key> 2117 <integer>1</integer> 2118 <key>units</key> 2119 <real>0.5</real> 2120 </dict> 2121 </array> 2122 <key>desiredStart</key> 2123 <string>20080619110000</string> 2124 <key>effort</key> 2084 <key>workDone</key> 2085 <real>2</real> 2086 <key>workSeconds</key> 2087 <real>7200</real> 2088 <key>workTime</key> 2089 <real>2</real> 2090 </dict> 2091 <dict> 2092 <key>assignments</key> 2093 <array> 2094 <dict> 2095 <key>id</key> 2096 <integer>1</integer> 2097 <key>units</key> 2098 <real>0.5</real> 2099 </dict> 2100 </array> 2101 <key>desiredStart</key> 2102 <string>20080612110000</string> 2103 <key>doneSeconds</key> 2104 <real>7200</real> 2105 <key>effort</key> 2106 <real>3600</real> 2107 <key>effortDone</key> 2125 2108 <real>3600</real> 2126 2109 <key>objectId</key> 2127 2110 <integer>70</integer> 2128 <key>prerequisites</key>2129 <array>2130 <dict>2131 <key>id</key>2132 <integer>68</integer>2133 <key>isResource</key>2134 <string>YES</string>2135 <key>kind</key>2136 <integer>2</integer>2137 </dict>2138 </array>2139 2111 <key>task</key> 2140 2112 <string>Armoured/Passphrase</string> 2141 <key>workSeconds</key> 2142 <real>7200</real> 2143 <key>workTime</key> 2144 <real>2</real> 2145 </dict> 2146 <dict> 2147 <key>assignments</key> 2148 <array> 2149 <dict> 2150 <key>id</key> 2151 <integer>1</integer> 2152 <key>units</key> 2153 <real>0.5</real> 2154 </dict> 2155 </array> 2113 <key>workDone</key> 2114 <real>2</real> 2115 <key>workSeconds</key> 2116 <real>7200</real> 2117 <key>workTime</key> 2118 <real>2</real> 2119 </dict> 2120 <dict> 2121 <key>assignments</key> 2122 <array> 2123 <dict> 2124 <key>id</key> 2125 <integer>1</integer> 2126 <key>units</key> 2127 <real>0.5</real> 2128 </dict> 2129 </array> 2130 <key>completionPercentage</key> 2131 <real>1</real> 2156 2132 <key>effort</key> 2157 2133 <real>0.0</real> … … 2277 2253 </array> 2278 2254 <key>desiredStart</key> 2255 <string>20080620090000</string> 2256 <key>doneSeconds</key> 2257 <real>7200</real> 2258 <key>effort</key> 2259 <real>3600</real> 2260 <key>effortDone</key> 2261 <real>3600</real> 2262 <key>objectId</key> 2263 <integer>75</integer> 2264 <key>prerequisites</key> 2265 <array> 2266 <dict> 2267 <key>id</key> 2268 <integer>104</integer> 2269 <key>kind</key> 2270 <integer>2</integer> 2271 </dict> 2272 </array> 2273 <key>task</key> 2274 <string>Unarmoured/No Passphrase</string> 2275 <key>workDone</key> 2276 <real>2</real> 2277 <key>workSeconds</key> 2278 <real>7200</real> 2279 <key>workTime</key> 2280 <real>2</real> 2281 </dict> 2282 <dict> 2283 <key>assignments</key> 2284 <array> 2285 <dict> 2286 <key>id</key> 2287 <integer>1</integer> 2288 <key>units</key> 2289 <real>0.5</real> 2290 </dict> 2291 </array> 2292 <key>desiredStart</key> 2293 <string>20080620140000</string> 2294 <key>doneSeconds</key> 2295 <real>7200</real> 2296 <key>effort</key> 2297 <real>3600</real> 2298 <key>effortDone</key> 2299 <real>3600</real> 2300 <key>objectId</key> 2301 <integer>76</integer> 2302 <key>prerequisites</key> 2303 <array> 2304 <dict> 2305 <key>id</key> 2306 <integer>101</integer> 2307 <key>kind</key> 2308 <integer>2</integer> 2309 </dict> 2310 <dict> 2311 <key>id</key> 2312 <integer>104</integer> 2313 <key>kind</key> 2314 <integer>2</integer> 2315 </dict> 2316 </array> 2317 <key>task</key> 2318 <string>Armoured/No Passphrase</string> 2319 <key>workDone</key> 2320 <real>2</real> 2321 <key>workSeconds</key> 2322 <real>7200</real> 2323 <key>workTime</key> 2324 <real>2</real> 2325 </dict> 2326 <dict> 2327 <key>assignments</key> 2328 <array> 2329 <dict> 2330 <key>id</key> 2331 <integer>1</integer> 2332 <key>units</key> 2333 <real>0.5</real> 2334 </dict> 2335 </array> 2336 <key>desiredStart</key> 2337 <string>20080620110000</string> 2338 <key>doneSeconds</key> 2339 <real>7200</real> 2340 <key>effort</key> 2341 <real>3600</real> 2342 <key>effortDone</key> 2343 <real>3600</real> 2344 <key>objectId</key> 2345 <integer>77</integer> 2346 <key>prerequisites</key> 2347 <array> 2348 <dict> 2349 <key>id</key> 2350 <integer>104</integer> 2351 <key>kind</key> 2352 <integer>2</integer> 2353 </dict> 2354 </array> 2355 <key>task</key> 2356 <string>Unarmoured/Passphrase</string> 2357 <key>workDone</key> 2358 <real>2</real> 2359 <key>workSeconds</key> 2360 <real>7200</real> 2361 <key>workTime</key> 2362 <real>2</real> 2363 </dict> 2364 <dict> 2365 <key>assignments</key> 2366 <array> 2367 <dict> 2368 <key>id</key> 2369 <integer>1</integer> 2370 <key>units</key> 2371 <real>0.5</real> 2372 </dict> 2373 </array> 2374 <key>desiredStart</key> 2375 <string>20080620160000</string> 2376 <key>doneSeconds</key> 2377 <real>7200</real> 2378 <key>effort</key> 2379 <real>3600</real> 2380 <key>effortDone</key> 2381 <real>3600</real> 2382 <key>objectId</key> 2383 <integer>78</integer> 2384 <key>prerequisites</key> 2385 <array> 2386 <dict> 2387 <key>id</key> 2388 <integer>101</integer> 2389 <key>kind</key> 2390 <integer>2</integer> 2391 </dict> 2392 <dict> 2393 <key>id</key> 2394 <integer>104</integer> 2395 <key>kind</key> 2396 <integer>2</integer> 2397 </dict> 2398 </array> 2399 <key>task</key> 2400 <string>Armoured/Passphrase</string> 2401 <key>workDone</key> 2402 <real>2</real> 2403 <key>workSeconds</key> 2404 <real>7200</real> 2405 <key>workTime</key> 2406 <real>2</real> 2407 </dict> 2408 <dict> 2409 <key>assignments</key> 2410 <array> 2411 <dict> 2412 <key>id</key> 2413 <integer>1</integer> 2414 <key>units</key> 2415 <real>0.5</real> 2416 </dict> 2417 </array> 2418 <key>desiredStart</key> 2419 <string>20080623090000</string> 2420 <key>doneSeconds</key> 2421 <real>7200</real> 2422 <key>effort</key> 2423 <real>3600</real> 2424 <key>effortDone</key> 2425 <real>3600</real> 2426 <key>objectId</key> 2427 <integer>79</integer> 2428 <key>prerequisites</key> 2429 <array> 2430 <dict> 2431 <key>id</key> 2432 <integer>104</integer> 2433 <key>kind</key> 2434 <integer>2</integer> 2435 </dict> 2436 </array> 2437 <key>task</key> 2438 <string>Unarmoured/No Passphrase</string> 2439 <key>workDone</key> 2440 <real>2</real> 2441 <key>workSeconds</key> 2442 <real>7200</real> 2443 <key>workTime</key> 2444 <real>2</real> 2445 </dict> 2446 <dict> 2447 <key>assignments</key> 2448 <array> 2449 <dict> 2450 <key>id</key> 2451 <integer>1</integer> 2452 <key>units</key> 2453 <real>0.5</real> 2454 </dict> 2455 </array> 2456 <key>desiredStart</key> 2279 2457 <string>20080623140000</string> 2280 <key>effort</key> 2281 <real>3600</real> 2282 <key>objectId</key> 2283 <integer>75</integer> 2284 <key>prerequisites</key> 2285 <array> 2458 <key>doneSeconds</key> 2459 <real>7200</real> 2460 <key>effort</key> 2461 <real>3600</real> 2462 <key>effortDone</key> 2463 <real>3600</real> 2464 <key>objectId</key> 2465 <integer>80</integer> 2466 <key>prerequisites</key> 2467 <array> 2468 <dict> 2469 <key>id</key> 2470 <integer>101</integer> 2471 <key>kind</key> 2472 <integer>2</integer> 2473 </dict> 2286 2474 <dict> 2287 2475 <key>id</key> … … 2290 2478 <integer>2</integer> 2291 2479 </dict> 2292 <dict> 2293 <key>id</key> 2294 <integer>206</integer> 2295 <key>isResource</key> 2296 <string>YES</string> 2297 <key>kind</key> 2298 <integer>2</integer> 2299 </dict> 2300 </array> 2301 <key>task</key> 2302 <string>Unarmoured/No Passphrase</string> 2303 <key>workSeconds</key> 2304 <real>7200</real> 2305 <key>workTime</key> 2306 <real>2</real> 2307 </dict> 2308 <dict> 2309 <key>assignments</key> 2310 <array> 2311 <dict> 2312 <key>id</key> 2313 <integer>1</integer> 2314 <key>units</key> 2315 <real>0.5</real> 2316 </dict> 2317 </array> 2318 <key>desiredStart</key> 2319 <string>20080624090000</string> 2320 <key>effort</key> 2321 <real>3600</real> 2322 <key>objectId</key> 2323 <integer>76</integer> 2324 <key>prerequisites</key> 2325 <array> 2326 <dict> 2327 <key>id</key> 2328 <integer>77</integer> 2329 <key>isResource</key> 2330 <string>YES</string> 2331 <key>kind</key> 2332 <integer>2</integer> 2333 </dict> 2480 </array> 2481 <key>task</key> 2482 <string>Armoured/No Passphrase</string> 2483 <key>workDone</key> 2484 <real>2</real> 2485 <key>workSeconds</key> 2486 <real>7200</real> 2487 <key>workTime</key> 2488 <real>2</real> 2489 </dict> 2490 <dict> 2491 <key>assignments</key> 2492 <array> 2493 <dict> 2494 <key>id</key> 2495 <integer>1</integer> 2496 <key>units</key> 2497 <real>0.5</real> 2498 </dict> 2499 </array> 2500 <key>desiredStart</key> 2501 <string>20080623110000</string> 2502 <key>doneSeconds</key> 2503 <real>7200</real> 2504 <key>effort</key> 2505 <real>3600</real> 2506 <key>effortDone</key> 2507 <real>3600</real> 2508 <key>objectId</key> 2509 <integer>81</integer> 2510 <key>prerequisites</key> 2511 <array> 2512 <dict> 2513 <key>id</key> 2514 <integer>104</integer> 2515 <key>kind</key> 2516 <integer>2</integer> 2517 </dict> 2518 </array> 2519 <key>task</key> 2520 <string>Unarmoured/Passphrase</string> 2521 <key>workDone</key> 2522 <real>2</real> 2523 <key>workSeconds</key> 2524 <real>7200</real> 2525 <key>workTime</key> 2526 <real>2</real> 2527 </dict> 2528 <dict> 2529 <key>assignments</key> 2530 <array> 2531 <dict> 2532 <key>id</key> 2533 <integer>1</integer> 2534 <key>units</key> 2535 <real>0.5</real> 2536 </dict> 2537 </array> 2538 <key>desiredStart</key> 2539 <string>20080623160000</string> 2540 <key>doneSeconds</key> 2541 <real>7200</real> 2542 <key>effort</key> 2543 <real>3600</real> 2544 <key>effortDone</key> 2545 <real>3600</real> 2546 <key>objectId</key> 2547 <integer>82</integer> 2548 <key>prerequisites</key> 2549 <array> 2334 2550 <dict> 2335 2551 <key>id</key> … … 2346 2562 </array> 2347 2563 <key>task</key> 2348 <string>Armoured/No Passphrase</string>2349 <key>workSeconds</key>2350 <real>7200</real>2351 <key>workTime</key>2352 <real>2</real>2353 </dict>2354 <dict>2355 <key>assignments</key>2356 <array>2357 <dict>2358 <key>id</key>2359 <integer>1</integer>2360 <key>units</key>2361 <real>0.5</real>2362 </dict>2363 </array>2364 <key>desiredStart</key>2365 <string>20080623160000</string>2366 <key>effort</key>2367 <real>3600</real>2368 <key>objectId</key>2369 <integer>77</integer>2370 <key>prerequisites</key>2371 <array>2372 <dict>2373 <key>id</key>2374 <integer>75</integer>2375 <key>isResource</key>2376 <string>YES</string>2377 <key>kind</key>2378 <integer>2</integer>2379 </dict>2380 <dict>2381 <key>id</key>2382 <integer>104</integer>2383 <key>kind</key>2384 <integer>2</integer>2385 </dict>2386 </array>2387 <key>task</key>2388 <string>Unarmoured/Passphrase</string>2389 <key>workSeconds</key>2390 <real>7200</real>2391 <key>workTime</key>2392 <real>2</real>2393 </dict>2394 <dict>2395 <key>assignments</key>2396 <array>2397 <dict>2398 <key>id</key>2399 <integer>1</integer>2400 <key>units</key>2401 <real>0.5</real>2402 </dict>2403 </array>2404 <key>desiredStart</key>2405 <string>20080624110000</string>2406 <key>effort</key>2407 <real>3600</real>2408 <key>objectId</key>2409 <integer>78</integer>2410 <key>prerequisites</key>2411 <array>2412 <dict>2413 <key>id</key>2414 <integer>76</integer>2415 <key>isResource</key>2416 <string>YES</string>2417 <key>kind</key>2418 <integer>2</integer>2419 </dict>2420 <dict>2421 <key>id</key>2422 <integer>101</integer>2423 <key>kind</key>2424 <integer>2</integer>2425 </dict>2426 <dict>2427 <key>id</key>2428 <integer>104</integer>2429 <key>kind</key>2430 <integer>2</integer>2431 </dict>2432 </array>2433 <key>task</key>2434 2564 <string>Armoured/Passphrase</string> 2435 <key>workSeconds</key> 2436 <real>7200</real> 2437 <key>workTime</key> 2438 <real>2</real> 2439 </dict> 2440 <dict> 2441 <key>assignments</key> 2442 <array> 2443 <dict> 2444 <key>id</key> 2445 <integer>1</integer> 2446 <key>units</key> 2447 <real>0.5</real> 2448 </dict> 2449 </array> 2450 <key>desiredStart</key> 2451 <string>20080624140000</string> 2452 <key>effort</key> 2453 <real>3600</real> 2454 <key>objectId</key> 2455 <integer>79</integer> 2456 <key>prerequisites</key> 2457 <array> 2458 <dict> 2459 <key>id</key> 2460 <integer>78</integer> 2461 <key>isResource</key> 2462 <string>YES</string> 2463 <key>kind</key> 2464 <integer>2</integer> 2465 </dict> 2466 <dict> 2467 <key>id</key> 2468 <integer>104</integer> 2469 <key>kind</key> 2470 <integer>2</integer> 2471 </dict> 2472 </array> 2473 <key>task</key> 2474 <string>Unarmoured/No Passphrase</string> 2475 <key>workSeconds</key> 2476 <real>7200</real> 2477 <key>workTime</key> 2478 <real>2</real> 2479 </dict> 2480 <dict> 2481 <key>assignments</key> 2482 <array> 2483 <dict> 2484 <key>id</key> 2485 <integer>1</integer> 2486 <key>units</key> 2487 <real>0.5</real> 2488 </dict> 2489 </array> 2490 <key>desiredStart</key> 2491 <string>20080625090000</string> 2492 <key>effort</key> 2493 <real>3600</real> 2494 <key>objectId</key> 2495 <integer>80</integer> 2496 <key>prerequisites</key> 2497 <array> 2498 <dict> 2499 <key>id</key> 2500 <integer>81</integer> 2501 <key>isResource</key> 2502 <string>YES</string> 2503 <key>kind</key> 2504 <integer>2</integer> 2505 </dict> 2506 <dict> 2507 <key>id</key> 2508 <integer>101</integer> 2509 <key>kind</key> 2510 <integer>2</integer> 2511 </dict> 2512 <dict> 2513 <key>id</key> 2514 <integer>104</integer> 2515 <key>kind</key> 2516 <integer>2</integer> 2517 </dict> 2518 </array> 2519 <key>task</key> 2520 <string>Armoured/No Passphrase</string> 2521 <key>workSeconds</key> 2522 <real>7200</real> 2523 <key>workTime</key> 2524 <real>2</real> 2525 </dict> 2526 <dict> 2527 <key>assignments</key> 2528 <array> 2529 <dict> 2530 <key>id</key> 2531 <integer>1</integer> 2532 <key>units</key> 2533 <real>0.5</real> 2534 </dict> 2535 </array> 2536 <key>desiredStart</key> 2537 <string>20080624160000</string> 2538 <key>effort</key> 2539 <real>3600</real> 2540 <key>objectId</key> 2541 <integer>81</integer> 2542 <key>prerequisites</key> 2543 <array> 2544 <dict> 2545 <key>id</key> 2546 <integer>79</integer> 2547 <key>isResource</key> 2548 <string>YES</string> 2549 <key>kind</key> 2550 <integer>2</integer> 2551 </dict> 2552 <dict> 2553 <key>id</key> 2554 <integer>104</integer> 2555 <key>kind</key> 2556 <integer>2</integer> 2557 </dict> 2558 </array> 2559 <key>task</key> 2560 <string>Unarmoured/Passphrase</string> 2561 <key>workSeconds</key> 2562 <real>7200</real> 2563 <key>workTime</key> 2564 <real>2</real> 2565 </dict> 2566 <dict> 2567 <key>assignments</key> 2568 <array> 2569 <dict> 2570 <key>id</key> 2571 <integer>1</integer> 2572 <key>units</key> 2573 <real>0.5</real> 2574 </dict> 2575 </array> 2576 <key>desiredStart</key> 2577 <string>20080625110000</string> 2578 <key>effort</key> 2579 <real>3600</real> 2580 <key>objectId</key> 2581 <integer>82</integer> 2582 <key>prerequisites</key> 2583 <array> 2584 <dict> 2585 <key>id</key> 2586 <integer>80</integer> 2587 <key>isResource</key> 2588 <string>YES</string> 2589 <key>kind</key> 2590 <integer>2</integer> 2591 </dict> 2592 <dict> 2593 <key>id</key> 2594 <integer>101</integer> 2595 <key>kind</key> 2596 <integer>2</integer> 2597 </dict> 2598 <dict> 2599 <key>id</key> 2600 <integer>104</integer> 2601 <key>kind</key> 2602 <integer>2</integer> 2603 </dict> 2604 </array> 2605 <key>task</key> 2606 <string>Armoured/Passphrase</string> 2565 <key>workDone</key> 2566 <real>2</real> 2607 2567 <key>workSeconds</key> 2608 2568 <real>7200</real> … … 2725 2685 </array> 2726 2686 <key>desiredStart</key> 2727 <string>20080 423110000</string>2687 <string>20080509110000</string> 2728 2688 <key>effort</key> 2729 2689 <real>28800</real> … … 2734 2694 <dict> 2735 2695 <key>id</key> 2736 <integer>2 01</integer>2696 <integer>231</integer> 2737 2697 <key>isResource</key> 2738 2698 <string>YES</string> … … 2759 2719 </array> 2760 2720 <key>desiredStart</key> 2761 <string>20080 425110000</string>2721 <string>20080515110000</string> 2762 2722 <key>effort</key> 2763 2723 <real>28800</real> … … 2768 2728 <dict> 2769 2729 <key>id</key> 2770 <integer> 89</integer>2730 <integer>233</integer> 2771 2731 <key>isResource</key> 2772 2732 <string>YES</string> … … 2793 2753 </array> 2794 2754 <key>desiredStart</key> 2795 <string>20080 429110000</string>2755 <string>20080519110000</string> 2796 2756 <key>effort</key> 2797 2757 <real>28800</real> … … 2826 2786 </dict> 2827 2787 </array> 2788 <key>completionPercentage</key> 2789 <real>1</real> 2828 2790 <key>effort</key> 2829 2791 <real>0.0</real> … … 2843 2805 </dict> 2844 2806 </array> 2807 <key>completionPercentage</key> 2808 <real>1</real> 2845 2809 <key>effort</key> 2846 2810 <real>0.0</real> … … 2860 2824 </dict> 2861 2825 </array> 2826 <key>completionPercentage</key> 2827 <real>1</real> 2862 2828 <key>effort</key> 2863 2829 <real>0.0</real> … … 2896 2862 </array> 2897 2863 <key>desiredStart</key> 2898 <string>2008060 2090000</string>2864 <string>20080605110000</string> 2899 2865 <key>effort</key> 2900 2866 <real>14400</real> … … 2905 2871 <dict> 2906 2872 <key>id</key> 2907 <integer>1 23</integer>2873 <integer>170</integer> 2908 2874 <key>isResource</key> 2909 2875 <string>YES</string> … … 2930 2896 </array> 2931 2897 <key>desiredStart</key> 2932 <string>2008060 3090000</string>2898 <string>20080606110000</string> 2933 2899 <key>effort</key> 2934 2900 <real>14400</real> … … 2964 2930 </array> 2965 2931 <key>desiredStart</key> 2966 <string>2008060 4090000</string>2932 <string>20080609110000</string> 2967 2933 <key>effort</key> 2968 2934 <real>14400</real> … … 3039 3005 </array> 3040 3006 <key>desiredStart</key> 3041 <string>20080311140000</string> 3042 <key>effort</key> 3007 <string>20080306090000</string> 3008 <key>doneSeconds</key> 3009 <real>57600</real> 3010 <key>effort</key> 3011 <real>28800</real> 3012 <key>effortDone</key> 3043 3013 <real>28800</real> 3044 3014 <key>objectId</key> 3045 3015 <integer>102</integer> 3046 <key>prerequisites</key>3047 <array>3048 <dict>3049 <key>id</key>3050 <integer>212</integer>3051 <key>isResource</key>3052 <string>YES</string>3053 <key>kind</key>3054 <integer>2</integer>3055 </dict>3056 </array>3057 3016 <key>task</key> 3058 3017 <string>Handling passphrase</string> 3018 <key>workDone</key> 3019 <real>16</real> 3059 3020 <key>workSeconds</key> 3060 3021 <real>57600</real> … … 3073 3034 </array> 3074 3035 <key>desiredStart</key> 3075 <string>200806 05090000</string>3036 <string>20080610110000</string> 3076 3037 <key>effort</key> 3077 3038 <real>14400</real> … … 3106 3067 </dict> 3107 3068 </array> 3108 <key>desiredStart</key> 3109 <string>20080304090000</string> 3110 <key>effort</key> 3111 <real>7200</real> 3069 <key>completionPercentage</key> 3070 <real>1</real> 3071 <key>desiredStart</key> 3072 <string>20080306090000</string> 3073 <key>effort</key> 3074 <real>0.0</real> 3112 3075 <key>objectId</key> 3113 3076 <integer>104</integer> 3114 3077 <key>task</key> 3115 <string>Write Use of Preferred Symmetric Algorithm</string> 3116 <key>workSeconds</key> 3117 <real>14400</real> 3118 <key>workTime</key> 3119 <real>4</real> 3120 </dict> 3121 <dict> 3122 <key>assignments</key> 3123 <array> 3124 <dict> 3125 <key>id</key> 3126 <integer>1</integer> 3127 <key>units</key> 3128 <real>0.5</real> 3129 </dict> 3130 </array> 3131 <key>desiredStart</key> 3132 <string>20080304140000</string> 3133 <key>effort</key> 3134 <real>7200</real> 3078 <string>Write Use of Preferred Symmetric Algorithm (FUTURE)</string> 3079 </dict> 3080 <dict> 3081 <key>assignments</key> 3082 <array> 3083 <dict> 3084 <key>id</key> 3085 <integer>1</integer> 3086 <key>units</key> 3087 <real>0.5</real> 3088 </dict> 3089 </array> 3090 <key>completionPercentage</key> 3091 <real>1</real> 3092 <key>desiredStart</key> 3093 <string>20080306140000</string> 3094 <key>effort</key> 3095 <real>0.0</real> 3135 3096 <key>objectId</key> 3136 3097 <integer>105</integer> 3137 <key>prerequisites</key> 3138 <array> 3139 <dict> 3140 <key>id</key> 3141 <integer>104</integer> 3142 <key>isResource</key> 3143 <string>YES</string> 3144 <key>kind</key> 3145 <integer>2</integer> 3146 </dict> 3147 </array> 3148 <key>task</key> 3149 <string>Write Use of Preferred Public Key Algorithm</string> 3150 <key>workSeconds</key> 3151 <real>14400</real> 3152 <key>workTime</key> 3153 <real>4</real> 3154 </dict> 3155 <dict> 3156 <key>assignments</key> 3157 <array> 3158 <dict> 3159 <key>id</key> 3160 <integer>1</integer> 3161 <key>units</key> 3162 <real>0.5</real> 3163 </dict> 3164 </array> 3165 <key>desiredStart</key> 3166 <string>20080305090000</string> 3167 <key>effort</key> 3168 <real>7200</real> 3098 <key>task</key> 3099 <string>Write Use of Preferred Public Key Algorithm (FUTURE)</string> 3100 </dict> 3101 <dict> 3102 <key>assignments</key> 3103 <array> 3104 <dict> 3105 <key>id</key> 3106 <integer>1</integer> 3107 <key>units</key> 3108 <real>0.5</real> 3109 </dict> 3110 </array> 3111 <key>completionPercentage</key> 3112 <real>1</real> 3113 <key>desiredStart</key> 3114 <string>20080307090000</string> 3115 <key>effort</key> 3116 <real>0.0</real> 3169 3117 <key>objectId</key> 3170 3118 <integer>106</integer> 3171 <key>prerequisites</key> 3172 <array> 3173 <dict> 3174 <key>id</key> 3175 <integer>105</integer> 3176 <key>isResource</key> 3177 <string>YES</string> 3178 <key>kind</key> 3179 <integer>2</integer> 3180 </dict> 3181 </array> 3182 <key>task</key> 3183 <string>Write Use of Preferred Hash Algorithm</string> 3184 <key>workSeconds</key> 3185 <real>14400</real> 3186 <key>workTime</key> 3187 <real>4</real> 3119 <key>task</key> 3120 <string>Write Use of Preferred Hash Algorithm (FUTURE)</string> 3188 3121 </dict> 3189 3122 <dict> … … 3195 3128 <integer>212</integer> 3196 3129 </array> 3130 <key>isExpanded</key> 3131 <false/> 3197 3132 <key>objectId</key> 3198 3133 <integer>109</integer> … … 3211 3146 </array> 3212 3147 <key>desiredStart</key> 3213 <string>20080407110000</string> 3214 <key>effort</key> 3148 <string>20080403151200</string> 3149 <key>doneSeconds</key> 3150 <real>14400</real> 3151 <key>effort</key> 3152 <real>7200</real> 3153 <key>effortDone</key> 3215 3154 <real>7200</real> 3216 3155 <key>objectId</key> 3217 3156 <integer>110</integer> 3218 <key>prerequisites</key> 3219 <array> 3220 <dict> 3221 <key>id</key> 3222 <integer>168</integer> 3157 <key>task</key> 3158 <string>Compressed Data</string> 3159 <key>workDone</key> 3160 <real>4</real> 3161 <key>workSeconds</key> 3162 <real>14400</real> 3163 <key>workTime</key> 3164 <real>4</real> 3165 </dict> 3166 <dict> 3167 <key>children</key> 3168 <array> 3169 <integer>207</integer> 3170 <integer>208</integer> 3171 </array> 3172 <key>objectId</key> 3173 <integer>111</integer> 3174 <key>task</key> 3175 <string>Compression</string> 3176 </dict> 3177 <dict> 3178 <key>assignments</key> 3179 <array> 3180 <dict> 3181 <key>id</key> 3182 <integer>1</integer> 3183 <key>units</key> 3184 <real>0.5</real> 3185 </dict> 3186 </array> 3187 <key>desiredStart</key> 3188 <string>20080125140000</string> 3189 <key>doneSeconds</key> 3190 <real>288000</real> 3191 <key>effort</key> 3192 <real>144000</real> 3193 <key>effortDone</key> 3194 <real>144000</real> 3195 <key>objectId</key> 3196 <integer>112</integer> 3197 <key>task</key> 3198 <string>Write Verification of document signatures</string> 3199 <key>workDone</key> 3200 <real>80</real> 3201 <key>workSeconds</key> 3202 <real>288000</real> 3203 <key>workTime</key> 3204 <real>80</real> 3205 </dict> 3206 <dict> 3207 <key>assignments</key> 3208 <array> 3209 <dict> 3210 <key>id</key> 3211 <integer>1</integer> 3212 <key>units</key> 3213 <real>0.5</real> 3214 </dict> 3215 </array> 3216 <key>desiredStart</key> 3217 <string>20080326160000</string> 3218 <key>doneSeconds</key> 3219 <real>7200</real> 3220 <key>effort</key> 3221 <real>3600</real> 3222 <key>effortDone</key> 3223 <real>3600</real> 3224 <key>objectId</key> 3225 <integer>113</integer> 3226 <key>task</key> 3227 <string>Sign with V3 signature (FUTURE)</string> 3228 <key>workDone</key> 3229 <real>2</real> 3230 <key>workSeconds</key> 3231 <real>7200</real> 3232 <key>workTime</key> 3233 <real>2</real> 3234 </dict> 3235 <dict> 3236 <key>assignments</key> 3237 <array> 3238 <dict> 3239 <key>id</key> 3240 <integer>1</integer> 3241 <key>units</key> 3242 <real>0.5</real> 3243 </dict> 3244 </array> 3245 <key>doneSeconds</key> 3246 <real>23040</real> 3247 <key>effort</key> 3248 <real>11520</real> 3249 <key>effortDone</key> 3250 <real>11520</real> 3251 <key>forcedStart</key> 3252 <string>20070917090000</string> 3253 <key>objectId</key> 3254 <integer>114</integer> 3255 <key>task</key> 3256 <string>Sign with V4 signature</string> 3257 <key>workDone</key> 3258 <real>6.4000000953674316</real> 3259 <key>workSeconds</key> 3260 <real>23040</real> 3261 <key>workTime</key> 3262 <real>6.4000000953674316</real> 3263 </dict> 3264 <dict> 3265 <key>assignments</key> 3266 <array> 3267 <dict> 3268 <key>id</key> 3269 <integer>1</integer> 3270 <key>units</key> 3271 <real>0.5</real> 3272 </dict> 3273 </array> 3274 <key>desiredStart</key> 3275 <string>20080506160000</string> 3276 <key>doneSeconds</key> 3277 <real>28800</real> 3278 <key>effort</key> 3279 <real>14400</real> 3280 <key>effortDone</key> 3281 <real>14400</real> 3282 <key>objectId</key> 3283 <integer>115</integer> 3284 <key>prerequisites</key> 3285 <array> 3286 <dict> 3287 <key>id</key> 3288 <integer>112</integer> 3289 <key>kind</key> 3290 <integer>2</integer> 3291 </dict> 3292 </array> 3293 <key>task</key> 3294 <string>Verify V3 signature</string> 3295 <key>workDone</key> 3296 <real>8</real> 3297 <key>workSeconds</key> 3298 <real>28800</real> 3299 <key>workTime</key> 3300 <real>8</real> 3301 </dict> 3302 <dict> 3303 <key>assignments</key> 3304 <array> 3305 <dict> 3306 <key>id</key> 3307 <integer>1</integer> 3308 <key>units</key> 3309 <real>0.5</real> 3310 </dict> 3311 </array> 3312 <key>desiredStart</key> 3313 <string>20080421090000</string> 3314 <key>doneSeconds</key> 3315 <real>28800</real> 3316 <key>effort</key> 3317 <real>14400</real> 3318 <key>effortDone</key> 3319 <real>14400</real> 3320 <key>objectId</key> 3321 <integer>116</integer> 3322 <key>prerequisites</key> 3323 <array> 3324 <dict> 3325 <key>id</key> 3326 <integer>112</integer> 3327 <key>kind</key> 3328 <integer>2</integer> 3329 </dict> 3330 </array> 3331 <key>task</key> 3332 <string>Verify V4 signature</string> 3333 <key>workDone</key> 3334 <real>8</real> 3335 <key>workSeconds</key> 3336 <real>28800</real> 3337 <key>workTime</key> 3338 <real>8</real> 3339 </dict> 3340 <dict> 3341 <key>assignments</key> 3342 <array> 3343 <dict> 3344 <key>id</key> 3345 <integer>1</integer> 3346 <key>units</key> 3347 <real>0.5</real> 3348 </dict> 3349 </array> 3350 <key>desiredStart</key> 3351 <string>20080310090000</string> 3352 <key>doneSeconds</key> 3353 <real>57600</real> 3354 <key>effort</key> 3355 <real>28800</real> 3356 <key>effortDone</key> 3357 <real>28800</real> 3358 <key>objectId</key> 3359 <integer>117</integer> 3360 <key>task</key> 3361 <string>Write verification of V3 signatures</string> 3362 <key>workDone</key> 3363 <real>16</real> 3364 <key>workSeconds</key> 3365 <real>57600</real> 3366 <key>workTime</key> 3367 <real>16</real> 3368 </dict> 3369 <dict> 3370 <key>assignments</key> 3371 <array> 3372 <dict> 3373 <key>id</key> 3374 <integer>1</integer> 3375 <key>units</key> 3376 <real>0.5</real> 3377 </dict> 3378 </array> 3379 <key>desiredStart</key> 3380 <string>20080611110000</string> 3381 <key>effort</key> 3382 <real>14400</real> 3383 <key>objectId</key> 3384 <integer>118</integer> 3385 <key>prerequisites</key> 3386 <array> 3387 <dict> 3388 <key>id</key> 3389 <integer>103</integer> 3223 3390 <key>isResource</key> 3224 3391 <string>YES</string> … … 3228 3395 </array> 3229 3396 <key>task</key> 3230 <string>Compressed Data</string> 3231 <key>workSeconds</key> 3397 <string>Encrypted and Signed</string> 3398 <key>workSeconds</key> 3399 <real>28800</real> 3400 <key>workTime</key> 3401 <real>8</real> 3402 </dict> 3403 <dict> 3404 <key>assignments</key> 3405 <array> 3406 <dict> 3407 <key>id</key> 3408 <integer>1</integer> 3409 <key>units</key> 3410 <real>0.5</real> 3411 </dict> 3412 </array> 3413 <key>completionPercentage</key> 3414 <real>1</real> 3415 <key>desiredStart</key> 3416 <string>20080522160000</string> 3417 <key>effort</key> 3418 <real>0.0</real> 3419 <key>objectId</key> 3420 <integer>120</integer> 3421 <key>task</key> 3422 <string>Sign with V3 sig (FUTURE)</string> 3423 </dict> 3424 <dict> 3425 <key>assignments</key> 3426 <array> 3427 <dict> 3428 <key>id</key> 3429 <integer>1</integer> 3430 <key>units</key> 3431 <real>0.5</real> 3432 </dict> 3433 </array> 3434 <key>desiredStart</key> 3435 <string>20080523160000</string> 3436 <key>doneSeconds</key> 3437 <real>28800</real> 3438 <key>effort</key> 3232 3439 <real>14400</real> 3233 <key>workTime</key> 3234 <real>4</real> 3235 </dict> 3236 <dict> 3237 <key>children</key> 3238 <array> 3239 <integer>207</integer> 3240 <integer>208</integer> 3241 </array> 3242 <key>objectId</key> 3243 <integer>111</integer> 3244 <key>task</key> 3245 <string>Compression</string> 3246 </dict> 3247 <dict> 3248 <key>assignments</key> 3249 <array> 3250 <dict> 3251 <key>id</key> 3252 <integer>1</integer> 3253 <key>units</key> 3254 <real>0.5</real> 3255 </dict> 3256 </array> 3257 <key>desiredStart</key> 3258 <string>20080125140000</string> 3259 <key>doneSeconds</key> 3260 <real>288000</real> 3261 <key>effort</key> 3262 <real>144000</real> 3263 <key>effortDone</key> 3264 <real>144000</real> 3265 <key>objectId</key> 3266 <integer>112</integer> 3267 <key>task</key> 3268 <string>Write Verification of document signatures</string> 3269 <key>workDone</key> 3270 <real>80</real> 3271 <key>workSeconds</key> 3272 <real>288000</real> 3273 <key>workTime</key> 3274 <real>80</real> 3275 </dict> 3276 <dict> 3277 <key>assignments</key> 3278 <array> 3279 <dict> 3280 <key>id</key> 3281 <integer>1</integer> 3282 <key>units</key> 3283 <real>0.5</real> 3284 </dict> 3285 </array> 3286 <key>desiredStart</key> 3287 <string>20080508140000</string> 3288 <key>effort</key> 3289 <real>3600</real> 3290 <key>objectId</key> 3291 <integer>113</integer> 3292 <key>prerequisites</key> 3293 <array> 3440 <key>effortDone</key> 3441 <real>14400</real> 3442 <key>objectId</key> 3443 <integer>121</integer> 3444 <key>task</key> 3445 <string>Sign with V4 sig</string> 3446 <key>workDone</key> 3447 <real>8</real> 3448 <key>workSeconds</key> 3449 <real>28800</real> 3450 <key>workTime</key> 3451 <real>8</real> 3452 </dict> 3453 <dict> 3454 <key>assignments</key> 3455 <array> 3456 <dict> 3457 <key>id</key> 3458 <integer>1</integer> 3459 <key>units</key> 3460 <real>0.5</real> 3461 </dict> 3462 </array> 3463 <key>desiredStart</key> 3464 <string>20080526160000</string> 3465 <key>doneSeconds</key> 3466 <real>28800</real> 3467 <key>effort</key> 3468 <real>14400</real> 3469 <key>effortDone</key> 3470 <real>14400</real> 3471 <key>objectId</key> 3472 <integer>122</integer> 3473 <key>task</key> 3474 <string>Verify V3 sig</string> 3475 <key>workDone</key> 3476 <real>8</real> 3477 <key>workSeconds</key> 3478 <real>28800</real> 3479 <key>workTime</key> 3480 <real>8</real> 3481 </dict> 3482 <dict> 3483 <key>assignments</key> 3484 <array> 3485 <dict> 3486 <key>id</key> 3487 <integer>1</integer> 3488 <key>units</key> 3489 <real>0.5</real> 3490 </dict> 3491 </array> 3492 <key>desiredStart</key> 3493 <string>20080527160000</string> 3494 <key>doneSeconds</key> 3495 <real>28800</real> 3496 <key>effort</key> 3497 <real>14400</real> 3498 <key>effortDone</key> 3499 <real>14400</real> 3500 <key>objectId</key> 3501 <integer>123</integer> 3502 <key>task</key> 3503 <string>Verify V4 sig</string> 3504 <key>workDone</key> 3505 <real>8</real> 3506 <key>workSeconds</key> 3507 <real>28800</real> 3508 <key>workTime</key> 3509 <real>8</real> 3510 </dict> 3511 <dict> 3512 <key>assignments</key> 3513 <array> 3514 <dict> 3515 <key>id</key> 3516 <integer>1</integer> 3517 <key>units</key> 3518 <real>0.5</real> 3519 </dict> 3520 </array> 3521 <key>desiredStart</key> 3522 <string>20080312090000</string> 3523 <key>doneSeconds</key> 3524 <real>57600</real> 3525 <key>effort</key> 3526 <real>28800</real> 3527 <key>effortDone</key> 3528 <real>28800</real> 3529 <key>objectId</key> 3530 <integer>124</integer> 3531 <key>task</key> 3532 <string>Hash algorithm != SHA1 in signatures</string> 3533 <key>workDone</key> 3534 <real>16</real> 3535 <key>workSeconds</key> 3536 <real>57600</real> 3537 <key>workTime</key> 3538 <real>16</real> 3539 </dict> 3540 <dict> 3541 <key>assignments</key> 3542 <array> 3543 <dict> 3544 <key>id</key> 3545 <integer>1</integer> 3546 <key>units</key> 3547 <real>0.5</real> 3548 </dict> 3549 </array> 3550 <key>desiredStart</key> 3551 <string>20080527110000</string> 3552 <key>effort</key> 3553 <real>14400</real> 3554 <key>objectId</key> 3555 <integer>125</integer> 3556 <key>prerequisites</key> 3557 <array> 3558 <dict> 3559 <key>id</key> 3560 <integer>106</integer> 3561 <key>kind</key> 3562 <integer>2</integer> 3563 </dict> 3564 <dict> 3565 <key>id</key> 3566 <integer>124</integer> 3567 <key>kind</key> 3568 <integer>2</integer> 3569 </dict> 3294 3570 <dict> 3295 3571 <key>id</key> … … 3297 3573 <key>isResource</key> 3298 3574 <string>YES</string> 3299 <key>kind</key>3300 <integer>2</integer>3301 </dict>3302 </array>3303 <key>task</key>3304 <string>Sign with V3 signature</string>3305 <key>workSeconds</key>3306 <real>7200</real>3307 <key>workTime</key>3308 <real>2</real>3309 </dict>3310 <dict>3311 <key>assignments</key>3312 <array>3313 <dict>3314 <key>id</key>3315 <integer>1</integer>3316 <key>units</key>3317 <real>0.5</real>3318 </dict>3319 </array>3320 <key>doneSeconds</key>3321 <real>23040</real>3322 <key>effort</key>3323 <real>11520</real>3324 <key>effortDone</key>3325 <real>11520</real>3326 <key>forcedStart</key>3327 <string>20070917090000</string>3328 <key>objectId</key>3329 <integer>114</integer>3330 <key>task</key>3331 <string>Sign with V4 signature</string>3332 <key>workDone</key>3333 <real>6.4000000953674316</real>3334 <key>workSeconds</key>3335 <real>23040</real>3336 <key>workTime</key>3337 <real>6.4000000953674316</real>3338 </dict>3339 <dict>3340 <key>assignments</key>3341 <array>3342 <dict>3343 <key>id</key>3344 <integer>1</integer>3345 <key>units</key>3346 <real>0.5</real>3347 </dict>3348 </array>3349 <key>desiredStart</key>3350 <string>20080508160000</string>3351 <key>effort</key>3352 <real>14400</real>3353 <key>objectId</key>3354 <integer>115</integer>3355 <key>prerequisites</key>3356 <array>3357 <dict>3358 <key>id</key>3359 <integer>112</integer>3360 <key>kind</key>3361 <integer>2</integer>3362 </dict>3363 <dict>3364 <key>id</key>3365 <integer>113</integer>3366 <key>isResource</key>3367 <string>YES</string>3368 <key>kind</key>3369 <integer>2</integer>3370 </dict>3371 </array>3372 <key>task</key>3373 <string>Verify V3 signature</string>3374 <key>workSeconds</key>3375 <real>28800</real>3376 <key>workTime</key>3377 <real>8</real>3378 </dict>3379 <dict>3380 <key>assignments</key>3381 <array>3382 <dict>3383 <key>id</key>3384 <integer>1</integer>3385 <key>units</key>3386 <real>0.5</real>3387 </dict>3388 </array>3389 <key>desiredStart</key>3390 <string>20080421090000</string>3391 <key>doneSeconds</key>3392 <real>28800</real>3393 <key>effort</key>3394 <real>14400</real>3395 <key>effortDone</key>3396 <real>14400</real>3397 <key>objectId</key>3398 <integer>116</integer>3399 <key>prerequisites</key>3400 <array>3401 <dict>3402 <key>id</key>3403 <integer>112</integer>3404 <key>kind</key>3405 <integer>2</integer>3406 </dict>3407 </array>3408 <key>task</key>3409 <string>Verify V4 signature</string>3410 <key>workDone</key>3411 <real>8</real>3412 <key>workSeconds</key>3413 <real>28800</real>3414 <key>workTime</key>3415 <real>8</real>3416 </dict>3417 <dict>3418 <key>assignments</key>3419 <array>3420 <dict>3421 <key>id</key>3422 <integer>1</integer>3423 <key>units</key>3424 <real>0.5</real>3425 </dict>3426 </array>3427 <key>desiredStart</key>3428 <string>20080313140000</string>3429 <key>effort</key>3430 <real>28800</real>3431 <key>objectId</key>3432 <integer>117</integer>3433 <key>prerequisites</key>3434 <array>3435 <dict>3436 <key>id</key>3437 <integer>102</integer>3438 <key>isResource</key>3439 <string>YES</string>3440 <key>kind</key>3441 <integer>2</integer>3442 </dict>3443 </array>3444 <key>task</key>3445 <string>Write verification of V3 signatures</string>3446 <key>workSeconds</key>3447 <real>57600</real>3448 <key>workTime</key>3449 <real>16</real>3450 </dict>3451 <dict>3452 <key>assignments</key>3453 <array>3454 <dict>3455 <key>id</key>3456 <integer>1</integer>3457 <key>units</key>3458 <real>0.5</real>3459 </dict>3460 </array>3461 <key>desiredStart</key>3462 <string>20080609090000</string>3463 <key>effort</key>3464 <real>14400</real>3465 <key>objectId</key>3466 <integer>118</integer>3467 <key>prerequisites</key>3468 <array>3469 <dict>3470 <key>id</key>3471 <integer>207</integer>3472 <key>isResource</key>3473 <string>YES</string>3474 <key>kind</key>3475 <integer>2</integer>3476 </dict>3477 </array>3478 <key>task</key>3479 <string>Encrypted and Signed</string>3480 <key>workSeconds</key>3481 <real>28800</real>3482 <key>workTime</key>3483 <real>8</real>3484 </dict>3485 <dict>3486 <key>assignments</key>3487 <array>3488 <dict>3489 <key>id</key>3490 <integer>1</integer>3491 <key>units</key>3492 <real>0.5</real>3493 </dict>3494 </array>3495 <key>desiredStart</key>3496 <string>20080527090000</string>3497 <key>effort</key>3498 <real>14400</real>3499 <key>objectId</key>3500 <integer>120</integer>3501 <key>prerequisites</key>3502 <array>3503 <dict>3504 <key>id</key>3505 <integer>170</integer>3506 <key>isResource</key>3507 <string>YES</string>3508 <key>kind</key>3509 <integer>2</integer>3510 </dict>3511 </array>3512 <key>task</key>3513 <string>Sign with V3 sig</string>3514 <key>workSeconds</key>3515 <real>28800</real>3516 <key>workTime</key>3517 <real>8</real>3518 </dict>3519 <dict>3520 <key>assignments</key>3521 <array>3522 <dict>3523 <key>id</key>3524 <integer>1</integer>3525 <key>units</key>3526 <real>0.5</real>3527 </dict>3528 </array>3529 <key>desiredStart</key>3530 <string>20080528090000</string>3531 <key>effort</key>3532 <real>14400</real>3533 <key>objectId</key>3534 <integer>121</integer>3535 <key>prerequisites</key>3536 <array>3537 <dict>3538 <key>id</key>3539 <integer>120</integer>3540 <key>isResource</key>3541 <string>YES</string>3542 <key>kind</key>3543 <integer>2</integer>3544 </dict>3545 </array>3546 <key>task</key>3547 <string>Sign with V4 sig</string>3548 <key>workSeconds</key>3549 <real>28800</real>3550 <key>workTime</key>3551 <real>8</real>3552 </dict>3553 <dict>3554 <key>assignments</key>3555 <array>3556 <dict>3557 <key>id</key>3558 <integer>1</integer>3559 <key>units</key>3560 <real>0.5</real>3561 </dict>3562 </array>3563 <key>desiredStart</key>3564 <string>20080529090000</string>3565 <key>effort</key>3566 <real>14400</real>3567 <key>objectId</key>3568 <integer>122</integer>3569 <key>prerequisites</key>3570 <array>3571 <dict>3572 <key>id</key>3573 <integer>121</integer>3574 <key>isResource</key>3575 <string>YES</string>3576 <key>kind</key>3577 <integer>2</integer>3578 </dict>3579 </array>3580 <key>task</key>3581 <string>Verify V3 sig</string>3582 <key>workSeconds</key>3583 <real>28800</real>3584 <key>workTime</key>3585 <real>8</real>3586 </dict>3587 <dict>3588 <key>assignments</key>3589 <array>3590 <dict>3591 <key>id</key>3592 <integer>1</integer>3593 <key>units</key>3594 <real>0.5</real>3595 </dict>3596 </array>3597 <key>desiredStart</key>3598 <string>20080530090000</string>3599 <key>effort</key>3600 <real>14400</real>3601 <key>objectId</key>3602 <integer>123</integer>3603 <key>prerequisites</key>3604 <array>3605 <dict>3606 <key>id</key>3607 <integer>122</integer>3608 <key>isResource</key>3609 <string>YES</string>3610 <key>kind</key>3611 <integer>2</integer>3612 </dict>3613 </array>3614 <key>task</key>3615 <string>Verify V4 sig</string>3616 <key>workSeconds</key>3617 <real>28800</real>3618 <key>workTime</key>3619 <real>8</real>3620 </dict>3621 <dict>3622 <key>assignments</key>3623 <array>3624 <dict>3625 <key>id</key>3626 <integer>1</integer>3627 <key>units</key>3628 <real>0.5</real>3629 </dict>3630 </array>3631 <key>desiredStart</key>3632 <string>20080317140000</string>3633 <key>effort</key>3634 <real>28800</real>3635 <key>objectId</key>3636 <integer>124</integer>3637 <key>prerequisites</key>3638 <array>3639 <dict>3640 <key>id</key>3641 <integer>117</integer>3642 <key>isResource</key>3643 <string>YES</string>3644 <key>kind</key>3645 <integer>2</integer>3646 </dict>3647 </array>3648 <key>task</key>3649 <string>Hash algorithm != SHA1 in signatures</string>3650 <key>workSeconds</key>3651 <real>57600</real>3652 <key>workTime</key>3653 <real>16</real>3654 </dict>3655 <dict>3656 <key>assignments</key>3657 <array>3658 <dict>3659 <key>id</key>3660 <integer>1</integer>3661 <key>units</key>3662 <real>0.5</real>3663 </dict>3664 </array>3665 <key>desiredStart</key>3666 <string>20080509160000</string>3667 <key>effort</key>3668 <real>14400</real>3669 <key>objectId</key>3670 <integer>125</integer>3671 <key>prerequisites</key>3672 <array>3673 <dict>3674 <key>id</key>3675 <integer>106</integer>3676 <key>kind</key>3677 <integer>2</integer>3678 </dict>3679 <dict>3680 <key>id</key>3681 <integer>115</integer>3682 <key>isResource</key>3683 <string>YES</string>3684 <key>kind</key>3685 <integer>2</integer>3686 </dict>3687 <dict>3688 <key>id</key>3689 <integer>124</integer>3690 3575 <key>kind</key> 3691 3576 <integer>2</integer> … … 4151 4036 </array> 4152 4037 <key>desiredStart</key> 4153 <string>20080 319140000</string>4038 <string>20080405000000</string> 4154 4039 <key>effort</key> 4155 4040 <real>28800</real> 4156 4041 <key>objectId</key> 4157 4042 <integer>145</integer> 4158 <key>prerequisites</key>4159 <array>4160 <dict>4161 <key>id</key>4162 <integer>124</integer>4163 <key>isResource</key>4164 <string>YES</string>4165 <key>kind</key>4166 <integer>2</integer>4167 </dict>4168 </array>4169 4043 <key>task</key> 4170 4044 <string>Integrate stream encryption</string> … … 4185 4059 </array> 4186 4060 <key>desiredStart</key> 4187 <string>20080 321140000</string>4061 <string>20080409090000</string> 4188 4062 <key>effort</key> 4189 4063 <real>28800</real> … … 4219 4093 </array> 4220 4094 <key>desiredStart</key> 4221 <string>200805 02140000</string>4095 <string>20080521110000</string> 4222 4096 <key>effort</key> 4223 4097 <real>28800</real> … … 4228 4102 <dict> 4229 4103 <key>id</key> 4230 <integer> 55</integer>4104 <integer>91</integer> 4231 4105 <key>isResource</key> 4232 4106 <string>YES</string> … … 4253 4127 </array> 4254 4128 <key>desiredStart</key> 4255 <string>200805 06140000</string>4129 <string>20080523110000</string> 4256 4130 <key>effort</key> 4257 4131 <real>28800</real> … … 4287 4161 </array> 4288 4162 <key>desiredStart</key> 4289 <string>200805 12160000</string>4163 <string>20080528110000</string> 4290 4164 <key>effort</key> 4291 4165 <real>28800</real> … … 4321 4195 </array> 4322 4196 <key>desiredStart</key> 4323 <string>2008062 5140000</string>4197 <string>20080620160000</string> 4324 4198 <key>effort</key> 4325 4199 <real>3600</real> … … 4330 4204 <dict> 4331 4205 <key>id</key> 4332 <integer> 82</integer>4206 <integer>227</integer> 4333 4207 <key>isResource</key> 4334 4208 <string>YES</string> … … 4355 4229 </array> 4356 4230 <key>desiredStart</key> 4357 <string>2008062 5160000</string>4231 <string>20080623090000</string> 4358 4232 <key>effort</key> 4359 4233 <real>3600</real> … … 4389 4263 </array> 4390 4264 <key>desiredStart</key> 4391 <string>2008062 6090000</string>4265 <string>20080623110000</string> 4392 4266 <key>effort</key> 4393 4267 <real>3600</real> … … 4423 4297 </array> 4424 4298 <key>desiredStart</key> 4425 <string>2008062 6110000</string>4299 <string>20080623140000</string> 4426 4300 <key>effort</key> 4427 4301 <real>3600</real> … … 4457 4331 </array> 4458 4332 <key>desiredStart</key> 4459 <string>2008061 0090000</string>4333 <string>20080612110000</string> 4460 4334 <key>effort</key> 4461 4335 <real>28800</real> … … 4491 4365 </array> 4492 4366 <key>desiredStart</key> 4493 <string>20080325140000</string> 4494 <key>effort</key> 4367 <string>20080313090000</string> 4368 <key>doneSeconds</key> 4369 <real>57600</real> 4370 <key>effort</key> 4371 <real>28800</real> 4372 <key>effortDone</key> 4495 4373 <real>28800</real> 4496 4374 <key>objectId</key> 4497 4375 <integer>162</integer> 4376 <key>task</key> 4377 <string>Write creation of key pair</string> 4378 <key>workDone</key> 4379 <real>16</real> 4380 <key>workSeconds</key> 4381 <real>57600</real> 4382 <key>workTime</key> 4383 <real>16</real> 4384 </dict> 4385 <dict> 4386 <key>assignments</key> 4387 <array> 4388 <dict> 4389 <key>id</key> 4390 <integer>1</integer> 4391 <key>units</key> 4392 <real>0.5</real> 4393 </dict> 4394 </array> 4395 <key>desiredStart</key> 4396 <string>20080414090000</string> 4397 <key>effort</key> 4398 <real>3600</real> 4399 <key>objectId</key> 4400 <integer>163</integer> 4401 <key>prerequisites</key> 4402 <array> 4403 <dict> 4404 <key>id</key> 4405 <integer>171</integer> 4406 <key>isResource</key> 4407 <string>YES</string> 4408 <key>kind</key> 4409 <integer>2</integer> 4410 </dict> 4411 </array> 4412 <key>task</key> 4413 <string>Write file writer append</string> 4414 <key>workSeconds</key> 4415 <real>7200</real> 4416 <key>workTime</key> 4417 <real>2</real> 4418 </dict> 4419 <dict> 4420 <key>assignments</key> 4421 <array> 4422 <dict> 4423 <key>id</key> 4424 <integer>1</integer> 4425 <key>units</key> 4426 <real>0.5</real> 4427 </dict> 4428 </array> 4429 <key>desiredStart</key> 4430 <string>20080418151200</string> 4431 <key>effort</key> 4432 <real>7200</real> 4433 <key>objectId</key> 4434 <integer>165</integer> 4435 <key>prerequisites</key> 4436 <array> 4437 <dict> 4438 <key>id</key> 4439 <integer>232</integer> 4440 <key>isResource</key> 4441 <string>YES</string> 4442 <key>kind</key> 4443 <integer>2</integer> 4444 </dict> 4445 </array> 4446 <key>task</key> 4447 <string>Public Key packet</string> 4448 <key>workSeconds</key> 4449 <real>14400</real> 4450 <key>workTime</key> 4451 <real>4</real> 4452 </dict> 4453 <dict> 4454 <key>assignments</key> 4455 <array> 4456 <dict> 4457 <key>id</key> 4458 <integer>1</integer> 4459 <key>units</key> 4460 <real>0.5</real> 4461 </dict> 4462 </array> 4463 <key>desiredStart</key> 4464 <string>20080421101200</string> 4465 <key>effort</key> 4466 <real>7200</real> 4467 <key>objectId</key> 4468 <integer>166</integer> 4469 <key>prerequisites</key> 4470 <array> 4471 <dict> 4472 <key>id</key> 4473 <integer>165</integer> 4474 <key>isResource</key> 4475 <string>YES</string> 4476 <key>kind</key> 4477 <integer>2</integer> 4478 </dict> 4479 </array> 4480 <key>task</key> 4481 <string>Secret Key Packet</string> 4482 <key>workSeconds</key> 4483 <real>14400</real> 4484 <key>workTime</key> 4485 <real>4</real> 4486 </dict> 4487 <dict> 4488 <key>assignments</key> 4489 <array> 4490 <dict> 4491 <key>id</key> 4492 <integer>1</integer> 4493 <key>units</key> 4494 <real>0.5</real> 4495 </dict> 4496 </array> 4497 <key>desiredStart</key> 4498 <string>20080319110000</string> 4499 <key>doneSeconds</key> 4500 <real>14400</real> 4501 <key>effort</key> 4502 <real>7200</real> 4503 <key>effortDone</key> 4504 <real>7200</real> 4505 <key>objectId</key> 4506 <integer>167</integer> 4507 <key>task</key> 4508 <string>Signing Key pair</string> 4509 <key>workDone</key> 4510 <real>4</real> 4511 <key>workSeconds</key> 4512 <real>14400</real> 4513 <key>workTime</key> 4514 <real>4</real> 4515 </dict> 4516 <dict> 4517 <key>assignments</key> 4518 <array> 4519 <dict> 4520 <key>id</key> 4521 <integer>1</integer> 4522 <key>units</key> 4523 <real>0.5</real> 4524 </dict> 4525 </array> 4526 <key>desiredStart</key> 4527 <string>20080414110000</string> 4528 <key>effort</key> 4529 <real>57600</real> 4530 <key>objectId</key> 4531 <integer>168</integer> 4532 <key>prerequisites</key> 4533 <array> 4534 <dict> 4535 <key>id</key> 4536 <integer>163</integer> 4537 <key>isResource</key> 4538 <string>YES</string> 4539 <key>kind</key> 4540 <integer>2</integer> 4541 </dict> 4542 </array> 4543 <key>task</key> 4544 <string>Command line app</string> 4545 <key>workSeconds</key> 4546 <real>115200</real> 4547 <key>workTime</key> 4548 <real>32</real> 4549 </dict> 4550 <dict> 4551 <key>children</key> 4552 <array> 4553 <integer>213</integer> 4554 <integer>238</integer> 4555 <integer>214</integer> 4556 </array> 4557 <key>objectId</key> 4558 <integer>169</integer> 4559 <key>task</key> 4560 <string>Contingency</string> 4561 </dict> 4562 <dict> 4563 <key>assignments</key> 4564 <array> 4565 <dict> 4566 <key>id</key> 4567 <integer>1</integer> 4568 <key>units</key> 4569 <real>0.5</real> 4570 </dict> 4571 </array> 4572 <key>desiredStart</key> 4573 <string>20080603110000</string> 4574 <key>doneSeconds</key> 4575 <real>28800</real> 4576 <key>effort</key> 4577 <real>28800</real> 4578 <key>effortDone</key> 4579 <real>14400</real> 4580 <key>objectId</key> 4581 <integer>170</integer> 4582 <key>prerequisites</key> 4583 <array> 4584 <dict> 4585 <key>id</key> 4586 <integer>191</integer> 4587 <key>isResource</key> 4588 <string>YES</string> 4589 <key>kind</key> 4590 <integer>2</integer> 4591 </dict> 4592 </array> 4593 <key>task</key> 4594 <string>Create Key Pair with passphrase</string> 4595 <key>workDone</key> 4596 <real>8</real> 4597 <key>workSeconds</key> 4598 <real>57600</real> 4599 <key>workTime</key> 4600 <real>16</real> 4601 </dict> 4602 <dict> 4603 <key>assignments</key> 4604 <array> 4605 <dict> 4606 <key>id</key> 4607 <integer>1</integer> 4608 <key>units</key> 4609 <real>0.5</real> 4610 </dict> 4611 </array> 4612 <key>desiredStart</key> 4613 <string>20080410090000</string> 4614 <key>doneSeconds</key> 4615 <real>28800</real> 4616 <key>effort</key> 4617 <real>28800</real> 4618 <key>effortDone</key> 4619 <real>14400</real> 4620 <key>objectId</key> 4621 <integer>171</integer> 4498 4622 <key>prerequisites</key> 4499 4623 <array> … … 4508 4632 </array> 4509 4633 <key>task</key> 4510 <string>Write creation of key pair</string> 4634 <string>Write secret key checksum writer</string> 4635 <key>workDone</key> 4636 <real>8</real> 4511 4637 <key>workSeconds</key> 4512 4638 <real>57600</real> … … 4525 4651 </array> 4526 4652 <key>desiredStart</key> 4527 <string>20080331140000</string> 4528 <key>effort</key> 4529 <real>3600</real> 4530 <key>objectId</key> 4531 <integer>163</integer> 4532 <key>prerequisites</key> 4533 <array> 4534 <dict> 4535 <key>id</key> 4536 <integer>171</integer> 4537 <key>isResource</key> 4538 <string>YES</string> 4539 <key>kind</key> 4540 <integer>2</integer> 4541 </dict> 4542 </array> 4543 <key>task</key> 4544 <string>Write file writer append</string> 4545 <key>workSeconds</key> 4546 <real>7200</real> 4547 <key>workTime</key> 4548 <real>2</real> 4549 </dict> 4550 <dict> 4551 <key>assignments</key> 4552 <array> 4553 <dict> 4554 <key>id</key> 4555 <integer>1</integer> 4556 <key>units</key> 4557 <real>0.5</real> 4558 </dict> 4559 </array> 4560 <key>desiredStart</key> 4561 <string>20080407160000</string> 4562 <key>effort</key> 4563 <real>7200</real> 4564 <key>objectId</key> 4565 <integer>165</integer> 4566 <key>prerequisites</key> 4567 <array> 4568 <dict> 4569 <key>id</key> 4570 <integer>110</integer> 4571 <key>isResource</key> 4572 <string>YES</string> 4573 <key>kind</key> 4574 <integer>2</integer> 4575 </dict> 4576 </array> 4577 <key>task</key> 4578 <string>Public Key packet</string> 4579 <key>workSeconds</key> 4580 <real>14400</real> 4581 <key>workTime</key> 4582 <real>4</real> 4583 </dict> 4584 <dict> 4585 <key>assignments</key> 4586 <array> 4587 <dict> 4588 <key>id</key> 4589 <integer>1</integer> 4590 <key>units</key> 4591 <real>0.5</real> 4592 </dict> 4593 </array> 4594 <key>desiredStart</key> 4595 <string>20080408110000</string> 4596 <key>effort</key> 4597 <real>7200</real> 4598 <key>objectId</key> 4599 <integer>166</integer> 4600 <key>prerequisites</key> 4601 <array> 4602 <dict> 4603 <key>id</key> 4604 <integer>165</integer> 4605 <key>isResource</key> 4606 <string>YES</string> 4607 <key>kind</key> 4608 <integer>2</integer> 4609 </dict> 4610 </array> 4611 <key>task</key> 4612 <string>Secret Key Packet</string> 4613 <key>workSeconds</key> 4614 <real>14400</real> 4615 <key>workTime</key> 4616 <real>4</real> 4617 </dict> 4618 <dict> 4619 <key>assignments</key> 4620 <array> 4621 <dict> 4622 <key>id</key> 4623 <integer>1</integer> 4624 <key>units</key> 4625 <real>0.5</real> 4626 </dict> 4627 </array> 4628 <key>desiredStart</key> 4629 <string>20080331160000</string> 4630 <key>effort</key> 4631 <real>7200</real> 4632 <key>objectId</key> 4633 <integer>167</integer> 4634 <key>prerequisites</key> 4635 <array> 4636 <dict> 4637 <key>id</key> 4638 <integer>163</integer> 4639 <key>isResource</key> 4640 <string>YES</string> 4641 <key>kind</key> 4642 <integer>2</integer> 4643 </dict> 4644 </array> 4645 <key>task</key> 4646 <string>Signing Key pair</string> 4647 <key>workSeconds</key> 4648 <real>14400</real> 4649 <key>workTime</key> 4650 <real>4</real> 4651 </dict> 4652 <dict> 4653 <key>assignments</key> 4654 <array> 4655 <dict> 4656 <key>id</key> 4657 <integer>1</integer> 4658 <key>units</key> 4659 <real>0.5</real> 4660 </dict> 4661 </array> 4662 <key>desiredStart</key> 4663 <string>20080401110000</string> 4664 <key>effort</key> 4665 <real>57600</real> 4666 <key>objectId</key> 4667 <integer>168</integer> 4668 <key>prerequisites</key> 4669 <array> 4670 <dict> 4671 <key>id</key> 4672 <integer>167</integer> 4673 <key>isResource</key> 4674 <string>YES</string> 4675 <key>kind</key> 4676 <integer>2</integer> 4677 </dict> 4678 </array> 4679 <key>task</key> 4680 <string>Command line app</string> 4681 <key>workSeconds</key> 4682 <real>115200</real> 4683 <key>workTime</key> 4684 <real>32</real> 4685 </dict> 4686 <dict> 4687 <key>children</key> 4688 <array> 4689 <integer>213</integer> 4690 <integer>214</integer> 4691 </array> 4692 <key>objectId</key> 4693 <integer>169</integer> 4694 <key>task</key> 4695 <string>Contingency</string> 4696 </dict> 4697 <dict> 4698 <key>assignments</key> 4699 <array> 4700 <dict> 4701 <key>id</key> 4702 <integer>1</integer> 4703 <key>units</key> 4704 <real>0.5</real> 4705 </dict> 4706 </array> 4707 <key>desiredStart</key> 4708 <string>20080523090000</string> 4709 <key>effort</key> 4710 <real>28800</real> 4711 <key>objectId</key> 4712 <integer>170</integer> 4713 <key>prerequisites</key> 4714 <array> 4715 <dict> 4716 <key>id</key> 4717 <integer>19</integer> 4718 <key>isResource</key> 4719 <string>YES</string> 4720 <key>kind</key> 4721 <integer>2</integer> 4722 </dict> 4723 </array> 4724 <key>task</key> 4725 <string>Create Key Pair with passphrase</string> 4726 <key>workSeconds</key> 4727 <real>57600</real> 4728 <key>workTime</key> 4729 <real>16</real> 4730 </dict> 4731 <dict> 4732 <key>assignments</key> 4733 <array> 4734 <dict> 4735 <key>id</key> 4736 <integer>1</integer> 4737 <key>units</key> 4738 <real>0.5</real> 4739 </dict> 4740 </array> 4741 <key>desiredStart</key> 4742 <string>20080327140000</string> 4743 <key>effort</key> 4744 <real>28800</real> 4745 <key>objectId</key> 4746 <integer>171</integer> 4747 <key>prerequisites</key> 4748 <array> 4749 <dict> 4750 <key>id</key> 4751 <integer>162</integer> 4752 <key>isResource</key> 4753 <string>YES</string> 4754 <key>kind</key> 4755 <integer>2</integer> 4756 </dict> 4757 </array> 4758 <key>task</key> 4759 <string>Write secret key checksum writer</string> 4760 <key>workSeconds</key> 4761 <real>57600</real> 4762 <key>workTime</key> 4763 <real>16</real> 4764 </dict> 4765 <dict> 4766 <key>assignments</key> 4767 <array> 4768 <dict> 4769 <key>id</key> 4770 <integer>1</integer> 4771 <key>units</key> 4772 <real>0.5</real> 4773 </dict> 4774 </array> 4775 <key>desiredStart</key> 4776 <string>20080407110000</string> 4653 <string>20080418110000</string> 4777 4654 <key>doneSeconds</key> 4778 4655 <real>57599.99609375</real> … … 4820 4697 <integer>178</integer> 4821 4698 <integer>179</integer> 4699 <integer>218</integer> 4700 <integer>217</integer> 4701 <integer>215</integer> 4702 <integer>219</integer> 4703 <integer>216</integer> 4704 <integer>228</integer> 4705 <integer>234</integer> 4706 <integer>235</integer> 4822 4707 </array> 4823 4708 <key>objectId</key> … … 4889 4774 </array> 4890 4775 <key>desiredStart</key> 4891 <string>20080 626140000</string>4776 <string>20080729160000</string> 4892 4777 <key>effort</key> 4893 4778 <real>28800</real> … … 4898 4783 <dict> 4899 4784 <key>id</key> 4900 <integer>159</integer> 4785 <integer>168</integer> 4786 <key>kind</key> 4787 <integer>2</integer> 4788 </dict> 4789 <dict> 4790 <key>id</key> 4791 <integer>214</integer> 4901 4792 <key>isResource</key> 4902 4793 <string>YES</string> … … 4904 4795 <integer>2</integer> 4905 4796 </dict> 4906 <dict>4907 <key>id</key>4908 <integer>168</integer>4909 <key>kind</key>4910 <integer>2</integer>4911 </dict>4912 4797 </array> 4913 4798 <key>task</key> … … 4929 4814 </array> 4930 4815 <key>desiredStart</key> 4931 <string>20080 630140000</string>4816 <string>20080731160000</string> 4932 4817 <key>effort</key> 4933 4818 <real>115200</real> … … 5026 4911 </array> 5027 4912 <key>desiredStart</key> 5028 <string>20080514160000</string> 5029 <key>effort</key> 4913 <string>20080327090000</string> 4914 <key>doneSeconds</key> 4915 <real>7200</real> 4916 <key>effort</key> 4917 <real>3600</real> 4918 <key>effortDone</key> 5030 4919 <real>3600</real> 5031 4920 <key>objectId</key> 5032 4921 <integer>186</integer> 5033 <key>prerequisites</key> 5034 <array> 4922 <key>task</key> 4923 <string>Sign with V3 signature (FUTURE)</string> 4924 <key>workDone</key> 4925 <real>2</real> 4926 <key>workSeconds</key> 4927 <real>7200</real> 4928 <key>workTime</key> 4929 <real>2</real> 4930 </dict> 4931 <dict> 4932 <key>assignments</key> 4933 <array> 4934 <dict> 4935 <key>id</key> 4936 <integer>1</integer> 4937 <key>units</key> 4938 <real>0.5</real> 4939 </dict> 4940 </array> 4941 <key>doneSeconds</key> 4942 <real>23040</real> 4943 <key>effort</key> 4944 <real>11520</real> 4945 <key>effortDone</key> 4946 <real>11520</real> 4947 <key>forcedStart</key> 4948 <string>20070917090000</string> 4949 <key>objectId</key> 4950 <integer>187</integer> 4951 <key>task</key> 4952 <string>Sign with V4 signature</string> 4953 <key>workDone</key> 4954 <real>6.4000000953674316</real> 4955 <key>workSeconds</key> 4956 <real>23040</real> 4957 <key>workTime</key> 4958 <real>6.4000000953674316</real> 4959 </dict> 4960 <dict> 4961 <key>assignments</key> 4962 <array> 4963 <dict> 4964 <key>id</key> 4965 <integer>1</integer> 4966 <key>units</key> 4967 <real>0.5</real> 4968 </dict> 4969 </array> 4970 <key>desiredStart</key> 4971 <string>20080512160000</string> 4972 <key>doneSeconds</key> 4973 <real>28800</real> 4974 <key>effort</key> 4975 <real>14400</real> 4976 <key>effortDone</key> 4977 <real>14400</real> 4978 <key>objectId</key> 4979 <integer>188</integer> 4980 <key>prerequisites</key> 4981 <array> 4982 <dict> 4983 <key>id</key> 4984 <integer>112</integer> 4985 <key>kind</key> 4986 <integer>2</integer> 4987 </dict> 4988 </array> 4989 <key>task</key> 4990 <string>Verify V3 signature</string> 4991 <key>workDone</key> 4992 <real>8</real> 4993 <key>workSeconds</key> 4994 <real>28800</real> 4995 <key>workTime</key> 4996 <real>8</real> 4997 </dict> 4998 <dict> 4999 <key>assignments</key> 5000 <array> 5001 <dict> 5002 <key>id</key> 5003 <integer>1</integer> 5004 <key>units</key> 5005 <real>0.5</real> 5006 </dict> 5007 </array> 5008 <key>desiredStart</key> 5009 <string>20080311090000</string> 5010 <key>doneSeconds</key> 5011 <real>28800</real> 5012 <key>effort</key> 5013 <real>14400</real> 5014 <key>effortDone</key> 5015 <real>14400</real> 5016 <key>objectId</key> 5017 <integer>189</integer> 5018 <key>prerequisites</key> 5019 <array> 5020 <dict> 5021 <key>id</key> 5022 <integer>112</integer> 5023 <key>kind</key> 5024 <integer>2</integer> 5025 </dict> 5026 </array> 5027 <key>task</key> 5028 <string>Verify V4 signature</string> 5029 <key>workDone</key> 5030 <real>8</real> 5031 <key>workSeconds</key> 5032 <real>28800</real> 5033 <key>workTime</key> 5034 <real>8</real> 5035 </dict> 5036 <dict> 5037 <key>assignments</key> 5038 <array> 5039 <dict> 5040 <key>id</key> 5041 <integer>1</integer> 5042 <key>units</key> 5043 <real>0.5</real> 5044 </dict> 5045 </array> 5046 <key>desiredStart</key> 5047 <string>20080530110000</string> 5048 <key>effort</key> 5049 <real>14400</real> 5050 <key>objectId</key> 5051 <integer>190</integer> 5052 <key>prerequisites</key> 5053 <array> 5054 <dict> 5055 <key>id</key> 5056 <integer>106</integer> 5057 <key>kind</key> 5058 <integer>2</integer> 5059 </dict> 5060 <dict> 5061 <key>id</key> 5062 <integer>124</integer> 5063 <key>kind</key> 5064 <integer>2</integer> 5065 </dict> 5035 5066 <dict> 5036 5067 <key>id</key> … … 5043 5074 </array> 5044 5075 <key>task</key> 5045 <string>Sign with V3 signature</string> 5046 <key>workSeconds</key> 5047 <real>7200</real> 5048 <key>workTime</key> 5049 <real>2</real> 5050 </dict> 5051 <dict> 5052 <key>assignments</key> 5053 <array> 5054 <dict> 5055 <key>id</key> 5056 <integer>1</integer> 5057 <key>units</key> 5058 <real>0.5</real> 5059 </dict> 5060 </array> 5061 <key>doneSeconds</key> 5062 <real>23040</real> 5063 <key>effort</key> 5064 <real>11520</real> 5065 <key>effortDone</key> 5066 <real>11520</real> 5067 <key>forcedStart</key> 5068 <string>20070917090000</string> 5069 <key>objectId</key> 5070 <integer>187</integer> 5071 <key>task</key> 5072 <string>Sign with V4 signature</string> 5073 <key>workDone</key> 5074 <real>6.4000000953674316</real> 5075 <key>workSeconds</key> 5076 <real>23040</real> 5077 <key>workTime</key> 5078 <real>6.4000000953674316</real> 5079 </dict> 5080 <dict> 5081 <key>assignments</key> 5082 <array> 5083 <dict> 5084 <key>id</key> 5085 <integer>1</integer> 5086 <key>units</key> 5087 <real>0.5</real> 5088 </dict> 5089 </array> 5090 <key>desiredStart</key> 5091 <string>20080515090000</string> 5092 <key>effort</key> 5093 <real>14400</real> 5094 <key>objectId</key> 5095 <integer>188</integer> 5096 <key>prerequisites</key> 5097 <array> 5098 <dict> 5099 <key>id</key> 5100 <integer>112</integer> 5101 <key>kind</key> 5102 <integer>2</integer> 5103 </dict> 5104 <dict> 5105 <key>id</key> 5106 <integer>186</integer> 5107 <key>isResource</key> 5108 <string>YES</string> 5109 <key>kind</key> 5110 <integer>2</integer> 5111 </dict> 5112 </array> 5113 <key>task</key> 5114 <string>Verify V3 signature</string> 5076 <string>Test all supported Hash Algorithms</string> 5115 5077 <key>workSeconds</key> 5116 5078 <real>28800</real> … … 5129 5091 </array> 5130 5092 <key>desiredStart</key> 5131 <string>20080311090000</string> 5132 <key>doneSeconds</key> 5133 <real>28800</real> 5134 <key>effort</key> 5135 <real>14400</real> 5136 <key>effortDone</key> 5137 <real>14400</real> 5138 <key>objectId</key> 5139 <integer>189</integer> 5140 <key>prerequisites</key> 5141 <array> 5142 <dict> 5143 <key>id</key> 5144 <integer>112</integer> 5145 <key>kind</key> 5146 <integer>2</integer> 5147 </dict> 5148 </array> 5149 <key>task</key> 5150 <string>Verify V4 signature</string> 5151 <key>workDone</key> 5152 <real>8</real> 5153 <key>workSeconds</key> 5154 <real>28800</real> 5155 <key>workTime</key> 5156 <real>8</real> 5157 </dict> 5158 <dict> 5159 <key>assignments</key> 5160 <array> 5161 <dict> 5162 <key>id</key> 5163 <integer>1</integer> 5164 <key>units</key> 5165 <real>0.5</real> 5166 </dict> 5167 </array> 5168 <key>desiredStart</key> 5169 <string>20080516090000</string> 5170 <key>effort</key> 5171 <real>14400</real> 5172 <key>objectId</key> 5173 <integer>190</integer> 5174 <key>prerequisites</key> 5175 <array> 5176 <dict> 5177 <key>id</key> 5178 <integer>106</integer> 5179 <key>kind</key> 5180 <integer>2</integer> 5181 </dict> 5182 <dict> 5183 <key>id</key> 5184 <integer>124</integer> 5185 <key>kind</key> 5186 <integer>2</integer> 5187 </dict> 5188 <dict> 5189 <key>id</key> 5190 <integer>188</integer> 5191 <key>isResource</key> 5192 <string>YES</string> 5193 <key>kind</key> 5194 <integer>2</integer> 5195 </dict> 5196 </array> 5197 <key>task</key> 5198 <string>Test all supported Hash Algorithms</string> 5199 <key>workSeconds</key> 5200 <real>28800</real> 5201 <key>workTime</key> 5202 <real>8</real> 5203 </dict> 5204 <dict> 5205 <key>assignments</key> 5206 <array> 5207 <dict> 5208 <key>id</key> 5209 <integer>1</integer> 5210 <key>units</key> 5211 <real>0.5</real> 5212 </dict> 5213 </array> 5214 <key>desiredStart</key> 5215 <string>20080519090000</string> 5093 <string>20080602110000</string> 5216 5094 <key>effort</key> 5217 5095 <real>28800</real> … … 5388 5266 </array> 5389 5267 <key>desiredStart</key> 5390 <string>2008061 2090000</string>5268 <string>20080616110000</string> 5391 5269 <key>effort</key> 5392 5270 <real>28800</real> … … 5422 5300 </array> 5423 5301 <key>desiredStart</key> 5424 <string>2008061 6090000</string>5302 <string>20080618110000</string> 5425 5303 <key>effort</key> 5426 5304 <real>28800</real> … … 5455 5333 </dict> 5456 5334 </array> 5457 <key>desiredStart</key> 5458 <string>20080421110000</string> 5459 <key>effort</key> 5460 <real>28800</real> 5335 <key>completionPercentage</key> 5336 <real>1</real> 5337 <key>desiredStart</key> 5338 <string>20080415160000</string> 5339 <key>effort</key> 5340 <real>0.0</real> 5461 5341 <key>objectId</key> 5462 5342 <integer>201</integer> 5343 <key>task</key> 5344 <string>(NEW) Write detached signature and verify (FUTURE)</string> 5345 </dict> 5346 <dict> 5347 <key>children</key> 5348 <array> 5349 <integer>204</integer> 5350 <integer>205</integer> 5351 <integer>206</integer> 5352 </array> 5353 <key>isExpanded</key> 5354 <false/> 5355 <key>objectId</key> 5356 <integer>203</integer> 5357 <key>task</key> 5358 <string>(NEW) Decrypt compressed packet</string> 5359 </dict> 5360 <dict> 5361 <key>assignments</key> 5362 <array> 5363 <dict> 5364 <key>id</key> 5365 <integer>1</integer> 5366 <key>units</key> 5367 <real>0.5</real> 5368 </dict> 5369 </array> 5370 <key>doneSeconds</key> 5371 <real>57600</real> 5372 <key>effort</key> 5373 <real>28800</real> 5374 <key>effortDone</key> 5375 <real>28800</real> 5376 <key>objectId</key> 5377 <integer>204</integer> 5378 <key>task</key> 5379 <string>ZIP-compressed</string> 5380 <key>workDone</key> 5381 <real>16</real> 5382 <key>workSeconds</key> 5383 <real>57600</real> 5384 <key>workTime</key> 5385 <real>16</real> 5386 </dict> 5387 <dict> 5388 <key>assignments</key> 5389 <array> 5390 <dict> 5391 <key>id</key> 5392 <integer>1</integer> 5393 <key>units</key> 5394 <real>0.5</real> 5395 </dict> 5396 </array> 5397 <key>desiredStart</key> 5398 <string>20080625140000</string> 5399 <key>doneSeconds</key> 5400 <real>57600</real> 5401 <key>effort</key> 5402 <real>28800</real> 5403 <key>effortDone</key> 5404 <real>28800</real> 5405 <key>objectId</key> 5406 <integer>205</integer> 5407 <key>task</key> 5408 <string>ZLIB-compressed</string> 5409 <key>workDone</key> 5410 <real>16</real> 5411 <key>workSeconds</key> 5412 <real>57600</real> 5413 <key>workTime</key> 5414 <real>16</real> 5415 </dict> 5416 <dict> 5417 <key>assignments</key> 5418 <array> 5419 <dict> 5420 <key>id</key> 5421 <integer>1</integer> 5422 <key>units</key> 5423 <real>0.5</real> 5424 </dict> 5425 </array> 5426 <key>desiredStart</key> 5427 <string>20080612140000</string> 5428 <key>doneSeconds</key> 5429 <real>57600</real> 5430 <key>effort</key> 5431 <real>28800</real> 5432 <key>effortDone</key> 5433 <real>28800</real> 5434 <key>filterSelection</key> 5435 <true/> 5436 <key>objectId</key> 5437 <integer>206</integer> 5438 <key>task</key> 5439 <string>BZIP2-compressed</string> 5440 <key>workDone</key> 5441 <real>16</real> 5442 <key>workSeconds</key> 5443 <real>57600</real> 5444 <key>workTime</key> 5445 <real>16</real> 5446 </dict> 5447 <dict> 5448 <key>assignments</key> 5449 <array> 5450 <dict> 5451 <key>id</key> 5452 <integer>1</integer> 5453 <key>units</key> 5454 <real>0.5</real> 5455 </dict> 5456 </array> 5457 <key>desiredStart</key> 5458 <string>20080417164800</string> 5459 <key>doneSeconds</key> 5460 <real>51840</real> 5461 <key>effort</key> 5462 <real>28800</real> 5463 <key>effortDone</key> 5464 <real>25920</real> 5465 <key>objectId</key> 5466 <integer>207</integer> 5467 <key>prerequisites</key> 5468 <array> 5469 <dict> 5470 <key>id</key> 5471 <integer>166</integer> 5472 <key>isResource</key> 5473 <string>YES</string> 5474 <key>kind</key> 5475 <integer>2</integer> 5476 </dict> 5477 </array> 5478 <key>task</key> 5479 <string>ZIP-compress</string> 5480 <key>workDone</key> 5481 <real>14.399999618530273</real> 5482 <key>workSeconds</key> 5483 <real>57600</real> 5484 <key>workTime</key> 5485 <real>16</real> 5486 </dict> 5487 <dict> 5488 <key>assignments</key> 5489 <array> 5490 <dict> 5491 <key>id</key> 5492 <integer>1</integer> 5493 <key>units</key> 5494 <real>0.5</real> 5495 </dict> 5496 </array> 5497 <key>doneSeconds</key> 5498 <real>57600</real> 5499 <key>effort</key> 5500 <real>28800</real> 5501 <key>effortDone</key> 5502 <real>28800</real> 5503 <key>objectId</key> 5504 <integer>208</integer> 5505 <key>task</key> 5506 <string>ZIP-decompress</string> 5507 <key>workDone</key> 5508 <real>16</real> 5509 <key>workSeconds</key> 5510 <real>57600</real> 5511 <key>workTime</key> 5512 <real>16</real> 5513 </dict> 5514 <dict> 5515 <key>assignments</key> 5516 <array> 5517 <dict> 5518 <key>id</key> 5519 <integer>1</integer> 5520 <key>units</key> 5521 <real>0.5</real> 5522 </dict> 5523 </array> 5524 <key>desiredStart</key> 5525 <string>20080228171200</string> 5526 <key>doneSeconds</key> 5527 <real>115200</real> 5528 <key>effort</key> 5529 <real>57600</real> 5530 <key>effortDone</key> 5531 <real>57600</real> 5532 <key>objectId</key> 5533 <integer>209</integer> 5534 <key>task</key> 5535 <string>ZIP-compress</string> 5536 <key>workDone</key> 5537 <real>32</real> 5538 <key>workSeconds</key> 5539 <real>115200</real> 5540 <key>workTime</key> 5541 <real>32</real> 5542 </dict> 5543 <dict> 5544 <key>assignments</key> 5545 <array> 5546 <dict> 5547 <key>id</key> 5548 <integer>1</integer> 5549 <key>units</key> 5550 <real>0.5</real> 5551 </dict> 5552 </array> 5553 <key>doneSeconds</key> 5554 <real>57600</real> 5555 <key>effort</key> 5556 <real>28800</real> 5557 <key>effortDone</key> 5558 <real>28800</real> 5559 <key>objectId</key> 5560 <integer>210</integer> 5561 <key>task</key> 5562 <string>ZIP-decompress</string> 5563 <key>workDone</key> 5564 <real>16</real> 5565 <key>workSeconds</key> 5566 <real>57600</real> 5567 <key>workTime</key> 5568 <real>16</real> 5569 </dict> 5570 <dict> 5571 <key>assignments</key> 5572 <array> 5573 <dict> 5574 <key>id</key> 5575 <integer>1</integer> 5576 <key>units</key> 5577 <real>0.5</real> 5578 </dict> 5579 </array> 5580 <key>desiredStart</key> 5581 <string>20080310140000</string> 5582 <key>doneSeconds</key> 5583 <real>57600</real> 5584 <key>effort</key> 5585 <real>28800</real> 5586 <key>effortDone</key> 5587 <real>28800</real> 5588 <key>objectId</key> 5589 <integer>211</integer> 5590 <key>task</key> 5591 <string>ZLIB-decompress</string> 5592 <key>workDone</key> 5593 <real>16</real> 5594 <key>workSeconds</key> 5595 <real>57600</real> 5596 <key>workTime</key> 5597 <real>16</real> 5598 </dict> 5599 <dict> 5600 <key>assignments</key> 5601 <array> 5602 <dict> 5603 <key>id</key> 5604 <integer>1</integer> 5605 <key>units</key> 5606 <real>0.5</real> 5607 </dict> 5608 </array> 5609 <key>desiredStart</key> 5610 <string>20080307140000</string> 5611 <key>doneSeconds</key> 5612 <real>57600</real> 5613 <key>effort</key> 5614 <real>28800</real> 5615 <key>effortDone</key> 5616 <real>28800</real> 5617 <key>objectId</key> 5618 <integer>212</integer> 5619 <key>task</key> 5620 <string>BZIP2-decompress</string> 5621 <key>workDone</key> 5622 <real>16</real> 5623 <key>workSeconds</key> 5624 <real>57600</real> 5625 <key>workTime</key> 5626 <real>16</real> 5627 </dict> 5628 <dict> 5629 <key>assignments</key> 5630 <array> 5631 <dict> 5632 <key>id</key> 5633 <integer>1</integer> 5634 <key>units</key> 5635 <real>0.5</real> 5636 </dict> 5637 </array> 5638 <key>doneSeconds</key> 5639 <real>288000</real> 5640 <key>effort</key> 5641 <real>144000</real> 5642 <key>effortDone</key> 5643 <real>144000</real> 5644 <key>forcedStart</key> 5645 <string>20080128140000</string> 5646 <key>objectId</key> 5647 <integer>213</integer> 5648 <key>task</key> 5649 <string>Support for Ben Taylor</string> 5650 <key>workDone</key> 5651 <real>80</real> 5652 <key>workSeconds</key> 5653 <real>288000</real> 5654 <key>workTime</key> 5655 <real>80</real> 5656 </dict> 5657 <dict> 5658 <key>assignments</key> 5659 <array> 5660 <dict> 5661 <key>id</key> 5662 <integer>1</integer> 5663 <key>units</key> 5664 <real>0.5</real> 5665 </dict> 5666 </array> 5667 <key>desiredStart</key> 5668 <string>20080623160000</string> 5669 <key>effort</key> 5670 <real>374400</real> 5671 <key>objectId</key> 5672 <integer>214</integer> 5673 <key>prerequisites</key> 5674 <array> 5675 <dict> 5676 <key>id</key> 5677 <integer>159</integer> 5678 <key>isResource</key> 5679 <string>YES</string> 5680 <key>kind</key> 5681 <integer>2</integer> 5682 </dict> 5683 </array> 5684 <key>task</key> 5685 <string>Other</string> 5686 <key>workSeconds</key> 5687 <real>748800</real> 5688 <key>workTime</key> 5689 <real>208</real> 5690 </dict> 5691 <dict> 5692 <key>effort</key> 5693 <real>0.0</real> 5694 <key>objectId</key> 5695 <integer>215</integer> 5696 <key>task</key> 5697 <string>Implement Use of Preferred Public Key Algorithm</string> 5698 </dict> 5699 <dict> 5700 <key>effort</key> 5701 <real>0.0</real> 5702 <key>objectId</key> 5703 <integer>216</integer> 5704 <key>task</key> 5705 <string>Implement Use of Preferred Hash Algorithm</string> 5706 </dict> 5707 <dict> 5708 <key>effort</key> 5709 <real>0.0</real> 5710 <key>objectId</key> 5711 <integer>217</integer> 5712 <key>task</key> 5713 <string>Implement Use of Preferred Symmetric Algorithm</string> 5714 </dict> 5715 <dict> 5716 <key>effort</key> 5717 <real>0.0</real> 5718 <key>objectId</key> 5719 <integer>218</integer> 5720 <key>task</key> 5721 <string>Implement support for other Symmetric Algorithms</string> 5722 </dict> 5723 <dict> 5724 <key>effort</key> 5725 <real>0.0</real> 5726 <key>objectId</key> 5727 <integer>219</integer> 5728 <key>task</key> 5729 <string>Implement support for other Hash Algorithms</string> 5730 </dict> 5731 <dict> 5732 <key>children</key> 5733 <array> 5734 <integer>224</integer> 5735 <integer>226</integer> 5736 <integer>225</integer> 5737 <integer>227</integer> 5738 </array> 5739 <key>objectId</key> 5740 <integer>223</integer> 5741 <key>task</key> 5742 <string>(NEW) 3DES</string> 5743 </dict> 5744 <dict> 5745 <key>assignments</key> 5746 <array> 5747 <dict> 5748 <key>id</key> 5749 <integer>1</integer> 5750 <key>units</key> 5751 <real>0.5</real> 5752 </dict> 5753 </array> 5754 <key>completionPercentage</key> 5755 <real>1</real> 5756 <key>effort</key> 5757 <real>0.0</real> 5758 <key>forcedStart</key> 5759 <string>20070903180000</string> 5760 <key>objectId</key> 5761 <integer>224</integer> 5762 <key>task</key> 5763 <string>Unarmoured/No Passphrase</string> 5764 </dict> 5765 <dict> 5766 <key>assignments</key> 5767 <array> 5768 <dict> 5769 <key>id</key> 5770 <integer>1</integer> 5771 <key>units</key> 5772 <real>0.5</real> 5773 </dict> 5774 </array> 5775 <key>desiredStart</key> 5776 <string>20080620110000</string> 5777 <key>effort</key> 5778 <real>3600</real> 5779 <key>objectId</key> 5780 <integer>225</integer> 5781 <key>prerequisites</key> 5782 <array> 5783 <dict> 5784 <key>id</key> 5785 <integer>200</integer> 5786 <key>isResource</key> 5787 <string>YES</string> 5788 <key>kind</key> 5789 <integer>2</integer> 5790 </dict> 5791 </array> 5792 <key>task</key> 5793 <string>Armoured/No Passphrase</string> 5794 <key>workSeconds</key> 5795 <real>7200</real> 5796 <key>workTime</key> 5797 <real>2</real> 5798 </dict> 5799 <dict> 5800 <key>assignments</key> 5801 <array> 5802 <dict> 5803 <key>id</key> 5804 <integer>1</integer> 5805 <key>units</key> 5806 <real>0.5</real> 5807 </dict> 5808 </array> 5809 <key>desiredStart</key> 5810 <string>20080421164800</string> 5811 <key>effort</key> 5812 <real>3600</real> 5813 <key>objectId</key> 5814 <integer>226</integer> 5815 <key>prerequisites</key> 5816 <array> 5817 <dict> 5818 <key>id</key> 5819 <integer>207</integer> 5820 <key>isResource</key> 5821 <string>YES</string> 5822 <key>kind</key> 5823 <integer>2</integer> 5824 </dict> 5825 </array> 5826 <key>task</key> 5827 <string>Unarmoured/Passphrase</string> 5828 <key>workSeconds</key> 5829 <real>7200</real> 5830 <key>workTime</key> 5831 <real>2</real> 5832 </dict> 5833 <dict> 5834 <key>assignments</key> 5835 <array> 5836 <dict> 5837 <key>id</key> 5838 <integer>1</integer> 5839 <key>units</key> 5840 <real>0.5</real> 5841 </dict> 5842 </array> 5843 <key>desiredStart</key> 5844 <string>20080620140000</string> 5845 <key>effort</key> 5846 <real>3600</real> 5847 <key>objectId</key> 5848 <integer>227</integer> 5849 <key>prerequisites</key> 5850 <array> 5851 <dict> 5852 <key>id</key> 5853 <integer>225</integer> 5854 <key>isResource</key> 5855 <string>YES</string> 5856 <key>kind</key> 5857 <integer>2</integer> 5858 </dict> 5859 </array> 5860 <key>task</key> 5861 <string>Armoured/Passphrase</string> 5862 <key>workSeconds</key> 5863 <real>7200</real> 5864 <key>workTime</key> 5865 <real>2</real> 5866 </dict> 5867 <dict> 5868 <key>effort</key> 5869 <real>0.0</real> 5870 <key>objectId</key> 5871 <integer>228</integer> 5872 <key>task</key> 5873 <string>Implement detached signatures and verification</string> 5874 </dict> 5875 <dict> 5876 <key>assignments</key> 5877 <array> 5878 <dict> 5879 <key>id</key> 5880 <integer>1</integer> 5881 <key>units</key> 5882 <real>0.5</real> 5883 </dict> 5884 </array> 5885 <key>desiredStart</key> 5886 <string>20080425110000</string> 5887 <key>doneSeconds</key> 5888 <real>144000</real> 5889 <key>effort</key> 5890 <real>144000</real> 5891 <key>effortDone</key> 5892 <real>72000</real> 5893 <key>objectId</key> 5894 <integer>231</integer> 5463 5895 <key>prerequisites</key> 5464 5896 <array> … … 5473 5905 </array> 5474 5906 <key>task</key> 5475 <string>(NEW) Write detached signature and verify</string> 5476 <key>workSeconds</key> 5907 <string>(NEW) Implement S2K specifiers</string> 5908 <key>workDone</key> 5909 <real>40</real> 5910 <key>workSeconds</key> 5911 <real>288000</real> 5912 <key>workTime</key> 5913 <real>80</real> 5914 </dict> 5915 <dict> 5916 <key>assignments</key> 5917 <array> 5918 <dict> 5919 <key>id</key> 5920 <integer>1</integer> 5921 <key>units</key> 5922 <real>0.5</real> 5923 </dict> 5924 </array> 5925 <key>desiredStart</key> 5926 <string>20080414151200</string> 5927 <key>doneSeconds</key> 5928 <real>103680</real> 5929 <key>effort</key> 5477 5930 <real>57600</real> 5478 <key>workTime</key> 5479 <real>16</real> 5480 </dict> 5481 <dict> 5482 <key>children</key> 5483 <array> 5484 <integer>204</integer> 5485 <integer>205</integer> 5486 <integer>206</integer> 5487 </array> 5488 <key>objectId</key> 5489 <integer>203</integer> 5490 <key>task</key> 5491 <string>(NEW) Decrypt compressed packet</string> 5492 </dict> 5493 <dict> 5494 <key>assignments</key> 5495 <array> 5496 <dict> 5497 <key>id</key> 5498 <integer>1</integer> 5499 <key>units</key> 5500 <real>0.5</real> 5501 </dict> 5502 </array> 5503 <key>doneSeconds</key> 5504 <real>57600</real> 5505 <key>effort</key> 5506 <real>28800</real> 5507 <key>effortDone</key> 5508 <real>28800</real> 5509 <key>objectId</key> 5510 <integer>204</integer> 5511 <key>task</key> 5512 <string>ZIP-compressed</string> 5513 <key>workDone</key> 5514 <real>16</real> 5515 <key>workSeconds</key> 5516 <real>57600</real> 5517 <key>workTime</key> 5518 <real>16</real> 5519 </dict> 5520 <dict> 5521 <key>assignments</key> 5522 <array> 5523 <dict> 5524 <key>id</key> 5525 <integer>1</integer> 5526 <key>units</key> 5527 <real>0.5</real> 5528 </dict> 5529 </array> 5530 <key>desiredStart</key> 5531 <string>20080625140000</string> 5532 <key>doneSeconds</key> 5533 <real>57600</real> 5534 <key>effort</key> 5535 <real>28800</real> 5536 <key>effortDone</key> 5537 <real>28800</real> 5538 <key>objectId</key> 5539 <integer>205</integer> 5540 <key>task</key> 5541 <string>ZLIB-compressed</string> 5542 <key>workDone</key> 5543 <real>16</real> 5544 <key>workSeconds</key> 5545 <real>57600</real> 5546 <key>workTime</key> 5547 <real>16</real> 5548 </dict> 5549 <dict> 5550 <key>assignments</key> 5551 <array> 5552 <dict> 5553 <key>id</key> 5554 <integer>1</integer> 5555 <key>units</key> 5556 <real>0.5</real> 5557 </dict> 5558 </array> 5559 <key>desiredStart</key> 5560 <string>20080619140000</string> 5561 <key>effort</key> 5562 <real>28800</real> 5563 <key>filterSelection</key> 5564 <true/> 5565 <key>objectId</key> 5566 <integer>206</integer> 5567 <key>prerequisites</key> 5568 <array> 5569 <dict> 5570 <key>id</key> 5571 <integer>70</integer> 5931 <key>effortDone</key> 5932 <real>51840</real> 5933 <key>objectId</key> 5934 <integer>232</integer> 5935 <key>prerequisites</key> 5936 <array> 5937 <dict> 5938 <key>id</key> 5939 <integer>168</integer> 5572 5940 <key>isResource</key> 5573 5941 <string>YES</string> … … 5577 5945 </array> 5578 5946 <key>task</key> 5579 <string>BZIP2-compressed</string> 5580 <key>workSeconds</key> 5947 <string>(NEW) Write out public key sequence</string> 5948 <key>workDone</key> 5949 <real>28.799999237060547</real> 5950 <key>workSeconds</key> 5951 <real>115200</real> 5952 <key>workTime</key> 5953 <real>32</real> 5954 </dict> 5955 <dict> 5956 <key>assignments</key> 5957 <array> 5958 <dict> 5959 <key>id</key> 5960 <integer>1</integer> 5961 <key>units</key> 5962 <real>0.5</real> 5963 </dict> 5964 </array> 5965 <key>doneSeconds</key> 5581 5966 <real>57600</real> 5582 <key>workTime</key> 5967 <key>effort</key> 5968 <real>57600</real> 5969 <key>effortDone</key> 5970 <real>28800</real> 5971 <key>objectId</key> 5972 <integer>233</integer> 5973 <key>prerequisites</key> 5974 <array> 5975 <dict> 5976 <key>id</key> 5977 <integer>231</integer> 5978 <key>kind</key> 5979 <integer>2</integer> 5980 </dict> 5981 </array> 5982 <key>task</key> 5983 <string>(NEW) Write out secret key sequence</string> 5984 <key>workDone</key> 5583 5985 <real>16</real> 5584 </dict> 5585 <dict> 5586 <key>assignments</key> 5587 <array> 5588 <dict> 5589 <key>id</key> 5590 <integer>1</integer> 5591 <key>units</key> 5592 <real>0.5</real> 5593 </dict> 5594 </array> 5595 <key>desiredStart</key> 5596 <string>20080605090000</string> 5597 <key>doneSeconds</key> 5986 <key>workSeconds</key> 5987 <real>115200</real> 5988 <key>workTime</key> 5989 <real>32</real> 5990 </dict> 5991 <dict> 5992 <key>effort</key> 5993 <real>0.0</real> 5994 <key>objectId</key> 5995 <integer>234</integer> 5996 <key>task</key> 5997 <string>Sign with V3 signature</string> 5998 </dict> 5999 <dict> 6000 <key>effort</key> 6001 <real>0.0</real> 6002 <key>objectId</key> 6003 <integer>235</integer> 6004 <key>task</key> 6005 <string>Clearsign with V3 signature</string> 6006 </dict> 6007 <dict> 6008 <key>assignments</key> 6009 <array> 6010 <dict> 6011 <key>id</key> 6012 <integer>1</integer> 6013 <key>units</key> 6014 <real>0.5</real> 6015 </dict> 6016 </array> 6017 <key>doneSeconds</key> 6018 <real>28800</real> 6019 <key>effort</key> 6020 <real>14400</real> 6021 <key>effortDone</key> 6022 <real>14400</real> 6023 <key>objectId</key> 6024 <integer>236</integer> 6025 <key>task</key> 6026 <string>(NEW) Verify correct behaviour on failed verification</string> 6027 <key>workDone</key> 6028 <real>8</real> 6029 <key>workSeconds</key> 6030 <real>28800</real> 6031 <key>workTime</key> 6032 <real>8</real> 6033 </dict> 6034 <dict> 6035 <key>assignments</key> 6036 <array> 6037 <dict> 6038 <key>id</key> 6039 <integer>1</integer> 6040 <key>units</key> 6041 <real>0.5</real> 6042 </dict> 6043 </array> 6044 <key>doneSeconds</key> 6045 <real>115200</real> 6046 <key>effort</key> 5598 6047 <real>57600</real> 5599 <key>effort</key> 5600 <real>28800</real> 5601 <key>effortDone</key> 5602 <real>28800</real> 5603 <key>objectId</key> 5604 <integer>207</integer> 5605 <key>prerequisites</key> 5606 <array> 5607 <dict> 5608 <key>id</key> 5609 <integer>103</integer> 5610 <key>isResource</key> 5611 <string>YES</string> 5612 <key>kind</key> 5613 <integer>2</integer> 5614 </dict> 5615 </array> 5616 <key>task</key> 5617 <string>ZIP-compress</string> 5618 <key>workDone</key> 5619 <real>16</real> 5620 <key>workSeconds</key> 6048 <key>effortDone</key> 5621 6049 <real>57600</real> 5622 <key>workTime</key> 5623 <real>16</real> 5624 </dict> 5625 <dict> 5626 <key>assignments</key> 5627 <array> 5628 <dict> 5629 <key>id</key> 5630 <integer>1</integer> 5631 <key>units</key> 5632 <real>0.5</real> 5633 </dict> 5634 </array> 5635 <key>doneSeconds</key> 5636 <real>57600</real> 5637 <key>effort</key> 5638 <real>28800</real> 5639 <key>effortDone</key> 5640 <real>28800</real> 5641 <key>objectId</key> 5642 <integer>208</integer> 5643 <key>task</key> 5644 <string>ZIP-decompress</string> 5645 <key>workDone</key> 5646 <real>16</real> 5647 <key>workSeconds</key> 5648 <real>57600</real> 5649 <key>workTime</key> 5650 <real>16</real> 5651 </dict> 5652 <dict> 5653 <key>assignments</key> 5654 <array> 5655 <dict> 5656 <key>id</key> 5657 <integer>1</integer> 5658 <key>units</key> 5659 <real>0.5</real> 5660 </dict> 5661 </array> 5662 <key>desiredStart</key> 5663 <string>20080303140000</string> 5664 <key>doneSeconds</key> 5665 <real>57600</real> 5666 <key>effort</key> 5667 <real>57600</real> 5668 <key>effortDone</key> 5669 <real>28800</real> 5670 <key>objectId</key> 5671 <integer>209</integer> 5672 <key>prerequisites</key> 5673 <array> 5674 <dict> 5675 <key>id</key> 5676 <integer>106</integer> 5677 <key>isResource</key> 5678 <string>YES</string> 5679 <key>kind</key> 5680 <integer>2</integer> 5681 </dict> 5682 </array> 5683 <key>task</key> 5684 <string>ZIP-compress</string> 5685 <key>workDone</key> 5686 <real>16</real> 6050 <key>forcedStart</key> 6051 <string>20080324090000</string> 6052 <key>objectId</key> 6053 <integer>238</integer> 6054 <key>task</key> 6055 <string>Extra complexity in writing transferable secret key </string> 6056 <key>workDone</key> 6057 <real>32</real> 5687 6058 <key>workSeconds</key> 5688 6059 <real>115200</real> 5689 6060 <key>workTime</key> 5690 6061 <real>32</real> 5691 </dict>5692 <dict>5693 <key>assignments</key>5694 <array>5695 <dict>5696 <key>id</key>5697 <integer>1</integer>5698 <key>units</key>5699 <real>0.5</real>5700 </dict>5701 </array>5702 <key>doneSeconds</key>5703 <real>57600</real>5704 <key>effort</key>5705 <real>28800</real>5706 <key>effortDone</key>5707 <real>28800</real>5708 <key>objectId</key>5709 <integer>210</integer>5710 <key>task</key>5711 <string>ZIP-decompress</string>5712 <key>workDone</key>5713 <real>16</real>5714 <key>workSeconds</key>5715 <real>57600</real>5716 <key>workTime</key>5717 <real>16</real>5718 </dict>5719 <dict>5720 <key>assignments</key>5721 <array>5722 <dict>5723 <key>id</key>5724 <integer>1</integer>5725 <key>units</key>5726 <real>0.5</real>5727 </dict>5728 </array>5729 <key>desiredStart</key>5730 <string>20080310140000</string>5731 <key>doneSeconds</key>5732 <real>57600</real>5733 <key>effort</key>5734 <real>28800</real>5735 <key>effortDone</key>5736 <real>28800</real>5737 <key>objectId</key>5738 <integer>211</integer>5739 <key>task</key>5740 <string>ZLIB-decompress</string>5741 <key>workDone</key>5742 <real>16</real>5743 <key>workSeconds</key>5744 <real>57600</real>5745 <key>workTime</key>5746 <real>16</real>5747 </dict>5748 <dict>5749 <key>assignments</key>5750 <array>5751 <dict>5752 <key>id</key>5753 <integer>1</integer>5754 <key>units</key>5755 <real>0.5</real>5756 </dict>5757 </array>5758 <key>desiredStart</key>5759 <string>20080307140000</string>5760 <key>effort</key>5761 <real>28800</real>5762 <key>objectId</key>5763 <integer>212</integer>5764 <key>prerequisites</key>5765 <array>5766 <dict>5767 <key>id</key>5768 <integer>209</integer>5769 <key>isResource</key>5770 <string>YES</string>5771 <key>kind</key>5772 <integer>2</integer>5773 </dict>5774 </array>5775 <key>task</key>5776 <string>BZIP2-decompress</string>5777 <key>workSeconds</key>5778 <real>57600</real>5779 <key>workTime</key>5780 <real>16</real>5781 </dict>5782 <dict>5783 <key>assignments</key>5784 <array>5785 <dict>5786 <key>id</key>5787 <integer>1</integer>5788 <key>units</key>5789 <real>0.5</real>5790 </dict>5791 </array>5792 <key>doneSeconds</key>5793 <real>288000</real>5794 <key>effort</key>5795 <real>144000</real>5796 <key>effortDone</key>5797 <real>144000</real>5798 <key>forcedStart</key>5799 <string>20080128140000</string>5800 <key>objectId</key>5801 <integer>213</integer>5802 <key>task</key>5803 <string>Support for Ben Taylor</string>5804 <key>workDone</key>5805 <real>80</real>5806 <key>workSeconds</key>5807 <real>288000</real>5808 <key>workTime</key>5809 <real>80</real>5810 </dict>5811 <dict>5812 <key>effort</key>5813 <real>432000</real>5814 <key>objectId</key>5815 <integer>214</integer>5816 <key>task</key>5817 <string>Other</string>5818 <key>workSeconds</key>5819 <real>432000</real>5820 <key>workTime</key>5821 <real>120</real>5822 6062 </dict> 5823 6063 </array> … … 5831 6071 </array> 5832 6072 <key>uuid</key> 5833 <string> 1B1A7F48-F31B-4C3F-9A92-A39ABCE1C8BA</string>6073 <string>9A2554F9-9F07-4301-8A1B-1D5C0C671C35</string> 5834 6074 <key>version</key> 5835 6075 <integer>2</integer> openpgpsdk/trunk/src/lib/adv_accumulate.c
r557 r558 66 66 // printf("User ID: %s\n",content->user_id.user_id); 67 67 assert(cur); 68 EXPAND_ARRAY(cur,uids); 69 cur->uids[cur->nuids++]=content->user_id; 68 ops_add_userid_to_keydata(cur, &content->user_id); 70 69 return OPS_KEEP_MEMORY; 71 70 … … 73 72 if(!cur) 74 73 return OPS_RELEASE_MEMORY; 75 76 EXPAND_ARRAY(cur,packets); 77 cur->packets[cur->npackets++]=content->packet; 74 ops_add_packet_to_keydata(cur, &content->packet); 78 75 return OPS_KEEP_MEMORY; 79 76 openpgpsdk/trunk/src/lib/adv_create.c
r557 r558 12 12 #include <openpgpsdk/packet.h> 13 13 #include <openpgpsdk/util.h> 14 #include <openpgpsdk/std_print.h> 14 15 #include <string.h> 15 16 #include <assert.h> … … 298 299 } 299 300 300 static void push_secret_key_checksum_writer(ops_create_info_t *info) 301 { 302 OPS_USED(info); 301 typedef struct 302 { 303 ops_hash_algorithm_t hash_algorithm; 304 ops_hash_t hash; 305 unsigned char *hashed; 306 } skey_checksum_arg_t; 307 308 static ops_boolean_t skey_checksum_writer(const unsigned char *src, const unsigned length, ops_error_t **errors, ops_writer_info_t *winfo) 309 { 310 skey_checksum_arg_t *arg=ops_writer_get_arg(winfo); 311 ops_boolean_t rtn=ops_true; 312 313 // add contents to hash 314 arg->hash.add(&arg->hash, src, length); 315 316 // write to next stacked writer 317 rtn=ops_stacked_write(src,length,errors,winfo); 318 319 // tidy up and return 320 return rtn; 321 } 322 323 static ops_boolean_t skey_checksum_finaliser(ops_error_t **errors __attribute__((unused)), ops_writer_info_t *winfo) 324 { 325 skey_checksum_arg_t *arg=ops_writer_get_arg(winfo); 326 arg->hash.finish(&arg->hash, arg->hashed); 327 return ops_true; 328 } 329 330 static void skey_checksum_destroyer(ops_writer_info_t* winfo) 331 { 332 skey_checksum_arg_t *arg=ops_writer_get_arg(winfo); 333 free(arg); 334 } 335 336 void ops_push_skey_checksum_writer(ops_create_info_t *cinfo, ops_secret_key_t *skey) 337 { 338 // OPS_USED(info); 303 339 // XXX: push a SHA-1 checksum writer (and change s2k to 254). 304 } 305 306 static ops_boolean_t pop_secret_key_checksum_writer(ops_create_info_t *info) 307 { 308 // XXX: actually write a SHA-1 checksum, but for now, dummy... 309 return ops_write_scalar(0,2,info); 310 } 311 312 340 skey_checksum_arg_t *arg=ops_mallocz(sizeof *arg); 341 342 // configure the arg 343 arg->hash_algorithm=skey->hash_algorithm; 344 arg->hashed=&skey->checkhash[0]; 345 346 // init the hash 347 ops_hash_any(&arg->hash, arg->hash_algorithm); 348 arg->hash.init(&arg->hash); 349 350 ops_writer_push(cinfo, skey_checksum_writer, skey_checksum_finaliser, skey_checksum_destroyer, arg); 351 } 352 313 353 /* Note that we support v3 keys here because they're needed for 314 354 * for verification - the writer doesn't allow them, though */ 315 355 static ops_boolean_t write_secret_key_body(const ops_secret_key_t *key, 356 const unsigned char* passphrase, 357 const size_t pplen, 316 358 ops_create_info_t *info) 317 359 { 360 /* RFC4880 Section 5.5.3 Secret-Key Packet Formats */ 361 362 ops_crypt_t crypt; 363 ops_hash_t hash; 364 unsigned char hashed[OPS_SHA1_HASH_SIZE]; 365 unsigned char session_key[CAST_KEY_LENGTH]; 366 unsigned int done=0; 367 unsigned int i=0; 368 318 369 if(!write_public_key_body(&key->public_key,info)) 319 370 return ops_false; 320 371 372 assert(key->s2k_usage==OPS_S2KU_ENCRYPTED_AND_HASHED); /* = 254 */ 321 373 if(!ops_write_scalar(key->s2k_usage,1,info)) 322 374 return ops_false; 323 375 324 // XXX: for now, no secret key encryption, so s2k == 0 325 assert(key->s2k_usage == OPS_S2KU_NONE); 326 327 push_secret_key_checksum_writer(info); 376 assert(key->algorithm==OPS_SA_CAST5); 377 if (!ops_write_scalar(key->algorithm,1,info)) 378 return ops_false; 379 380 assert(key->s2k_specifier==OPS_S2KS_SIMPLE); // = 1 \todo should be salted or iterated-and-salted 381 if (!ops_write_scalar(key->s2k_specifier,1,info)) 382 return ops_false; 383 384 assert(key->hash_algorithm==OPS_HASH_SHA1); 385 if (!ops_write_scalar(key->hash_algorithm,1,info)) 386 return ops_false; 387 388 switch(key->s2k_specifier) 389 { 390 case OPS_S2KS_SIMPLE: 391 // nothing more to do 392 break; 393 394 /* \todo 395 case OPS_S2KS_SALTED: 396 // 8-octet salt value 397 break; 398 399 case OPS_S2KS_ITERATED_AND_SALTED: 400 // 8-octet salt value 401 // 1-octet count 402 break; 403 */ 404 405 default: 406 fprintf(stderr,"invalid/unsupported s2k specifier %d\n", key->s2k_specifier); 407 assert(0); 408 } 409 410 if (!ops_write(&key->iv[0],ops_block_size(key->algorithm),info)) 411 return ops_false; 412 413 /* create the session key for encrypting the algorithm-specific fields */ 414 415 switch(key->s2k_specifier) 416 { 417 case OPS_S2KS_SIMPLE: 418 // RFC4880: section 3.7.1.1 419 420 done=0; 421 for (i=0; done<CAST_KEY_LENGTH; i++ ) 422 { 423 unsigned int j=0; 424 unsigned char zero=0; 425 int needed=CAST_KEY_LENGTH-done; 426 int use= needed < SHA_DIGEST_LENGTH ? needed : SHA_DIGEST_LENGTH; 427 428 ops_hash_any(&hash, key->hash_algorithm); 429 hash.init(&hash); 430 431 // preload if iterating 432 for (j=0; j<i; j++) 433 { 434 hash.add(&hash, &zero, 1); 435 } 436 437 hash.add(&hash, passphrase, pplen); 438 hash.finish(&hash, hashed); 439 440 // if more in hash than is needed by session key, use the leftmost octets 441 memcpy(session_key+(i*SHA_DIGEST_LENGTH), hashed, use); 442 done += use; 443 assert(done<=CAST_KEY_LENGTH); 444 } 445 446 break; 447 448 /* \todo 449 case OPS_S2KS_SALTED: 450 // 8-octet salt value 451 break; 452 453 case OPS_S2KS_ITERATED_AND_SALTED: 454 // 8-octet salt value 455 // 1-octet count 456 break; 457 */ 458 459 default: 460 fprintf(stderr,"invalid/unsupported s2k specifier %d\n", key->s2k_specifier); 461 assert(0); 462 } 463 464 /* use this session key to encrypt */ 465 466 ops_crypt_any(&crypt,key->algorithm); 467 crypt.set_iv(&crypt, key->iv); 468 crypt.set_key(&crypt, session_key); 469 ops_encrypt_init(&crypt); 470 471 if (debug) 472 { 473 unsigned int i=0; 474 fprintf(stderr,"\nWRITING:\niv="); 475 for (i=0; i<ops_block_size(key->algorithm); i++) 476 { 477 fprintf(stderr, "%02x ", key->iv[i]); 478 } 479 fprintf(stderr,"\n"); 480 481 fprintf(stderr,"key="); 482 for (i=0; i<CAST_KEY_LENGTH; i++) 483 { 484 fprintf(stderr, "%02x ", session_key[i]); 485 } 486 fprintf(stderr,"\n"); 487 488 ops_print_secret_key(OPS_PTAG_CT_SECRET_KEY,key); 489 490 fprintf(stderr,"turning encryption on...\n"); 491 } 492 493 ops_writer_push_encrypt_crypt(info, &crypt); 328 494 329 495 switch(key->public_key.algorithm) … … 335 501 case OPS_PKA_RSA_ENCRYPT_ONLY: 336 502 case OPS_PKA_RSA_SIGN_ONLY: 503 337 504 if(!ops_write_mpi(key->key.rsa.d,info) 338 505 || !ops_write_mpi(key->key.rsa.p,info) 339 506 || !ops_write_mpi(key->key.rsa.q,info) 340 507 || !ops_write_mpi(key->key.rsa.u,info)) 508 { 509 if (debug) 510 { fprintf(stderr,"4 x mpi not written - problem\n"); } 341 511 return ops_false; 512 } 513 342 514 break; 343 515 … … 350 522 } 351 523 352 return pop_secret_key_checksum_writer(info); 353 } 354 524 if(!ops_write(key->checkhash, OPS_CHECKHASH_SIZE, info)) 525 return ops_false; 526 527 ops_writer_pop(info); 528 529 return ops_true; 530 } 531 532 533 ops_boolean_t ops_write_transferable_public_key(const ops_keydata_t *key, ops_create_info_t *info) 534 { 535 ops_boolean_t rtn; 536 unsigned int i=0,j=0; 537 538 // public key 539 rtn=ops_write_struct_public_key(&key->key.skey.public_key,info); 540 if (rtn!=ops_true) 541 return rtn; 542 543 // TODO: revocation signatures go here 544 545 // user ids and corresponding signatures 546 for (i=0; i<key->nuids; i++) 547 { 548 ops_user_id_t* uid=&key->uids[i]; 549 550 rtn=ops_write_struct_user_id(uid, info); 551 552 if (!rtn) 553 return rtn; 554 555 // find signature for this packet if it exists 556 for (j=0; j<key->nsigs; j++) 557 { 558 sigpacket_t* sig=&key->sigs[i]; 559 if (!strcmp((char *)sig->userid->user_id, (char *)uid->user_id)) 560 { 561 rtn=ops_write(sig->packet->raw, sig->packet->length, info); 562 if (!rtn) 563 return !rtn; 564 } 565 } 566 } 567 568 // TODO: user attributes and corresponding signatures 569 570 // subkey packets and corresponding signatures and optional revocation 571 572 return rtn; 573 } 574 575 ops_boolean_t ops_write_transferable_secret_key(const ops_keydata_t *key, const unsigned char* passphrase, const size_t pplen, ops_create_info_t *info) 576 { 577 ops_boolean_t rtn; 578 unsigned int i=0,j=0; 579 580 // public key 581 rtn=ops_write_struct_secret_key(&key->key.skey,passphrase,pplen,info); 582 if (rtn!=ops_true) 583 return rtn; 584 585 // TODO: revocation signatures go here 586 587 // user ids and corresponding signatures 588 for (i=0; i<key->nuids; i++) 589 { 590 ops_user_id_t* uid=&key->uids[i]; 591 592 rtn=ops_write_struct_user_id(uid, info); 593 594 if (!rtn) 595 return rtn; 596 597 // find signature for this packet if it exists 598 for (j=0; j<key->nsigs; j++) 599 { 600 sigpacket_t* sig=&key->sigs[i]; 601 if (!strcmp((char *)sig->userid->user_id, (char *)uid->user_id)) 602 { 603 rtn=ops_write(sig->packet->raw, sig->packet->length, info); 604 if (!rtn) 605 return !rtn; 606 } 607 } 608 } 609 610 // TODO: user attributes and corresponding signatures 611 612 // subkey packets and corresponding signatures and optional revocation 613 614 return rtn; 615 } 355 616 356 617 /** … … 477 738 */ 478 739 ops_boolean_t ops_write_struct_secret_key(const ops_secret_key_t *key, 740 const unsigned char* passphrase, 741 const size_t pplen, 479 742 ops_create_info_t *info) 480 743 { 744 int length=0; 745 481 746 assert(key->public_key.version == 4); 482 747 748 // Ref: RFC4880 Section 5.5.3 749 750 // public_key, excluding MPIs 751 length += 1+4+1+1; 752 753 // s2k usage 754 length+=1; 755 756 switch (key->s2k_usage) 757 { 758 case OPS_S2KU_NONE: 759 // nothing to add 760 break; 761 762 case OPS_S2KU_ENCRYPTED_AND_HASHED: // 254 763 case OPS_S2KU_ENCRYPTED: // 255 764 765 // Ref: RFC4880 Section 3.7 766 length+=1; // s2k_specifier 767 768 switch(key->s2k_specifier) 769 { 770 case OPS_S2KS_SIMPLE: 771 length+=1; // hash algorithm 772 break; 773 774 case OPS_S2KS_SALTED: 775 length+=1+8; // hash algorithm + salt 776 break; 777 778 case OPS_S2KS_ITERATED_AND_SALTED: 779 length+=1+8+1; // hash algorithm, salt + count 780 break; 781 782 default: 783 assert(0); 784 } 785 break; 786 787 default: 788 assert(0); 789 } 790 791 // IV 792 if (key->s2k_usage != 0) 793 { 794 length += ops_block_size(key->algorithm); 795 } 796 797 // checksum or hash 798 switch (key->s2k_usage) 799 { 800 case 0: 801 case 255: 802 length += 2; 803 break; 804 805 case 254: 806 length += 20; 807 break; 808 809 default: 810 assert(0); 811 } 812 813 // secret key and public key MPIs 814 length += secret_key_length(key); 815 483 816 return ops_write_ptag(OPS_PTAG_CT_SECRET_KEY,info) 484 && ops_write_length(1+4+1+1+secret_key_length(key)+2,info) 485 && write_secret_key_body(key,info); 817 // && ops_write_length(1+4+1+1+secret_key_length(key)+2,info) 818 && ops_write_length(length,info) 819 && write_secret_key_body(key,passphrase,pplen,info); 486 820 } 487 821 … … 789 1123 ) 790 1124 { 791 int debug=0;792 793 //unsigned char encmpibuf[8192];794 // unsigned char EM[8192];795 1125 unsigned int k; 796 1126 unsigned i; … … 849 1179 */ 850 1180 851 int debug=0;852 853 1181 const ops_public_key_t* pub_key=ops_get_public_key_from_data(key); 854 1182 #define SZ_UNENCODED_M_BUF CAST_KEY_LENGTH+1+2 … … 906 1234 907 1235 // and encrypt it 908 if(!ops_ encrypt_mpi(encoded_m_buf, sz_encoded_m_buf, pub_key, &session_key->parameters))1236 if(!ops_rsa_encrypt_mpi(encoded_m_buf, sz_encoded_m_buf, pub_key, &session_key->parameters)) 909 1237 { 910 1238 free (encoded_m_buf); openpgpsdk/trunk/src/lib/adv_crypto.c
r516 r558 81 81 } 82 82 83 ops_boolean_t ops_ encrypt_mpi(const unsigned char *encoded_m_buf,83 ops_boolean_t ops_rsa_encrypt_mpi(const unsigned char *encoded_m_buf, 84 84 const size_t sz_encoded_m_buf, 85 85 const ops_public_key_t *pkey, openpgpsdk/trunk/src/lib/adv_keyring.c
r557 r558 7 7 #include <openpgpsdk/accumulate.h> 8 8 #include <openpgpsdk/validate.h> 9 #include <openpgpsdk/signature.h> 10 #include <openpgpsdk/readerwriter.h> 9 11 #include "keyring_local.h" 10 12 #include "parse_local.h" … … 39 41 else 40 42 ops_secret_key_free(&key->key.skey); 43 44 free(key); 41 45 } 42 46 … … 57 61 if(data->type != OPS_PTAG_CT_SECRET_KEY) 58 62 return NULL; 63 64 return &data->key.skey; 65 } 66 67 ops_secret_key_t * 68 ops_get_writable_secret_key_from_data(ops_keydata_t *data) 69 { 70 if (data->type != OPS_PTAG_CT_SECRET_KEY) 71 return NULL; 72 59 73 return &data->key.skey; 60 74 } … … 264 278 // \todo document OPS keyring format 265 279 280 // \todo check where userid pointers are copied 281 void ops_copy_userid(ops_user_id_t* dst, const ops_user_id_t* src) 282 { 283 int len=strlen((char *)src->user_id); 284 if (dst->user_id) 285 free(dst->user_id); 286 dst->user_id=ops_mallocz(len+1); 287 288 memcpy(dst->user_id, src->user_id, len); 289 } 290 291 // \todo check where pkt pointers are copied 292 void ops_copy_packet(ops_packet_t* dst, const ops_packet_t* src) 293 { 294 if (dst->raw) 295 free(dst->raw); 296 dst->raw=ops_mallocz(src->length); 297 298 dst->length=src->length; 299 memcpy(dst->raw, src->raw, src->length); 300 } 301 302 ops_user_id_t* ops_add_userid_to_keydata(ops_keydata_t* keydata, const ops_user_id_t* userid) 303 { 304 ops_user_id_t* new_uid=NULL; 305 306 EXPAND_ARRAY(keydata, uids); 307 308 // initialise new entry in array 309 new_uid=&keydata->uids[keydata->nuids]; 310 311 // keydata->uids[keydata->nuids].user_id=NULL; 312 new_uid->user_id=NULL; 313 314 // now copy it 315 // ops_copy_userid(&keydata->uids[keydata->nuids],userid); 316 ops_copy_userid(new_uid,userid); 317 keydata->nuids++; 318 319 return new_uid; 320 } 321 322 ops_packet_t* ops_add_packet_to_keydata(ops_keydata_t* keydata, const ops_packet_t* packet) 323 { 324 ops_packet_t* new_pkt=NULL; 325 326 EXPAND_ARRAY(keydata, packets); 327 328 // initialise new entry in array 329 new_pkt=&keydata->packets[keydata->npackets]; 330 new_pkt->length=0; 331 new_pkt->raw=NULL; 332 333 // now copy it 334 ops_copy_packet(new_pkt, packet); 335 keydata->npackets++; 336 337 return new_pkt; 338 } 339 340 void ops_add_signed_userid_to_keydata(ops_keydata_t* keydata, const ops_user_id_t* user_id, const ops_packet_t* sigpacket) 341 { 342 //int i=0; 343 ops_user_id_t * uid=NULL; 344 ops_packet_t * pkt=NULL; 345 346 uid=ops_add_userid_to_keydata(keydata, user_id); 347 pkt=ops_add_packet_to_keydata(keydata, sigpacket); 348 349 /* 350 * add entry in sigs array to link the userid and sigpacket 351 */ 352 353 // and add ptr to it from the sigs array 354 EXPAND_ARRAY(keydata, sigs); 355 356 // setup new entry in array 357 358 keydata->sigs[keydata->nsigs].userid=uid; 359 keydata->sigs[keydata->nsigs].packet=pkt; 360 361 keydata->nsigs++; 362 } 363 364 ops_boolean_t ops_add_selfsigned_userid_to_keydata(ops_keydata_t* keydata, ops_user_id_t* userid) 365 { 366 ops_packet_t sigpacket; 367 368 ops_memory_t* mem_userid=NULL; 369 ops_create_info_t* cinfo_userid=NULL; 370 371 ops_memory_t* mem_sig=NULL; 372 ops_create_info_t* cinfo_sig=NULL; 373 374 ops_create_signature_t *sig=NULL; 375 // unsigned char keyid[OPS_KEY_ID_SIZE]; 376 377 /* 378 * create signature packet for this userid 379 */ 380 381 // create userid pkt 382 ops_setup_memory_write(&cinfo_userid, &mem_userid, 128); 383 ops_write_struct_user_id(userid, cinfo_userid); 384 385 // create sig for this pkt 386 387 sig=ops_create_signature_new(); 388 ops_signature_start_key_signature(sig, &keydata->key.skey.public_key, userid, OPS_CERT_POSITIVE); 389 ops_signature_add_creation_time(sig,time(NULL)); 390 ops_signature_add_issuer_key_id(sig,keydata->key_id); 391 ops_signature_add_primary_user_id(sig, ops_true); 392 ops_signature_hashed_subpackets_end(sig); 393 394 ops_setup_memory_write(&cinfo_sig, &mem_sig, 128); 395 ops_write_signature(sig,&keydata->key.skey.public_key,&keydata->key.skey, cinfo_sig); 396 397 // add this packet to keydata 398 399 sigpacket.length=ops_memory_get_length(mem_sig); 400 sigpacket.raw=ops_memory_get_data(mem_sig); 401 // pkt=ops_add_packet_to_keydata(keydata, &packet); 402 // ops_add_signature_to_keydata(keydata, keydata->key_id, packet); 403 404 // add userid to keydata 405 ops_add_signed_userid_to_keydata(keydata, userid, &sigpacket); 406 407 // cleanup 408 ops_create_signature_delete(sig); 409 ops_create_info_delete(cinfo_userid); 410 ops_create_info_delete(cinfo_sig); 411 ops_memory_free(mem_userid); 412 ops_memory_free(mem_sig); 413 414 return ops_true; 415 } 416 417 ops_keydata_t *ops_keydata_new(void) 418 { return ops_mallocz(sizeof(ops_keydata_t)); } 419 420 void ops_keydata_init(ops_keydata_t* keydata, const ops_content_tag_t type) 421 { 422 assert(keydata->type==OPS_PTAG_CT_RESERVED); 423 assert(type==OPS_PTAG_CT_PUBLIC_KEY || type==OPS_PTAG_CT_SECRET_KEY); 424 425 keydata->type=type; 426 } 427 266 428 // eof openpgpsdk/trunk/src/lib/adv_openssl_crypto.c
r557 r558 4 4 #include <openpgpsdk/configure.h> 5 5 #include <openpgpsdk/crypto.h> 6 #include <openpgpsdk/keyring.h> 7 #include <openpgpsdk/readerwriter.h> 8 #include "keyring_local.h" 6 9 #include <openpgpsdk/std_print.h> 7 10 #include <openssl/md5.h> … … 16 19 17 20 static int debug=0; 21 22 void test_secret_key(const ops_secret_key_t *skey) 23 { 24 RSA* test=RSA_new(); 25 26 test->n=BN_dup(skey->public_key.key.rsa.n); 27 test->e=BN_dup(skey->public_key.key.rsa.e); 28 29 test->d=BN_dup(skey->key.rsa.d); 30 test->p=BN_dup(skey->key.rsa.p); 31 test->q=BN_dup(skey->key.rsa.q); 32 33 assert(RSA_check_key(test)==1); 34 RSA_free(test); 35 } 18 36 19 37 static void md5_init(ops_hash_t *hash) … … 263 281 { return hash->name; } 264 282 265 ops_boolean_t ops_generate_rsa_keypair(const int numbits, const unsigned long e, ops_secret_key_t* skey) 266 { 283 ops_boolean_t ops_rsa_generate_keypair(const int numbits, const unsigned long e, ops_keydata_t* keydata) 284 { 285 ops_secret_key_t *skey=NULL; 267 286 RSA *rsa=NULL; 287 BN_CTX *ctx=BN_CTX_new(); 288 289 ops_keydata_init(keydata,OPS_PTAG_CT_SECRET_KEY); 290 skey=ops_get_writable_secret_key_from_data(keydata); 268 291 269 292 // generate the key pair … … 278 301 skey->public_key.algorithm= OPS_PKA_RSA; 279 302 280 skey->public_key.key.rsa.n= rsa->n;281 skey->public_key.key.rsa.e= rsa->e;282 283 skey->s2k_usage=OPS_S2KU_ NONE;303 skey->public_key.key.rsa.n=BN_dup(rsa->n); 304 skey->public_key.key.rsa.e=BN_dup(rsa->e); 305 306 skey->s2k_usage=OPS_S2KU_ENCRYPTED_AND_HASHED; 284 307 // \todo skey->s2k_specifier_t=OPS_S2KS_SALTED; 285 skey->algorithm=OPS_SA_AES_128; // \todo make param 308 skey->s2k_specifier=OPS_S2KS_SIMPLE; 309 skey->algorithm=OPS_SA_CAST5; // \todo make param 286 310 skey->hash_algorithm=OPS_HASH_SHA1; // \todo make param 287 311 skey->octet_count=0; 288 312 skey->checksum=0; 289 313 290 skey->key.rsa.d=rsa->d; 291 skey->key.rsa.p=rsa->p; 292 skey->key.rsa.q=rsa->q; 293 skey->key.rsa.u=NULL; 294 295 /* debug */ 296 RSA* test=RSA_new(); 297 298 test->n=skey->public_key.key.rsa.n; 299 test->e=skey->public_key.key.rsa.e; 300 301 test->d=skey->key.rsa.d; 302 test->p=skey->key.rsa.p; 303 test->q=skey->key.rsa.q; 304 305 assert(RSA_check_key(test)==1); 306 RSA_free(test); 307 /* end debug */ 314 skey->key.rsa.d=BN_dup(rsa->d); 315 skey->key.rsa.p=BN_dup(rsa->p); 316 skey->key.rsa.q=BN_dup(rsa->q); 317 skey->key.rsa.u=BN_mod_inverse(NULL,rsa->p, rsa->q, ctx); 318 assert(skey->key.rsa.u); 319 BN_CTX_free(ctx); 320 321 RSA_free(rsa); 322 323 ops_keyid(keydata->key_id, &keydata->key.skey.public_key); 324 ops_fingerprint(&keydata->fingerprint, &keydata->key.skey.public_key); 325 326 // Generate checksum 327 328 ops_create_info_t *cinfo=NULL; 329 ops_memory_t *mem=NULL; 330 331 ops_setup_memory_write(&cinfo, &mem, 128); 332 333 ops_push_skey_checksum_writer(cinfo, skey); 334 335 switch(skey->public_key.algorithm) 336 { 337 // case OPS_PKA_DSA: 338 // return ops_write_mpi(key->key.dsa.x,info); 339 340 case OPS_PKA_RSA: 341 case OPS_PKA_RSA_ENCRYPT_ONLY: 342 case OPS_PKA_RSA_SIGN_ONLY: 343 if(!ops_write_mpi(skey->key.rsa.d,cinfo) 344 || !ops_write_mpi(skey->key.rsa.p,cinfo) 345 || !ops_write_mpi(skey->key.rsa.q,cinfo) 346 &nb
