mirror of
https://github.com/anidl/multi-downloader-nx.git
synced 2026-04-20 16:02:14 +00:00
45 lines
1.4 KiB
TypeScript
45 lines
1.4 KiB
TypeScript
import BN from 'bn.js';
|
|
import { ec as EC } from 'elliptic';
|
|
import ECCKey from './ecc_key';
|
|
import ElGamal, { Point } from './elgamal';
|
|
|
|
export default class XmlKey {
|
|
private _sharedPoint: ECCKey;
|
|
public sharedKeyX: BN;
|
|
public sharedKeyY: BN;
|
|
public _shared_key_x_bytes: Uint8Array;
|
|
public aesIv: Uint8Array;
|
|
public aesKey: Uint8Array;
|
|
|
|
constructor() {
|
|
this._sharedPoint = ECCKey.generate();
|
|
this.sharedKeyX = this._sharedPoint.keyPair.getPublic().getX();
|
|
this.sharedKeyY = this._sharedPoint.keyPair.getPublic().getY();
|
|
this._shared_key_x_bytes = ElGamal.toBytes(this.sharedKeyX);
|
|
this.aesIv = this._shared_key_x_bytes.subarray(0, 16);
|
|
this.aesKey = this._shared_key_x_bytes.subarray(16, 32);
|
|
}
|
|
|
|
getPoint(curve: EC): Point {
|
|
return curve.curve.point(this.sharedKeyX, this.sharedKeyY);
|
|
}
|
|
}
|
|
|
|
// Make it more undetectable (not working right now)
|
|
// import { randomBytes } from 'crypto'
|
|
// export default class XmlKey {
|
|
// public aesIv: Uint8Array
|
|
// public aesKey: Uint8Array
|
|
// public bytes: Uint8Array
|
|
|
|
// constructor() {
|
|
// this.aesIv = randomBytes(16)
|
|
// this.aesKey = randomBytes(16)
|
|
// this.bytes = new Uint8Array([...this.aesIv, ...this.aesKey])
|
|
|
|
// console.log('XML key (AES/CBC)')
|
|
// console.log('iv:', Buffer.from(this.aesIv).toString('hex'))
|
|
// console.log('key:', Buffer.from(this.aesKey).toString('hex'))
|
|
// console.log('bytes:', this.bytes)
|
|
// }
|
|
// }
|