Changelog

PyBitmessage Changelog
0.6.2


 * Usability:
 * many minor usability improvements, in particular helpful for beginners
 * get rid of confusing log messages
 * improved feedback when busy during shutdown
 * UI feedback when problems with proxy
 * UI feedback when local time is wrong
 * UI feedback when C PoW module is not available
 * folder loading performance improved
 * translations updated
 * chan join/create interface redesigned
 * can select OpenCL vendor if multiple are available (previously it would have crashed)
 * locale initialisation fixes
 * contact support form and About dialog show the GIT head
 * added setup.py (setuptools) for easier installation
 * gentle warning if sending to a chan with a too low TTL
 * message retransmit timing now works as the description


 * Fixes:
 * networking subsystem stability fixes
 * multiprocessing python PoW fixed
 * message parser fixes
 * many smaller fixes
 * OpenBSD listening socket fix (works IPv4-only mode instead of not at all)


 * Backend:
 * try to auto-build PoW module
 * networking subsystem performance improvements
 * refactoring of configuration interface, inventory, downloading and uploading tracking, known nodes and other minor parts
 * refactoring to reduce circular imports and global variables
 * support for OpenSSL 1.1.0 and LibreSSL
 * some network parameters configurable, but mostly only through directly editing keys.dat
 * network settings allow an optimised bootstrap provider mode


 * Developers:
 * extended encoding available for testing. Use it by holding Shift while clicking on Send
 * extended encoding can be extended by adding new classes to the "messagetypes" directory
 * directory structure reorganisation to get rid of obsolete code


 * Linux:
 * setup.py detects Ubuntu, Debian, Fedora, openSUSE, Gentoo and Guix


 * FreeBSD/OpenBSD:
 * separate Makefile for BSD make
 * C PoW core count detection fixes for OpenBSD
 * setup.py detects FreeBSD and OpenBSD


 * Windows:
 * improved error handling
 * separate Makefile for Microsoft Visual C++
 * pyinstaller spec file updated
 * 64bit binary does not require MSVC Redistributable 2012 anymore and is mostly built with mingw instead of MSVC
 * updated Python to 2.7.13 and OpenSSL to 1.0.2j/1.0.2k


 * OSX:
 * binary works with OpenCL
 * updated to Python 2.7.13 and OpenSSL 1.0.2k


 * Infrastructure:
 * 3 additional bootstrap nodes
 * new server for building/testing
 * transifex webhooks automate translation workflow
 * integration with landscape.io for code quality checking

0.6.1


 * Translation update and localisation fixes
 * Minor bug fixes
 * Minor UI improvements
 * Namecoin integration fixed and improved
 * SMTP server and client interface
 * Tor hidden service support
 * C PoW builds and runs on *BSD
 * Windows binary:
 * fixed build
 * upgraded to Python 2.7.12 and OpenSSL 1.0.2h
 * 64bit binary available for download
 * self-built PyInstaller bootloader should trigger fewer antivirus false positives
 * Mac OSX binary:
 * upgraded to Python 2.7.12 and OpenSSL 1.0.2h

0.6.0


 * QT interface overhaul
 * Opportunistic TLS support
 * Mitigation of some deanonymisation attacks
 * C (using OpenSSL) and OpenCL PoW modules
 * Performance improvements (backend as well as QT GUI)
 * UPnP support
 * Improved bootstrapping over Tor
 * Translation updates
 * Lots of tiny bugfixes and some minor security improvements
 * Integration of mailchuck.com email gateway

0.4.4


 * Added ability to limit network transfer rate
 * Updated to Protocol Version 3
 * Removed use of memoryview so that we can support python 2.7.3
 * Make use of l10n for localizations

