import CryptoJS from 'crypto-js'; import { ByteUtils } from './ByteUtils'; import { CipherKeyDTD } from '../models/CipherKeyDTD'; export class CipherUtil { static makeCipherKey(pvAlgorithm: string, pvUserKey: string): CipherKeyDTD { let keyBytes: Uint8Array; let ivBytes: Uint8Array; if ( !pvUserKey || '' === pvUserKey.trim() || 'eMateOnepass_SSO' === pvUserKey ) { keyBytes = ByteUtils.toBytesFromString('eMateOnepass_SSO'); ivBytes = ByteUtils.toBytesFromString('eMateOnepass_SSO'); } else if ( '201007GYCSSOPROJ' === pvUserKey || '201005KICSSOPROJ' === pvUserKey ) { keyBytes = ByteUtils.toBytesFromString(pvUserKey); ivBytes = ByteUtils.toBytesFromString(pvUserKey); } else { const bytes = ByteUtils.toBytesFromHexString( CryptoJS.SHA1(pvUserKey).toString() ); keyBytes = bytes.slice(0, 16); ivBytes = ByteUtils.toBytesFromHexString( CryptoJS.SHA1(ByteUtils.toHexString(bytes.slice(16, 20))).toString() ).slice(0, 16); } return { key: keyBytes, iv: ivBytes } as CipherKeyDTD; } }