Commit Graph

321 Commits

Author SHA1 Message Date
Ryan X. Charles
5a86a1a5c6 StealthMessage
This code should be regarded as being a proof-of-concept, and needs more review
before being used in production code. At least one thing is guaranteed to
change, and that is the format of a stealth address.
2014-09-10 14:00:53 -07:00
Ryan X. Charles
74549a53ec key -> keypair
Since the class has been renamed Key -> Keypair, instances should be renamed
key -> keypair.
2014-09-02 16:36:21 -07:00
Ryan X. Charles
219aa528c8 AsReceiver implied 2014-09-02 15:54:24 -07:00
Ryan X. Charles
558a7672ef Stealthkey AsSender functions obsolete
use StealthAddress instead
2014-09-02 15:28:32 -07:00
Ryan X. Charles
d1a570135d getSharedKeypair & getReceivePubkey 2014-09-02 15:25:16 -07:00
Ryan X. Charles
48ae69cab0 convenience: StealthAddress(str) or StealthAddress(buf) 2014-09-02 14:23:11 -07:00
Ryan X. Charles
36fd6b2d9c take address stuff out of stealthkey
...that is what StealthAddress is now for
2014-09-02 12:53:41 -07:00
Ryan X. Charles
139fe02355 StealthAddress 2014-09-02 12:48:36 -07:00
Ryan X. Charles
258dab9d6d convenience: Stealth(payloadKeypair, scanKeypair) 2014-09-02 12:08:33 -07:00
Ryan X. Charles
073ee0a0e4 fix: Pubkey(point) and Privkey(bn) 2014-09-02 12:07:18 -07:00
Ryan X. Charles
caf6c87419 Signature(r, s) should work 2014-09-02 11:59:42 -07:00
Ryan X. Charles
a768755764 convenience: new Pubkey(point) 2014-09-01 21:16:10 -07:00
Ryan X. Charles
6f56c8d1fc convenience: new Privkey(bn) 2014-09-01 21:13:44 -07:00
Ryan X. Charles
ef3a89f254 add Signature(r, s) convenience 2014-09-01 21:08:16 -07:00
Ryan X. Charles
8a3d71b596 throw error for invalid strings 2014-09-01 20:03:22 -07:00
Ryan X. Charles
eaaf8aade3 throw error if there is no string representation 2014-09-01 20:00:54 -07:00
Ryan X. Charles
3b2b725070 Script().fromString(str)
...the format of fromString and toString are deliberately not compatible with
bitcoind. The format here is supposed to be both human-readable, and
byte-for-byte isomorphic to the binary representation. In the future we will
need to add support for bitcoind-like strings, both for the test data (e.g.,
script_invalid.json) or for the bitcoind console style.
2014-09-01 19:42:20 -07:00
Ryan X. Charles
6375941ef8 script.toString() 2014-09-01 18:31:02 -07:00
Ryan X. Charles
e6af57f4fa script.toBuffer(); 2014-09-01 18:01:17 -07:00
Ryan X. Charles
378dc923ef preserve claimed length and op code
When parsing OP_PUSHDATAX commands, the the length of data might not require
the size integer of OP_PUSHDATAX. For instance, you might write 1 byte, and yet
use OP_PUSHDATA4. We need to record which OP_PUSHDATAX was used so that when we
write the buffer back out, we can write the same one. Also, the claimed length
may be different. For instance, we may OP_PUSHDATA of length 100 to the stack,
but there may only be 50 bytes left in the script. In that case, buf.length and
chunk.len will be different. I'm not sure if that would be considered a valid
script, but in any case, for script analysis, we need both values.
2014-09-01 17:27:39 -07:00
Ryan X. Charles
697b3e5009 Script().fromBuffer(buf)
...code heavily inspired/copied from bitcore
2014-09-01 16:41:07 -07:00
Ryan X. Charles
8b3ad7ac85 read a buffer, like slicing while iterating pos 2014-09-01 16:40:31 -07:00
Ryan X. Charles
572582938f more convenient bufferreader 2014-09-01 15:53:26 -07:00
Ryan X. Charles
15801773e3 the beginnings of script 2014-09-01 15:45:03 -07:00
Ryan X. Charles
6a26813955 p2sh -> scripthash
more appealing and memorable name
2014-09-01 12:06:18 -07:00
Ryan X. Charles
a0150f82ef fromNumber, toNumber, fromString, toString
...like the rest of the library.
2014-08-31 20:38:39 -07:00
Ryan X. Charles
03578e2ba5 Opcode
...code from bitcore
2014-08-29 19:24:51 -07:00
Ryan X. Charles
c59013eb46 remove useless Address dependency from Keypair
to get an address from a key, just do Address().fromPubkey(key.pubkey)
2014-08-29 15:42:30 -07:00
Ryan X. Charles
f028b6b913 Stealth -> Stealthkey
More explanatory. Will break up into separate Stealthkey, StealthAddress, and
StealthMessage classes.
2014-08-29 14:34:01 -07:00
Ryan X. Charles
32fabd0c0f Key -> Keypair
"Keypair" is a more explanatory name, and also should be less confused with
other kinds of keys (particularly "cipher keys", which are the keys used in
symmetric block ciphers, especially AES).
2014-08-29 14:18:56 -07:00
Ryan X. Charles
40a2007e18 confusingly named SymEnc -> accurately named AESCBC
This will also further discourage use amongst anyone who doesn't understand
what this is.
2014-08-29 13:07:49 -07:00
Ryan X. Charles
faa7a81cac Key().fromPrivkey() 2014-08-29 12:43:55 -07:00
Ryan X. Charles
40e8dfec06 compressed by default with fromRandom 2014-08-29 12:38:43 -07:00
Ryan X. Charles
80625fdbef move static isValid next to instance isValid
...to be easier for developers to parse and distinguish
2014-08-28 20:27:45 -07:00
Ryan X. Charles
5313085773 Pubkey().fromPrivkey() 2014-08-28 20:19:30 -07:00
Ryan X. Charles
c39acbcca3 Privkey().fromRandom() 2014-08-28 19:27:22 -07:00
Ryan X. Charles
2ef5e2f003 network -> networkstr 2014-08-28 17:55:33 -07:00
Ryan X. Charles
280578d641 network -> networkstr
...for compatibility with address, and to make the types obvious
2014-08-28 17:53:11 -07:00
Ryan X. Charles
e2824035bb Pubkey.prototype.set 2014-08-28 17:41:38 -07:00
Ryan X. Charles
356ddcfa4e test invalid address 2014-08-28 17:32:08 -07:00
Ryan X. Charles
ac47796acd .isValid() is more convenient than .validate() 2014-08-28 17:30:32 -07:00
Ryan X. Charles
109f31cfdb Privkey.prototype.set 2014-08-28 17:26:56 -07:00
Ryan X. Charles
6b4bc4c49c Stealth.prototype.set 2014-08-28 17:00:34 -07:00
Ryan X. Charles
0ca390d45b Message.prototype.set 2014-08-28 16:42:47 -07:00
Ryan X. Charles
a5f79c7651 Signature.prototype.set 2014-08-28 16:38:21 -07:00
Ryan X. Charles
28d3a40704 Key.prototype.set 2014-08-28 16:18:36 -07:00
Ryan X. Charles
75c1503a92 ECDSA.prototype.set 2014-08-28 16:07:28 -07:00
Ryan X. Charles
0d9b54711e BufferWriter.prototype.set 2014-08-28 16:02:24 -07:00
Ryan X. Charles
3475ee973c BufferReader.prototype.set 2014-08-28 15:52:32 -07:00
Ryan X. Charles
3919b24685 make bip32 mostly compatible with the rest of the lib
the constructor shouldn't do much. just set some varibles. in this case, i have
yet to write the code that sets the varibles. but better this than
autogenerating a new random BIP32. for that, call fromRandom()
2014-08-28 15:38:29 -07:00
Ryan X. Charles
d50d766352 Base58Check.prototype.set 2014-08-28 15:31:06 -07:00
Ryan X. Charles
da8989b649 add set function to Base58 2014-08-28 15:27:58 -07:00
Ryan X. Charles
6b7592d67b add address validation convenience function 2014-08-28 15:22:03 -07:00
Ryan X. Charles
f52e679f93 refactor address - use "set" function
...intend for this to become standard throughout the lib
2014-08-28 15:18:48 -07:00
Ryan X. Charles
cc316e9455 ECIES 2014-08-28 14:43:21 -07:00
Ryan X. Charles
6f54d4cde6 Encryption -> SymEnc
This is more explanatory ("symmetric encryption") and also does not encourage
its use for people who don't know what they're doing. (It should only be used
in combination with some type of message authentication.)
2014-08-28 11:10:40 -07:00
Ryan X. Charles
1cb2f900af symmetric encryption convenience class 2014-08-27 17:15:10 -07:00
Ryan X. Charles
73b904ce21 CBC decrypt 2014-08-25 21:16:33 -07:00
Ryan X. Charles
dfa190b5a5 blockbufs2buf 2014-08-25 21:02:00 -07:00
Ryan X. Charles
ae319ffcbc unpad 2014-08-25 20:53:29 -07:00
Ryan X. Charles
a6e74666c8 decrypt blocks 2014-08-25 20:38:39 -07:00
Ryan X. Charles
eddeb60d7d decrypt block 2014-08-25 20:25:18 -07:00
Ryan X. Charles
97e40f9ac6 rename keybuf -> cipherkeybuf
...since this use of "key" is very different than the public/private key pair
that is key.js
2014-08-25 16:38:53 -07:00
Ryan X. Charles
a09cac4ba6 block cipher should support "encrypt" and "decrypt" 2014-08-25 16:30:04 -07:00
Ryan X. Charles
12f29a9b52 CBC encryption 2014-08-25 16:25:01 -07:00
Ryan X. Charles
38d9ab65af xor buffers ... will be useful for CBC 2014-08-24 20:51:56 -07:00
Ryan X. Charles
1b1ecd989a pkcs7
This is a standard algorithm for the purposes of padding a block for a block
cipher. It will be used in CBC, which in turned will be used with AES for
ECIES.
2014-08-24 19:38:20 -07:00
Ryan X. Charles
1dead4cbc4 AES 2014-08-24 17:33:09 -07:00
Ryan X. Charles
f3dcb5bba1 typo in error message 2014-08-24 14:31:30 -07:00
Ryan X. Charles
b81e4c75fb put static methods at the top 2014-08-24 14:27:47 -07:00
Ryan X. Charles
ea0ee1b687 add info on public key recovery 2014-08-24 14:26:17 -07:00
Ryan X. Charles
e6a88118ae fix error message 2014-08-24 12:50:21 -07:00
Ryan X. Charles
bc94a5cb59 sign/verify with uncompressed pubkeys 2014-08-22 19:43:32 -07:00
Ryan X. Charles
7c945cdc01 add "compressed" feature to pubkeys
...not just privkeys. since, of course, they can be compressed or uncompressed.
2014-08-22 17:43:22 -07:00
Ryan X. Charles
8e6a28162b it is a "Compact" signature, not "Compressed" 2014-08-22 16:34:45 -07:00
Ryan X. Charles
6176ad4a98 verify signed messages
...and fix bug where i (recover param) was stored incorrectly
2014-08-22 16:15:44 -07:00
Ryan X. Charles
3b3ebb0458 sign convenience function 2014-08-21 16:21:21 -07:00
Ryan X. Charles
15f9a99e65 message signing 2014-08-21 15:50:38 -07:00
Ryan X. Charles
e6d89a76d7 use standard language - hash -> hashbuf 2014-08-21 14:00:18 -07:00
Ryan X. Charles
2131dbdfee remove unnecessary tab 2014-08-21 11:52:43 -07:00
Ryan X. Charles
ddc9e2d2a4 handle varInts better 2014-08-21 11:47:09 -07:00
Ryan X. Charles
4cff6a41f4 remove "(classname): " from tests
...to reduce the burden on writing new code
2014-08-20 13:03:07 -07:00
Ryan X. Charles
912bed1d9c support BN in bufferwriter
So that the precision of writing a variable sized integer is sufficient.
2014-08-20 12:52:37 -07:00
Ryan X. Charles
cde44d689c fix precision error by handling BNs correctly 2014-08-20 12:35:55 -07:00
Ryan X. Charles
3e82c57e19 "hashbuf" indicates type is a buffer 2014-08-20 10:46:01 -07:00
Ryan X. Charles
ca7fdd77c1 recover public key from signature 2014-08-19 17:15:54 -07:00
Ryan X. Charles
65c3545cb6 include i in sig obj + cosmetic improvements 2014-08-19 16:27:28 -07:00
Ryan X. Charles
39236fab14 formatting 2014-08-19 12:02:34 -07:00
Ryan X. Charles
9d600f4784 BufferWriter 2014-08-18 18:20:54 -07:00
Ryan X. Charles
5e3ad3d09d BufferReader 2014-08-18 18:04:47 -07:00
Ryan X. Charles
f11ed4d20b bug: should mod bn addition
when adding two private keys to get a new private key, you should mod the
result with N so that it is always less than N.
2014-08-15 15:09:28 -04:00
Ryan X. Charles
d73ff6fa6a give Base58 the normal bitcore2 interface 2014-08-14 12:13:09 -04:00
Ryan X. Charles
de08f78d74 give Base58Check the same fromString toString
...interface like the rest of the classes
2014-08-14 11:56:17 -04:00
Ryan X. Charles
bc1c4235f2 basic stealth address support
Math only. Does not yet support transactions. Not yet compatible with Dark
Wallet.
2014-08-13 20:54:05 -04:00
Ryan X. Charles
f8fc3812f0 add BN.prototype.fromBuffer 2014-08-13 19:23:45 -04:00
Ryan X. Charles
f6f7a870fb allow creating objects without using "new" 2014-08-13 18:55:33 -04:00
Ryan X. Charles
a2512226f8 address convenience functions 2014-08-13 18:00:41 -04:00
Ryan X. Charles
8743c68ce6 kdf 2014-08-13 17:31:28 -04:00
Ryan X. Charles
a2e471ae9e more consistency: n -> bn, p -> point 2014-08-13 15:23:06 -04:00
Ryan X. Charles
cc310fbc23 add bip32: to error messages
...to be consistent with the rest of the library
2014-08-09 23:54:08 -07:00
Ryan X. Charles
efbebb3528 throw error if deriving an invalid path string
...the path consists "m", numbers, /, and ' characters
2014-08-09 23:52:19 -07:00
Ryan X. Charles
7def2609ec add toString method for bip32
...so that it is consistent with the rest of the library
2014-08-09 23:29:05 -07:00
Ryan X. Charles
be37f5e37f improve bip32 interface slightly 2014-08-09 23:16:15 -07:00
Ryan X. Charles
9649cc58e9 bip32
code from bitcore. original implementation derived from here:
https://github.com/sarchar/brainwallet.github.com/blob/bip32/js/bip32.js
2014-08-09 22:19:28 -07:00
Ryan X. Charles
5606e083e2 sha512hmac and sha256hmac 2014-08-09 21:51:26 -07:00
Ryan X. Charles
3871e43dd8 make address more consistent with rest of lib 2014-08-09 20:26:03 -07:00
Ryan X. Charles
cd6c2b2410 refactor privkey 2014-08-09 19:58:48 -07:00
Ryan X. Charles
304210c132 add tests for all ecdsa functions 2014-08-09 19:42:25 -07:00
Ryan X. Charles
2ed5290a4e make "new Point()" work 2014-08-09 19:03:59 -07:00
Ryan X. Charles
c4064cc6e1 ecdsa 2014-08-09 17:43:24 -07:00
Ryan X. Charles
1a01674532 signature 2014-08-09 14:42:23 -07:00
Ryan X. Charles
333c075ae7 key 2014-08-07 21:31:36 -07:00
Ryan X. Charles
5a79879e63 use process.browser only, which is sufficient 2014-08-07 20:39:20 -07:00
Ryan X. Charles
e43c7e3c3a random
...code from bitcore
2014-08-07 16:51:24 -07:00
Ryan X. Charles
448f532738 pubkey 2014-08-07 16:18:17 -07:00
Ryan X. Charles
3df3d41434 privkey 2014-08-06 22:47:10 -07:00
Ryan X. Charles
9f7e01b8ca rename redundant point.pointFromX to point.fromX 2014-08-06 21:39:25 -07:00
Ryan X. Charles
657f992e7b point 2014-08-06 21:02:42 -07:00
Ryan X. Charles
ca4131ab05 remove ripemd160 dep., replace with hash.js 2014-08-06 19:06:32 -07:00
Ryan X. Charles
e0deb0407c add big number support
Extend bn.js with some convenience methods. Extension code taken from bitcore.
2014-08-06 18:36:30 -07:00
Ryan X. Charles
862235e57e initial commit
address, base58, base58check, hash all working with tests.

base58check code taken from bitcore.
2014-08-06 18:25:45 -07:00