werift 0.22.3 → 0.22.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/lib/common/src/log.js +1 -4
  2. package/lib/common/src/log.js.map +1 -1
  3. package/lib/common/src/transport.d.ts +2 -2
  4. package/lib/common/src/transport.js +4 -7
  5. package/lib/common/src/transport.js.map +1 -1
  6. package/lib/dtls/src/cipher/create.js +1 -4
  7. package/lib/dtls/src/cipher/create.js.map +1 -1
  8. package/lib/dtls/src/cipher/namedCurve.js +2 -5
  9. package/lib/dtls/src/cipher/namedCurve.js.map +1 -1
  10. package/lib/dtls/src/cipher/prf.js +2 -5
  11. package/lib/dtls/src/cipher/prf.js.map +1 -1
  12. package/lib/dtls/src/cipher/suites/aead.js +1 -34
  13. package/lib/dtls/src/cipher/suites/aead.js.map +1 -1
  14. package/lib/dtls/src/context/cipher.js +1 -34
  15. package/lib/dtls/src/context/cipher.js.map +1 -1
  16. package/lib/ice/src/dns/lookup.d.ts +2 -2
  17. package/lib/ice/src/dns/lookup.js +4 -7
  18. package/lib/ice/src/dns/lookup.js.map +1 -1
  19. package/lib/ice/src/ice.js +8 -44
  20. package/lib/ice/src/ice.js.map +1 -1
  21. package/lib/ice/src/stun/attributes.js +6 -42
  22. package/lib/ice/src/stun/attributes.js.map +1 -1
  23. package/lib/ice/src/stun/message.js +1 -4
  24. package/lib/ice/src/stun/message.js.map +1 -1
  25. package/lib/ice/src/utils.d.ts +1 -1
  26. package/lib/ice/src/utils.js +4 -7
  27. package/lib/ice/src/utils.js.map +1 -1
  28. package/lib/index.mjs +35 -26
  29. package/lib/nonstandard/index.mjs +13 -10
  30. package/lib/rtp/src/extra/container/mp4/container.js +1 -34
  31. package/lib/rtp/src/extra/container/mp4/container.js.map +1 -1
  32. package/lib/rtp/src/extra/container/mp4/h264.js +1 -4
  33. package/lib/rtp/src/extra/container/mp4/h264.js.map +1 -1
  34. package/lib/rtp/src/extra/container/mp4/sps-parser.js +1 -4
  35. package/lib/rtp/src/extra/container/mp4/sps-parser.js.map +1 -1
  36. package/lib/rtp/src/extra/container/webm/container.js +1 -34
  37. package/lib/rtp/src/extra/container/webm/container.js.map +1 -1
  38. package/lib/rtp/src/extra/container/webm/util.js +1 -34
  39. package/lib/rtp/src/extra/container/webm/util.js.map +1 -1
  40. package/lib/rtp/src/srtp/context/context.js +4 -7
  41. package/lib/rtp/src/srtp/context/context.js.map +1 -1
  42. package/lib/sctp/src/chunk.js +1 -4
  43. package/lib/sctp/src/chunk.js.map +1 -1
  44. package/lib/sctp/src/index.d.ts +1 -0
  45. package/lib/sctp/src/index.js +4 -1
  46. package/lib/sctp/src/index.js.map +1 -1
  47. package/lib/webrtc/src/helper.d.ts +1 -1
  48. package/lib/webrtc/src/helper.js +2 -5
  49. package/lib/webrtc/src/helper.js.map +1 -1
  50. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js +3 -0
  51. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js.map +1 -1
  52. package/lib/webrtc/src/peerConnection.js +1 -1
  53. package/lib/webrtc/src/peerConnection.js.map +1 -1
  54. package/lib/webrtc/src/sdp.js +1 -34
  55. package/lib/webrtc/src/sdp.js.map +1 -1
  56. package/lib/webrtc/src/sdpManager.js +9 -1
  57. package/lib/webrtc/src/sdpManager.js.map +1 -1
  58. package/lib/webrtc/src/secureTransportManager.js +1 -1
  59. package/lib/webrtc/src/secureTransportManager.js.map +1 -1
  60. package/package.json +3 -2
