forked from trezor/connect
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
40 lines (33 loc) · 1.45 KB
/
server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
const
bitcore = require('bitcore-lib'),
{PublicKey} = bitcore,
{BufferWriter} = bitcore.encoding,
{Signature, ECDSA, Hash} = bitcore.crypto,
{sha256sha256, sha256} = Hash;
function verify(hiddenChallenge, visualChallenge, pubKey, signature, version) {
hiddenChallenge = Buffer.from(hiddenChallenge, 'hex');
visualChallenge = Buffer.from(visualChallenge);
pubKey = new PublicKey(Buffer.from(pubKey, 'hex'));
signature = Signature.fromCompact(Buffer.from(signature, 'hex'));
let message;
if (version === 1) {
message = Buffer.concat([hiddenChallenge, visualChallenge]);
} else if (version === 2) {
message = Buffer.concat([sha256(hiddenChallenge), sha256(visualChallenge)]);
} else {
throw new Error('Unknown version');
}
const
magicBytes = Buffer.from('Bitcoin Signed Message:\n'),
prefix1 = BufferWriter.varintBufNum(magicBytes.length),
prefix2 = BufferWriter.varintBufNum(message.length),
buf = Buffer.concat([prefix1, magicBytes, prefix2, message]),
hash = sha256sha256(buf);
return ECDSA.verify(hash, signature, pubKey);
}
const
hidden = "cd8552569d6e4509266ef137584d1e62c7579b5b8ed69bbafa4b864c6521e7c2", // Use random value
visual = "2015-03-23 17:39:22",
pubKey = "023a472219ad3327b07c18273717bb3a40b39b743756bf287fbd5fa9d263237f45",
signature = "20f2d1a42d08c3a362be49275c3ffeeaa415fc040971985548b9f910812237bb41770bf2c8d488428799fbb7e52c11f1a3404011375e4080e077e0e42ab7a5ba02";
console.log(verify(hidden, visual, pubKey, signature, 2));