moneromooo-monero
7d413f635f
rct: rework serialization to avoid storing vector sizes
2016-09-14 20:23:06 +01:00
moneromooo-monero
f24ab58d18
ringct: remove unused code
2016-08-28 21:30:53 +01:00
moneromooo-monero
b38452bd55
ringct: pass structure by const ref, not value
2016-08-28 21:30:51 +01:00
moneromooo-monero
fd11271eea
ringct: use memcpy/memset instead of handwritten loop where appropriate
2016-08-28 21:30:49 +01:00
moneromooo-monero
5d38206fcc
ringct: remove spurious copies
2016-08-28 21:30:47 +01:00
moneromooo-monero
16732a85d7
rct: faster Cryptonote/rct conversions
2016-08-28 21:30:45 +01:00
moneromooo-monero
94fd881f74
rct: early out on failure on verRange
2016-08-28 21:30:38 +01:00
moneromooo-monero
074e602609
ringct: use Cryptonote serialization to hash non prunable data
2016-08-28 21:30:28 +01:00
moneromooo-monero
c3b3260ae5
New "Halfway RingCT" outputs for coinbase transactions
...
When RingCT is enabled, outputs from coinbase transactions
are created as a single output, and stored as RingCT output,
with a fake mask. Their amount is not hidden on the blockchain
itself, but they are then able to be used as fake inputs in
a RingCT ring. Since the output amounts are hidden, their
"dustiness" is not an obstacle anymore to mixing, and this
makes the coinbase transactions a lot smaller, as well as
helping the TXO set to grow more slowly.
Also add a new "Null" type of rct signature, which decreases
the size required when no signatures are to be stored, as
in a coinbase tx.
2016-08-28 21:30:26 +01:00
moneromooo-monero
6f526cdff8
rct: log why verification fails
...
and remove some unnecessary variables in the checking code
2016-08-28 21:30:23 +01:00
moneromooo-monero
d4b8991e44
rct: serialize txnFee as varint
2016-08-28 21:30:21 +01:00
moneromooo-monero
d4b62a1e29
rct amount key modified as per luigi1111's recommendations
...
This allows the key to be not the same for two outputs sent to
the same address (eg, if you pay yourself, and also get change
back). Also remove the key amounts lists and return parameters
since we don't actually generate random ones, so we don't need
to save them as we can recalculate them when needed if we have
the correct keys.
2016-08-28 21:30:19 +01:00
moneromooo-monero
93f5c625f0
rct: rework v2 txes into prunable and non prunable data
...
Nothing is pruned, but this allows easier changes later.
2016-08-28 21:30:18 +01:00
moneromooo-monero
d93746b6d3
rct: rework the verification preparation process
...
The whole rct data apart from the MLSAGs is now included in
the signed message, to avoid malleability issues.
Instead of passing the data that's not serialized as extra
parameters to the verification API, the transaction is modified
to fill all that information. This means the transaction can
not be const anymore, but it cleaner in other ways.
2016-08-28 21:30:16 +01:00
moneromooo-monero
3ab2ab3e76
rct: change the simple flag to a type
...
for future expansion
2016-08-28 21:30:14 +01:00
Shen Noether
c5be4b0bea
rct: avoid the need for the last II element
...
This element is used in the generation of the MLSAG, but isn't
needed in verification.
Also misc changes in the cryptonote code to match, by mooo.
2016-08-28 21:30:12 +01:00
moneromooo-monero
b337aea6cc
rct: do not serialize senderPk - it is not used anymore
2016-08-28 21:30:01 +01:00
moneromooo-monero
9b70856ccb
rct: make the amount key derivable by a third party with the tx key
...
Scheme design from luigi1114.
2016-08-28 21:29:46 +01:00
moneromooo-monero
cf33e1a52a
rct: do not serialize public keys in outPk
...
They can be reconstructed from vout
2016-08-28 21:29:43 +01:00
moneromooo-monero
1e21651f24
rct: use the already defined H where possible
...
Found by luigi1111w
2016-08-28 21:29:29 +01:00
moneromooo-monero
e81a2b2cfa
port get_tx_key/check_tx_key to rct
2016-08-28 21:29:24 +01:00
moneromooo-monero
a4d4d6194b
integrate simple rct api
2016-08-28 21:29:20 +01:00
Shen Noether
dbb5f2d6a3
ringct: optimization/cleanup of hash functions
2016-08-28 21:29:16 +01:00
Shen Noether
4fd01f2bee
ringct: "simple" ringct variant
...
Allows the fake outs to be in different positions for each ring.
For rct inputs only.
2016-08-28 21:29:14 +01:00
moneromooo-monero
35dce5c70c
ringct: fix size unit mismatch calling keccak
2016-08-28 21:28:57 +01:00
moneromooo-monero
20e50ec7f7
ringct: do not serialize what can be reconstructed
...
The mixRing (output keys and commitments) and II fields (key images)
can be reconstructed from vin data.
This saves some modest amount of space in the tx.
2016-08-28 21:28:55 +01:00
moneromooo-monero
73d59f17e1
ringct: catch errors from ge_frombytes_vartime
2016-08-28 21:28:45 +01:00
moneromooo-monero
359f46901e
ringct: add missing size check for ecdhInfo
2016-08-28 21:28:41 +01:00
moneromooo-monero
229968eafc
ringct: change asserts to return false for boolean functions
2016-08-28 21:28:39 +01:00
moneromooo-monero
dc4aad7eb5
add rct to the protocol
...
It is not yet constrained to a fork, so don't use on the real network
or you'll be orphaned or rejected.
2016-08-28 21:28:37 +01:00
moneromooo-monero
dee42d6dac
ringct: add functions to commit to an amount
...
One to commit to an amount with zero key (for use with fake
commitments for pre-rct outputs), and one with an arbitrary
key (for rct outputs).
2016-08-28 21:28:33 +01:00
moneromooo-monero
cc7f449d57
make rct tx serialization work
...
It may be suboptimal, but it's a pain to have to rebuild everything
when some of this changes.
Also, no clue why there seems to be two different code paths for
serializing a tx...
2016-08-28 21:28:31 +01:00
moneromooo-monero
54f7429cf6
ringct: allow no outputs, and add tests for this and fees
2016-08-28 21:28:27 +01:00
moneromooo-monero
e99904ac31
ringct: make fee optional
2016-08-28 21:28:25 +01:00
Shen Noether
f8c04ad94f
ringct: txn fee stuff
2016-08-28 21:28:23 +01:00
moneromooo-monero
66f96260b2
ringct: new {gen,decode}Rct APIs for convenience
...
A new version of genRct takes the mixRing as parameter, instead
of the inPk. inPk are part of the mixRing, and it is cleaner to
pass the mixRing data than to fetch it from the RingCT code.
A new version of decodeRct also returns the mask.
Also, failure to decode throws, so errors are properly detected.
2016-08-28 21:28:21 +01:00
moneromooo-monero
789b2e21f6
ringct: add more convenience functions
2016-08-28 21:28:20 +01:00
moneromooo-monero
c3a2e1450a
ringct: add convenience functions to bridge ringct and cryptonote
2016-08-28 21:28:14 +01:00
moneromooo-monero
82072e701a
ringct: restore verRange check in debug mode
2016-08-28 21:28:08 +01:00
moneromooo-monero
63856cad29
ringct: add check for destinations/amount size being equal
2016-08-28 21:28:07 +01:00
moneromooo-monero
e816a09292
ringct: fix off by 1 in mixin usage
2016-08-28 21:28:04 +01:00
moneromooo-monero
09c5ea43a2
ringct: simplify random key generation
2016-08-28 21:28:03 +01:00
Shen Noether
56f6549962
ringct: cosmetic fixes
...
Ported from Shen's RingCT repo
2016-08-28 21:27:59 +01:00
Shen Noether
55ff136e12
ringct: changes to hashToPointSimple to calcualte H2 values
...
Ported from Shen's RingCT repo
2016-08-28 21:27:57 +01:00
Shen Noether
63733b1785
ringct: compare keys with bitwise equality, not crypto ops
...
Ported from Shen's RingCT repo
2016-08-28 21:27:56 +01:00
Shen Noether
98f4c6f7eb
ringct: fix size argument to cn_fast_hash
...
Ported from Shen's RingCT repo
2016-08-28 21:27:54 +01:00
Shen Noether
09fb9f4b75
Fix sc_0 to skGen in ProveRange
2016-08-28 21:27:48 +01:00
moneromooo-monero
d37c1db032
ringct: add a few consts where appropriate
2016-08-28 21:27:45 +01:00
moneromooo-monero
700248f59e
tests: more ringct range proof tests
2016-08-28 21:27:43 +01:00
moneromooo-monero
d02f9995a8
rct: add serialization machinery to rct types
2016-08-28 21:27:41 +01:00
moneromooo-monero
0ff8305426
serialization: declare do_serialize specializations before use
...
This lets my gcc picks those instead of the generic template
where appropriate (and then fail since std::vector<something>
does not have a serialize method.
2016-08-28 21:27:38 +01:00
Shen Noether
8b135e7aa3
Added note on generating H2
2016-08-28 21:27:36 +01:00
Shen Noether
4d639d90ca
Fixed missing last index H2
2016-08-28 21:27:34 +01:00
moneromooo-monero
86b4426191
ringct: lock access to the PRNG
2016-08-28 21:27:30 +01:00
moneromooo-monero
4d7f073491
ringct: add simple input validation
...
Throw when inputs aren't the expected size.
2016-08-28 21:27:28 +01:00
moneromooo-monero
b656001030
ringct: add convenience operators to key
2016-08-28 21:27:24 +01:00
moneromooo-monero
9b1afe5f2d
ringct: import of Shen Noether's ring confidential transactions
2016-08-28 21:26:54 +01:00