Commit Graph

73 Commits

Author SHA1 Message Date
Manuel Aráoz
7d03056e09 Merge pull request #459 from ryanxcharles/feature/message-signing
add support for signing messages in compressed format
2014-08-06 10:56:07 -03:00
Ryan X. Charles
f87da3b5ba add support for signing messages in compressed format
...this is the standard way to sign messages in bitcoin-qt. Note that the
format of a compressed signature, for messages, is quite distinct from DER
format, which is used in transactions. This commit also adds support for
recovering the public key from a signature, which is necessary for this. The
code for public key recover is taken from bitcoinjs-lib.
2014-07-25 14:07:03 -07:00
Christopher Jeffrey
c533db4f42 minor: remove redundant toUpperCase calls. 2014-07-24 23:07:52 -07:00
Christopher Jeffrey
5b4c4f3894 paypro: get root cert names. 2014-07-24 23:07:52 -07:00
Christopher Jeffrey
2f6938bad0 paypro: fix handling of pki_data - cert arrays. 2014-07-23 14:22:56 -07:00
Christopher Jeffrey
017f044b53 paypro: fix browser signatures with KJUR. move pem/der functions to common. 2014-07-21 19:52:43 -07:00
Christopher Jeffrey
604ac04f47 paypro: split up paypro into node/browser/common. 2014-07-21 18:15:52 -07:00
Christopher Jeffrey
cec71a51fd paypro: add isTrusted function to RootCerts. 2014-07-21 14:56:48 -07:00
Christopher Jeffrey
672e667e9c paypro: remove x509.js 2014-07-21 14:56:48 -07:00
Christopher Jeffrey
85d5e69fc1 paypro: move root certs to common. 2014-07-21 14:56:48 -07:00
Christopher Jeffrey
8725516afb paypro: convert root certs to hash table in build file. 2014-07-21 14:55:10 -07:00
Christopher Jeffrey
cc7657d843 paypro: treat pki_data as an array. 2014-07-21 14:55:10 -07:00
Christopher Jeffrey
47e1ca5f1e minor: remove unused code. 2014-07-21 14:55:10 -07:00
Christopher Jeffrey
4dcdd3c091 paypro: temporarily disable untrusted cert error for tests. typo fix. 2014-07-21 14:55:10 -07:00
Christopher Jeffrey
f7e89b6a58 paypro: handle untrusted certs on browser and node. 2014-07-21 14:55:10 -07:00
Christopher Jeffrey
f79a31ff3c paypro: get single DER certs working. 2014-07-21 14:55:10 -07:00
Christopher Jeffrey
4ec9a247aa paypro: multiple fixes. 2014-07-21 14:55:10 -07:00
Christopher Jeffrey
24ae03247f paypro: stat using jsrsasign to convert DER to PEM and derive public keys for sig verification. 2014-07-21 14:55:10 -07:00
Christopher Jeffrey
37f20f3268 paypro: fix browser paypro. TODO: fix parsing DER certs. 2014-07-21 14:55:10 -07:00
Christopher Jeffrey
4e606c7ed2 paypro: move root certs to non-browser. 2014-07-21 14:55:10 -07:00
Christopher Jeffrey
2e422c001e paypro: fix payment protocol for DER certs. 2014-07-21 14:55:10 -07:00
Christopher Jeffrey
119ef0d611 paypro: begin checking trusted certs. 2014-07-21 14:55:10 -07:00
Christopher Jeffrey
29b067ab73 paypro: add createTrusted to browser build script. 2014-07-21 14:55:10 -07:00
Christopher Jeffrey
d4d1a11252 paypro: generate Trusted.js. 2014-07-21 14:54:38 -07:00
Christopher Jeffrey
0d68e429fc paypro: add trusted x509 certs in Trusted.js for now. 2014-07-21 14:54:38 -07:00
Christopher Jeffrey
722a10f965 paypro: fix encodings with jsrsasign. 2014-07-21 14:54:38 -07:00
Christopher Jeffrey
059b23f899 paypro: clientside. start using jsrsasign api correctly. 2014-07-21 14:54:38 -07:00
Christopher Jeffrey
538c6c32de paypro: figure out clientside jsrasign more. 2014-07-21 14:54:38 -07:00
Christopher Jeffrey
1ad3392184 paypro: add lib/browser/x509. 2014-07-21 14:54:38 -07:00
Christopher Jeffrey
4632caf542 paypro: try to figure out differences between browser and npm jsrsasign. 2014-07-21 14:54:38 -07:00
Christopher Jeffrey
11b67a6404 paypro: use jsrsasign for browser. 2014-07-21 14:54:38 -07:00
Christopher Jeffrey
12bfe8268d paypro: first pass at clientside x509. 2014-07-21 14:54:03 -07:00
Ryan X. Charles
57a55d0863 expose signature internal functions
"sign" and "genk" ... and add some signature tests
2014-07-17 15:24:19 -07:00
Ryan X. Charles
5f6d02f5de add proper DER signature support to Key
both creating DER signature from the r and s values, and parsing a DER
signature into the r, s, and other properties.
2014-07-17 13:09:35 -07:00
Ryan X. Charles
0251d467c4 update bn.js to latest version
...and correspondingly get rid of Number->String conversion

