Cryptographically secure memos for every Nano block
This library allows you to sign, verify signature, encrypt, and decrypt messages with the same keys used to sign a Nano block. It includes multiple modules to assist you in doing offline actions as well as communicating with the NanoMemo.cc API endpoints. This documentation covers the capabilities of this library. For more details on the RESTful API on NanoMemo.cc you can view the documentation here: https://nanomemo.cc/docs/api.
Created by SomeNano Twitter: @SomeNanoTweets
Via NPM:
$ npm install nanomemotools
also available as a standalone js file in the github repository/dist, nanomemotools.js
<script src="nanomemotools.js"></script>
<script>
NanoMemoTools.memo...
</script>
Full documentation is located in the /docs directory or viewable online: (https://somenano.github.io/NanoMemoTools)
const NanoMemoTools = require('nanomemotools');
Tests can be run with the command:
npm test
The /test directory on github has plenty of good examples.
const NanoMemoTools = require('nanomemotools');
const hash = '4ABC34D...';
const message = 'test message';
const signing_address = 'nano_1abc...';
const memo = new NanoMemoTools.memo.Memo(
hash,
message,
signing_address
);
// memo is unsigned at this point
memo.valid_signature == false;
// Sign it with the private key of the Nano Account that owns the block with the provided hash
const signing_private_key = '234ABC...';
const signature = memo.sign(signing_private_key);
memo.valid_signature == true;
const NanoMemoTools = require('nanomemotools');
const hash = '4ABC34D...';
const encrypted_message = 'test message';
const signing_address = 'nano_1abc...';
const decrypting_address = 'nano_3fed...';
const memo = new NanoMemoTools.memo.EncryptedMemo(
hash,
encrypted_message,
signing_address,
decrypting_address
);
// memo is unsigned at this point
memo.valid_signature == false;
// Sign it with the private key of the Nano Account that owns the block with the provided hash
const signing_private_key = '234ABC...';
const signature = memo.sign(signing_private_key);
memo.valid_signature == true;
// Assume plaintext memo is already created...
const encrypted_memo = NanoMemoTools.memo.encrypt(memo, signing_private_key, decrypting_address);
// Signature is no longer valid since message was encrypted
encrypted_memo.valid_signature == false;
// Sign it with the private key of the Nano Account that owns the block with the provided hash
const signing_private_key = '234ABC...';
const signature = encrypted_memo.sign(signing_private_key);
encrypted_memo.valid_signature == true;
// Assume encrypted memo is already created...
const memo = NanoMemoTools.memo.decrypt(encrypted_memo, decrypting_private_key);
// Signature is no longer valid since message was encrypted
memo.valid_signature == false;
// Sign it with the private key of the Nano Account that owns the block with the provided hash
const signing_private_key = '234ABC...';
const signature = memo.sign(signing_private_key);
memo.valid_signature == true;
const NanoMemoTools = require('nanomemotools');
const hash = '4ABC34D...';
const memo = await NanoMemoTools.server.getMemo(hash);
Requires api key
const NanoMemoTools = require('nanomemotools');
const memo = new NanoMemoTools.memo.Memo( ... );
const api_key = '123...';
const api_secret = '321...';
const memo_response = await NanoMemoTools.server.saveMemo(memo, api_key, api_secret);
Requires api key
const NanoMemoTools = require('nanomemotools');
const api_key = '123...';
const api_secret = '321...';
const user_data = await NanoMemoTools.server.getUserData(api_key, api_secret);
This websocket will send a message for every new memo that is created
const NanoMemoTools = require('nanomemotools');
const websocket = NanoMemoTools.server.websocketSubscribe(function(msg) {
// onmessage
console.log(msg);
});
// Can also unsubscribe
NanoMemoTools.server.websocketUnsubscribe();
If someone has access to your Nano seed or private key they can access and transfer funds from your Nano Account. This library never stores your seed or private key. This library never sends your seed or private key to any server. All digital signing and encryption or decryption actions that require a private key are self-contained in this library and its dependencies.
It is your responsibility to use this library in a responsible manner and manage your own seed or private key.
Additionally, this library is covered by an MIT License which means it is provided "as is", without warranty of any kind. We make every attempt to be transparent. Below you will find the dependencies this library uses with links to their code and documentation repositories for your review as you see fit.
- nanocurrency
- tweetnacl-blake2b
- blakejs
- Modified and locally included to use tweetnacl-blake2b instead of tweetnacl: ed2curve
- axios
- reconnecting-websocket
- ws