Added nist5 hashing
parent
0cd36f9f21
commit
cacdbe2dc0
22
README.md
22
README.md
|
@ -7,6 +7,28 @@ node-multi-hashing
|
||||||
|
|
||||||
Cryptocurrency hashing functions for node.js.
|
Cryptocurrency hashing functions for node.js.
|
||||||
|
|
||||||
|
|
||||||
|
Algorithms
|
||||||
|
----------
|
||||||
|
* quark
|
||||||
|
* x11
|
||||||
|
* x13
|
||||||
|
* nist5
|
||||||
|
* scrypt
|
||||||
|
* scryptn
|
||||||
|
* scryptjane
|
||||||
|
* keccak
|
||||||
|
* bcrypt
|
||||||
|
* skein
|
||||||
|
* groestl
|
||||||
|
* blake
|
||||||
|
* fugue
|
||||||
|
* qubit
|
||||||
|
* hefty1
|
||||||
|
* shavite3
|
||||||
|
* cryptonight
|
||||||
|
* boolberry
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
"cryptonight.c",
|
"cryptonight.c",
|
||||||
"x13.c",
|
"x13.c",
|
||||||
"boolberry.cc",
|
"boolberry.cc",
|
||||||
|
"nist5.c",
|
||||||
"sha3/sph_hefty1.c",
|
"sha3/sph_hefty1.c",
|
||||||
"sha3/sph_fugue.c",
|
"sha3/sph_fugue.c",
|
||||||
"sha3/aes_helper.c",
|
"sha3/aes_helper.c",
|
||||||
|
|
|
@ -19,6 +19,7 @@ extern "C" {
|
||||||
#include "shavite3.h"
|
#include "shavite3.h"
|
||||||
#include "cryptonight.h"
|
#include "cryptonight.h"
|
||||||
#include "x13.h"
|
#include "x13.h"
|
||||||
|
#include "nist5.h"
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "boolberry.h"
|
#include "boolberry.h"
|
||||||
|
@ -482,6 +483,28 @@ Handle<Value> boolberry(const Arguments& args) {
|
||||||
return scope.Close(buff->handle_);
|
return scope.Close(buff->handle_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Handle<Value> nist5(const Arguments& args) {
|
||||||
|
HandleScope scope;
|
||||||
|
|
||||||
|
if (args.Length() < 1)
|
||||||
|
return except("You must provide one argument.");
|
||||||
|
|
||||||
|
Local<Object> target = args[0]->ToObject();
|
||||||
|
|
||||||
|
if(!Buffer::HasInstance(target))
|
||||||
|
return except("Argument should be a buffer object.");
|
||||||
|
|
||||||
|
char * input = Buffer::Data(target);
|
||||||
|
char output[32];
|
||||||
|
|
||||||
|
uint32_t input_len = Buffer::Length(target);
|
||||||
|
|
||||||
|
nist5_hash(input, output, input_len);
|
||||||
|
|
||||||
|
Buffer* buff = Buffer::New(output, 32);
|
||||||
|
return scope.Close(buff->handle_);
|
||||||
|
}
|
||||||
|
|
||||||
void init(Handle<Object> exports) {
|
void init(Handle<Object> exports) {
|
||||||
exports->Set(String::NewSymbol("quark"), FunctionTemplate::New(quark)->GetFunction());
|
exports->Set(String::NewSymbol("quark"), FunctionTemplate::New(quark)->GetFunction());
|
||||||
exports->Set(String::NewSymbol("x11"), FunctionTemplate::New(x11)->GetFunction());
|
exports->Set(String::NewSymbol("x11"), FunctionTemplate::New(x11)->GetFunction());
|
||||||
|
@ -501,6 +524,7 @@ void init(Handle<Object> exports) {
|
||||||
exports->Set(String::NewSymbol("cryptonight"), FunctionTemplate::New(cryptonight)->GetFunction());
|
exports->Set(String::NewSymbol("cryptonight"), FunctionTemplate::New(cryptonight)->GetFunction());
|
||||||
exports->Set(String::NewSymbol("x13"), FunctionTemplate::New(x13)->GetFunction());
|
exports->Set(String::NewSymbol("x13"), FunctionTemplate::New(x13)->GetFunction());
|
||||||
exports->Set(String::NewSymbol("boolberry"), FunctionTemplate::New(boolberry)->GetFunction());
|
exports->Set(String::NewSymbol("boolberry"), FunctionTemplate::New(boolberry)->GetFunction());
|
||||||
|
exports->Set(String::NewSymbol("nist5"), FunctionTemplate::New(nist5)->GetFunction());
|
||||||
}
|
}
|
||||||
|
|
||||||
NODE_MODULE(multihashing, init)
|
NODE_MODULE(multihashing, init)
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
#include "nist5.h"
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "sha3/sph_blake.h"
|
||||||
|
#include "sha3/sph_groestl.h"
|
||||||
|
#include "sha3/sph_jh.h"
|
||||||
|
#include "sha3/sph_keccak.h"
|
||||||
|
#include "sha3/sph_skein.h"
|
||||||
|
|
||||||
|
|
||||||
|
void nist5_hash(const char* input, char* output, uint32_t len)
|
||||||
|
{
|
||||||
|
sph_blake512_context ctx_blake;
|
||||||
|
sph_groestl512_context ctx_groestl;
|
||||||
|
sph_skein512_context ctx_skein;
|
||||||
|
sph_jh512_context ctx_jh;
|
||||||
|
sph_keccak512_context ctx_keccak;
|
||||||
|
|
||||||
|
//these uint512 in the c++ source of the client are backed by an array of uint32
|
||||||
|
uint32_t hash[16];
|
||||||
|
|
||||||
|
sph_blake512_init(&ctx_blake);
|
||||||
|
sph_blake512 (&ctx_blake, input, len);
|
||||||
|
sph_blake512_close (&ctx_blake, hash);
|
||||||
|
|
||||||
|
sph_groestl512_init(&ctx_groestl);
|
||||||
|
sph_groestl512 (&ctx_groestl, hash, 64);
|
||||||
|
sph_groestl512_close(&ctx_groestl, hash);
|
||||||
|
|
||||||
|
sph_jh512_init(&ctx_jh);
|
||||||
|
sph_jh512 (&ctx_jh, hash, 64);
|
||||||
|
sph_jh512_close(&ctx_jh, hash);
|
||||||
|
|
||||||
|
sph_keccak512_init(&ctx_keccak);
|
||||||
|
sph_keccak512 (&ctx_keccak, hash, 64);
|
||||||
|
sph_keccak512_close(&ctx_keccak, hash);
|
||||||
|
|
||||||
|
sph_skein512_init(&ctx_skein);
|
||||||
|
sph_skein512 (&ctx_skein, hash, 64);
|
||||||
|
sph_skein512_close (&ctx_skein, hash);
|
||||||
|
|
||||||
|
memcpy(output, hash, 32);
|
||||||
|
}
|
Loading…
Reference in New Issue