@@ -1,10 +1,7 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.debug = exports.WeriftError = void 0;
7
- const debug_1 = __importDefault(require("debug"));
4
+ const debug_1 = require("debug");
8
5
  class WeriftError extends Error {
9
6
  constructor(props) {
10
7
  super(props.message);
@@ -1 +1 @@
1
- {"version":3,"file":"log.js","sourceRoot":"","sources":["../../../../common/src/log.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,MAAa,WAAY,SAAQ,KAAK;IAKpC,YAAY,KAAwD;QAClE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QALvB;;;;;WAAiB;QACjB;;;;;WAAiB;QACjB;;;;;WAAc;IAId,CAAC;IAED,MAAM;QACJ,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACjD,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC;IACJ,CAAC;CACF;AAhBD,kCAgBC;AAEY,QAAA,KAAK,GAAG,eAAK,CAAC,KAAK,CAAC","sourcesContent":["import Debug from \"debug\";\n\nexport class WeriftError extends Error {\n message!: string;\n payload?: object;\n path?: string;\n\n constructor(props: Pick<WeriftError, \"message\" | \"payload\" | \"path\">) {\n super(props.message);\n }\n\n toJSON() {\n return {\n message: this.message,\n payload: JSON.parse(JSON.stringify(this.payload)),\n path: this.path,\n };\n }\n}\n\nexport const debug = Debug.debug;\n"]}
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../../../../common/src/log.ts"],"names":[],"mappings":";;;AAAA,iCAA0B;AAE1B,MAAa,WAAY,SAAQ,KAAK;IAKpC,YAAY,KAAwD;QAClE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QALvB;;;;;WAAiB;QACjB;;;;;WAAiB;QACjB;;;;;WAAc;IAId,CAAC;IAED,MAAM;QACJ,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACjD,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC;IACJ,CAAC;CACF;AAhBD,kCAgBC;AAEY,QAAA,KAAK,GAAG,eAAK,CAAC,KAAK,CAAC","sourcesContent":["import Debug from \"debug\";\n\nexport class WeriftError extends Error {\n message!: string;\n payload?: object;\n path?: string;\n\n constructor(props: Pick<WeriftError, \"message\" | \"payload\" | \"path\">) {\n super(props.message);\n }\n\n toJSON() {\n return {\n message: this.message,\n payload: JSON.parse(JSON.stringify(this.payload)),\n path: this.path,\n };\n }\n}\n\nexport const debug = Debug.debug;\n"]}
@@ -1,6 +1,6 @@
1
1
  import { type RemoteInfo, type Socket, type SocketType } from "dgram";
2
- import net from "net";
3
- import { type AddressInfo } from "net";
2
+ import * as net from "node:net";
3
+ import { type AddressInfo } from "node:net";
4
4
  import { type Address, type InterfaceAddresses } from "./network";
5
5
  export declare class UdpTransport implements Transport {
6
6
  private socketType;
@@ -1,12 +1,9 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.TcpTransport = exports.UdpTransport = void 0;
7
4
  const dgram_1 = require("dgram");
8
- const net_1 = __importDefault(require("net"));
9
- const net_2 = require("net");
5
+ const net = require("node:net");
6
+ const node_net_1 = require("node:net");
10
7
  const log_1 = require("./log");
11
8
  const network_1 = require("./network");
12
9
  const log = (0, log_1.debug)("werift-ice:packages/ice/src/transport.ts");
@@ -59,7 +56,7 @@ class UdpTransport {
59
56
  configurable: true,
60
57
  writable: true,
61
58
  value: async (data, addr) => {
62
- if (addr && !net_1.default.isIP(addr[0])) {
59
+ if (addr && !net.isIP(addr[0])) {
63
60
  // if address is not resolved, need to use send callback to handle dns failure.
64
61
  return new Promise((r, f) => {
65
62
  this.socket.send(data, addr[1], addr[0], (error) => {
@@ -211,7 +208,7 @@ class TcpTransport {
211
208
  }
212
209
  this.connecting = new Promise((r, f) => {
213
210
  try {
214
- this.client = (0, net_2.connect)({ port: this.addr[1], host: this.addr[0] }, r);
211
+ this.client = (0, node_net_1.connect)({ port: this.addr[1], host: this.addr[0] }, r);
215
212
  }
216
213
  catch (error) {
217
214
  f(error);
@@ -1 +1 @@
1
- {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../common/src/transport.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type RemoteInfo,\n type Socket,\n type SocketType,\n createSocket,\n} from \"dgram\";\n\nimport net from \"net\";\n\nimport { type AddressInfo, type Socket as TcpSocket, connect } from \"net\";\nimport { debug } from \"./log\";\nimport {\n type Address,\n type InterfaceAddresses,\n findPort,\n interfaceAddress,\n normalizeFamilyNodeV18,\n} from \"./network\";\n\nconst log = debug(\"werift-ice:packages/ice/src/transport.ts\");\n\nexport class UdpTransport implements Transport {\n readonly type = \"udp\";\n readonly socket: Socket;\n rinfo?: Partial<Pick<RemoteInfo, \"address\" | \"port\">>;\n onData: (data: Buffer, addr: Address) => void = () => {};\n closed: boolean = false;\n\n private constructor(\n private socketType: SocketType,\n private options: {\n portRange?: [number, number];\n interfaceAddresses?: InterfaceAddresses;\n port?: number;\n } = {},\n ) {\n this.socket = createSocket(socketType);\n this.socket.on(\"message\", (data, info) => {\n if (normalizeFamilyNodeV18(info.family) === 6) {\n [info.address] = info.address.split(\"%\"); // example fe80::1d3a:8751:4ffd:eb80%wlp82s0\n }\n this.rinfo = info;\n try {\n this.onData(data, [info.address, info.port]);\n } catch (error) {\n log(\"onData error\", error);\n }\n });\n }\n\n static async init(\n type: SocketType,\n options: {\n portRange?: [number, number];\n port?: number;\n interfaceAddresses?: InterfaceAddresses;\n } = {},\n ) {\n const transport = new UdpTransport(type, options);\n await transport.init();\n return transport;\n }\n\n private async init() {\n const address = interfaceAddress(\n this.socketType,\n this.options.interfaceAddresses,\n );\n if (this.options.port) {\n this.socket.bind({ port: this.options.port, address });\n } else if (this.options.portRange) {\n const port = await findPort(\n this.options.portRange[0],\n this.options.portRange[1],\n this.socketType,\n this.options.interfaceAddresses,\n );\n this.socket.bind({ port, address });\n } else {\n this.socket.bind({ address });\n }\n await new Promise((r) => this.socket.once(\"listening\", r));\n }\n\n send = async (data: Buffer, addr?: Address) => {\n if (addr && !net.isIP(addr[0])) {\n // if address is not resolved, need to use send callback to handle dns failure.\n return new Promise<void>((r, f) => {\n this.socket.send(data, addr![1], addr![0], (error) => {\n if (error) {\n log(\"send error\", addr, data);\n f(error);\n } else {\n r();\n }\n });\n });\n } else {\n addr = addr ?? [this.rinfo?.address!, this.rinfo?.port!];\n // a preestablished remote address does not need a callback to verify dns.\n // this is faster because event loop is not used per packet.\n this.socket.send(data, addr[1], addr[0]);\n }\n };\n\n get address() {\n return this.socket.address();\n }\n\n get host() {\n return this.socket.address().address;\n }\n\n get port() {\n return this.socket.address().port;\n }\n\n close = () =>\n new Promise<void>((r) => {\n this.closed = true;\n this.socket.once(\"close\", r);\n try {\n this.socket.close();\n } catch (error) {\n r();\n }\n });\n}\n\nexport class TcpTransport implements Transport {\n readonly type = \"tcp\";\n private connecting!: Promise<void>;\n private client!: TcpSocket;\n onData: (data: Buffer, addr: Address) => void = () => {};\n closed = false;\n\n private constructor(private addr: Address) {\n this.connect();\n }\n\n private connect() {\n if (this.closed) {\n return;\n }\n\n if (this.client) {\n this.client.destroy();\n }\n this.connecting = new Promise((r, f) => {\n try {\n this.client = connect({ port: this.addr[1], host: this.addr[0] }, r);\n } catch (error) {\n f(error);\n }\n });\n\n this.client.on(\"data\", (data) => {\n const addr = [\n this.client.remoteAddress!,\n this.client.remotePort!,\n ] as Address;\n this.onData(data, addr);\n });\n this.client.on(\"end\", () => {\n this.connect();\n });\n this.client.on(\"error\", (error) => {\n console.log(\"error\", error);\n });\n }\n\n private async init() {\n await this.connecting;\n }\n\n static async init(addr: Address) {\n const transport = new TcpTransport(addr);\n await transport.init();\n return transport;\n }\n\n get address() {\n return {} as AddressInfo;\n }\n\n send = async (data: Buffer, addr?: Address) => {\n await this.connecting;\n this.client.write(data, (err) => {\n if (err) {\n console.log(\"err\", err);\n }\n });\n };\n\n close = async () => {\n this.closed = true;\n this.client.destroy();\n };\n}\n\nexport interface Transport {\n type: string;\n address: AddressInfo;\n closed: boolean;\n onData: (data: Buffer, addr: Address) => void;\n send: (data: Buffer, addr?: Address) => Promise<void>;\n close: () => Promise<void>;\n}\n"]}
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../common/src/transport.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type RemoteInfo,\n type Socket,\n type SocketType,\n createSocket,\n} from \"dgram\";\n\nimport * as net from \"node:net\";\n\nimport { type AddressInfo, type Socket as TcpSocket, connect } from \"node:net\";\nimport { debug } from \"./log\";\nimport {\n type Address,\n type InterfaceAddresses,\n findPort,\n interfaceAddress,\n normalizeFamilyNodeV18,\n} from \"./network\";\n\nconst log = debug(\"werift-ice:packages/ice/src/transport.ts\");\n\nexport class UdpTransport implements Transport {\n readonly type = \"udp\";\n readonly socket: Socket;\n rinfo?: Partial<Pick<RemoteInfo, \"address\" | \"port\">>;\n onData: (data: Buffer, addr: Address) => void = () => {};\n closed: boolean = false;\n\n private constructor(\n private socketType: SocketType,\n private options: {\n portRange?: [number, number];\n interfaceAddresses?: InterfaceAddresses;\n port?: number;\n } = {},\n ) {\n this.socket = createSocket(socketType);\n this.socket.on(\"message\", (data, info) => {\n if (normalizeFamilyNodeV18(info.family) === 6) {\n [info.address] = info.address.split(\"%\"); // example fe80::1d3a:8751:4ffd:eb80%wlp82s0\n }\n this.rinfo = info;\n try {\n this.onData(data, [info.address, info.port]);\n } catch (error) {\n log(\"onData error\", error);\n }\n });\n }\n\n static async init(\n type: SocketType,\n options: {\n portRange?: [number, number];\n port?: number;\n interfaceAddresses?: InterfaceAddresses;\n } = {},\n ) {\n const transport = new UdpTransport(type, options);\n await transport.init();\n return transport;\n }\n\n private async init() {\n const address = interfaceAddress(\n this.socketType,\n this.options.interfaceAddresses,\n );\n if (this.options.port) {\n this.socket.bind({ port: this.options.port, address });\n } else if (this.options.portRange) {\n const port = await findPort(\n this.options.portRange[0],\n this.options.portRange[1],\n this.socketType,\n this.options.interfaceAddresses,\n );\n this.socket.bind({ port, address });\n } else {\n this.socket.bind({ address });\n }\n await new Promise((r) => this.socket.once(\"listening\", r));\n }\n\n send = async (data: Buffer, addr?: Address) => {\n if (addr && !net.isIP(addr[0])) {\n // if address is not resolved, need to use send callback to handle dns failure.\n return new Promise<void>((r, f) => {\n this.socket.send(data, addr![1], addr![0], (error) => {\n if (error) {\n log(\"send error\", addr, data);\n f(error);\n } else {\n r();\n }\n });\n });\n } else {\n addr = addr ?? [this.rinfo?.address!, this.rinfo?.port!];\n // a preestablished remote address does not need a callback to verify dns.\n // this is faster because event loop is not used per packet.\n this.socket.send(data, addr[1], addr[0]);\n }\n };\n\n get address() {\n return this.socket.address();\n }\n\n get host() {\n return this.socket.address().address;\n }\n\n get port() {\n return this.socket.address().port;\n }\n\n close = () =>\n new Promise<void>((r) => {\n this.closed = true;\n this.socket.once(\"close\", r);\n try {\n this.socket.close();\n } catch (error) {\n r();\n }\n });\n}\n\nexport class TcpTransport implements Transport {\n readonly type = \"tcp\";\n private connecting!: Promise<void>;\n private client!: TcpSocket;\n onData: (data: Buffer, addr: Address) => void = () => {};\n closed = false;\n\n private constructor(private addr: Address) {\n this.connect();\n }\n\n private connect() {\n if (this.closed) {\n return;\n }\n\n if (this.client) {\n this.client.destroy();\n }\n this.connecting = new Promise((r, f) => {\n try {\n this.client = connect({ port: this.addr[1], host: this.addr[0] }, r);\n } catch (error) {\n f(error);\n }\n });\n\n this.client.on(\"data\", (data) => {\n const addr = [\n this.client.remoteAddress!,\n this.client.remotePort!,\n ] as Address;\n this.onData(data, addr);\n });\n this.client.on(\"end\", () => {\n this.connect();\n });\n this.client.on(\"error\", (error) => {\n console.log(\"error\", error);\n });\n }\n\n private async init() {\n await this.connecting;\n }\n\n static async init(addr: Address) {\n const transport = new TcpTransport(addr);\n await transport.init();\n return transport;\n }\n\n get address() {\n return {} as AddressInfo;\n }\n\n send = async (data: Buffer, addr?: Address) => {\n await this.connecting;\n this.client.write(data, (err) => {\n if (err) {\n console.log(\"err\", err);\n }\n });\n };\n\n close = async () => {\n this.closed = true;\n this.client.destroy();\n };\n}\n\nexport interface Transport {\n type: string;\n address: AddressInfo;\n closed: boolean;\n onData: (data: Buffer, addr: Address) => void;\n send: (data: Buffer, addr?: Address) => Promise<void>;\n close: () => Promise<void>;\n}\n"]}
@@ -1,12 +1,9 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.createCipher = createCipher;
7
4
  exports.createAEADCipher = createAEADCipher;
8
5
  const key_exchange_1 = require("./key-exchange");
9
- const aead_1 = __importDefault(require("./suites/aead"));
6
+ const aead_1 = require("./suites/aead");
10
7
  const cipherSuites = {
11
8
  TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: 0xc02b,
12
9
  TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384: 0xc02c,
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../../../dtls/src/cipher/create.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CipherGCMTypes } from \"crypto\";\nimport {\n type KeyExchange,\n createECDHEECDSAKeyExchange,\n createECDHEPSKKeyExchange,\n createECDHERSAKeyExchange,\n createPSKKeyExchange,\n createRSAKeyExchange,\n} from \"./key-exchange\";\nimport AEADCipher from \"./suites/aead\";\n\nconst cipherSuites = {\n TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: 0xc02b,\n TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384: 0xc02c,\n TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256: 0xc02f,\n TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384: 0xc030,\n TLS_RSA_WITH_AES_128_GCM_SHA256: 0x009c,\n TLS_RSA_WITH_AES_256_GCM_SHA384: 0x009d,\n TLS_PSK_WITH_AES_128_GCM_SHA256: 0x00a8,\n TLS_PSK_WITH_AES_256_GCM_SHA384: 0x00a9,\n TLS_ECDHE_PSK_WITH_AES_128_GCM_SHA256: 0xd001,\n TLS_ECDHE_PSK_WITH_AES_256_GCM_SHA384: 0xd002,\n TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256: 0xccac,\n TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256: 0xcca9,\n TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256: 0xcca8,\n TLS_PSK_WITH_CHACHA20_POLY1305_SHA256: 0xccab,\n};\n\nconst AEAD_AES_128_GCM = {\n K_LEN: 16, // Length of a key.\n N_MIN: 12, // Min nonce length.\n N_MAX: 12, // Max nonce length.\n P_MAX: 2 ** 36 - 31, // Max length of a plaintext.\n\n // Max safe int in js is 2 ** 53. So, use this value\n // instead of 2 ** 61 as described in rfc5116.\n A_MAX: 2 ** 53 - 1, // Max length of an additional data.\n C_MAX: 2 ** 36 - 15, // Cipher text length.\n};\n\nconst AEAD_AES_256_GCM = {\n K_LEN: 32, // Length of a key.\n N_MIN: 12, // Min nonce length.\n N_MAX: 12, // Max nonce length.\n P_MAX: 2 ** 36 - 31, // Max length of a plaintext.\n\n // Note: see above.\n A_MAX: 2 ** 53 - 1, // Max length of an additional data.\n C_MAX: 2 ** 36 - 15, // Cipher text length.\n};\n\nconst RSA_KEY_EXCHANGE = createRSAKeyExchange();\nconst ECDHE_RSA_KEY_EXCHANGE = createECDHERSAKeyExchange();\nconst ECDHE_ECDSA_KEY_EXCHANGE = createECDHEECDSAKeyExchange();\nconst PSK_KEY_EXCHANGE = createPSKKeyExchange();\nconst ECDHE_PSK_KEY_EXCHANGE = createECDHEPSKKeyExchange();\n\n/**\n * Convert cipher value to cipher instance.\n * @param {number} cipher\n */\nexport function createCipher(cipher: number) {\n switch (cipher) {\n case cipherSuites.TLS_RSA_WITH_AES_128_GCM_SHA256:\n return createAEADCipher(\n cipherSuites.TLS_RSA_WITH_AES_128_GCM_SHA256,\n \"TLS_RSA_WITH_AES_128_GCM_SHA256\",\n \"aes-128-gcm\",\n RSA_KEY_EXCHANGE,\n AEAD_AES_128_GCM,\n );\n case cipherSuites.TLS_RSA_WITH_AES_256_GCM_SHA384:\n return createAEADCipher(\n cipherSuites.TLS_RSA_WITH_AES_256_GCM_SHA384,\n \"TLS_RSA_WITH_AES_256_GCM_SHA384\",\n \"aes-256-gcm\",\n RSA_KEY_EXCHANGE,\n AEAD_AES_256_GCM,\n \"sha384\",\n );\n case cipherSuites.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:\n return createAEADCipher(\n cipherSuites.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,\n \"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\",\n \"aes-128-gcm\",\n ECDHE_RSA_KEY_EXCHANGE,\n AEAD_AES_128_GCM,\n );\n case cipherSuites.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:\n return createAEADCipher(\n cipherSuites.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,\n \"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\",\n \"aes-256-gcm\",\n ECDHE_RSA_KEY_EXCHANGE,\n AEAD_AES_256_GCM,\n \"sha384\",\n );\n case cipherSuites.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:\n return createAEADCipher(\n cipherSuites.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,\n \"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256\",\n \"aes-128-gcm\",\n ECDHE_ECDSA_KEY_EXCHANGE,\n AEAD_AES_128_GCM,\n );\n case cipherSuites.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384:\n return createAEADCipher(\n cipherSuites.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,\n \"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\",\n \"aes-256-gcm\",\n ECDHE_ECDSA_KEY_EXCHANGE,\n AEAD_AES_256_GCM,\n \"sha384\",\n );\n case cipherSuites.TLS_PSK_WITH_AES_128_GCM_SHA256:\n return createAEADCipher(\n cipherSuites.TLS_PSK_WITH_AES_128_GCM_SHA256,\n \"TLS_PSK_WITH_AES_128_GCM_SHA256\",\n \"aes-128-gcm\",\n PSK_KEY_EXCHANGE,\n AEAD_AES_128_GCM,\n \"sha256\",\n );\n case cipherSuites.TLS_PSK_WITH_AES_256_GCM_SHA384:\n return createAEADCipher(\n cipherSuites.TLS_PSK_WITH_AES_256_GCM_SHA384,\n \"TLS_PSK_WITH_AES_256_GCM_SHA384\",\n \"aes-256-gcm\",\n PSK_KEY_EXCHANGE,\n AEAD_AES_256_GCM,\n \"sha384\",\n );\n case cipherSuites.TLS_ECDHE_PSK_WITH_AES_128_GCM_SHA256:\n return createAEADCipher(\n cipherSuites.TLS_ECDHE_PSK_WITH_AES_128_GCM_SHA256,\n \"TLS_ECDHE_PSK_WITH_AES_128_GCM_SHA256\",\n \"aes-128-gcm\",\n ECDHE_PSK_KEY_EXCHANGE,\n AEAD_AES_128_GCM,\n \"sha256\",\n );\n case cipherSuites.TLS_ECDHE_PSK_WITH_AES_256_GCM_SHA384:\n return createAEADCipher(\n cipherSuites.TLS_ECDHE_PSK_WITH_AES_256_GCM_SHA384,\n \"TLS_ECDHE_PSK_WITH_AES_256_GCM_SHA384\",\n \"aes-256-gcm\",\n ECDHE_PSK_KEY_EXCHANGE,\n AEAD_AES_256_GCM,\n \"sha384\",\n );\n default:\n break;\n }\n\n return null as any as AEADCipher;\n}\n\n/**\n * @param {number} id An internal id of cipher suite.\n * @param {string} name A valid cipher suite name.\n * @param {string} block A valid nodejs cipher name.\n * @param {KeyExchange} kx Key exchange type.\n * @param {Object} constants Cipher specific constants.\n * @param {string} hash\n * @returns {AEADCipher}\n */\nexport function createAEADCipher(\n id: number,\n name: string,\n block: CipherGCMTypes,\n kx: KeyExchange,\n constants: { K_LEN: number; N_MAX: number },\n hash = \"sha256\",\n) {\n const cipher = new AEADCipher();\n\n cipher.id = id;\n cipher.name = name;\n cipher.blockAlgorithm = block;\n cipher.kx = kx;\n cipher.hashAlgorithm = hash;\n\n cipher.keyLength = constants.K_LEN;\n cipher.nonceLength = constants.N_MAX;\n\n // RFC5288, sec. 3\n cipher.nonceImplicitLength = 4;\n cipher.nonceExplicitLength = 8;\n\n cipher.ivLength = cipher.nonceImplicitLength;\n\n cipher.authTagLength = 16;\n\n return cipher;\n}\n"]}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../../../dtls/src/cipher/create.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CipherGCMTypes } from \"crypto\";\nimport {\n type KeyExchange,\n createECDHEECDSAKeyExchange,\n createECDHEPSKKeyExchange,\n createECDHERSAKeyExchange,\n createPSKKeyExchange,\n createRSAKeyExchange,\n} from \"./key-exchange\";\nimport AEADCipher from \"./suites/aead\";\n\nconst cipherSuites = {\n TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: 0xc02b,\n TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384: 0xc02c,\n TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256: 0xc02f,\n TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384: 0xc030,\n TLS_RSA_WITH_AES_128_GCM_SHA256: 0x009c,\n TLS_RSA_WITH_AES_256_GCM_SHA384: 0x009d,\n TLS_PSK_WITH_AES_128_GCM_SHA256: 0x00a8,\n TLS_PSK_WITH_AES_256_GCM_SHA384: 0x00a9,\n TLS_ECDHE_PSK_WITH_AES_128_GCM_SHA256: 0xd001,\n TLS_ECDHE_PSK_WITH_AES_256_GCM_SHA384: 0xd002,\n TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256: 0xccac,\n TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256: 0xcca9,\n TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256: 0xcca8,\n TLS_PSK_WITH_CHACHA20_POLY1305_SHA256: 0xccab,\n};\n\nconst AEAD_AES_128_GCM = {\n K_LEN: 16, // Length of a key.\n N_MIN: 12, // Min nonce length.\n N_MAX: 12, // Max nonce length.\n P_MAX: 2 ** 36 - 31, // Max length of a plaintext.\n\n // Max safe int in js is 2 ** 53. So, use this value\n // instead of 2 ** 61 as described in rfc5116.\n A_MAX: 2 ** 53 - 1, // Max length of an additional data.\n C_MAX: 2 ** 36 - 15, // Cipher text length.\n};\n\nconst AEAD_AES_256_GCM = {\n K_LEN: 32, // Length of a key.\n N_MIN: 12, // Min nonce length.\n N_MAX: 12, // Max nonce length.\n P_MAX: 2 ** 36 - 31, // Max length of a plaintext.\n\n // Note: see above.\n A_MAX: 2 ** 53 - 1, // Max length of an additional data.\n C_MAX: 2 ** 36 - 15, // Cipher text length.\n};\n\nconst RSA_KEY_EXCHANGE = createRSAKeyExchange();\nconst ECDHE_RSA_KEY_EXCHANGE = createECDHERSAKeyExchange();\nconst ECDHE_ECDSA_KEY_EXCHANGE = createECDHEECDSAKeyExchange();\nconst PSK_KEY_EXCHANGE = createPSKKeyExchange();\nconst ECDHE_PSK_KEY_EXCHANGE = createECDHEPSKKeyExchange();\n\n/**\n * Convert cipher value to cipher instance.\n * @param {number} cipher\n */\nexport function createCipher(cipher: number) {\n switch (cipher) {\n case cipherSuites.TLS_RSA_WITH_AES_128_GCM_SHA256:\n return createAEADCipher(\n cipherSuites.TLS_RSA_WITH_AES_128_GCM_SHA256,\n \"TLS_RSA_WITH_AES_128_GCM_SHA256\",\n \"aes-128-gcm\",\n RSA_KEY_EXCHANGE,\n AEAD_AES_128_GCM,\n );\n case cipherSuites.TLS_RSA_WITH_AES_256_GCM_SHA384:\n return createAEADCipher(\n cipherSuites.TLS_RSA_WITH_AES_256_GCM_SHA384,\n \"TLS_RSA_WITH_AES_256_GCM_SHA384\",\n \"aes-256-gcm\",\n RSA_KEY_EXCHANGE,\n AEAD_AES_256_GCM,\n \"sha384\",\n );\n case cipherSuites.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:\n return createAEADCipher(\n cipherSuites.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,\n \"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\",\n \"aes-128-gcm\",\n ECDHE_RSA_KEY_EXCHANGE,\n AEAD_AES_128_GCM,\n );\n case cipherSuites.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:\n return createAEADCipher(\n cipherSuites.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,\n \"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\",\n \"aes-256-gcm\",\n ECDHE_RSA_KEY_EXCHANGE,\n AEAD_AES_256_GCM,\n \"sha384\",\n );\n case cipherSuites.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:\n return createAEADCipher(\n cipherSuites.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,\n \"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256\",\n \"aes-128-gcm\",\n ECDHE_ECDSA_KEY_EXCHANGE,\n AEAD_AES_128_GCM,\n );\n case cipherSuites.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384:\n return createAEADCipher(\n cipherSuites.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,\n \"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\",\n \"aes-256-gcm\",\n ECDHE_ECDSA_KEY_EXCHANGE,\n AEAD_AES_256_GCM,\n \"sha384\",\n );\n case cipherSuites.TLS_PSK_WITH_AES_128_GCM_SHA256:\n return createAEADCipher(\n cipherSuites.TLS_PSK_WITH_AES_128_GCM_SHA256,\n \"TLS_PSK_WITH_AES_128_GCM_SHA256\",\n \"aes-128-gcm\",\n PSK_KEY_EXCHANGE,\n AEAD_AES_128_GCM,\n \"sha256\",\n );\n case cipherSuites.TLS_PSK_WITH_AES_256_GCM_SHA384:\n return createAEADCipher(\n cipherSuites.TLS_PSK_WITH_AES_256_GCM_SHA384,\n \"TLS_PSK_WITH_AES_256_GCM_SHA384\",\n \"aes-256-gcm\",\n PSK_KEY_EXCHANGE,\n AEAD_AES_256_GCM,\n \"sha384\",\n );\n case cipherSuites.TLS_ECDHE_PSK_WITH_AES_128_GCM_SHA256:\n return createAEADCipher(\n cipherSuites.TLS_ECDHE_PSK_WITH_AES_128_GCM_SHA256,\n \"TLS_ECDHE_PSK_WITH_AES_128_GCM_SHA256\",\n \"aes-128-gcm\",\n ECDHE_PSK_KEY_EXCHANGE,\n AEAD_AES_128_GCM,\n \"sha256\",\n );\n case cipherSuites.TLS_ECDHE_PSK_WITH_AES_256_GCM_SHA384:\n return createAEADCipher(\n cipherSuites.TLS_ECDHE_PSK_WITH_AES_256_GCM_SHA384,\n \"TLS_ECDHE_PSK_WITH_AES_256_GCM_SHA384\",\n \"aes-256-gcm\",\n ECDHE_PSK_KEY_EXCHANGE,\n AEAD_AES_256_GCM,\n \"sha384\",\n );\n default:\n break;\n }\n\n return null as any as AEADCipher;\n}\n\n/**\n * @param {number} id An internal id of cipher suite.\n * @param {string} name A valid cipher suite name.\n * @param {string} block A valid nodejs cipher name.\n * @param {KeyExchange} kx Key exchange type.\n * @param {Object} constants Cipher specific constants.\n * @param {string} hash\n * @returns {AEADCipher}\n */\nexport function createAEADCipher(\n id: number,\n name: string,\n block: CipherGCMTypes,\n kx: KeyExchange,\n constants: { K_LEN: number; N_MAX: number },\n hash = \"sha256\",\n) {\n const cipher = new AEADCipher();\n\n cipher.id = id;\n cipher.name = name;\n cipher.blockAlgorithm = block;\n cipher.kx = kx;\n cipher.hashAlgorithm = hash;\n\n cipher.keyLength = constants.K_LEN;\n cipher.nonceLength = constants.N_MAX;\n\n // RFC5288, sec. 3\n cipher.nonceImplicitLength = 4;\n cipher.nonceExplicitLength = 8;\n\n cipher.ivLength = cipher.nonceImplicitLength;\n\n cipher.authTagLength = 16;\n\n return cipher;\n}\n"]}
@@ -1,10 +1,7 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.generateKeyPair = generateKeyPair;
7
- const tweetnacl_1 = __importDefault(require("tweetnacl"));
4
+ const nacl = require("tweetnacl");
8
5
  const const_1 = require("./const");
9
6
  const ec_1 = require("./ec");
10
7
  function generateKeyPair(namedCurve) {
@@ -18,7 +15,7 @@ function generateKeyPair(namedCurve) {
18
15
  };
19
16
  }
20
17
  case const_1.NamedCurveAlgorithm.x25519_29: {
21
- const keys = tweetnacl_1.default.box.keyPair();
18
+ const keys = nacl.box.keyPair();
22
19
  return {
23
20
  curve: namedCurve,
24
21
  privateKey: Buffer.from(keys.secretKey.buffer),
@@ -1 +1 @@
1
- {"version":3,"file":"namedCurve.js","sourceRoot":"","sources":["../../../../../dtls/src/cipher/namedCurve.ts"],"names":[],"mappings":";;;;;AAWA,0CAyBC;AApCD,0DAA6B;AAE7B,mCAAyE;AACzE,6BAAmC;AAQnC,SAAgB,eAAe,CAC7B,UAAgC;IAEhC,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,2BAAmB,CAAC,YAAY,CAAC,CAAC,CAAC;YACtC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,IAAA,gBAAW,GAAE,CAAC;YAEhD,OAAO;gBACL,KAAK,EAAE,UAAU;gBACjB,UAAU;gBACV,SAAS;aACV,CAAC;QACJ,CAAC;QACD,KAAK,2BAAmB,CAAC,SAAS,CAAC,CAAC,CAAC;YACnC,MAAM,IAAI,GAAG,mBAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YAEhC,OAAO;gBACL,KAAK,EAAE,UAAU;gBACjB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;gBAC9C,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;aAC9C,CAAC;QACJ,CAAC;QACD;YACE,MAAM,IAAI,KAAK,EAAE,CAAC;IACtB,CAAC;AACH,CAAC","sourcesContent":["import nacl from \"tweetnacl\";\n\nimport { NamedCurveAlgorithm, type NamedCurveAlgorithms } from \"./const\";\nimport { p256Keypair } from \"./ec\";\n\nexport interface NamedCurveKeyPair {\n curve: NamedCurveAlgorithms;\n publicKey: Buffer;\n privateKey: Buffer;\n}\n\nexport function generateKeyPair(\n namedCurve: NamedCurveAlgorithms,\n): NamedCurveKeyPair {\n switch (namedCurve) {\n case NamedCurveAlgorithm.secp256r1_23: {\n const { privateKey, publicKey } = p256Keypair();\n\n return {\n curve: namedCurve,\n privateKey,\n publicKey,\n };\n }\n case NamedCurveAlgorithm.x25519_29: {\n const keys = nacl.box.keyPair();\n\n return {\n curve: namedCurve,\n privateKey: Buffer.from(keys.secretKey.buffer),\n publicKey: Buffer.from(keys.publicKey.buffer),\n };\n }\n default:\n throw new Error();\n }\n}\n"]}
1
+ {"version":3,"file":"namedCurve.js","sourceRoot":"","sources":["../../../../../dtls/src/cipher/namedCurve.ts"],"names":[],"mappings":";;AAWA,0CAyBC;AApCD,kCAAkC;AAElC,mCAAyE;AACzE,6BAAmC;AAQnC,SAAgB,eAAe,CAC7B,UAAgC;IAEhC,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,2BAAmB,CAAC,YAAY,CAAC,CAAC,CAAC;YACtC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,IAAA,gBAAW,GAAE,CAAC;YAEhD,OAAO;gBACL,KAAK,EAAE,UAAU;gBACjB,UAAU;gBACV,SAAS;aACV,CAAC;QACJ,CAAC;QACD,KAAK,2BAAmB,CAAC,SAAS,CAAC,CAAC,CAAC;YACnC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YAEhC,OAAO;gBACL,KAAK,EAAE,UAAU;gBACjB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;gBAC9C,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;aAC9C,CAAC;QACJ,CAAC;QACD;YACE,MAAM,IAAI,KAAK,EAAE,CAAC;IACtB,CAAC;AACH,CAAC","sourcesContent":["import * as nacl from \"tweetnacl\";\n\nimport { NamedCurveAlgorithm, type NamedCurveAlgorithms } from \"./const\";\nimport { p256Keypair } from \"./ec\";\n\nexport interface NamedCurveKeyPair {\n curve: NamedCurveAlgorithms;\n publicKey: Buffer;\n privateKey: Buffer;\n}\n\nexport function generateKeyPair(\n namedCurve: NamedCurveAlgorithms,\n): NamedCurveKeyPair {\n switch (namedCurve) {\n case NamedCurveAlgorithm.secp256r1_23: {\n const { privateKey, publicKey } = p256Keypair();\n\n return {\n curve: namedCurve,\n privateKey,\n publicKey,\n };\n }\n case NamedCurveAlgorithm.x25519_29: {\n const keys = nacl.box.keyPair();\n\n return {\n curve: namedCurve,\n privateKey: Buffer.from(keys.secretKey.buffer),\n publicKey: Buffer.from(keys.publicKey.buffer),\n };\n }\n default:\n throw new Error();\n }\n}\n"]}
@@ -1,7 +1,4 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.prfPreMasterSecret = prfPreMasterSecret;
7
4
  exports.hmac = hmac;
@@ -16,7 +13,7 @@ exports.prfVerifyDataServer = prfVerifyDataServer;
16
13
  exports.prfEncryptionKeys = prfEncryptionKeys;
17
14
  const crypto_1 = require("crypto");
18
15
  const binary_data_1 = require("@shinyoshiaki/binary-data");
19
- const tweetnacl_1 = __importDefault(require("tweetnacl"));
16
+ const nacl = require("tweetnacl");
20
17
  const const_1 = require("./const");
21
18
  const ec_1 = require("./ec");
22
19
  function prfPreMasterSecret(publicKey, privateKey, curve) {
@@ -24,7 +21,7 @@ function prfPreMasterSecret(publicKey, privateKey, curve) {
24
21
  case const_1.NamedCurveAlgorithm.secp256r1_23:
25
22
  return (0, ec_1.p256PreMasterSecret)({ publicKey, privateKey });
26
23
  case const_1.NamedCurveAlgorithm.x25519_29:
27
- return Buffer.from(tweetnacl_1.default.scalarMult(privateKey, publicKey));
24
+ return Buffer.from(nacl.scalarMult(privateKey, publicKey));
28
25
  default:
29
26
  throw new Error();
30
27
  }
@@ -1 +1 @@
1
- {"version":3,"file":"prf.js","sourceRoot":"","sources":["../../../../../dtls/src/cipher/prf.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash, createHmac } from \"crypto\";\nimport { createDecode } from \"@shinyoshiaki/binary-data\";\nimport nacl from \"tweetnacl\";\n\nimport { NamedCurveAlgorithm, type NamedCurveAlgorithms } from \"./const\";\nimport { p256PreMasterSecret } from \"./ec\";\n\nexport function prfPreMasterSecret(\n publicKey: Buffer,\n privateKey: Buffer,\n curve: NamedCurveAlgorithms,\n) {\n switch (curve) {\n case NamedCurveAlgorithm.secp256r1_23:\n return p256PreMasterSecret({ publicKey, privateKey });\n case NamedCurveAlgorithm.x25519_29:\n return Buffer.from(nacl.scalarMult(privateKey, publicKey));\n default:\n throw new Error();\n }\n}\n\nexport function hmac(algorithm: string, secret: Buffer, data: Buffer) {\n const hash = createHmac(algorithm, secret);\n hash.update(data);\n return hash.digest();\n}\n\nexport function prfPHash(\n secret: Buffer,\n seed: Buffer,\n requestedLegth: number,\n algorithm = \"sha256\",\n) {\n const totalLength = requestedLegth;\n const bufs: Buffer[] = [];\n let Ai = seed; // A0\n\n do {\n Ai = hmac(algorithm, secret, Ai); // A(i) = HMAC(secret, A(i-1))\n const output = hmac(algorithm, secret, Buffer.concat([Ai, seed]));\n\n bufs.push(output);\n requestedLegth -= output.length; // eslint-disable-line no-param-reassign\n } while (requestedLegth > 0);\n\n return Buffer.concat(bufs, totalLength);\n}\n\nexport function prfMasterSecret(\n preMasterSecret: Buffer,\n clientRandom: Buffer,\n serverRandom: Buffer,\n) {\n const seed = Buffer.concat([\n Buffer.from(\"master secret\"),\n clientRandom,\n serverRandom,\n ]);\n return prfPHash(preMasterSecret, seed, 48);\n}\n\nexport function prfExtendedMasterSecret(\n preMasterSecret: Buffer,\n handshakes: Buffer,\n) {\n const sessionHash = hash(\"sha256\", handshakes);\n const label = \"extended master secret\";\n return prfPHash(\n preMasterSecret,\n Buffer.concat([Buffer.from(label), sessionHash]),\n 48,\n );\n}\n\nexport function exportKeyingMaterial(\n label: string,\n length: number,\n masterSecret: Buffer,\n localRandom: Buffer,\n remoteRandom: Buffer,\n isClient: boolean,\n) {\n const clientRandom = isClient ? localRandom : remoteRandom;\n const serverRandom = isClient ? remoteRandom : localRandom;\n const seed = Buffer.concat([Buffer.from(label), clientRandom, serverRandom]);\n return prfPHash(masterSecret, seed, length);\n}\n\nexport function hash(algorithm: string, data: Buffer) {\n return createHash(algorithm).update(data).digest();\n}\n\nexport function prfVerifyData(\n masterSecret: Buffer,\n handshakes: Buffer,\n label: string,\n size = 12,\n) {\n const bytes = hash(\"sha256\", handshakes);\n return prfPHash(\n masterSecret,\n Buffer.concat([Buffer.from(label), bytes]),\n size,\n );\n}\n\nexport function prfVerifyDataClient(masterSecret: Buffer, handshakes: Buffer) {\n return prfVerifyData(masterSecret, handshakes, \"client finished\");\n}\n\nexport function prfVerifyDataServer(masterSecret: Buffer, handshakes: Buffer) {\n return prfVerifyData(masterSecret, handshakes, \"server finished\");\n}\n\nexport function prfEncryptionKeys(\n masterSecret: Buffer,\n clientRandom: Buffer,\n serverRandom: Buffer,\n prfKeyLen: number,\n prfIvLen: number,\n prfNonceLen: number,\n algorithm = \"sha256\",\n) {\n const size = prfKeyLen * 2 + prfIvLen * 2;\n const secret = masterSecret;\n const seed = Buffer.concat([serverRandom, clientRandom]);\n const keyBlock = prfPHash(\n secret,\n Buffer.concat([Buffer.from(\"key expansion\"), seed]),\n size,\n algorithm,\n );\n const stream = createDecode(keyBlock);\n\n const clientWriteKey = stream.readBuffer(prfKeyLen);\n const serverWriteKey = stream.readBuffer(prfKeyLen);\n\n const clientNonceImplicit = stream.readBuffer(prfIvLen);\n const serverNonceImplicit = stream.readBuffer(prfIvLen);\n\n const clientNonce = Buffer.alloc(prfNonceLen, 0);\n const serverNonce = Buffer.alloc(prfNonceLen, 0);\n\n clientNonceImplicit.copy(clientNonce, 0);\n serverNonceImplicit.copy(serverNonce, 0);\n\n return { clientWriteKey, serverWriteKey, clientNonce, serverNonce };\n}\n"]}
1
+ {"version":3,"file":"prf.js","sourceRoot":"","sources":["../../../../../dtls/src/cipher/prf.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash, createHmac } from \"crypto\";\nimport { createDecode } from \"@shinyoshiaki/binary-data\";\nimport * as nacl from \"tweetnacl\";\n\nimport { NamedCurveAlgorithm, type NamedCurveAlgorithms } from \"./const\";\nimport { p256PreMasterSecret } from \"./ec\";\n\nexport function prfPreMasterSecret(\n publicKey: Buffer,\n privateKey: Buffer,\n curve: NamedCurveAlgorithms,\n) {\n switch (curve) {\n case NamedCurveAlgorithm.secp256r1_23:\n return p256PreMasterSecret({ publicKey, privateKey });\n case NamedCurveAlgorithm.x25519_29:\n return Buffer.from(nacl.scalarMult(privateKey, publicKey));\n default:\n throw new Error();\n }\n}\n\nexport function hmac(algorithm: string, secret: Buffer, data: Buffer) {\n const hash = createHmac(algorithm, secret);\n hash.update(data);\n return hash.digest();\n}\n\nexport function prfPHash(\n secret: Buffer,\n seed: Buffer,\n requestedLegth: number,\n algorithm = \"sha256\",\n) {\n const totalLength = requestedLegth;\n const bufs: Buffer[] = [];\n let Ai = seed; // A0\n\n do {\n Ai = hmac(algorithm, secret, Ai); // A(i) = HMAC(secret, A(i-1))\n const output = hmac(algorithm, secret, Buffer.concat([Ai, seed]));\n\n bufs.push(output);\n requestedLegth -= output.length; // eslint-disable-line no-param-reassign\n } while (requestedLegth > 0);\n\n return Buffer.concat(bufs, totalLength);\n}\n\nexport function prfMasterSecret(\n preMasterSecret: Buffer,\n clientRandom: Buffer,\n serverRandom: Buffer,\n) {\n const seed = Buffer.concat([\n Buffer.from(\"master secret\"),\n clientRandom,\n serverRandom,\n ]);\n return prfPHash(preMasterSecret, seed, 48);\n}\n\nexport function prfExtendedMasterSecret(\n preMasterSecret: Buffer,\n handshakes: Buffer,\n) {\n const sessionHash = hash(\"sha256\", handshakes);\n const label = \"extended master secret\";\n return prfPHash(\n preMasterSecret,\n Buffer.concat([Buffer.from(label), sessionHash]),\n 48,\n );\n}\n\nexport function exportKeyingMaterial(\n label: string,\n length: number,\n masterSecret: Buffer,\n localRandom: Buffer,\n remoteRandom: Buffer,\n isClient: boolean,\n) {\n const clientRandom = isClient ? localRandom : remoteRandom;\n const serverRandom = isClient ? remoteRandom : localRandom;\n const seed = Buffer.concat([Buffer.from(label), clientRandom, serverRandom]);\n return prfPHash(masterSecret, seed, length);\n}\n\nexport function hash(algorithm: string, data: Buffer) {\n return createHash(algorithm).update(data).digest();\n}\n\nexport function prfVerifyData(\n masterSecret: Buffer,\n handshakes: Buffer,\n label: string,\n size = 12,\n) {\n const bytes = hash(\"sha256\", handshakes);\n return prfPHash(\n masterSecret,\n Buffer.concat([Buffer.from(label), bytes]),\n size,\n );\n}\n\nexport function prfVerifyDataClient(masterSecret: Buffer, handshakes: Buffer) {\n return prfVerifyData(masterSecret, handshakes, \"client finished\");\n}\n\nexport function prfVerifyDataServer(masterSecret: Buffer, handshakes: Buffer) {\n return prfVerifyData(masterSecret, handshakes, \"server finished\");\n}\n\nexport function prfEncryptionKeys(\n masterSecret: Buffer,\n clientRandom: Buffer,\n serverRandom: Buffer,\n prfKeyLen: number,\n prfIvLen: number,\n prfNonceLen: number,\n algorithm = \"sha256\",\n) {\n const size = prfKeyLen * 2 + prfIvLen * 2;\n const secret = masterSecret;\n const seed = Buffer.concat([serverRandom, clientRandom]);\n const keyBlock = prfPHash(\n secret,\n Buffer.concat([Buffer.from(\"key expansion\"), seed]),\n size,\n algorithm,\n );\n const stream = createDecode(keyBlock);\n\n const clientWriteKey = stream.readBuffer(prfKeyLen);\n const serverWriteKey = stream.readBuffer(prfKeyLen);\n\n const clientNonceImplicit = stream.readBuffer(prfIvLen);\n const serverNonceImplicit = stream.readBuffer(prfIvLen);\n\n const clientNonce = Buffer.alloc(prfNonceLen, 0);\n const serverNonce = Buffer.alloc(prfNonceLen, 0);\n\n clientNonceImplicit.copy(clientNonce, 0);\n serverNonceImplicit.copy(serverNonce, 0);\n\n return { clientWriteKey, serverWriteKey, clientNonce, serverNonce };\n}\n"]}
@@ -1,43 +1,10 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  Object.defineProperty(exports, "__esModule", { value: true });
36
3
  const crypto_1 = require("crypto");
37
4
  const helper_1 = require("../../helper");
38
5
  const common_1 = require("../../imports/common");
39
6
  const prf_1 = require("../prf");
40
- const abstract_1 = __importStar(require("./abstract"));
7
+ const abstract_1 = require("./abstract");
41
8
  const err = (0, common_1.debug)("werift-dtls : packages/dtls/src/cipher/suites/aead.ts : err");
42
9
  /**
43
10
  * This class implements AEAD cipher family.
@@ -1 +1 @@
1
- {"version":3,"file":"aead.js","sourceRoot":"","sources":["../../../../../../dtls/src/cipher/suites/aead.ts"],"names":[],"mappings":"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","sourcesContent":["import { createCipheriv, createDecipheriv } from \"crypto\";\n\nimport { dumpBuffer, getObjectSummary } from \"../../helper\";\nimport { debug } from \"../../imports/common\";\nimport { prfEncryptionKeys } from \"../prf\";\nimport Cipher, {\n type CipherHeader,\n SessionType,\n type SessionTypes,\n} from \"./abstract\";\n\nconst err = debug(\n \"werift-dtls : packages/dtls/src/cipher/suites/aead.ts : err\",\n);\n\n/**\n * This class implements AEAD cipher family.\n */\nexport default class AEADCipher extends Cipher {\n keyLength = 0;\n nonceLength = 0;\n ivLength = 0;\n authTagLength = 0;\n\n nonceImplicitLength = 0;\n nonceExplicitLength = 0;\n\n clientWriteKey?: Buffer;\n serverWriteKey?: Buffer;\n\n clientNonce?: Buffer;\n serverNonce?: Buffer;\n\n constructor() {\n super();\n }\n\n get summary() {\n return getObjectSummary(this);\n }\n\n init(masterSecret: Buffer, serverRandom: Buffer, clientRandom: Buffer) {\n const keys = prfEncryptionKeys(\n masterSecret,\n clientRandom,\n serverRandom,\n this.keyLength,\n this.ivLength,\n this.nonceLength,\n this.hashAlgorithm,\n );\n\n this.clientWriteKey = keys.clientWriteKey;\n this.serverWriteKey = keys.serverWriteKey;\n this.clientNonce = keys.clientNonce;\n this.serverNonce = keys.serverNonce;\n }\n\n /**\n * Encrypt message.\n */\n encrypt(type: SessionTypes, data: Buffer, header: CipherHeader) {\n const isClient = type === SessionType.CLIENT;\n const iv = isClient ? this.clientNonce : this.serverNonce;\n const writeKey = isClient ? this.clientWriteKey : this.serverWriteKey;\n if (!iv || !writeKey) throw new Error();\n\n iv.writeUInt16BE(header.epoch, this.nonceImplicitLength);\n iv.writeUIntBE(header.sequenceNumber, this.nonceImplicitLength + 2, 6);\n\n const explicitNonce = iv.slice(this.nonceImplicitLength);\n\n const additionalBuffer = this.encodeAdditionalBuffer(header, data.length);\n\n const cipher = createCipheriv(this.blockAlgorithm!, writeKey, iv, {\n authTagLength: this.authTagLength,\n });\n\n cipher.setAAD(additionalBuffer, {\n plaintextLength: data.length,\n });\n\n const headPart = cipher.update(data);\n const finalPart = cipher.final();\n const authTag = cipher.getAuthTag();\n\n return Buffer.concat([explicitNonce, headPart, finalPart, authTag]);\n }\n\n encodeAdditionalBuffer(header: CipherHeader, dataLength: number) {\n const additionalBuffer = Buffer.alloc(13);\n\n additionalBuffer.writeUInt16BE(header.epoch, 0);\n additionalBuffer.writeUintBE(header.sequenceNumber, 2, 6);\n additionalBuffer.writeUInt8(header.type, 8);\n additionalBuffer.writeUInt16BE(header.version, 9);\n additionalBuffer.writeUInt16BE(dataLength, 11);\n\n return additionalBuffer;\n }\n\n /**\n * Decrypt message.\n */\n decrypt(type: SessionTypes, data: Buffer, header: CipherHeader) {\n const isClient = type === SessionType.CLIENT;\n const iv = isClient ? this.serverNonce : this.clientNonce;\n const writeKey = isClient ? this.serverWriteKey : this.clientWriteKey;\n if (!iv || !writeKey) throw new Error();\n\n const explicitNonce = data.subarray(0, this.nonceExplicitLength);\n\n explicitNonce.copy(iv, this.nonceImplicitLength);\n\n const encrypted = data.subarray(\n this.nonceExplicitLength,\n data.length - this.authTagLength,\n );\n const authTag = data.subarray(data.length - this.authTagLength);\n\n const additionalBuffer = this.encodeAdditionalBuffer(\n header,\n encrypted.length,\n );\n\n const decipher = createDecipheriv(this.blockAlgorithm!, writeKey, iv, {\n authTagLength: this.authTagLength,\n });\n\n decipher.setAuthTag(authTag);\n decipher.setAAD(additionalBuffer, {\n plaintextLength: encrypted.length,\n });\n\n const headPart = decipher.update(encrypted);\n try {\n const finalPart = decipher.final();\n return finalPart.length > 0\n ? Buffer.concat([headPart, finalPart])\n : headPart;\n } catch (error) {\n err(\n \"decrypt failed\",\n error,\n type,\n dumpBuffer(data),\n header,\n this.summary,\n );\n throw error;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"aead.js","sourceRoot":"","sources":["../../../../../../dtls/src/cipher/suites/aead.ts"],"names":[],"mappings":"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","sourcesContent":["import { createCipheriv, createDecipheriv } from \"crypto\";\n\nimport { dumpBuffer, getObjectSummary } from \"../../helper\";\nimport { debug } from \"../../imports/common\";\nimport { prfEncryptionKeys } from \"../prf\";\nimport Cipher, {\n type CipherHeader,\n SessionType,\n type SessionTypes,\n} from \"./abstract\";\n\nconst err = debug(\n \"werift-dtls : packages/dtls/src/cipher/suites/aead.ts : err\",\n);\n\n/**\n * This class implements AEAD cipher family.\n */\nexport default class AEADCipher extends Cipher {\n keyLength = 0;\n nonceLength = 0;\n ivLength = 0;\n authTagLength = 0;\n\n nonceImplicitLength = 0;\n nonceExplicitLength = 0;\n\n clientWriteKey?: Buffer;\n serverWriteKey?: Buffer;\n\n clientNonce?: Buffer;\n serverNonce?: Buffer;\n\n constructor() {\n super();\n }\n\n get summary() {\n return getObjectSummary(this);\n }\n\n init(masterSecret: Buffer, serverRandom: Buffer, clientRandom: Buffer) {\n const keys = prfEncryptionKeys(\n masterSecret,\n clientRandom,\n serverRandom,\n this.keyLength,\n this.ivLength,\n this.nonceLength,\n this.hashAlgorithm,\n );\n\n this.clientWriteKey = keys.clientWriteKey;\n this.serverWriteKey = keys.serverWriteKey;\n this.clientNonce = keys.clientNonce;\n this.serverNonce = keys.serverNonce;\n }\n\n /**\n * Encrypt message.\n */\n encrypt(type: SessionTypes, data: Buffer, header: CipherHeader) {\n const isClient = type === SessionType.CLIENT;\n const iv = isClient ? this.clientNonce : this.serverNonce;\n const writeKey = isClient ? this.clientWriteKey : this.serverWriteKey;\n if (!iv || !writeKey) throw new Error();\n\n iv.writeUInt16BE(header.epoch, this.nonceImplicitLength);\n iv.writeUIntBE(header.sequenceNumber, this.nonceImplicitLength + 2, 6);\n\n const explicitNonce = iv.slice(this.nonceImplicitLength);\n\n const additionalBuffer = this.encodeAdditionalBuffer(header, data.length);\n\n const cipher = createCipheriv(this.blockAlgorithm!, writeKey, iv, {\n authTagLength: this.authTagLength,\n });\n\n cipher.setAAD(additionalBuffer, {\n plaintextLength: data.length,\n });\n\n const headPart = cipher.update(data);\n const finalPart = cipher.final();\n const authTag = cipher.getAuthTag();\n\n return Buffer.concat([explicitNonce, headPart, finalPart, authTag]);\n }\n\n encodeAdditionalBuffer(header: CipherHeader, dataLength: number) {\n const additionalBuffer = Buffer.alloc(13);\n\n additionalBuffer.writeUInt16BE(header.epoch, 0);\n additionalBuffer.writeUintBE(header.sequenceNumber, 2, 6);\n additionalBuffer.writeUInt8(header.type, 8);\n additionalBuffer.writeUInt16BE(header.version, 9);\n additionalBuffer.writeUInt16BE(dataLength, 11);\n\n return additionalBuffer;\n }\n\n /**\n * Decrypt message.\n */\n decrypt(type: SessionTypes, data: Buffer, header: CipherHeader) {\n const isClient = type === SessionType.CLIENT;\n const iv = isClient ? this.serverNonce : this.clientNonce;\n const writeKey = isClient ? this.serverWriteKey : this.clientWriteKey;\n if (!iv || !writeKey) throw new Error();\n\n const explicitNonce = data.subarray(0, this.nonceExplicitLength);\n\n explicitNonce.copy(iv, this.nonceImplicitLength);\n\n const encrypted = data.subarray(\n this.nonceExplicitLength,\n data.length - this.authTagLength,\n );\n const authTag = data.subarray(data.length - this.authTagLength);\n\n const additionalBuffer = this.encodeAdditionalBuffer(\n header,\n encrypted.length,\n );\n\n const decipher = createDecipheriv(this.blockAlgorithm!, writeKey, iv, {\n authTagLength: this.authTagLength,\n });\n\n decipher.setAuthTag(authTag);\n decipher.setAAD(additionalBuffer, {\n plaintextLength: encrypted.length,\n });\n\n const headPart = decipher.update(encrypted);\n try {\n const finalPart = decipher.final();\n return finalPart.length > 0\n ? Buffer.concat([headPart, finalPart])\n : headPart;\n } catch (error) {\n err(\n \"decrypt failed\",\n error,\n type,\n dumpBuffer(data),\n header,\n this.summary,\n );\n throw error;\n }\n }\n}\n"]}
@@ -1,43 +1,10 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  var _a;
36
3
  Object.defineProperty(exports, "__esModule", { value: true });
37
4
  exports.CipherContext = void 0;
38
5
  const crypto_1 = require("crypto");
39
6
  const x509_1 = require("@fidm/x509");
40
- const x509 = __importStar(require("@peculiar/x509"));
7
+ const x509 = require("@peculiar/x509");
41
8
  const binary_data_1 = require("@shinyoshiaki/binary-data");
42
9
  const const_1 = require("../cipher/const");
43
10
  const prf_1 = require("../cipher/prf");
@@ -1 +1 @@
1
- {"version":3,"file":"cipher.js","sourceRoot":"","sources":["../../../../../dtls/src/context/cipher.ts"],"names":[],"mappings":"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","sourcesContent":["import { createSign, randomBytes, webcrypto } from \"crypto\";\nimport { Certificate, PrivateKey } from \"@fidm/x509\";\nimport * as x509 from \"@peculiar/x509\";\nimport { encode, types } from \"@shinyoshiaki/binary-data\";\n\nimport {\n type CipherSuites,\n CurveType,\n HashAlgorithm,\n NamedCurveAlgorithm,\n type NamedCurveAlgorithms,\n SignatureAlgorithm,\n type SignatureHash,\n} from \"../cipher/const\";\nimport type { NamedCurveKeyPair } from \"../cipher/namedCurve\";\nimport { prfVerifyDataClient, prfVerifyDataServer } from \"../cipher/prf\";\nimport { SessionType, type SessionTypes } from \"../cipher/suites/abstract\";\nimport type AEADCipher from \"../cipher/suites/aead\";\nimport type { DtlsRandom } from \"../handshake/random\";\nimport type { DtlsPlaintext } from \"../record/message/plaintext\";\n\nconst crypto = webcrypto;\nx509.cryptoProvider.set(crypto as any);\n\nexport class CipherContext {\n localRandom!: DtlsRandom;\n remoteRandom!: DtlsRandom;\n cipherSuite!: CipherSuites;\n remoteCertificate?: Buffer;\n remoteKeyPair!: Partial<NamedCurveKeyPair>;\n localKeyPair!: NamedCurveKeyPair;\n masterSecret!: Buffer;\n cipher!: AEADCipher;\n namedCurve!: NamedCurveAlgorithms;\n signatureHashAlgorithm?: SignatureHash;\n localCert!: Buffer;\n localPrivateKey!: PrivateKey;\n\n constructor(\n public sessionType: SessionTypes,\n public certPem?: string,\n public keyPem?: string,\n signatureHashAlgorithm?: SignatureHash,\n ) {\n if (certPem && keyPem && signatureHashAlgorithm) {\n this.parseX509(certPem, keyPem, signatureHashAlgorithm);\n }\n }\n\n /**\n *\n * @param signatureHash\n * @param namedCurveAlgorithm necessary when use ecdsa\n */\n static createSelfSignedCertificateWithKey = async (\n signatureHash: SignatureHash,\n namedCurveAlgorithm?: NamedCurveAlgorithms,\n ) => {\n const signatureAlgorithmName = (() => {\n switch (signatureHash.signature) {\n case SignatureAlgorithm.rsa_1:\n return \"RSASSA-PKCS1-v1_5\";\n case SignatureAlgorithm.ecdsa_3:\n return \"ECDSA\";\n }\n })();\n const hash = (() => {\n switch (signatureHash.hash) {\n case HashAlgorithm.sha256_4:\n return \"SHA-256\";\n }\n })();\n const namedCurve = (() => {\n switch (namedCurveAlgorithm) {\n case NamedCurveAlgorithm.secp256r1_23:\n return \"P-256\";\n case NamedCurveAlgorithm.x25519_29:\n // todo fix (X25519 not supported with ECDSA)\n if (signatureAlgorithmName === \"ECDSA\") {\n return \"P-256\";\n }\n return \"X25519\";\n default: {\n if (signatureAlgorithmName === \"ECDSA\") return \"P-256\";\n if (signatureAlgorithmName === \"RSASSA-PKCS1-v1_5\") return \"X25519\";\n }\n }\n })();\n const alg = (() => {\n switch (signatureAlgorithmName) {\n case \"ECDSA\":\n return { name: signatureAlgorithmName, hash, namedCurve };\n case \"RSASSA-PKCS1-v1_5\":\n return {\n name: signatureAlgorithmName,\n hash,\n publicExponent: new Uint8Array([1, 0, 1]),\n modulusLength: 2048,\n };\n }\n })();\n\n const keys = (await crypto.subtle.generateKey(alg, true, [\n \"sign\",\n \"verify\",\n ])) as webcrypto.CryptoKeyPair;\n\n const cert = await x509.X509CertificateGenerator.createSelfSigned({\n serialNumber: randomBytes(8).toString(\"hex\"),\n name: \"C=AU, ST=Some-State, O=Internet Widgits Pty Ltd\",\n notBefore: new Date(),\n notAfter: new Date(Date.now() + 10 * 365 * 24 * 60 * 60 * 1000),\n signingAlgorithm: alg,\n keys,\n });\n\n const certPem = cert.toString(\"pem\");\n const keyPem = x509.PemConverter.encode(\n await crypto.subtle.exportKey(\"pkcs8\", keys.privateKey as any),\n \"private key\",\n );\n\n return { certPem, keyPem, signatureHash };\n };\n\n encryptPacket(pkt: DtlsPlaintext) {\n const header = pkt.recordLayerHeader;\n const version =\n (header.protocolVersion.major << 8) | header.protocolVersion.minor;\n const enc = this.cipher.encrypt(this.sessionType, pkt.fragment, {\n type: header.contentType,\n version,\n epoch: header.epoch,\n sequenceNumber: header.sequenceNumber,\n });\n pkt.fragment = enc;\n pkt.recordLayerHeader.contentLen = enc.length;\n return pkt;\n }\n\n decryptPacket(pkt: DtlsPlaintext) {\n const header = pkt.recordLayerHeader;\n const version =\n (header.protocolVersion.major << 8) | header.protocolVersion.minor;\n const dec = this.cipher.decrypt(this.sessionType, pkt.fragment, {\n type: header.contentType,\n version,\n epoch: header.epoch,\n sequenceNumber: header.sequenceNumber,\n });\n return dec;\n }\n\n verifyData(buf: Buffer) {\n if (this.sessionType === SessionType.CLIENT)\n return prfVerifyDataClient(this.masterSecret, buf);\n else return prfVerifyDataServer(this.masterSecret, buf);\n }\n\n signatureData(data: Buffer, hash: string) {\n const signature = createSign(hash).update(data);\n const key = this.localPrivateKey.toPEM().toString();\n const signed = signature.sign(key);\n return signed;\n }\n\n generateKeySignature(hashAlgorithm: string) {\n const clientRandom =\n this.sessionType === SessionType.CLIENT\n ? this.localRandom\n : this.remoteRandom;\n const serverRandom =\n this.sessionType === SessionType.SERVER\n ? this.localRandom\n : this.remoteRandom;\n\n const sig = this.valueKeySignature(\n clientRandom.serialize(),\n serverRandom.serialize(),\n this.localKeyPair.publicKey,\n this.namedCurve,\n );\n\n const enc = this.localPrivateKey.sign(sig, hashAlgorithm);\n return enc;\n }\n\n parseX509(certPem: string, keyPem: string, signatureHash: SignatureHash) {\n const cert = Certificate.fromPEM(Buffer.from(certPem));\n const sec = PrivateKey.fromPEM(Buffer.from(keyPem));\n this.localCert = cert.raw;\n this.localPrivateKey = sec;\n this.signatureHashAlgorithm = signatureHash;\n }\n\n private valueKeySignature(\n clientRandom: Buffer,\n serverRandom: Buffer,\n publicKey: Buffer,\n namedCurve: number,\n ) {\n const serverParams = Buffer.from(\n encode(\n {\n type: CurveType.named_curve_3,\n curve: namedCurve,\n len: publicKey.length,\n },\n { type: types.uint8, curve: types.uint16be, len: types.uint8 },\n ).slice(),\n );\n return Buffer.concat([clientRandom, serverRandom, serverParams, publicKey]);\n }\n}\n"]}
1
+ {"version":3,"file":"cipher.js","sourceRoot":"","sources":["../../../../../dtls/src/context/cipher.ts"],"names":[],"mappings":"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","sourcesContent":["import { createSign, randomBytes, webcrypto } from \"crypto\";\nimport { Certificate, PrivateKey } from \"@fidm/x509\";\nimport * as x509 from \"@peculiar/x509\";\nimport { encode, types } from \"@shinyoshiaki/binary-data\";\n\nimport {\n type CipherSuites,\n CurveType,\n HashAlgorithm,\n NamedCurveAlgorithm,\n type NamedCurveAlgorithms,\n SignatureAlgorithm,\n type SignatureHash,\n} from \"../cipher/const\";\nimport type { NamedCurveKeyPair } from \"../cipher/namedCurve\";\nimport { prfVerifyDataClient, prfVerifyDataServer } from \"../cipher/prf\";\nimport { SessionType, type SessionTypes } from \"../cipher/suites/abstract\";\nimport type AEADCipher from \"../cipher/suites/aead\";\nimport type { DtlsRandom } from \"../handshake/random\";\nimport type { DtlsPlaintext } from \"../record/message/plaintext\";\n\nconst crypto = webcrypto;\nx509.cryptoProvider.set(crypto as any);\n\nexport class CipherContext {\n localRandom!: DtlsRandom;\n remoteRandom!: DtlsRandom;\n cipherSuite!: CipherSuites;\n remoteCertificate?: Buffer;\n remoteKeyPair!: Partial<NamedCurveKeyPair>;\n localKeyPair!: NamedCurveKeyPair;\n masterSecret!: Buffer;\n cipher!: AEADCipher;\n namedCurve!: NamedCurveAlgorithms;\n signatureHashAlgorithm?: SignatureHash;\n localCert!: Buffer;\n localPrivateKey!: PrivateKey;\n\n constructor(\n public sessionType: SessionTypes,\n public certPem?: string,\n public keyPem?: string,\n signatureHashAlgorithm?: SignatureHash,\n ) {\n if (certPem && keyPem && signatureHashAlgorithm) {\n this.parseX509(certPem, keyPem, signatureHashAlgorithm);\n }\n }\n\n /**\n *\n * @param signatureHash\n * @param namedCurveAlgorithm necessary when use ecdsa\n */\n static createSelfSignedCertificateWithKey = async (\n signatureHash: SignatureHash,\n namedCurveAlgorithm?: NamedCurveAlgorithms,\n ) => {\n const signatureAlgorithmName = (() => {\n switch (signatureHash.signature) {\n case SignatureAlgorithm.rsa_1:\n return \"RSASSA-PKCS1-v1_5\";\n case SignatureAlgorithm.ecdsa_3:\n return \"ECDSA\";\n }\n })();\n const hash = (() => {\n switch (signatureHash.hash) {\n case HashAlgorithm.sha256_4:\n return \"SHA-256\";\n }\n })();\n const namedCurve = (() => {\n switch (namedCurveAlgorithm) {\n case NamedCurveAlgorithm.secp256r1_23:\n return \"P-256\";\n case NamedCurveAlgorithm.x25519_29:\n // todo fix (X25519 not supported with ECDSA)\n if (signatureAlgorithmName === \"ECDSA\") {\n return \"P-256\";\n }\n return \"X25519\";\n default: {\n if (signatureAlgorithmName === \"ECDSA\") return \"P-256\";\n if (signatureAlgorithmName === \"RSASSA-PKCS1-v1_5\") return \"X25519\";\n }\n }\n })();\n const alg = (() => {\n switch (signatureAlgorithmName) {\n case \"ECDSA\":\n return { name: signatureAlgorithmName, hash, namedCurve };\n case \"RSASSA-PKCS1-v1_5\":\n return {\n name: signatureAlgorithmName,\n hash,\n publicExponent: new Uint8Array([1, 0, 1]),\n modulusLength: 2048,\n };\n }\n })();\n\n const keys = (await crypto.subtle.generateKey(alg, true, [\n \"sign\",\n \"verify\",\n ])) as webcrypto.CryptoKeyPair;\n\n const cert = await x509.X509CertificateGenerator.createSelfSigned({\n serialNumber: randomBytes(8).toString(\"hex\"),\n name: \"C=AU, ST=Some-State, O=Internet Widgits Pty Ltd\",\n notBefore: new Date(),\n notAfter: new Date(Date.now() + 10 * 365 * 24 * 60 * 60 * 1000),\n signingAlgorithm: alg,\n keys,\n });\n\n const certPem = cert.toString(\"pem\");\n const keyPem = x509.PemConverter.encode(\n await crypto.subtle.exportKey(\"pkcs8\", keys.privateKey as any),\n \"private key\",\n );\n\n return { certPem, keyPem, signatureHash };\n };\n\n encryptPacket(pkt: DtlsPlaintext) {\n const header = pkt.recordLayerHeader;\n const version =\n (header.protocolVersion.major << 8) | header.protocolVersion.minor;\n const enc = this.cipher.encrypt(this.sessionType, pkt.fragment, {\n type: header.contentType,\n version,\n epoch: header.epoch,\n sequenceNumber: header.sequenceNumber,\n });\n pkt.fragment = enc;\n pkt.recordLayerHeader.contentLen = enc.length;\n return pkt;\n }\n\n decryptPacket(pkt: DtlsPlaintext) {\n const header = pkt.recordLayerHeader;\n const version =\n (header.protocolVersion.major << 8) | header.protocolVersion.minor;\n const dec = this.cipher.decrypt(this.sessionType, pkt.fragment, {\n type: header.contentType,\n version,\n epoch: header.epoch,\n sequenceNumber: header.sequenceNumber,\n });\n return dec;\n }\n\n verifyData(buf: Buffer) {\n if (this.sessionType === SessionType.CLIENT)\n return prfVerifyDataClient(this.masterSecret, buf);\n else return prfVerifyDataServer(this.masterSecret, buf);\n }\n\n signatureData(data: Buffer, hash: string) {\n const signature = createSign(hash).update(data);\n const key = this.localPrivateKey.toPEM().toString();\n const signed = signature.sign(key);\n return signed;\n }\n\n generateKeySignature(hashAlgorithm: string) {\n const clientRandom =\n this.sessionType === SessionType.CLIENT\n ? this.localRandom\n : this.remoteRandom;\n const serverRandom =\n this.sessionType === SessionType.SERVER\n ? this.localRandom\n : this.remoteRandom;\n\n const sig = this.valueKeySignature(\n clientRandom.serialize(),\n serverRandom.serialize(),\n this.localKeyPair.publicKey,\n this.namedCurve,\n );\n\n const enc = this.localPrivateKey.sign(sig, hashAlgorithm);\n return enc;\n }\n\n parseX509(certPem: string, keyPem: string, signatureHash: SignatureHash) {\n const cert = Certificate.fromPEM(Buffer.from(certPem));\n const sec = PrivateKey.fromPEM(Buffer.from(keyPem));\n this.localCert = cert.raw;\n this.localPrivateKey = sec;\n this.signatureHashAlgorithm = signatureHash;\n }\n\n private valueKeySignature(\n clientRandom: Buffer,\n serverRandom: Buffer,\n publicKey: Buffer,\n namedCurve: number,\n ) {\n const serverParams = Buffer.from(\n encode(\n {\n type: CurveType.named_curve_3,\n curve: namedCurve,\n len: publicKey.length,\n },\n { type: types.uint8, curve: types.uint16be, len: types.uint8 },\n ).slice(),\n );\n return Buffer.concat([clientRandom, serverRandom, serverParams, publicKey]);\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
- import mdns from "multicast-dns";
2
- import worker_thread from "worker_threads";
1
+ import * as mdns from "multicast-dns";
2
+ import * as worker_thread from "node:worker_threads";
3
3
  export declare class MdnsLookup {
4
4
  cache: Map<string, Promise<string>>;
5
5
  mdnsInstance: mdns.MulticastDNS;
@@ -1,11 +1,8 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.DnsLookup = exports.MdnsLookup = void 0;
7
- const multicast_dns_1 = __importDefault(require("multicast-dns"));
8
- const worker_threads_1 = __importDefault(require("worker_threads"));
4
+ const mdns = require("multicast-dns");
5
+ const worker_thread = require("node:worker_threads");
9
6
  class MdnsLookup {
10
7
  constructor() {
11
8
  Object.defineProperty(this, "cache", {
@@ -18,7 +15,7 @@ class MdnsLookup {
18
15
  enumerable: true,
19
16
  configurable: true,
20
17
  writable: true,
21
- value: (0, multicast_dns_1.default)()
18
+ value: mdns()
22
19
  });
23
20
  this.mdnsInstance.setMaxListeners(50);
24
21
  }
@@ -85,7 +82,7 @@ class DnsLookup {
85
82
  });
86
83
  };
87
84
  const lookupEval = `(${lookupWorkerFunction})()`;
88
- this.thread = new worker_threads_1.default.Worker(lookupEval, {
85
+ this.thread = new worker_thread.Worker(lookupEval, {
89
86
  eval: true,
90
87
  });
91
88
  this.thread.setMaxListeners(100);
@@ -1 +1 @@
1
- {"version":3,"file":"lookup.js","sourceRoot":"","sources":["../../../../../ice/src/dns/lookup.ts"],"names":[],"mappings":"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","sourcesContent":["import mdns from \"multicast-dns\";\nimport worker_thread from \"worker_threads\";\n\ninterface DnsLookupRequest {\n host: string;\n}\n\ninterface DnsLookupResult extends DnsLookupRequest {\n err?: string;\n address?: string;\n family?: number;\n}\n\nexport class MdnsLookup {\n cache = new Map<string, Promise<string>>();\n mdnsInstance = mdns();\n\n constructor() {\n this.mdnsInstance.setMaxListeners(50);\n }\n\n lookup(host: string): Promise<string> {\n return new Promise((r, f) => {\n const cleanup = () => {\n this.mdnsInstance.removeListener(\"response\", l);\n clearTimeout(timeout);\n };\n\n const timeout = setTimeout(() => {\n cleanup();\n f(new Error(\"No mDNS response\"));\n }, 10000);\n\n const l = (response: mdns.ResponsePacket) => {\n const a = response.answers?.[0];\n if (a?.type !== \"A\") {\n return;\n }\n if (a.name !== host) {\n return;\n }\n\n cleanup();\n r(a.data);\n };\n this.mdnsInstance.on(\"response\", l);\n\n this.mdnsInstance.query(host, \"A\");\n });\n }\n\n close() {\n this.mdnsInstance.destroy();\n }\n}\n\nexport class DnsLookup {\n thread: worker_thread.Worker;\n cache = new Map<string, Promise<string>>();\n\n constructor() {\n const lookupWorkerFunction = () => {\n const worker_thread = global.require(\"worker_threads\");\n const { lookup } = global.require(\"dns\");\n\n const dnsLookup = (host: string) =>\n lookup(host, (err: Error, address: string, family: number) => {\n const res: DnsLookupResult = {\n err: err?.message,\n address,\n family,\n host,\n };\n worker_thread.parentPort?.postMessage(res);\n process.exit();\n });\n\n worker_thread.parentPort?.on(\"message\", (message: DnsLookupRequest) => {\n const { host } = message;\n dnsLookup(host);\n });\n };\n\n const lookupEval = `(${lookupWorkerFunction})()`;\n\n this.thread = new worker_thread.Worker(lookupEval, {\n eval: true,\n });\n\n this.thread.setMaxListeners(100);\n }\n\n async lookup(host: string): Promise<string> {\n let cached = this.cache.get(host);\n if (cached) {\n return cached;\n }\n cached = new Promise((r, f) => {\n const exitListener = (exitCode: number) =>\n f(new Error(`dns.lookup thread exited unexpectedly: ${exitCode}`));\n\n const threadMessageListener = (result: DnsLookupResult) => {\n if (result.host !== host) {\n return;\n }\n\n this.thread.removeListener(\"message\", threadMessageListener);\n this.thread.removeListener(\"exit\", exitListener);\n\n if (!result.address)\n return f(new Error(result.err || \"dns.lookup thread unknown error\"));\n r(result.address);\n };\n\n this.thread.on(\"message\", threadMessageListener);\n this.thread.on(\"exit\", exitListener);\n\n this.thread.postMessage({\n host,\n } as DnsLookupRequest);\n });\n\n this.cache.set(host, cached);\n return cached;\n }\n\n close() {\n return this.thread.terminate();\n }\n}\n"]}
1
+ {"version":3,"file":"lookup.js","sourceRoot":"","sources":["../../../../../ice/src/dns/lookup.ts"],"names":[],"mappings":"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","sourcesContent":["import * as mdns from \"multicast-dns\";\nimport * as worker_thread from \"node:worker_threads\";\n\ninterface DnsLookupRequest {\n host: string;\n}\n\ninterface DnsLookupResult extends DnsLookupRequest {\n err?: string;\n address?: string;\n family?: number;\n}\n\nexport class MdnsLookup {\n cache = new Map<string, Promise<string>>();\n mdnsInstance = mdns();\n\n constructor() {\n this.mdnsInstance.setMaxListeners(50);\n }\n\n lookup(host: string): Promise<string> {\n return new Promise((r, f) => {\n const cleanup = () => {\n this.mdnsInstance.removeListener(\"response\", l);\n clearTimeout(timeout);\n };\n\n const timeout = setTimeout(() => {\n cleanup();\n f(new Error(\"No mDNS response\"));\n }, 10000);\n\n const l = (response: mdns.ResponsePacket) => {\n const a = response.answers?.[0];\n if (a?.type !== \"A\") {\n return;\n }\n if (a.name !== host) {\n return;\n }\n\n cleanup();\n r(a.data);\n };\n this.mdnsInstance.on(\"response\", l);\n\n this.mdnsInstance.query(host, \"A\");\n });\n }\n\n close() {\n this.mdnsInstance.destroy();\n }\n}\n\nexport class DnsLookup {\n thread: worker_thread.Worker;\n cache = new Map<string, Promise<string>>();\n\n constructor() {\n const lookupWorkerFunction = () => {\n const worker_thread = global.require(\"worker_threads\");\n const { lookup } = global.require(\"dns\");\n\n const dnsLookup = (host: string) =>\n lookup(host, (err: Error, address: string, family: number) => {\n const res: DnsLookupResult = {\n err: err?.message,\n address,\n family,\n host,\n };\n worker_thread.parentPort?.postMessage(res);\n process.exit();\n });\n\n worker_thread.parentPort?.on(\"message\", (message: DnsLookupRequest) => {\n const { host } = message;\n dnsLookup(host);\n });\n };\n\n const lookupEval = `(${lookupWorkerFunction})()`;\n\n this.thread = new worker_thread.Worker(lookupEval, {\n eval: true,\n });\n\n this.thread.setMaxListeners(100);\n }\n\n async lookup(host: string): Promise<string> {\n let cached = this.cache.get(host);\n if (cached) {\n return cached;\n }\n cached = new Promise((r, f) => {\n const exitListener = (exitCode: number) =>\n f(new Error(`dns.lookup thread exited unexpectedly: ${exitCode}`));\n\n const threadMessageListener = (result: DnsLookupResult) => {\n if (result.host !== host) {\n return;\n }\n\n this.thread.removeListener(\"message\", threadMessageListener);\n this.thread.removeListener(\"exit\", exitListener);\n\n if (!result.address)\n return f(new Error(result.err || \"dns.lookup thread unknown error\"));\n r(result.address);\n };\n\n this.thread.on(\"message\", threadMessageListener);\n this.thread.on(\"exit\", exitListener);\n\n this.thread.postMessage({\n host,\n } as DnsLookupRequest);\n });\n\n this.cache.set(host, cached);\n return cached;\n }\n\n close() {\n return this.thread.terminate();\n }\n}\n"]}