proxy-key-example.html
1 <!doctype html> 2 <html> 3 <head> 4 <script src="Base58.js"></script> 5 <script src="nacl_factory.js"></script> 6 <script> 7 nacl_factory.instantiate(function (nacl) { 8 var mintingAccountPrk = Base58.decode('A9MNsATgQgruBUjxy2rjWY36Yf19uRioKZbiLFT2P7c6'); 9 var recipientAccountPuk = Base58.decode('C6wuddsBV3HzRrXUtezE7P5MoRXp5m3mEDokRDGZB6ry'); 10 // var recipientAccountPuk = Base58.decode('2sbcMmVKke5inS4yrbeoG6Cyw2mZCptQNjyWgnY4YHaF'); 11 12 var mintingEd25519KeyPair = nacl.crypto_sign_seed_keypair(mintingAccountPrk); 13 var mintingX25519KeyPair = nacl.crypto_box_keypair_from_sign_sk(mintingEd25519KeyPair.signSk); 14 15 var mintingX25519Prk = mintingX25519KeyPair.boxSk; 16 console.log("minting private key (X25519): " + Base58.encode(mintingX25519Prk)); 17 18 // Expecting: 2tiMr5LTpaWCgbRvkPK8TFd7k63DyHJMMFFsz9uBf1ZP as we explicitly use Ed25519 ("sign") keypair here 19 var mintingAccountPuk = mintingEd25519KeyPair.signPk; 20 console.log("minting public key for confirmation (Ed25519): " + Base58.encode(mintingAccountPuk)); 21 22 recipientAccountX25519Puk = nacl.crypto_box_pk_from_sign_pk(recipientAccountPuk) 23 console.log("recipient public key (X25519): " + Base58.encode(recipientAccountX25519Puk)); 24 25 var sharedSecret = nacl.crypto_scalarmult(mintingX25519Prk, recipientAccountX25519Puk); 26 console.log("shared secret (for debugging): " + Base58.encode(sharedSecret)); 27 28 // Proxy PRIVATE key is SHA256 of shared secret 29 var proxyPrivateKey = nacl.crypto_hash_sha256(sharedSecret) 30 console.log("proxy private key: " + Base58.encode(proxyPrivateKey)); 31 32 var proxyKeyPair = nacl.crypto_sign_seed_keypair(proxyPrivateKey); 33 console.log("proxy public key: " + Base58.encode(proxyKeyPair.signPk)); 34 }); 35 </script> 36 </head> 37 <body> 38 </body> 39 </html>