UNPKG

ashcrypt

Version:
2 lines (1 loc) 3.28 kB
"use strict";var b=Object.create;var l=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var N=Object.getOwnPropertyNames;var B=Object.getPrototypeOf,O=Object.prototype.hasOwnProperty;var k=(i,t)=>{for(var r in t)l(i,r,{get:t[r],enumerable:!0})},S=(i,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of N(t))!O.call(i,e)&&e!==r&&l(i,e,{get:()=>t[e],enumerable:!(s=E(t,e))||s.enumerable});return i};var I=(i,t,r)=>(r=i!=null?b(B(i)):{},S(t||!i||!i.__esModule?l(r,"default",{value:i,enumerable:!0}):r,i)),L=i=>S(l({},"__esModule",{value:!0}),i);var g=(i,t,r)=>new Promise((s,e)=>{var a=n=>{try{o(r.next(n))}catch(c){e(c)}},h=n=>{try{o(r.throw(n))}catch(c){e(c)}},o=n=>n.done?s(n.value):Promise.resolve(n.value).then(a,h);o((r=r.apply(i,t)).next())});var P={};k(P,{AES:()=>d,BaseAlgorithm:()=>m,Stream:()=>p});module.exports=L(P);var f=require("fs"),G=require("stream"),A=I(require("parallel-transform"),1),p=class{constructor({algorithm:t,maxParallel:r}){this.parallel=1;this.algorithm=t,r&&(this.parallel=r)}create(t){let r=this.algorithm,s=r.chunkSize,e=r.getChunkSize(s),[a,h]=t==="encrypt"?[s,e]:[e,s],o=0;return(0,A.default)(this.parallel,{ordered:!0,writableHighWaterMark:a,readableHighWaterMark:h},(n,c)=>{console.log("chunk: ",o),o++,r[t](n).then(y=>c(null,y)).catch(y=>c(y))})}read(t,r){let s=this.algorithm.getChunkSize(this.algorithm.chunkSize),e=this.create(r);return(0,f.createReadStream)(t,{highWaterMark:r==="decrypt"?s:this.algorithm.chunkSize}).pipe(e)}write(t){return(0,f.createWriteStream)(t)}};var u=require("crypto");var m=class{constructor({name:t,chunkSize:r}){this.name=t,this.chunkSize=r}};var d=class extends m{constructor({secret:r,chunkSize:s=512*1e3,algorithm:e="aes-256-gcm",iterations:a=1e5}){super({name:e,chunkSize:s});this.IV_LENGTH=12;this.TAG_LENGTH=16;this.algorithm=e,this.secret=r,this.iterations=a,this.SALT_LENGTH=this.algorithm.includes("128")||this.algorithm.includes("192")?16:32,this.KEYLEN=this.algorithm.includes("128")?16:this.algorithm.includes("192")?24:32,this.HASH=this.algorithm.includes("128")?"sha256":this.algorithm.includes("192")?"sha384":"sha512",this.TAG_POSITION=this.SALT_LENGTH+this.IV_LENGTH,this.ENCRYPTED_POSITION=this.TAG_POSITION+this.TAG_LENGTH}getKey(r){return new Promise((s,e)=>(0,u.pbkdf2)(this.secret,r,this.iterations,this.KEYLEN,this.HASH,(a,h)=>{if(a)return e(a);s(h)}))}getChunkSize(r){return r+this.ENCRYPTED_POSITION}encrypt(r){return g(this,null,function*(){let s=(0,u.randomBytes)(this.IV_LENGTH),e=(0,u.randomBytes)(this.SALT_LENGTH),a=yield this.getKey(e);if(a instanceof Error)throw a;let h=(0,u.createCipheriv)(this.algorithm,a,s),o=Buffer.concat([h.update(r),h.final()]),n=h.getAuthTag();return Buffer.concat([e,s,n,o])})}decrypt(r){return g(this,null,function*(){if(r.length<this.ENCRYPTED_POSITION)throw new Error("Invalid ciphertext buffer");console.log(r.toBase64());let s=r.subarray(0,this.SALT_LENGTH),e=r.subarray(this.SALT_LENGTH,this.TAG_POSITION),a=r.subarray(this.TAG_POSITION,this.ENCRYPTED_POSITION),h=r.subarray(this.ENCRYPTED_POSITION),o=yield this.getKey(s);if(o instanceof Error)throw o;let n=(0,u.createDecipheriv)(this.algorithm,o,e);return n.setAuthTag(a),Buffer.concat([n.update(h),n.final()])})}};0&&(module.exports={AES,BaseAlgorithm,Stream});