As they have a pointer to each other we have to be a bit smart about how
removing works and how deletion works. Because otherwise we'll end up
with calling a deleted object.
For a payment-request we now remember if its been stored-to-disk so when
it gets removed again before we ever store it, we skip forcing an
unneeded save.
This stops re-loading of the wallet-data on decrypt but instead keeps
the encrypted data in memory next to the (possibly) decrypted data.
This then means we can save a wallet that has its secrets still
encrypted (no password supplied) which is needed in order to propery
support the concept of xpub.
So, now a HD wallet that is closed can correctly sync and create new
public keys (which are needed to sync), including the step of saving
those to disk.
The first time the user provides a password we'll then create the
matching private keys (and their encrypted counterparts) which will then
be saved, and naturally can be used to sign transactions.
For the 'fullyEncrypted' option we now simply fully
encrypt the entire blob of both the secrets file as well
as the wallet.dat (which transactions we own).
We encrypt using a standard AES256 encryption scheme.
The key is 256 bits and we derive that from a user provided password
which we double-hash (sha256). Additionally we use a randomly generated
salt for a specific wallet that is fed into the hashing algo as well.
This version simply encrypts the private keys of a wallet, which makes
it quite basic. A good start.
- extend clearing of 'new' icon timeout.
- make unconfirmed transactions also 'new'
- put a timer on the datetime item of the transaction to allow
timestamps like "now" and "an hour ago" to be updated as time passes.
We introduced for secret keys the signature-type field, which is required
to avoid signing with one key as both Schnorr and ecdsa as
that can cause leakage making recovering the private key much easier.
So, we now store this data but old wallets didn't fetch that from
the incoming transactions. So this conversion fetches the data from the
transactions (which are on the device) and stores the sigtype with the
keys.
The bloom filter didn't include all created keys and thus we didn't send
the bloom in some cases.
Now we keep track of exactly which keys were sent and we re-send a bloom
filter if half of those have been used in order to not miss out on any
transactions.
As transactions are found on the blockchain we remember the signature
type used in order to avoid one private key to be used for both types of
signatures, which can cause compromised keys.
This adds the feature that we show a "last receive" field on a wallet,
and we also change the date format to have "yesterday" style dates
for recent ones.
This changes the default generated wallet to be a HD wallet.
We also add a helper class to configure newly created wallets from QML.
This finishes up the new wallet panel to have all the visible features
actually do something.