0.4.3


 * Support pyelliptic's updated HMAC algorithm. We'll remove support for the old method after an upgrade period.
 * Improved version check
 * Refactored decodeBase58 function
 * Ignore duplicate messages
 * Added bytes received/sent counts and rate on the network information tab
 * Fix unicode handling in 'View HTML code as formatted text'
 * Refactor handling of packet headers
 * Use pointMult function instead of arithmetic.privtopub since it is faster
 * Fixed issue where client wasn't waiting for a verack before continuing on with the conversation
 * Fixed CPU hogging by implementing tab-based refresh improvements
 * Added curses interface
 * Added support for IPv6
 * Added a 'trustedpeer' option to keys.dat
 * Limit maximum object size to 20 MB
 * Support email-like > quote characters and reply-below-quote
 * Added Japanese and Dutch language files; updated Norwegian and Russian languages files

0.4.2


 * Added Norwegian, Chinese, and Arabic translations
 * sock.sendall function isn't atomic. Let sendDataThread be the only thread which sends data.
 * Moved API code to api.py
 * Populate comboBoxSendFrom when replying
 * Added option to show recent broadcasts when subscribing
 * Fixed issue: If Windows username contained an international character, Bitmessage wouldn't start
 * Added some code for FreeBSD compatibility
 * Moved responsibility for processing network objects to the new ObjectProcessorThread
 * Refactored main QT module
 * Moved popup menus initialization to separate methods
 * Simplified inbox loading
 * Moved magic strings to the model scope constants so they won't be created every time.
 * Updated list of defaultKnownNodes
 * Fixed issue: [Linux] When too many messages arrive too quickly, exception occurs: "Exceeded maximum number of notifications"
 * Fixed issue: creating then deleting an Address in short time crashes class_singleWorker.py
 * Refactored code which displays messages to improve code readability
 * load "Sent To" label from subscriptions if available
 * Removed code to add chans to our address book as it is no longer necessary
 * Added identicons
 * Modified addresses.decodeAddress so that API command decodeAddress works properly
 * Added API commands createChan, joinChan, leaveChan, deleteAddress
 * In pyelliptic, check the return value of RAND_bytes to make sure enough random data was generated
 * Don't store messages in UI table (and thus in memory), pull from SQL inventory as needed
 * Fix typos in API commands addSubscription and getInboxMessagesByAddress
 * Add feature in settings menu to give up resending a message after a specified period of time

0.4.1


 * Fixed whitelist bug
 * Fixed chan bug
 * Added addressversion field to pubkeys table
 * Sending messages to a chan no longer uses anything in the pubkeys table
 * Sending messages to yourself is now fully supported
 * Change _verifyAddress function to support v4 addresses

0.4.0


 * Raised default demanded difficulty from 1 to 2 for new addresses
 * Added v4 addresses: pubkeys are now encrypted and tagged in the inventory
 * Use locks when accessing dictionary inventory
 * Refactored the way inv and addr messages are shared
 * Give user feedback when disk is full
 * Added chan true/false to listAddresses results
 * When replying using chan address, send to whole chan not just sender
 * Refactored of the way PyBitmessage looks for interesting new objects in large inv messages from peers
 * Show inventory lookup rate on Network Status tab
 * Added SqlBulkExecute class so we can update inventory with only one commit
 * Updated Russian translations
 * Move duplicated SQL code into helper
 * Allow specification of alternate settings dir via BITMESSAGE_HOME environment variable
 * Removed use of gevent. Removed class_bgWorker.py
 * Added Sip and PyQt to includes in build_osx.py
 * Show number of each message type processed in the API command clientStatus
 * Use fast PoW unless we're explicitly a frozen (binary) version of the code
 * Enable user-set localization in settings
 * Fix Archlinux package creation
 * Fallback to language only localization when region doesn't match
 * Fixed brew install instructions
 * Added German translation
 * Made inbox and sent messages table panels read-only
 * Allow inbox and sent preview panels to resize
 * Count RE: as a reply header, just like Re: so we don't chain Re: RE:
 * Fix for traceback on OSX
 * Added backend ability to understand shorter addresses
 * Convert 'API Error' to raise APIError
 * Added option in settings to allow sending to a mobile device (app not yet done)
 * Added ability to start daemon mode when using Bitmessage as a module
 * Improved the way client detects locale
 * Added API commands: getInboxMessageIds, getSentMessageIds, listAddressBookEntries, trashSentMessageByAckData, addAddressBookEntry, deleteAddressBookEntry, listAddresses2, listSubscriptions
 * Set a maximum frequency for playing sounds
 * Show Invalid Method error in same format as other API errors
 * Update status of separate broadcasts separately even if the sent data is identical
 * Added Namecoin integration
 * Internally distinguish peers by IP and port
 * Inbox message retrieval API functions now also returns read status

