UNPKG

aes-universal-native

Version:
2 lines (1 loc) 2.52 kB
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("aes-universal"),e=require("node-forge");class h extends l.AbstractCbcCipher{constructor(){super(...arguments),this.encryptInternal=async({encRawKey:n,iv:i,plaintext:a})=>{const c=e.util.binary.raw.encode(n),r=e.util.binary.raw.encode(i),t=e.cipher.createCipher("AES-CBC",c);t.start({iv:r});const o=e.util.binary.raw.encode(a),s=e.util.createBuffer(o);if(t.update(s),!t.finish())throw new Error("Encryption failed");return e.util.binary.raw.decode(t.output.getBytes())},this.decryptInternal=async({encRawKey:n,iv:i,ciphertext:a})=>{const c=e.util.binary.raw.encode(n),r=e.util.binary.raw.encode(i),t=e.cipher.createDecipher("AES-CBC",c);t.start({iv:r});const o=e.util.binary.raw.encode(a),s=e.util.createBuffer(o);if(t.update(s),!t.finish())throw new Error("Decryption failed");return e.util.binary.raw.decode(t.output.getBytes())},this.generateTag=async({macRawKey:n,macData:i,keyBitLength:a})=>{const c=`sha${a<<1}`,r=e.hmac.create();return r.start(c,e.util.binary.raw.encode(n)),r.update(e.util.binary.raw.encode(i)),e.util.binary.raw.decode(r.digest().getBytes()).slice(0,a>>3)}}}class w extends l.AbstractGcmCipher{constructor(){super(...arguments),this.encryptInternal=async({encRawKey:n,iv:i,plaintext:a,aad:c})=>{if(i.length!==12)throw new Error("IV must be 12 bytes for AES-GCM");const r=e.util.binary.raw.encode(n),t=e.util.binary.raw.encode(i),o=e.util.binary.raw.encode(c),s=e.util.binary.raw.encode(a),d=e.util.createBuffer(s),u=e.cipher.createCipher("AES-GCM",r);if(u.start({iv:t,additionalData:o,tagLength:128}),u.update(d),!u.finish())throw new Error("Encryption failed");return{ciphertext:e.util.binary.raw.decode(u.output.getBytes()),tag:e.util.binary.raw.decode(u.mode.tag.getBytes())}},this.decryptInternal=async({encRawKey:n,iv:i,ciphertext:a,tag:c,aad:r})=>{const t=e.util.binary.raw.encode(n),o=e.util.binary.raw.encode(i),s=e.util.binary.raw.encode(a),d=e.util.binary.raw.encode(c),u=e.util.createBuffer(d),b=e.util.binary.raw.encode(r),y=e.cipher.createDecipher("AES-GCM",t);if(y.start({iv:o,additionalData:b,tagLength:128,tag:u}),y.update(e.util.createBuffer(s)),!y.finish())throw new Error("Authentication failed: Invalid tag or corrupted data");return e.util.binary.raw.decode(y.output.getBytes())}}}class f extends l.AesCipher{constructor(){super({cbc:new h,gcm:new w})}}const B=new f;exports.NativeAesCipher=f;exports.NativeCbcCipher=h;exports.NativeGcmCipher=w;exports.nativeAesCipher=B;