aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/res/raw-pl/help_changelog.html
blob: 715e1aee687e2882248157881a137d64464c89fb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
<html>
<head></head>
<body>

<h2>3.1.2</h2>
<ul>
<li>Fix key export to files (now for real)</li>
</ul>
<h2>3.1.1</h2>
<ul>
<li>Fix key export to files (they were written partially)</li>
<li>Fix crash on Android 2.3</li>
</ul>
<h2>3.1</h2>
<ul>
<li>Fix crash on Android 5</li>
<li>New certify screen</li>
<li>Secure Exchange directly from key list (SafeSlinger library)</li>
<li>New QR Code program flow</li>
<li>Redesigned decrypt screen</li>
<li>New icon usage and colors</li>
<li>Fix import of secret keys from Symantec Encryption Desktop</li>
<li>Subkey IDs on Yubikeys are now checked correctly</li>
</ul>
<h2>3.0.1</h2>
<ul>
<li>Lepsza obsługa importowania dużych ilości kluczy</li>
<li>Poprawione wybieranie pod-kluczy</li>
</ul>
<h2>3.0</h2>
<ul>
<li>Pełna obsługa generowania podpisów i odszyfrowania Yubikey!</li>
<li>Zaproponowano instalacje aplikacji współpracujących w liście aplikacji</li>
<li>New design for decryption screens</li>
<li>Many fixes for key import, also fixes stripped keys</li>
<li>Honor and display key authenticate flags</li>
<li>User interface to generate custom keys</li>
<li>Fixing user id revocation certificates</li>
<li>New cloud search (searches over traditional keyservers and keybase.io)</li>
<li>Support for stripping keys inside OpenKeychain</li>
</ul>
<h2>2.9.2</h2>
<ul>
<li>Fix keys broken in 2.9.1</li>
<li>Yubikey decryption now working via API</li>
</ul>
<h2>2.9.1</h2>
<ul>
<li>Split encrypt screen into two</li>
<li>Fix key flags handling (now supporting Mailvelope 0.7 keys)</li>
<li>Improved passphrase handling</li>
<li>Key sharing via SafeSlinger</li>
<li>Yubikey: preference to allow other PINs, currently only signing via the OpenPGP API works, not inside of OpenKeychain</li>
<li>Fix usage of stripped keys</li>
<li>SHA256 as default for compatibility</li>
<li>Intent API has changed, see https://github.com/open-keychain/open-keychain/wiki/Intent-API</li>
<li>OpenPGP API now handles revoked/expired keys and returns all user ids</li>
</ul>
<h2>2.9</h2>
<ul>
<li>Fixing crashes introduced in v2.8</li>
<li>Experimental ECC support</li>
<li>Experimental Yubikey support (signing-only with imported keys)</li>
</ul>
<h2>2.8</h2>
<ul>
<li>So many bugs have been fixed in this release that we focus on the main new features</li>
<li>Key edit: awesome new design, key revocation</li>
<li>Key import: awesome new design, secure keyserver connections via hkps, keyserver resolving via DNS SRV records</li>
<li>New first time screen</li>
<li>New key creation screen: autocompletion of name and email based on your personal Android accounts</li>
<li>File encryption: awesome new design, support for encrypting multiple files</li>
<li>New icons to show status of key (by Brennan Novak)</li>
<li>Important bug fix: Importing of large key collections from a file is now possible</li>
<li>Notification showing cached passphrases</li>
<li>Keys are connected to Android's contacts</li>
</ul>
<p>This release wouldn't be possible without the work of Vincent Breitmoser (GSoC 2014), mar-v-in (GSoC 2014), Daniel Albert, Art O Cathain, Daniel Haß, Tim Bray, Thialfihar</p>