0.3.5


 * Added right-click option to mark a message as unread
 * Prompt user to connect at first startup
 * Install into /usr/local by default
 * Add a missing `rm -f` to the uninstall task.
 * Use system text color for enabled addresses instead of black
 * Added support for Chans
 * Start storing msgid in sent table
 * Optionally play sounds on connection/disconnection or when messages arrive
 * Adding configuration option to listen for connections when using SOCKS
 * Added packaging for multiple distros (Arch, Puppy, Slack, etc.)
 * Added Russian translation
 * Added search support in the UI
 * Added 'make uninstall'
 * To improve OSX support, use PKCS5_PBKDF2_HMAC_SHA1 if PKCS5_PBKDF2_HMAC is unavailable
 * Added better warnings for OSX users who are using old versions of Python
 * Repaired debian packaging
 * Altered Makefile to avoid needing to chase changes
 * Added logger module
 * Added bgWorker class for background tasks
 * Added use of gevent module
 * On not-Windows: Fix insecure keyfile permissions
 * Fix 100% CPU usage issue

0.3.4


 * Linux: Store config files in $XDG_CONFIG_HOME
 * Added a new global variable user option: doTimingAttackMitigation
 * Moved a variety of classes and functions out of bitmessagemain.py and to their own modules
 * New API command: getSentMessageByAckData
 * Modified the getAllSentMessages and getSentMessageById commands to return ackData
 * API commands to get messages now return actual encoding type
 * Bugfix: Unicode chars in localtime prevented the gui from starting
 * Added 'Save message as...' option in Inbox
 * Added OS X Build scripts
 * Added option to subscribe to an address in your address book
 * Added getInboxMessageById API command
 * Updated icons to have sRGB profile to prevent warnings
 * Added French translation
 * Switched addr, msg, broadcast, and getpubkey message types to 8 byte time. Last remaining type is pubkey.
 * Added tooltips to show the full subject of messages
 * Added Maximum Acceptable Difficulty fields in the settings
 * Send out pubkey immediately after generating deterministic addresses rather than waiting for a request

0.3.3
 * Remove inbox item from GUI when using API command trashMessage
 * Add missing trailing semicolons to pybitmessage.desktop
 * Ensure $(DESTDIR)/usr/bin exists
 * Update Makefile to correct sandbox violations when built via Portage (Gentoo)
 * Fix message authentication bug

0.3.211


 * Removed multi-core proof of work as the multiprocessing module does not work well with pyinstaller's --onefile option.

0.3.2


 * Bugfix: Remove remaining references to the old myapp.trayIcon
 * Refactored message status-related code. API function getStatus now returns one of these strings: notfound, msgqueued, broadcastqueued, broadcastsent, doingpubkeypow, awaitingpubkey, doingmsgpow, msgsent, or ackreceived
 * Moved proof of work to low-priority multi-threaded child processes
 * Added menu option to delete all trashed messages
 * Added inv flooding attack mitigation
 * On Linux, when selecting Show Bitmessage, do not maximize automatically
 * Store tray icons in bitmessage_icons_rc.py

