123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- /**
- * Created by bmf on 11/2/13.
- *
- * Documentation of crypto http://nacl.cr.yp.to/box.html
- */
- /* jslint node: true */
- 'use strict';
- var binding = require('../build/Release/sodium');
- var assert = require('assert');
- var SignKey = require('./keys/sign-key');
- var toBuffer = require('./toBuffer');
- /**
- * Public-key authenticated message signatures: Sign
- *
- * @param {String|Buffer|Array} secretKey sender's private key.
- * @param {String|Buffer|Array} publicKey recipient's private key.
- *
- * @see Keys
- * @constructor
- */
- function Sign(key) {
- var self = this;
- /** default encoding to use in all string operations */
- self.defaultEncoding = undefined;
- if( key instanceof SignKey) {
- self.iKey = key;
- }
- else {
- /** Set of keys used to encrypt and decrypt messages */
- self.iKey = new SignKey();
- }
- /** Size of the generated message signature */
- self.bytes = function() {
- return binding.crypto_sign_BYTES;
- };
- /** String name of the default crypto primitive used in sign operations */
- self.primitive = function() {
- return binding.crypto_sign_PRIMITIVE;
- };
- /**
- * Get the keypair object
- * @returns {SignKey|*}
- */
- self.key = function() {
- return self.iKey;
- };
- /**
- * @return {Number} The size of the message signature
- */
- self.size = function() {
- return binding.crypto_sign_BYTES;
- };
- /**
- * Set the default encoding to use in all string conversions
- * @param {String} encoding encoding to use
- */
- self.setEncoding = function(encoding) {
- assert(!!encoding.match(/^(?:utf8|ascii|binary|hex|utf16le|ucs2|base64)$/), 'Encoding ' + encoding + ' is currently unsupported.');
- self.defaultEncoding = encoding;
- };
- /**
- * Get the current default encoding
- * @returns {undefined|String}
- */
- self.getEncoding = function() {
- return self.defaultEncoding;
- };
- /**
- * Digitally sign message
- *
- * @param {Buffer|String|Array} message message to sign
- * @param {String} [encoding] encoding of message string
- *
- * @returns {Object} cipher box
- */
- self.sign = function (message, encoding) {
- encoding = String(encoding) || self.defaultEncoding || 'utf8';
- var buf = toBuffer(message, encoding);
- var signature = binding.crypto_sign(buf, self.iKey.sk().get());
- if( !signature ) {
- return undefined;
- }
- return {
- sign: signature,
- publicKey: self.iKey.pk().get()
- };
- };
- /**
- * Digitally sign message, using detached signature
- *
- * @param {Buffer|String|Array} message message to sign
- * @param {String} [encoding] encoding of message string
- *
- * @returns {Object} cipher box
- */
- self.signDetached = function (message, encoding) {
- encoding = String(encoding) || self.defaultEncoding || 'utf8';
- var buf = toBuffer(message, encoding);
- var signature = binding.crypto_sign_detached(buf, self.iKey.sk().get());
- if( !signature ) {
- return undefined;
- }
- return {
- sign: signature,
- publicKey: self.iKey.pk().get()
- };
- };
- }
- /**
- * Verify digital signature
- *
- * @param {Buffer|String|Array} cipherText the signed message
- */
- Sign.verify = function (signature) {
- assert(typeof signature == 'object' && signature.hasOwnProperty('sign') && signature.hasOwnProperty('publicKey'));
- return binding.crypto_sign_open(signature.sign, signature.publicKey);
- };
- /**
- * Verify digital signature (detached mode)
- *
- * @param {Buffer|String|Array} signature the signature
- * @param {Buffer|String|Array} message the message
- *
- * returns true if verified successfully, false otherwise.
- */
- Sign.verifyDetached = function (signature, message) {
- assert(typeof signature == 'object' && signature.hasOwnProperty('sign') && signature.hasOwnProperty('publicKey'));
- return binding.crypto_sign_verify_detached(signature.sign, message, signature.publicKey);
- };
- module.exports = Sign;
|