@iotize/tap
Version:
IoTize Device client for Javascript
29 lines • 2.68 kB
JavaScript
import { TapStreamWriter } from '@iotize/tap/client/impl';
import { hmacSHA256 } from '@iotize/tap/crypto';
export class DefaultSinglePacketKeyGenerator {
/**
* HMsg = UserName | IoTizeSN | PacketHeader1
*/
generate(options) {
const stream = new TapStreamWriter();
if (options.username.length > 16) {
// TODO constant
throw new Error(`Invalid username too long: ${options.username}`);
}
stream.writeStr(options.username);
if (options.serialNumber.length !== 18) {
// TODO constant
// TODO constant
throw new Error(`Invalid sn: ${options.serialNumber}. Length must be 18`);
}
stream.writeStr(options.serialNumber, 18);
if (options.headerBytes.length !== 12) {
throw new Error(`Invalid header length ${options.headerBytes.length}. Expected 12`);
}
stream.writeBytes(options.headerBytes);
const data = stream.toBytes;
const key = hmacSHA256(data, options.hashKey).slice(0, 16);
return key;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLXBhY2tldC1rZXktZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc2VydmljZS9pbXBsL3NpbmdsZS1wYWNrZXQvc3JjL2xpYi9jdXN0b20vc2luZ2xlLXBhY2tldC1rZXktZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHaEQsTUFBTSxPQUFPLCtCQUErQjtJQUcxQzs7T0FFRztJQUNJLFFBQVEsQ0FBQyxPQUF5QztRQUN2RCxNQUFNLE1BQU0sR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ3JDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFO1lBQ2hDLGdCQUFnQjtZQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztTQUNuRTtRQUNELE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLEtBQUssRUFBRSxFQUFFO1lBQ3RDLGdCQUFnQjtZQUNoQixnQkFBZ0I7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLE9BQU8sQ0FBQyxZQUFZLHFCQUFxQixDQUFDLENBQUM7U0FDM0U7UUFDRCxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDMUMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUU7WUFDckMsTUFBTSxJQUFJLEtBQUssQ0FDYix5QkFBeUIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLGVBQWUsQ0FDbkUsQ0FBQztTQUNIO1FBQ0QsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFdkMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUU1QixNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztDQUNGIn0=