0.3.1


 * Added new API commands: getDeterministicAddress, addSubscription, deleteSubscription
 * TCP Connection timeout for non-fully-established connections now 20 seconds
 * Don't update the time we last communicated with a node unless the connection is fully established. This will allow us to forget about active but non-Bitmessage nodes which have made it into our knownNodes file.
 * Prevent incoming connection flooding from crashing singleListener thread. Client will now only accept one connection per remote node IP
 * Bugfix: Worker thread crashed when doing a POW to send out a v2 pubkey (bug introduced in 0.3.0)
 * Wrap all sock.shutdown functions in error handlers
 * Put all 'commit' commands within SQLLocks
 * Bugfix: If address book label is blank, Bitmessage wouldn't show message (bug introduced in 0.3.0)
 * Messaging menu item selects the oldest unread message
 * Standardize on 'Quit' rather than 'Exit'
 * [OSX] Try to seek homebrew installation of OpenSSL
 * Prevent multiple instances of the application from running
 * Show 'Connected' or 'Connection Lost' indicators
 * Use only 9 half-open connections on Windows but 32 for everyone else
 * Added appIndicator (a more functional tray icon) and Ubuntu Messaging Menu integration
 * Changed Debian install directory and run script name based on Github issue #135

0.3.0


 * Added new API function: getStatus
 * Added error-handling around all sock.sendall functions in the receiveData thread so that if there is a problem sending data, the threads will close gracefully
 * Abandoned and removed the connectionsCount data structure; use the connectedHostsList instead because it has proved to be more accurate than trying to maintain the connectionsCount
 * Added daemon mode. All UI code moved into a module and many shared objects moved into shared.py
 * Truncate display of very long messages to avoid freezing the UI
 * Added encrypted broadcasts for v3 addresses or v2 addresses after 2013-05-28 10:00 UTC
 * No longer self.sock.close from within receiveDataThreads, let the sendDataThreads do it
 * Swapped out the v2 announcements subscription address for a v3 announcements subscription address
 * Vacuum the messages.dat file once a month: will greatly reduce the file size
 * Added a settings table in message.dat
 * Implemented v3 addresses: pubkey messages must now include two var_ints: nonce_trials_per_byte and extra_bytes, and also be signed. When sending a message to a v3 address, the sender must use these values in calculating its POW or else the message will not be accepted by the receiver.
 * Display a privacy warning when selecting 'Send Broadcast from this address'
 * Added gitignore file
 * Added code in preparation for a switch from 32-bit time to 64-bit time. Nodes will now advertise themselves as using protocol version 2.
 * Don't necessarily delete entries from the inventory after 2.5 days; leave pubkeys there for 28 days so that we don't process the same ones many times throughout a month. This was causing the 'pubkeys processed' indicator on the 'Network Status' tab to not accurately reflect the number of truly new addresses on the network.
 * Use 32 threads for outgoing connections in order to connect quickly
 * Fix typo when calling os.environ in the sys.platform=='darwin' case
 * Allow the cancelling of a message which is in the process of being sent by trashing it then restarting Bitmessage
 * Bug fix: can't delete address from address book

0.2.8


 * Fixed Ubuntu & OS X issue: Bitmessage wouldn't receive any objects from peers after restart.
 * Inventory flush to disk when exiting program now vastly faster.
 * Fixed address generation bug (kept Bitmessage from restarting).
 * Improve deserialization of messages before processing.
 * Change to help Macs find OpenSSL the way Unix systems find it.
 * Do not share or accept IPs which are in the private IP ranges.
 * Added time-fuzzing to the embedded time in pubkey and getpubkey messages.
 * Added a knownNodes lock to prevent an exception from sometimes occurring when saving the data-structure to disk.
 * Show unread messages in bold and do not display new messages automatically; let user click it.
 * Support selecting multiple items in the inbox, sent box, and address book.
 * Use delete key to trash Inbox or Sent messages.
 * Display richtext(HTML) messages from senders in address book or subscriptions (although not pseudo-mailing-lists; use new right-click option).
 * Support enabling and disabling subscriptions.
 * Trim spaces from the beginning and end of addresses when adding to address book, subscriptions, and blacklist.
 * Improved the display of the time for foreign language users.

