xiot-core-xcp-ts
Version:
31 lines (30 loc) • 1.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.XcpKeyCreator = void 0;
const XcpKeyType_1 = require("./XcpKeyType");
const Uint8ArrayUtils_1 = require("../utils/Uint8ArrayUtils");
const hkdf_1 = require("@stablelib/hkdf");
const sha512_1 = require("@stablelib/sha512");
const SESSION_VERIFY_START_SALT = 'Session-Verify-Encrypt-Salt';
const SESSION_VERIFY_START_INFO = 'Session-Verify-Encrypt-Info';
const SESSION_SALT = 'Session-Encryption-Salt';
const DEVICE_TO_SERVER = 'Session-D2S-Encryption-Info';
const SERVER_TO_DEVICE = 'Session-S2D-Encryption-Info';
class XcpKeyCreator {
static create(sharedKey, type) {
switch (type) {
case XcpKeyType_1.XcpKeyType.SESSION_VERIFY_ENCRYPT_KEY:
return this.digest(SESSION_VERIFY_START_SALT, SESSION_VERIFY_START_INFO, sharedKey);
case XcpKeyType_1.XcpKeyType.DEVICE_TO_SERVER_KEY:
return this.digest(SESSION_SALT, DEVICE_TO_SERVER, sharedKey);
case XcpKeyType_1.XcpKeyType.SERVER_TO_DEVICE_KEY:
return this.digest(SESSION_SALT, SERVER_TO_DEVICE, sharedKey);
}
return null;
}
static digest(salt, info, key) {
const hkdf = new hkdf_1.HKDF(sha512_1.SHA512, key, Uint8ArrayUtils_1.StringToUint8Array(salt), Uint8ArrayUtils_1.StringToUint8Array(info));
return hkdf.expand(32);
}
}
exports.XcpKeyCreator = XcpKeyCreator;