Initial support for qubit
parent
e0d291b318
commit
dbc35af485
|
@ -15,6 +15,7 @@
|
||||||
"groestl.c",
|
"groestl.c",
|
||||||
"blake.c",
|
"blake.c",
|
||||||
"fugue.c",
|
"fugue.c",
|
||||||
|
"qubit.c",
|
||||||
"sha3/sph_fugue.c",
|
"sha3/sph_fugue.c",
|
||||||
"sha3/aes_helper.c",
|
"sha3/aes_helper.c",
|
||||||
"sha3/sph_blake.c",
|
"sha3/sph_blake.c",
|
||||||
|
|
|
@ -15,6 +15,7 @@ extern "C" {
|
||||||
#include "groestl.h"
|
#include "groestl.h"
|
||||||
#include "blake.h"
|
#include "blake.h"
|
||||||
#include "fugue.h"
|
#include "fugue.h"
|
||||||
|
#include "qubit.h"
|
||||||
}
|
}
|
||||||
|
|
||||||
using namespace node;
|
using namespace node;
|
||||||
|
@ -312,6 +313,29 @@ Handle<Value> fugue(const Arguments& args) {
|
||||||
return scope.Close(buff->handle_);
|
return scope.Close(buff->handle_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Handle<Value> qubit(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 = new char[32];
|
||||||
|
|
||||||
|
uint32_t input_len = Buffer::Length(target);
|
||||||
|
|
||||||
|
qubit_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());
|
||||||
|
@ -325,6 +349,7 @@ void init(Handle<Object> exports) {
|
||||||
exports->Set(String::NewSymbol("groestl_myriad"), FunctionTemplate::New(groestl_myriad)->GetFunction());
|
exports->Set(String::NewSymbol("groestl_myriad"), FunctionTemplate::New(groestl_myriad)->GetFunction());
|
||||||
exports->Set(String::NewSymbol("blake"), FunctionTemplate::New(blake)->GetFunction());
|
exports->Set(String::NewSymbol("blake"), FunctionTemplate::New(blake)->GetFunction());
|
||||||
exports->Set(String::NewSymbol("fugue"), FunctionTemplate::New(fugue)->GetFunction());
|
exports->Set(String::NewSymbol("fugue"), FunctionTemplate::New(fugue)->GetFunction());
|
||||||
|
exports->Set(String::NewSymbol("qubit"), FunctionTemplate::New(qubit)->GetFunction());
|
||||||
}
|
}
|
||||||
|
|
||||||
NODE_MODULE(multihashing, init)
|
NODE_MODULE(multihashing, init)
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
#include "qubit.h"
|
||||||
|
|
||||||
|
#include "sha3/sph_cubehash.h"
|
||||||
|
#include "sha3/sph_luffa.h"
|
||||||
|
#include "sha3/sph_shavite.h"
|
||||||
|
#include "sha3/sph_simd.h"
|
||||||
|
#include "sha3/sph_echo.h"
|
||||||
|
|
||||||
|
void qubit_hash(const char* input, char* output, uint32_t len)
|
||||||
|
{
|
||||||
|
sph_luffa512_context ctx_luffa;
|
||||||
|
sph_cubehash512_context ctx_cubehash;
|
||||||
|
sph_shavite512_context ctx_shavite;
|
||||||
|
sph_simd512_context ctx_simd;
|
||||||
|
sph_echo512_context ctx_echo;
|
||||||
|
|
||||||
|
char* hash1 = (char*) malloc(64);
|
||||||
|
char* hash2 = (char*) malloc(64);
|
||||||
|
|
||||||
|
sph_luffa512_init(&ctx_luffa);
|
||||||
|
sph_luffa512(&ctx_luffa, (const void*) input, len);
|
||||||
|
sph_luffa512_close(&ctx_luffa, (void*) hash1); //1
|
||||||
|
|
||||||
|
sph_cubehash512_init(&ctx_cubehash);
|
||||||
|
sph_cubehash512(&ctx_cubehash, (const void*) hash1, 64); // 1
|
||||||
|
sph_cubehash512_close(&ctx_cubehash, (void*) hash2); // 2
|
||||||
|
|
||||||
|
sph_shavite512_init(&ctx_shavite);
|
||||||
|
sph_shavite512(&ctx_shavite, (const void*) hash2, 64); // 3
|
||||||
|
sph_shavite512_close(&ctx_shavite, (void*) hash1); // 4
|
||||||
|
|
||||||
|
sph_simd512_init(&ctx_simd);
|
||||||
|
sph_simd512(&ctx_simd, (const void*) hash1, 64); // 4
|
||||||
|
sph_simd512_close(&ctx_simd, (void*) hash2); // 5
|
||||||
|
|
||||||
|
sph_echo512_init(&ctx_echo);
|
||||||
|
sph_echo512(&ctx_echo, (const void*) hash2, 64); // 5
|
||||||
|
sph_echo512_close(&ctx_echo, (void*) hash1); // 6
|
||||||
|
|
||||||
|
memcpy(output, hash1, 32);
|
||||||
|
|
||||||
|
free(hash1);
|
||||||
|
free(hash2);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue