UNPKG

xiot-core-xcp-ts

Version:
31 lines (30 loc) 1.44 kB
"use strict"; 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;