aes-universal-native
Version:
Native implementation of aes-universal
2 lines (1 loc) • 2.46 kB
JavaScript
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("aes-universal"),e=require("node-forge");class f extends p.AbstractCbcCipher{constructor(y){super(y),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 b extends p.AbstractGcmCipher{constructor(y){super(y),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),l=e.util.createBuffer(s),u=e.cipher.createCipher("AES-GCM",r);if(u.start({iv:t,additionalData:o,tagLength:128}),u.update(l),!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),l=e.util.binary.raw.encode(c),u=e.util.createBuffer(l),w=e.util.binary.raw.encode(r),d=e.cipher.createDecipher("AES-GCM",t);if(d.start({iv:o,additionalData:w,tagLength:128,tag:u}),d.update(e.util.createBuffer(s)),!d.finish())throw new Error("Authentication failed: Invalid tag or corrupted data");return e.util.binary.raw.decode(d.output.getBytes())}}}class B extends p.AesCipher{constructor(y){super({cbc:f,gcm:b,randomBytes:y})}}exports.NativeAesCipher=B;exports.NativeCbcCipher=f;exports.NativeGcmCipher=b;