See: https://github.com/indutny/bn.js/issues/17
2014-07-15 11:25:18 -07:00
Linus Unnebäck
3da6fe899f cleanup after removal of soop
Removed some unnecessary parenthesise that hung around after the merge
of #417
2014-07-12 12:14:56 +02:00
Ryan X. Charles
8a199e26f3 allow Point to multiply things other than buffers
...i.e., bignums, numbers, and strings. Also, ensure that if you try to
multiply a buffer, it should be exactly 32 bytes. Eventually this "multiply"
function will be replaced with a more conventional "mul" function, but not yet.
2014-07-11 11:52:05 -07:00
Ryan X. Charles
3cbf2e07c4 use decorate on gt and lt 2014-07-10 18:45:27 -07:00
Ryan X. Charles
80bba1cf81 use a decorate function to optimize bundle filesize 2014-07-10 18:27:15 -07:00
Ryan X. Charles
af1d754bd8 make bignum interface backwards compatible
- fix cmp, mul, div, add, mod, sub functions to take numbers and strings
- fix Point class to use common folder correctly
2014-07-10 18:14:13 -07:00
Ryan X. Charles
e4cb7d2014 remoe unimplemented bignum.pow() 2014-07-10 16:47:05 -07:00
Ryan X. Charles
c8f11b9c0a require Point ... woops 2014-07-10 16:22:42 -07:00
Ryan X. Charles
204d8563c8 remove cryptojs dependency from Key 2014-07-10 16:22:42 -07:00
Ryan X. Charles
ac4d3186bf update sign function to use elliptic 2014-07-10 16:22:42 -07:00
Ryan X. Charles
8fb6ccaf01 use elliptic for Point.multiply and key regeneration 2014-07-10 16:22:42 -07:00
Ryan X. Charles
15d4328b35 use elliptic in Point in the browser instead of cryptojs 2014-07-10 16:21:08 -07:00
Ryan X. Charles
c8fe404402 replace bignumber.js with bn.js 2014-07-10 16:20:13 -07:00
Manuel Araoz
87b818badf remove soop exports 2014-07-10 16:08:42 -03:00
Manuel Araoz
6e346d067c remove soop imports 2014-07-10 12:39:09 -03:00
Ryan X. Charles
65ab3a663a fix string/buffer sjcl issue
...by using sjcl.mode.cbc.encrypt/decrypt rather than sjcl.encrypt/decrypt. The
difference is that the sjcl.encrypt/decrypt functions are really convenience
methods designed to encrypt and decrypt strings, but don't play nice with
binary data, as revealed in the tests in this commit and the previous commit.
Basically, if you use them to encrypt and decrypt binary data as a string, it
will return the wrong result or an error.

The solution is to use the block cipher directly, in this case sjcl.mode.cbc.
This also has the advantage of fewer format conversions - no converting to
base64 and JSON strings. This makes things faster. Also, it is actually correct
unlike the previous method.
2014-07-09 16:25:48 -07:00