0.2.7
 * Added API. See API Reference.
 * Added error handling for the case where the client tries to send a message from an address for which the human has deleted the keys.
 * Improved GUI messages when doing work (or pending work) for broadcast messages.
 * Added error handling for the case where the proof of work takes no measurable time (caused a divide by zero error).

0.2.6
 * New Feature: Pseudo-mailing-lists (available by right-clicking one of your addresses)
 * New Feature: Portable Mode (available in the settings)
 * Added missing context menu on the blacklist tab

0.2.5
 * Bugfix-only release: Program improperly handles other nodes claiming to be in stream 0 (issue appeared when implementing IPv6). UI Freezes.

0.2.4
 * Prevent user from sending messages to themselves since the client cannot process its own getpubkey or msg messages
 * Do the pubkey POW and broadcast it directly after generating a new address

0.2.3
 * Defined rules for nodes to follow for storing and relaying pubkeys. Nodes now store keys for 4 weeks then delete them. They also will not accept pubkeys older than 4 weeks; the owner will have to retransmit them if they are needed.
 * Added 'fuzzing' to the time embedded in msg and broadcast messages.
 * Added timing attack mitigation to the function that processes incoming pubkeys
 * Added a new file: messages.dat reader.py which can be independently used to print information stored in the messages.dat file to the console.
 * Users who run the software for the first time will now be subscribed by default to a Bitmessage address used to send announcements.

0.2.2
 * Don't use DNS-based bootstrapping method if user is connecting via SOCKS; just skip it. Hopefully the nodes listed in defaultKnownNodes are still up.
 * Implemented timing attack mitigation measure

0.2.1
 * Added ability to send Sent items to the trash
 * Keep track of which objects each peer is already aware and don't advertise objects that they already know about

0.2.0
 * Major upgrade to ECC:
 * Elliptic curve secp256k1 is used for Bitmessage's signing and asymetric encryption. Keys are interchangable between Bitmessage and Bitcoin.
 * Keys stored in Wallet Import Format in the keys.dat file
 * Deterministic addresses
 * Addresses are now shorter: Bitmessage now supports 18 and 19 byte RIPE addresses where the missing 1 or 2 bytes are assumed to be zeros.
 * Moved pubkey POW responsibility from the receiveData thread to the singleWorker thread

0.1.6
 * Added DNS-based bootstrap method so that updating defaultKnownNodes doesn't require a code push.

0.1.5 0.1.4
 * Client now checks whether a getpubkey message has the correct time before storing in inventory and also uses embeddedTime rather than system time (the way it is done for all other messages). This was a bug that didn't cause any ill-effect.
 * Fix so that today's Bitmessage client will properly handle future versions of Bitmessage addresses
 * Updated defaultKnownNodes
 * Added support for SOCKS4a and SOCKS5 proxies
 * Adjusted UI so that it looks appropriate on OS X
 * Changed UI to accept Bitmessage addresses which lack a "BM-". This makes copying and pasting easier.
 * Fixed OS X issue: if user minimized client to tray then restored, segmentation fault occured
 * Added locks to prevent ill-effect if the client receives the same object from two different nodes at the exact same time
 * Commented out code that prevents the client from accepting a second connection from the same IP since this prevents users from running two clients within the same local network. When the Bitmessage network grows, this code will be re-enabled.

0.1.3
 * Updated defaultKnownNodes so people who download Bitmessage on a fresh machine can bootstrap
 * Sort received-message-time by actual time rather than by time-interpreted-alphabetically

0.1.2
 * Fixed line break display issue
 * Updated defaultKnownNodes so people who download Bitmessage on a fresh machine can bootstrap
 * Bug fix: If subject in received message contained international characters, reply button wouldn't work completely

0.1.1
 * Fixed bug that prevented user from deleting a recently received message
 * On the "Send" tab, select your address automatically if you have only one
 * Rewrote the SQLite version check more liberally accept SQLite revision numbers
 * Fixed "reply" functionality
 * Removed PyObjc dependency for OSX

0.1.0
 * Initial release