<h2>2.7</h2>
<ul>
<li>Purple! (Dominik, Vincent)</li>
<li>New key view design (Dominik, Vincent)</li>
<li>New flat Android buttons (Dominik, Vincent)</li>
<li>API fixes (Dominik)</li>
<li>Keybase.io import (Tim Bray)</li>
</ul>
<h2>2.6.1</h2>
<ul>
<li>Some fixes for regression bugs</li>
</ul>
<h2>2.6</h2>
<ul>
<li>Key certifications (thanks to Vincent Breitmoser)</li>
<li>Support for GnuPG partial secret keys (thanks to Vincent Breitmoser)</li>
<li>New design for signature verification</li>
<li>Custom key length (thanks to Greg Witczak)</li>
<li>Fix share-functionality from other apps</li>
</ul>
<h2>2.5</h2>
<ul>
<li>Fix decryption of symmetric pgp messages/files</li>
<li>Refactored key edit screen (thanks to Ash Hughes)</li>
<li>New modern design for encrypt/decrypt screens</li>
<li>OpenPGP API version 3 (multiple api accounts, internal fixes, key lookup)</li>
</ul>
<h2>2.4</h2>
<p>Thanks to all applicants of Google Summer of Code 2014 who made this release feature rich and bug free!
Besides several small patches, a notable number of patches are made by the following people (in alphabetical order):
Daniel Hammann, Daniel Haß, Greg Witczak, Miroojin Bakshi, Nikhil Peter Raj, Paul Sarbinowski, Sreeram Boyapati, Vincent Breitmoser.</p>
<ul>
<li>New unified key list</li>
<li>Colorized key fingerprint</li>
<li>Support for keyserver ports</li>
<li>Deactivate possibility to generate weak keys</li>
<li>Much more internal work on the API</li>
<li>Certify user ids</li>
<li>Keyserver query based on machine-readable output</li>
<li>Lock navigation drawer on tablets</li>
<li>Suggestions for emails on creation of keys</li>
<li>Search in public key lists</li>
<li>And much more improvements and fixes…</li>
</ul>
<h2>2.3.1</h2>
<ul>
<li>Hotfix for crash when upgrading from old versions</li>
</ul>
<h2>2.3</h2>
<ul>
<li>Remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li>
<li>Fix setting expiry dates on keys (thanks to Ash Hughes)</li>
<li>More internal fixes when editing keys (thanks to Ash Hughes)</li>
<li>Querying keyservers directly from the import screen</li>
<li>Fix layout and dialog style on Android 2.2-3.0</li>
<li>Fix crash on keys with empty user ids</li>
<li>Fix crash and empty lists when coming back from signing screen</li>
<li>Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source</li>
<li>Fix upload of key from signing screen</li>
</ul>
<h2>2.2</h2>
<ul>
<li>New design with navigation drawer</li>
<li>New public key list design</li>
<li>New public key view</li>
<li>Bug fixes for importing of keys</li>
<li>Key cross-certification (thanks to Ash Hughes)</li>
<li>Handle UTF-8 passwords properly (thanks to Ash Hughes)</li>
<li>First version with new languages (thanks to the contributors on Transifex)</li>
<li>Sharing of keys via QR Codes fixed and improved</li>
<li>Package signature verification for API</li>
</ul>
<h2>2.1.1</h2>
<ul>
<li>API Updates, preparation for K-9 Mail integration</li>
</ul>
<h2>2.1</h2>
<ul>
<li>Lots of bug fixes</li>
<li>New API for developers</li>
<li>PRNG bug fix by Google</li>
</ul>
<h2>2.0</h2>
<ul>
<li>Complete redesign</li>
<li>Share public keys via QR codes, NFC beam</li>
<li>Sign keys</li>
<li>Upload keys to server</li>
<li>Fixes import issues</li>
<li>New AIDL API</li>
</ul>
<h2>1.0.8</h2>
<ul>
<li>Basic keyserver support</li>
<li>App2sd</li>
<li>More choices for passphrase cache: 1, 2, 4, 8, hours</li>
<li>Translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li>
<li>Bugfixes</li>
<li>Optimizations</li>
</ul>
<h2>1.0.7</h2>
<ul>
<li>Fixed problem with signature verification of texts with trailing newline</li>
<li>More options for passphrase cache time to live (20, 40, 60 mins)</li>
</ul>
<h2>1.0.6</h2>
<ul>
<li>Account adding crash on Froyo fixed</li>
<li>Secure file deletion</li>
<li>Option to delete key file after import</li>
<li>Stream encryption/decryption (gallery, etc.)</li>
<li>New options (language, force v3 signatures)</li>
<li>Interface changes</li>
<li>Bugfixes</li>
</ul>
<h2>1.0.5</h2>
<ul>
<li>German and Italian translation</li>
<li>Much smaller package, due to reduced BC sources</li>
<li>New preferences GUI</li>
<li>Layout adjustment for localization</li>
<li>Signature bugfix</li>
</ul>
<h2>1.0.4</h2>
<ul>
<li>Fixed another crash caused by some SDK bug with query builder</li>
</ul>
<h2>1.0.3</h2>
<ul>
<li>Fixed crashes during encryption/signing and possibly key export</li>
</ul>
<h2>1.0.2</h2>
<ul>
<li>Filterable key lists</li>
<li>Smarter pre-selection of encryption keys</li>
<li>New Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li>
<li>Fixes and additional features (key preselection) for K-9 Mail, new beta build available</li>
</ul>
<h2>1.0.1</h2>
<ul>
<li>GMail account listing was broken in 1.0.0, fixed again</li>
</ul>
<h2>1.0.0</h2>
<ul>
<li>K-9 Mail integration, APG supporting beta build of K-9 Mail</li>
<li>Support of more file managers (including ASTRO)</li>
<li>Slovenian translation</li>
<li>New database, much faster, less memory usage</li>
<li>Defined Intents and content provider for other apps</li>
<li>Bugfixes</li>
</ul>
</body>
</html>
n> (blk_info.mode == O_RDWR) { blk_write_sector(0); blk_write_sector(blk_info.sectors-1); } else #endif { blk_read_sector(0); blk_read_sector(blk_info.sectors-1); } while (1) { uint64_t sector = rand() % blk_info.sectors; struct timeval tv; #ifdef BLKTEST_WRITE if (blk_info.mode == O_RDWR) blk_write_sector(sector); else #endif blk_read_sector(sector); blkfront_aio_poll(blk_dev); gettimeofday(&tv, NULL); if (tv.tv_sec > lasttime + 10) { printk("%llu read, %llu write\n", blk_size_read, blk_size_write); lasttime = tv.tv_sec; } #ifdef BLKTEST_WRITE while (blk_to_read) { struct blk_req *req = blk_to_read; blk_to_read = blk_to_read->next; req->aiocb.aio_cb = blk_write_read_completed; blkfront_aio_read(&req->aiocb); } #endif } } #define WIDTH 800 #define HEIGHT 600 #define DEPTH 32 static uint32_t *fb; static int refresh_period = 50; static struct fbfront_dev *fb_dev; static struct semaphore fbfront_sem = __SEMAPHORE_INITIALIZER(fbfront_sem, 0); static void fbfront_drawvert(int x, int y1, int y2, uint32_t color) { int y; if (x < 0) return; if (x >= WIDTH) return; if (y1 < 0) y1 = 0; if (y2 >= HEIGHT) y2 = HEIGHT-1; for (y = y1; y <= y2; y++) fb[x + y*WIDTH] ^= color; } static void fbfront_drawhoriz(int x1, int x2, int y, uint32_t color) { int x; if (y < 0) return; if (y >= HEIGHT) return; if (x1 < 0) x1 = 0; if (x2 >= WIDTH) x2 = WIDTH-1; for (x = x1; x <= x2; x++) fb[x + y*WIDTH] ^= color; } static void fbfront_thread(void *p) { size_t line_length = WIDTH * (DEPTH / 8); size_t memsize = HEIGHT * line_length; unsigned long *mfns; int i, n = (memsize + PAGE_SIZE-1) / PAGE_SIZE; memsize = n * PAGE_SIZE; fb = _xmalloc(memsize, PAGE_SIZE); memset(fb, 0, memsize); mfns = xmalloc_array(unsigned long, n); for (i = 0; i < n; i++) mfns[i] = virtual_to_mfn((char *) fb + i * PAGE_SIZE); fb_dev = init_fbfront(NULL, mfns, WIDTH, HEIGHT, DEPTH, line_length, n); xfree(mfns); if (!fb_dev) { xfree(fb); return; } up(&fbfront_sem); } static void clip_cursor(int *x, int *y) { if (*x < 0) *x = 0; if (*x >= WIDTH) *x = WIDTH - 1; if (*y < 0) *y = 0; if (*y >= HEIGHT) *y = HEIGHT - 1; } static void refresh_cursor(int new_x, int new_y) { static int old_x = -1, old_y = -1; if (!refresh_period) return; if (old_x != -1 && old_y != -1) { fbfront_drawvert(old_x, old_y + 1, old_y + 8, 0xffffffff); fbfront_drawhoriz(old_x + 1, old_x + 8, old_y, 0xffffffff); fbfront_update(fb_dev, old_x, old_y, 9, 9); } old_x = new_x; old_y = new_y; fbfront_drawvert(new_x, new_y + 1, new_y + 8, 0xffffffff); fbfront_drawhoriz(new_x + 1, new_x + 8, new_y, 0xffffffff); fbfront_update(fb_dev, new_x, new_y, 9, 9); } static struct kbdfront_dev *kbd_dev; static void kbdfront_thread(void *p) { DEFINE_WAIT(w); int x = WIDTH / 2, y = HEIGHT / 2, z = 0; kbd_dev = init_kbdfront(NULL, 1); if (!kbd_dev) return; down(&fbfront_sem); refresh_cursor(x, y); while (1) { union xenkbd_in_event kbdevent; union xenfb_in_event fbevent; int sleep = 1; add_waiter(w, kbdfront_queue); add_waiter(w, fbfront_queue); while (kbdfront_receive(kbd_dev, &kbdevent, 1) != 0) { sleep = 0; switch(kbdevent.type) { case XENKBD_TYPE_MOTION: printk("motion x:%d y:%d z:%d\n", kbdevent.motion.rel_x, kbdevent.motion.rel_y, kbdevent.motion.rel_z); x += kbdevent.motion.rel_x; y += kbdevent.motion.rel_y; z += kbdevent.motion.rel_z; clip_cursor(&x, &y); refresh_cursor(x, y); break; case XENKBD_TYPE_POS: printk("pos x:%d y:%d dz:%d\n", kbdevent.pos.abs_x, kbdevent.pos.abs_y, kbdevent.pos.rel_z); x = kbdevent.pos.abs_x; y = kbdevent.pos.abs_y; z = kbdevent.pos.rel_z; clip_cursor(&x, &y); refresh_cursor(x, y); break; case XENKBD_TYPE_KEY: printk("key %d %s\n", kbdevent.key.keycode, kbdevent.key.pressed ? "pressed" : "released"); if (kbdevent.key.keycode == BTN_LEFT) { printk("mouse %s at (%d,%d,%d)\n", kbdevent.key.pressed ? "clic" : "release", x, y, z); if (kbdevent.key.pressed) { uint32_t color = rand(); fbfront_drawvert(x - 16, y - 16, y + 15, color); fbfront_drawhoriz(x - 16, x + 15, y + 16, color); fbfront_drawvert(x + 16, y - 15, y + 16, color); fbfront_drawhoriz(x - 15, x + 16, y - 16, color); fbfront_update(fb_dev, x - 16, y - 16, 33, 33); } } else if (kbdevent.key.keycode == KEY_Q) { struct sched_shutdown sched_shutdown = { .reason = SHUTDOWN_poweroff }; HYPERVISOR_sched_op(SCHEDOP_shutdown, &sched_shutdown); do_exit(); } break; } } while (fbfront_receive(fb_dev, &fbevent, 1) != 0) { sleep = 0; switch(fbevent.type) { case XENFB_TYPE_REFRESH_PERIOD: refresh_period = fbevent.refresh_period.period; printk("refresh period %d\n", refresh_period); refresh_cursor(x, y); break; } } if (sleep) schedule(); } } static struct pcifront_dev *pci_dev; static void print_pcidev(unsigned int domain, unsigned int bus, unsigned int slot, unsigned int fun) { unsigned int vendor, device, rev, class; pcifront_conf_read(pci_dev, domain, bus, slot, fun, 0x00, 2, &vendor); pcifront_conf_read(pci_dev, domain, bus, slot, fun, 0x02, 2, &device); pcifront_conf_read(pci_dev, domain, bus, slot, fun, 0x08, 1, &rev); pcifront_conf_read(pci_dev, domain, bus, slot, fun, 0x0a, 2, &class); printk("%04x:%02x:%02x.%02x %04x: %04x:%04x (rev %02x)\n", domain, bus, slot, fun, class, vendor, device, rev); } static void pcifront_thread(void *p) { pci_dev = init_pcifront(NULL); if (!pci_dev) return; printk("PCI devices:\n"); pcifront_scan(pci_dev, print_pcidev); } static void fs_thread(void *p) { init_fs_frontend(); } /* This should be overridden by the application we are linked against. */ __attribute__((weak)) int app_main(start_info_t *si) { printk("Dummy main: start_info=%p\n", si); create_thread("xenbus_tester", xenbus_tester, si); create_thread("periodic_thread", periodic_thread, si); create_thread("netfront", netfront_thread, si); create_thread("blkfront", blkfront_thread, si); create_thread("fbfront", fbfront_thread, si); create_thread("kbdfront", kbdfront_thread, si); create_thread("pcifront", pcifront_thread, si); create_thread("fs-frontend", fs_thread, si); return 0; } /* * INITIAL C ENTRY POINT. */ void start_kernel(start_info_t *si) { static char hello[] = "Bootstrapping...\n"; (void)HYPERVISOR_console_io(CONSOLEIO_write, strlen(hello), hello); arch_init(si); trap_init(); /* print out some useful information */ printk("Xen Minimal OS!\n"); printk(" start_info: %p(VA)\n", si); printk(" nr_pages: 0x%lx\n", si->nr_pages); printk(" shared_inf: 0x%08lx(MA)\n", si->shared_info); printk(" pt_base: %p(VA)\n", (void *)si->pt_base); printk("nr_pt_frames: 0x%lx\n", si->nr_pt_frames); printk(" mfn_list: %p(VA)\n", (void *)si->mfn_list); printk(" mod_start: 0x%lx(VA)\n", si->mod_start); printk(" mod_len: %lu\n", si->mod_len); printk(" flags: 0x%x\n", (unsigned int)si->flags); printk(" cmd_line: %s\n", si->cmd_line ? (const char *)si->cmd_line : "NULL"); /* Set up events. */ init_events(); /* ENABLE EVENT DELIVERY. This is disabled at start of day. */ __sti(); arch_print_info(); setup_xen_features(); /* Init memory management. */ init_mm(); /* Init time and timers. */ init_time(); /* Init the console driver. */ init_console(); /* Init grant tables */ init_gnttab(); /* Init scheduler. */ init_sched(); /* Init XenBus */ init_xenbus(); /* Call (possibly overridden) app_main() */ app_main(&start_info); /* Everything initialised, start idle thread */ run_idle_thread(); } void stop_kernel(void) { if (net_dev) shutdown_netfront(net_dev); if (blk_dev) shutdown_blkfront(blk_dev); if (fb_dev) shutdown_fbfront(fb_dev); if (kbd_dev) shutdown_kbdfront(kbd_dev); if (pci_dev) shutdown_pcifront(pci_dev); /* TODO: fs import */ local_irq_disable(); /* Reset grant tables */ fini_gnttab(); /* Reset the console driver. */ fini_console(NULL); /* TODO: record new ring mfn & event in start_info */ /* Reset XenBus */ fini_xenbus(); /* Reset timers */ fini_time(); /* Reset memory management. */ fini_mm(); /* Reset events. */ fini_events(); /* Reset traps */ trap_fini(); /* Reset arch details */ arch_fini(); } /* * do_exit: This is called whenever an IRET fails in entry.S. * This will generally be because an application has got itself into * a really bad state (probably a bad CS or SS). It must be killed. * Of course, minimal OS doesn't have applications :-) */ void do_exit(void) { printk("Do_exit called!\n"); stack_walk(); for( ;; ) { struct sched_shutdown sched_shutdown = { .reason = SHUTDOWN_crash }; HYPERVISOR_sched_op(SCHEDOP_shutdown, &sched_shutdown); } }