forked from Qortal/qortal
Fix Javascript shared-secret & proxy forging private key code
This commit is contained in:
parent
748dddcc32
commit
4279ad0673
File diff suppressed because one or more lines are too long
46
src/test/resources/proxy-key-example.html
Normal file
46
src/test/resources/proxy-key-example.html
Normal file
@ -0,0 +1,46 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<script src="Base58.js"></script>
|
||||
<script src="nacl_factory.js"></script>
|
||||
<script>
|
||||
nacl_factory.instantiate(function (nacl) {
|
||||
var mintingAccountPrk = Base58.decode('A9MNsATgQgruBUjxy2rjWY36Yf19uRioKZbiLFT2P7c6');
|
||||
var recipientAccountPuk = Base58.decode('2sbcMmVKke5inS4yrbeoG6Cyw2mZCptQNjyWgnY4YHaF');
|
||||
|
||||
// var mintingX25519KeyPair = nacl.crypto_box_keypair_from_raw_sk(mintingAccountPrk);
|
||||
var mintingEd25519KeyPair = nacl.crypto_sign_seed_keypair(mintingAccountPrk);
|
||||
var mintingX25519KeyPair = nacl.crypto_box_keypair_from_sign_sk(mintingEd25519KeyPair.signSk);
|
||||
|
||||
// Expecting: 2tiMr5LTpaWCgbRvkPK8TFd7k63DyHJMMFFsz9uBf1ZP as we explicitly use Ed25519 ("sign") keypair here
|
||||
var mintingAccountPuk = mintingEd25519KeyPair.signPk;
|
||||
console.log("minting public key for confirmation (Ed25519): " + Base58.encode(mintingAccountPuk));
|
||||
|
||||
recipientAccountPukX25519 = nacl.crypto_box_pk_from_sign_pk(recipientAccountPuk)
|
||||
console.log("recipient public key (X25519): " + Base58.encode(recipientAccountPukX25519));
|
||||
|
||||
var sharedSecret = nacl.crypto_scalarmult(mintingX25519KeyPair.boxSk, recipientAccountPukX25519);
|
||||
console.log("shared secret (for debugging): " + Base58.encode(sharedSecret));
|
||||
|
||||
// Data to be hashed: shared secret (32 bytes) + minting public key (32 bytes) + recipient public key (32 bytes)
|
||||
// or, in general terms: shared secret (32 bytes) + public key from private key (32 bytes) + other party's public key (32 bytes)
|
||||
var proxyHashData = new Uint8Array(sharedSecret.length + mintingAccountPuk.length + recipientAccountPuk.length);
|
||||
// copy shared secret into array, starting at index 0
|
||||
proxyHashData.set(sharedSecret);
|
||||
// copy minting account public key into array, starting at index 32
|
||||
proxyHashData.set(mintingAccountPuk, sharedSecret.length);
|
||||
// copy recipient account public key into array, starting at index 64 (32 + 32)
|
||||
proxyHashData.set(recipientAccountPuk, sharedSecret.length + mintingAccountPuk.length);
|
||||
|
||||
// Proxy PRIVATE key is SHA256 of data above
|
||||
var proxyPrivateKey = nacl.crypto_hash_sha256(proxyHashData)
|
||||
console.log("proxy private key: " + Base58.encode(proxyPrivateKey));
|
||||
|
||||
var proxyKeyPair = nacl.crypto_sign_seed_keypair(proxyPrivateKey);
|
||||
console.log("proxy public key: " + Base58.encode(proxyKeyPair.signPk));
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
32
src/test/resources/shared-secret-test.html
Normal file
32
src/test/resources/shared-secret-test.html
Normal file
@ -0,0 +1,32 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<script src="Base58.js"></script>
|
||||
<script src="nacl_factory.js"></script>
|
||||
<script>
|
||||
nacl_factory.instantiate(function (nacl) {
|
||||
var mintingAccountPrk = Base58.decode('A9MNsATgQgruBUjxy2rjWY36Yf19uRioKZbiLFT2P7c6');
|
||||
var recipientAccountPuk = Base58.decode('C6wuddsBV3HzRrXUtezE7P5MoRXp5m3mEDokRDGZB6ry');
|
||||
|
||||
var mintingEd25519KeyPair = nacl.crypto_sign_seed_keypair(mintingAccountPrk);
|
||||
var mintingX25519KeyPair = nacl.crypto_box_keypair_from_sign_sk(mintingEd25519KeyPair.signSk);
|
||||
var recipientAccountX25519Puk = nacl.crypto_box_pk_from_sign_pk(recipientAccountPuk);
|
||||
|
||||
var sharedSecret = nacl.crypto_scalarmult(mintingX25519KeyPair.boxSk, recipientAccountX25519Puk);
|
||||
console.log("shared secret (minting private + recipient public): " + Base58.encode(sharedSecret));
|
||||
|
||||
var recipientAccountPrk = Base58.decode('AdTd9SUEYSdTW8mgK3Gu72K97bCHGdUwi2VvLNjUohot');
|
||||
var mintingAccountPuk = Base58.decode('2tiMr5LTpaWCgbRvkPK8TFd7k63DyHJMMFFsz9uBf1ZP');
|
||||
|
||||
var recipientEd25519KeyPair = nacl.crypto_sign_seed_keypair(recipientAccountPrk);
|
||||
var recipientX25519KeyPair = nacl.crypto_box_keypair_from_sign_sk(recipientEd25519KeyPair.signSk);
|
||||
var mintingAccountX25519Puk = nacl.crypto_box_pk_from_sign_pk(mintingAccountPuk);
|
||||
|
||||
sharedSecret = nacl.crypto_scalarmult(recipientX25519KeyPair.boxSk, mintingAccountX25519Puk);
|
||||
console.log("shared secret (recipient private + minting public): " + Base58.encode(sharedSecret));
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
@ -1,37 +0,0 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<script src="Base58.js"></script>
|
||||
<script src="nacl_factory.js"></script>
|
||||
<script>
|
||||
nacl_factory.instantiate(function (nacl) {
|
||||
var mintingAccountPrk = 'A9MNsATgQgruBUjxy2rjWY36Yf19uRioKZbiLFT2P7c6';
|
||||
// var recipientAccountPuk = 'C6wuddsBV3HzRrXUtezE7P5MoRXp5m3mEDokRDGZB6ry';
|
||||
var recipientAccountPuk = '2sbcMmVKke5inS4yrbeoG6Cyw2mZCptQNjyWgnY4YHaF';
|
||||
|
||||
mintingAccountPrk = Base58.decode(mintingAccountPrk);
|
||||
recipientAccountPuk = Base58.decode(recipientAccountPuk);
|
||||
|
||||
var mintingKeyPair = nacl.crypto_box_keypair_from_raw_sk(mintingAccountPrk);
|
||||
|
||||
// Expecting: A9MNsATgQgruBUjxy2rjWY36Yf19uRioKZbiLFT2P7c6
|
||||
console.log("minting private key (for confirmation): " + Base58.encode(mintingKeyPair.boxSk));
|
||||
|
||||
// This WILL NOT be: 2tiMr5LTpaWCgbRvkPK8TFd7k63DyHJMMFFsz9uBf1ZP because this is an X25519 keypair, not Ed25519 keypair?
|
||||
// console.log("minting PUBLIC key: " + Base58.encode(mintingKeyPair.boxPk));
|
||||
|
||||
var sharedSecret = nacl.crypto_scalarmult(mintingKeyPair.boxSk, recipientAccountPuk);
|
||||
console.log("shared secret (for debugging): " + Base58.encode(sharedSecret));
|
||||
console.log(sharedSecret); // log as Uint8Array
|
||||
|
||||
var proxyPrivateKey = nacl.crypto_hash_sha256(sharedSecret)
|
||||
console.log("proxy private key: " + Base58.encode(proxyPrivateKey));
|
||||
|
||||
var proxyKeyPair = nacl.crypto_sign_seed_keypair(proxyPrivateKey);
|
||||
console.log("proxy public key: " + Base58.encode(proxyKeyPair.signPk));
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
Loading…
x
Reference in New Issue
Block a user