GithubHelp home page GithubHelp logo

lirong098 / meta-encryptor Goto Github PK

View Code? Open in Web Editor NEW

This project forked from yeeztech/meta-encryptor

0.0 0.0 0.0 81 KB

JavaScript Data Encryption/Decryption Tool for Fidelius

Shell 0.34% JavaScript 99.66%

meta-encryptor's Introduction

meta-encryptor

中文 | English

介绍

典枢的流程中,用户需要托管数据,供Fidelius解密、计算保证数据的正确性和隐私性,但是,用户不希望暴露源数据。因此,用户需要在本地完成加密,同样的,用户获得数据时,需要在本地进行解密(注意,此处的本地可以是网页,也可以是客户端)。meta-encryptor 就是提供给用户的加解密工具。

软件架构

使用 crypto 等加密算法。

安装教程

npm

npm install @yeez-tech/meta-encryptor --save

yarn

yarn add @yeez-tech/meta-encryptor

构建及测试

yarn install
yarn test

API

crypto.generatePrivateKey

生成私钥

import { crypto } from "@yeez-tech/meta-encryptor";

const sKey = crypto.generatePrivateKey();

console.log("私钥=", sKey);
const pKey = meta.crypto.generatePublicKeyFromPrivateKey(sKey);
useStore().commit(ConfigMutationTypes.SET_ENCRYPTION_CONFIG, {
  privateKey: sKey.toString("hex"),
  publicKey: pKey.toString("hex"),
});
const ypcName = meta.crypto.generateFileNameFromPKey(pKey);
const ypcJson = meta.crypto.generateFileContentFromSKey(sKey);
crypto.generatePublicKeyFromPrivateKey

通过私钥生成公钥

import { crypto } from "@yeez-tech/meta-encryptor";
const pKey = crypto.generatePublicKeyFromPrivateKey(sKey);
console.log("公钥钥=", pKey);
crypto.generateFileNameFromPKey

通过公钥生成文件名

import { crypto } from "@yeez-tech/meta-encryptor";
const ypcName = crypto.generateFileNameFromPKey(pKey);
console.log("文件名=", ypcName);
crypto.generateFileContentFromSKey

通过私钥获取密钥文件内容

import { crypto } from "@yeez-tech/meta-encryptor";
const ypcJson = crypto.generateFileContentFromSKey(sKey);
console.log("文件内容=", ypcJson);
Sealer

推荐使用Sealer加密流,该方法支持多种格式,包括CSV,Excel,下面是对CSV的例子,其中使用了ToStringcsv()产生的对象转换为Buffer

import {Sealer, ToString} from "@yeez-tech/meta-encryptor"

let rs = fs.createReadStream(src)
let ws = fs.createWriteStream(dst)

rs.pipe(csv())
  .pipe(new ToString())
  .pipe(new Sealer({keyPair:key_pair))
  .pipe(ws);
Unsealer

Unsealer用来解密流,并且将结果输出到流.

import {Sealer, Unsealer, SealedFileStream} from "@yeez-tech/meta-encryptor";

/*
let src = "./tsconfig.json"
let dst = "./tsconfig.json.encrypted";
let rs = fs.createReadStream(src)
let ws = fs.createWriteStream(dst)

rs.pipe(csv())
  .pipe(new Sealer({keyPair:key_pair))
  .pipe(ws);
await new Promise(resolve=>{
  ws.on('finish', ()=>resolve());
});
*/

let unsealer = new Unsealer({keyPair:key_pair});
let rrs = new SealedFileStream(dst);
let wws = fs.createWriteStream(src + ".new")

rrs.pipe(unsealer).pipe(wws);
await new Promise(resolve=>{
  wws.on('finish', ()=>resolve());
})
isSealedFile

用于判断一个文件是否为一个有效的封装文件,如果为真,返回true,否则,返回false

import {isSealedFile} from "@yeez-tech/meta-encryptor";

let r = isSealedFile(path);
sealedFileVersion

返回封装文件的版本号。

import {sealedFileVersion} from "@yeez-tech/meta-encryptor";

let r = sealedFileVersion(path);
dataHashOfSealedFile

返回封装文件对应的原始数据的hash。注意,该函数直接读取的是记录在文件头的hash,如果文件被篡改,该函数有可能返回错误的hash,因此,如果有可能,应该在解密之后,对hash进行校验。

import {dataHashOfSealedFile} from "@yeez-tech/meta-encryptor";

let r = dataHashOfSealedFile(path);
signedDataHash

对数据hash进行签名。

import {signedDataHash} from "@yeez-tech/meta-encryptor";

//keyPair应该是{'private-key':'hex string of private key',
//dataHash应该是一个Buffer,长度为32字节
let r = signedDataHash(keyPair, dataHash);
forwardSkey

生成转发枢私钥的信息。

import {forwardSkey} from "@yeez-tech/meta-encryptor";

//keyPair应该是{'private-key':'hex string of private key',
//dianPKey应该是一个Buffer,包含了典公钥,
//enclaveHash应该是一个Buffer,包含了keyMgr的hash,可以为null,如果为null,则意味着可以被转发到任意的enclave中;
let r = forwardSkey(keyPair, dianPKey, enclaveHash);

返回如下对象,

{
  encrypted_skey:Buffer,
  forward_sig: Buffer
}

Author

[email protected]

meta-encryptor's People

Contributors

athrunarthur avatar lirong098 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.