werift 0.19.0 → 0.19.2

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 (284) hide show
  1. package/lib/common/src/binary.js +1 -1
  2. package/lib/common/src/binary.js.map +1 -1
  3. package/lib/common/src/network.js.map +1 -1
  4. package/lib/common/src/promise.js.map +1 -1
  5. package/lib/dtls/src/cipher/const.js +2 -2
  6. package/lib/dtls/src/cipher/const.js.map +1 -1
  7. package/lib/dtls/src/cipher/create.js +10 -10
  8. package/lib/dtls/src/cipher/create.js.map +1 -1
  9. package/lib/dtls/src/cipher/namedCurve.js.map +1 -1
  10. package/lib/dtls/src/cipher/prf.js +1 -1
  11. package/lib/dtls/src/cipher/prf.js.map +1 -1
  12. package/lib/dtls/src/cipher/suites/aead.d.ts +1 -1
  13. package/lib/dtls/src/cipher/suites/aead.js +5 -4
  14. package/lib/dtls/src/cipher/suites/aead.js.map +1 -1
  15. package/lib/dtls/src/client.js.map +1 -1
  16. package/lib/dtls/src/context/cipher.js +3 -3
  17. package/lib/dtls/src/context/cipher.js.map +1 -1
  18. package/lib/dtls/src/context/dtls.js.map +1 -1
  19. package/lib/dtls/src/context/srtp.js.map +1 -1
  20. package/lib/dtls/src/flight/client/flight5.js +8 -6
  21. package/lib/dtls/src/flight/client/flight5.js.map +1 -1
  22. package/lib/dtls/src/flight/flight.js +1 -1
  23. package/lib/dtls/src/flight/flight.js.map +1 -1
  24. package/lib/dtls/src/flight/server/flight2.js.map +1 -1
  25. package/lib/dtls/src/flight/server/flight4.js.map +1 -1
  26. package/lib/dtls/src/flight/server/flight6.js.map +1 -1
  27. package/lib/dtls/src/handshake/binary.d.ts +5 -5
  28. package/lib/dtls/src/handshake/binary.js +1 -1
  29. package/lib/dtls/src/handshake/binary.js.map +1 -1
  30. package/lib/dtls/src/handshake/const.js +1 -1
  31. package/lib/dtls/src/handshake/const.js.map +1 -1
  32. package/lib/dtls/src/handshake/extensions/ellipticCurves.d.ts +1 -1
  33. package/lib/dtls/src/handshake/extensions/ellipticCurves.js +2 -2
  34. package/lib/dtls/src/handshake/extensions/ellipticCurves.js.map +1 -1
  35. package/lib/dtls/src/handshake/extensions/extendedMasterSecret.js +1 -1
  36. package/lib/dtls/src/handshake/extensions/extendedMasterSecret.js.map +1 -1
  37. package/lib/dtls/src/handshake/extensions/renegotiationIndication.d.ts +2 -2
  38. package/lib/dtls/src/handshake/extensions/renegotiationIndication.js +2 -2
  39. package/lib/dtls/src/handshake/extensions/renegotiationIndication.js.map +1 -1
  40. package/lib/dtls/src/handshake/extensions/signature.d.ts +1 -1
  41. package/lib/dtls/src/handshake/extensions/signature.js +2 -2
  42. package/lib/dtls/src/handshake/extensions/signature.js.map +1 -1
  43. package/lib/dtls/src/handshake/extensions/useSrtp.d.ts +1 -1
  44. package/lib/dtls/src/handshake/extensions/useSrtp.js +2 -2
  45. package/lib/dtls/src/handshake/extensions/useSrtp.js.map +1 -1
  46. package/lib/dtls/src/handshake/message/alert.d.ts +2 -2
  47. package/lib/dtls/src/handshake/message/alert.js +2 -2
  48. package/lib/dtls/src/handshake/message/alert.js.map +1 -1
  49. package/lib/dtls/src/handshake/message/certificate.js +2 -2
  50. package/lib/dtls/src/handshake/message/certificate.js.map +1 -1
  51. package/lib/dtls/src/handshake/message/changeCipherSpec.d.ts +1 -1
  52. package/lib/dtls/src/handshake/message/changeCipherSpec.js +2 -2
  53. package/lib/dtls/src/handshake/message/changeCipherSpec.js.map +1 -1
  54. package/lib/dtls/src/handshake/message/client/certificateVerify.d.ts +1 -1
  55. package/lib/dtls/src/handshake/message/client/certificateVerify.js +2 -2
  56. package/lib/dtls/src/handshake/message/client/certificateVerify.js.map +1 -1
  57. package/lib/dtls/src/handshake/message/client/hello.d.ts +3 -3
  58. package/lib/dtls/src/handshake/message/client/hello.js +2 -2
  59. package/lib/dtls/src/handshake/message/client/hello.js.map +1 -1
  60. package/lib/dtls/src/handshake/message/client/keyExchange.js +2 -2
  61. package/lib/dtls/src/handshake/message/client/keyExchange.js.map +1 -1
  62. package/lib/dtls/src/handshake/message/server/certificateRequest.js +2 -2
  63. package/lib/dtls/src/handshake/message/server/certificateRequest.js.map +1 -1
  64. package/lib/dtls/src/handshake/message/server/hello.d.ts +5 -5
  65. package/lib/dtls/src/handshake/message/server/hello.js +2 -2
  66. package/lib/dtls/src/handshake/message/server/hello.js.map +1 -1
  67. package/lib/dtls/src/handshake/message/server/helloDone.js +2 -2
  68. package/lib/dtls/src/handshake/message/server/helloDone.js.map +1 -1
  69. package/lib/dtls/src/handshake/message/server/helloVerifyRequest.d.ts +2 -2
  70. package/lib/dtls/src/handshake/message/server/helloVerifyRequest.js +2 -2
  71. package/lib/dtls/src/handshake/message/server/helloVerifyRequest.js.map +1 -1
  72. package/lib/dtls/src/handshake/message/server/keyExchange.d.ts +6 -6
  73. package/lib/dtls/src/handshake/message/server/keyExchange.js +2 -2
  74. package/lib/dtls/src/handshake/message/server/keyExchange.js.map +1 -1
  75. package/lib/dtls/src/handshake/random.d.ts +1 -1
  76. package/lib/dtls/src/handshake/random.js +3 -3
  77. package/lib/dtls/src/handshake/random.js.map +1 -1
  78. package/lib/dtls/src/helper.d.ts +1 -1
  79. package/lib/dtls/src/helper.js.map +1 -1
  80. package/lib/dtls/src/record/const.js +2 -2
  81. package/lib/dtls/src/record/const.js.map +1 -1
  82. package/lib/dtls/src/record/message/fragment.d.ts +6 -6
  83. package/lib/dtls/src/record/message/fragment.js +4 -4
  84. package/lib/dtls/src/record/message/fragment.js.map +1 -1
  85. package/lib/dtls/src/record/message/header.d.ts +12 -12
  86. package/lib/dtls/src/record/message/header.js +3 -3
  87. package/lib/dtls/src/record/message/header.js.map +1 -1
  88. package/lib/dtls/src/record/message/plaintext.d.ts +12 -12
  89. package/lib/dtls/src/record/message/plaintext.js +2 -2
  90. package/lib/dtls/src/record/message/plaintext.js.map +1 -1
  91. package/lib/dtls/src/record/receive.js.map +1 -1
  92. package/lib/dtls/src/server.js.map +1 -1
  93. package/lib/dtls/src/socket.js +1 -1
  94. package/lib/dtls/src/socket.js.map +1 -1
  95. package/lib/dtls/src/transport.js.map +1 -1
  96. package/lib/dtls/src/util/binary.js +1 -1
  97. package/lib/dtls/src/util/binary.js.map +1 -1
  98. package/lib/ice/src/candidate.js +1 -1
  99. package/lib/ice/src/candidate.js.map +1 -1
  100. package/lib/ice/src/dns/lookup.d.ts +7 -0
  101. package/lib/ice/src/dns/lookup.js +47 -1
  102. package/lib/ice/src/dns/lookup.js.map +1 -1
  103. package/lib/ice/src/exceptions.d.ts +2 -2
  104. package/lib/ice/src/exceptions.js.map +1 -1
  105. package/lib/ice/src/helper.d.ts +1 -1
  106. package/lib/ice/src/helper.js.map +1 -1
  107. package/lib/ice/src/ice.d.ts +10 -18
  108. package/lib/ice/src/ice.js +62 -159
  109. package/lib/ice/src/ice.js.map +1 -1
  110. package/lib/ice/src/index.d.ts +2 -0
  111. package/lib/ice/src/index.js +4 -0
  112. package/lib/ice/src/index.js.map +1 -1
  113. package/lib/ice/src/stun/attributes.d.ts +2 -2
  114. package/lib/ice/src/stun/attributes.js +1 -1
  115. package/lib/ice/src/stun/attributes.js.map +1 -1
  116. package/lib/ice/src/stun/const.d.ts +1 -1
  117. package/lib/ice/src/stun/const.js +2 -2
  118. package/lib/ice/src/stun/const.js.map +1 -1
  119. package/lib/ice/src/stun/message.d.ts +1 -1
  120. package/lib/ice/src/stun/message.js +2 -2
  121. package/lib/ice/src/stun/message.js.map +1 -1
  122. package/lib/ice/src/stun/protocol.d.ts +5 -5
  123. package/lib/ice/src/stun/protocol.js.map +1 -1
  124. package/lib/ice/src/stun/transaction.d.ts +2 -2
  125. package/lib/ice/src/stun/transaction.js.map +1 -1
  126. package/lib/ice/src/transport.d.ts +3 -3
  127. package/lib/ice/src/transport.js +1 -1
  128. package/lib/ice/src/transport.js.map +1 -1
  129. package/lib/ice/src/turn/protocol.d.ts +32 -13
  130. package/lib/ice/src/turn/protocol.js +120 -36
  131. package/lib/ice/src/turn/protocol.js.map +1 -1
  132. package/lib/ice/src/types/model.d.ts +2 -2
  133. package/lib/ice/src/types/model.js.map +1 -1
  134. package/lib/ice/src/utils.d.ts +3 -2
  135. package/lib/ice/src/utils.js +72 -1
  136. package/lib/ice/src/utils.js.map +1 -1
  137. package/lib/rtp/src/codec/av1.js +1 -1
  138. package/lib/rtp/src/codec/av1.js.map +1 -1
  139. package/lib/rtp/src/codec/h264.js.map +1 -1
  140. package/lib/rtp/src/codec/index.js.map +1 -1
  141. package/lib/rtp/src/codec/opus.js.map +1 -1
  142. package/lib/rtp/src/codec/vp8.js.map +1 -1
  143. package/lib/rtp/src/codec/vp9.js.map +1 -1
  144. package/lib/rtp/src/extra/container/mp4/container.js.map +1 -1
  145. package/lib/rtp/src/extra/container/mp4/exp-golomb.js.map +1 -1
  146. package/lib/rtp/src/extra/container/mp4/h264.js +1 -1
  147. package/lib/rtp/src/extra/container/mp4/h264.js.map +1 -1
  148. package/lib/rtp/src/extra/container/mp4/sps-parser.js +4 -4
  149. package/lib/rtp/src/extra/container/mp4/sps-parser.js.map +1 -1
  150. package/lib/rtp/src/extra/container/ogg/parser.js.map +1 -1
  151. package/lib/rtp/src/extra/container/webm/container.js.map +1 -1
  152. package/lib/rtp/src/extra/container/webm/ebml/ebml.js +1 -1
  153. package/lib/rtp/src/extra/container/webm/ebml/ebml.js.map +1 -1
  154. package/lib/rtp/src/extra/container/webm/ebml/typedArrayUtils.js.map +1 -1
  155. package/lib/rtp/src/extra/processor/depacketizer.js.map +1 -1
  156. package/lib/rtp/src/extra/processor/depacketizerTransformer.js.map +1 -1
  157. package/lib/rtp/src/extra/processor/dtx.js.map +1 -1
  158. package/lib/rtp/src/extra/processor/interface.js.map +1 -1
  159. package/lib/rtp/src/extra/processor/jitterBuffer.js.map +1 -1
  160. package/lib/rtp/src/extra/processor/jitterBufferTransformer.js.map +1 -1
  161. package/lib/rtp/src/extra/processor/lipsync.js.map +1 -1
  162. package/lib/rtp/src/extra/processor/lipsyncCallback.d.ts +1 -1
  163. package/lib/rtp/src/extra/processor/lipsyncCallback.js.map +1 -1
  164. package/lib/rtp/src/extra/processor/mp4.js.map +1 -1
  165. package/lib/rtp/src/extra/processor/mp4Callback.js +1 -1
  166. package/lib/rtp/src/extra/processor/mp4Callback.js.map +1 -1
  167. package/lib/rtp/src/extra/processor/mute.js.map +1 -1
  168. package/lib/rtp/src/extra/processor/muteCallback.js.map +1 -1
  169. package/lib/rtp/src/extra/processor/nack.js.map +1 -1
  170. package/lib/rtp/src/extra/processor/ntpTime.js.map +1 -1
  171. package/lib/rtp/src/extra/processor/rtcpCallback.js.map +1 -1
  172. package/lib/rtp/src/extra/processor/rtpCallback.js.map +1 -1
  173. package/lib/rtp/src/extra/processor/rtpStream.js.map +1 -1
  174. package/lib/rtp/src/extra/processor/rtpTime.js.map +1 -1
  175. package/lib/rtp/src/extra/processor/webm.js.map +1 -1
  176. package/lib/rtp/src/extra/processor/webmCallback.js.map +1 -1
  177. package/lib/rtp/src/extra/processor/webmStream.js.map +1 -1
  178. package/lib/rtp/src/index.d.ts +1 -0
  179. package/lib/rtp/src/rtcp/header.js.map +1 -1
  180. package/lib/rtp/src/rtcp/psfb/fullIntraRequest.js +1 -1
  181. package/lib/rtp/src/rtcp/psfb/fullIntraRequest.js.map +1 -1
  182. package/lib/rtp/src/rtcp/psfb/index.js +1 -1
  183. package/lib/rtp/src/rtcp/psfb/index.js.map +1 -1
  184. package/lib/rtp/src/rtcp/psfb/pictureLossIndication.js +1 -1
  185. package/lib/rtp/src/rtcp/psfb/pictureLossIndication.js.map +1 -1
  186. package/lib/rtp/src/rtcp/psfb/remb.js +1 -1
  187. package/lib/rtp/src/rtcp/psfb/remb.js.map +1 -1
  188. package/lib/rtp/src/rtcp/rr.js +1 -1
  189. package/lib/rtp/src/rtcp/rr.js.map +1 -1
  190. package/lib/rtp/src/rtcp/rtcp.js.map +1 -1
  191. package/lib/rtp/src/rtcp/rtpfb/index.js +1 -1
  192. package/lib/rtp/src/rtcp/rtpfb/index.js.map +1 -1
  193. package/lib/rtp/src/rtcp/rtpfb/nack.js +2 -2
  194. package/lib/rtp/src/rtcp/rtpfb/nack.js.map +1 -1
  195. package/lib/rtp/src/rtcp/rtpfb/twcc.js +3 -3
  196. package/lib/rtp/src/rtcp/rtpfb/twcc.js.map +1 -1
  197. package/lib/rtp/src/rtcp/sdes.js +1 -1
  198. package/lib/rtp/src/rtcp/sdes.js.map +1 -1
  199. package/lib/rtp/src/rtcp/sr.js +1 -1
  200. package/lib/rtp/src/rtcp/sr.js.map +1 -1
  201. package/lib/rtp/src/rtp/headerExtension.js.map +1 -1
  202. package/lib/rtp/src/rtp/red/encoder.js.map +1 -1
  203. package/lib/rtp/src/rtp/red/handler.js.map +1 -1
  204. package/lib/rtp/src/rtp/red/packet.js +0 -1
  205. package/lib/rtp/src/rtp/red/packet.js.map +1 -1
  206. package/lib/rtp/src/rtp/rtp.js +3 -2
  207. package/lib/rtp/src/rtp/rtp.js.map +1 -1
  208. package/lib/rtp/src/rtp/rtx.js +1 -1
  209. package/lib/rtp/src/rtp/rtx.js.map +1 -1
  210. package/lib/rtp/src/srtp/cipher/ctr.d.ts +1 -1
  211. package/lib/rtp/src/srtp/cipher/ctr.js +1 -1
  212. package/lib/rtp/src/srtp/cipher/ctr.js.map +1 -1
  213. package/lib/rtp/src/srtp/cipher/gcm.d.ts +1 -1
  214. package/lib/rtp/src/srtp/cipher/gcm.js +1 -1
  215. package/lib/rtp/src/srtp/cipher/gcm.js.map +1 -1
  216. package/lib/rtp/src/srtp/const.js.map +1 -1
  217. package/lib/rtp/src/srtp/context/context.js +1 -1
  218. package/lib/rtp/src/srtp/context/context.js.map +1 -1
  219. package/lib/rtp/src/srtp/context/srtcp.js.map +1 -1
  220. package/lib/sctp/src/chunk.js +18 -18
  221. package/lib/sctp/src/chunk.js.map +1 -1
  222. package/lib/sctp/src/const.js +2 -2
  223. package/lib/sctp/src/const.js.map +1 -1
  224. package/lib/sctp/src/param.js +6 -6
  225. package/lib/sctp/src/param.js.map +1 -1
  226. package/lib/sctp/src/sctp.js +6 -2
  227. package/lib/sctp/src/sctp.js.map +1 -1
  228. package/lib/sctp/src/transport.js.map +1 -1
  229. package/lib/webrtc/src/dataChannel.d.ts +1 -1
  230. package/lib/webrtc/src/dataChannel.js +1 -1
  231. package/lib/webrtc/src/dataChannel.js.map +1 -1
  232. package/lib/webrtc/src/helper.js.map +1 -1
  233. package/lib/webrtc/src/media/parameters.d.ts +1 -2
  234. package/lib/webrtc/src/media/parameters.js.map +1 -1
  235. package/lib/webrtc/src/media/receiver/nack.js.map +1 -1
  236. package/lib/webrtc/src/media/receiver/receiverTwcc.js.map +1 -1
  237. package/lib/webrtc/src/media/receiver/statistics.js.map +1 -1
  238. package/lib/webrtc/src/media/router.js +4 -2
  239. package/lib/webrtc/src/media/router.js.map +1 -1
  240. package/lib/webrtc/src/media/rtpReceiver.d.ts +1 -1
  241. package/lib/webrtc/src/media/rtpReceiver.js +1 -1
  242. package/lib/webrtc/src/media/rtpReceiver.js.map +1 -1
  243. package/lib/webrtc/src/media/rtpSender.js +2 -2
  244. package/lib/webrtc/src/media/rtpSender.js.map +1 -1
  245. package/lib/webrtc/src/media/rtpTransceiver.js.map +1 -1
  246. package/lib/webrtc/src/media/sender/cumulativeResult.js.map +1 -1
  247. package/lib/webrtc/src/media/sender/senderBWE.js.map +1 -1
  248. package/lib/webrtc/src/media/track.js.map +1 -1
  249. package/lib/webrtc/src/nonstandard/recorder/index.js.map +1 -1
  250. package/lib/webrtc/src/nonstandard/recorder/writer/index.d.ts +1 -1
  251. package/lib/webrtc/src/nonstandard/recorder/writer/index.js.map +1 -1
  252. package/lib/webrtc/src/nonstandard/recorder/writer/webm.d.ts +2 -2
  253. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js +2 -2
  254. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js.map +1 -1
  255. package/lib/webrtc/src/nonstandard/userMedia.js.map +1 -1
  256. package/lib/webrtc/src/peerConnection.d.ts +3 -2
  257. package/lib/webrtc/src/peerConnection.js +14 -8
  258. package/lib/webrtc/src/peerConnection.js.map +1 -1
  259. package/lib/webrtc/src/sdp.d.ts +1 -1
  260. package/lib/webrtc/src/sdp.js +47 -37
  261. package/lib/webrtc/src/sdp.js.map +1 -1
  262. package/lib/webrtc/src/transport/dtls.js.map +1 -1
  263. package/lib/webrtc/src/transport/ice.js.map +1 -1
  264. package/lib/webrtc/src/transport/sctp.js +10 -8
  265. package/lib/webrtc/src/transport/sctp.js.map +1 -1
  266. package/lib/webrtc/src/utils.js +1 -1
  267. package/lib/webrtc/src/utils.js.map +1 -1
  268. package/package.json +14 -22
  269. package/src/dataChannel.ts +1 -1
  270. package/src/media/parameters.ts +2 -2
  271. package/src/media/receiver/nack.ts +4 -7
  272. package/src/media/router.ts +36 -40
  273. package/src/media/rtpReceiver.ts +12 -15
  274. package/src/media/rtpSender.ts +70 -83
  275. package/src/nonstandard/recorder/writer/index.ts +1 -1
  276. package/src/nonstandard/recorder/writer/webm.ts +3 -3
  277. package/src/nonstandard/userMedia.ts +1 -3
  278. package/src/peerConnection.ts +32 -24
  279. package/src/sdp.ts +50 -56
  280. package/src/transport/dtls.ts +3 -6
  281. package/src/transport/ice.ts +1 -1
  282. package/src/transport/sctp.ts +61 -67
  283. package/src/utils.ts +1 -1
  284. package/src/typings/jspack.d.ts +0 -8
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BitStream = exports.buffer2ArrayBuffer = exports.dumpBuffer = exports.BufferChain = exports.bufferReader = exports.bufferWriterLE = exports.createBufferWriter = exports.bufferWriter = exports.paddingBits = exports.paddingByte = exports.getBit = exports.BitWriter2 = exports.BitWriter = exports.bufferArrayXor = exports.bufferXor = exports.random32 = exports.random16 = void 0;
4
4
  const crypto_1 = require("crypto");
5
- const jspack_1 = require("jspack");
5
+ const jspack_1 = require("@shinyoshiaki/jspack");
6
6
  function random16() {
7
7
  return jspack_1.jspack.Unpack("!H", (0, crypto_1.randomBytes)(2))[0];
8
8
  }
@@ -1 +1 @@
1
- {"version":3,"file":"binary.js","sourceRoot":"","sources":["../../../../common/src/binary.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomBytes } from \"crypto\";\nimport { jspack } from \"jspack\";\n\nexport function random16() {\n return jspack.Unpack(\"!H\", randomBytes(2))[0];\n}\n\nexport function random32() {\n return jspack.Unpack(\"!L\", randomBytes(4))[0];\n}\n\nexport function bufferXor(a: Buffer, b: Buffer): Buffer {\n if (a.length !== b.length) {\n throw new TypeError(\n \"[webrtc-stun] You can not XOR buffers which length are different\",\n );\n }\n\n const length = a.length;\n const buffer = Buffer.allocUnsafe(length);\n\n for (let i = 0; i < length; i++) {\n buffer[i] = a[i] ^ b[i];\n }\n\n return buffer;\n}\n\nexport function bufferArrayXor(arr: Buffer[]): Buffer {\n const length = [...arr]\n .sort((a, b) => a.length - b.length)\n .reverse()[0].length;\n const xored = Buffer.allocUnsafe(length);\n\n for (let i = 0; i < length; i++) {\n xored[i] = 0;\n arr.forEach((buffer) => {\n xored[i] ^= buffer[i] ?? 0;\n });\n }\n\n return xored;\n}\n\nexport class BitWriter {\n value = 0;\n\n constructor(private bitLength: number) {}\n\n set(size: number, startIndex: number, value: number) {\n value &= (1 << size) - 1;\n this.value |= value << (this.bitLength - size - startIndex);\n\n return this;\n }\n\n get buffer() {\n const length = Math.ceil(this.bitLength / 8);\n const buf = Buffer.alloc(length);\n buf.writeUIntBE(this.value, 0, length);\n return buf;\n }\n}\n\nexport class BitWriter2 {\n private _value = 0n;\n offset = 0n;\n\n /**\n * 各valueがオクテットを跨いではならない\n */\n constructor(\n /**Max 32bit */\n private bitLength: number,\n ) {\n if (bitLength > 32) {\n throw new Error();\n }\n }\n\n set(value: number, size: number = 1) {\n let value_b = BigInt(value);\n const size_b = BigInt(size);\n\n value_b &= (1n << size_b) - 1n;\n this._value |= value_b << (BigInt(this.bitLength) - size_b - this.offset);\n this.offset += size_b;\n return this;\n }\n\n get value() {\n return Number(this._value);\n }\n\n get buffer() {\n const length = Math.ceil(this.bitLength / 8);\n const buf = Buffer.alloc(length);\n buf.writeUIntBE(this.value, 0, length);\n return buf;\n }\n}\n\nexport function getBit(bits: number, startIndex: number, length: number = 1) {\n let bin = bits.toString(2).split(\"\");\n bin = [...Array(8 - bin.length).fill(\"0\"), ...bin];\n const s = bin.slice(startIndex, startIndex + length).join(\"\");\n const v = parseInt(s, 2);\n return v;\n}\n\nexport function paddingByte(bits: number) {\n const dec = bits.toString(2).split(\"\");\n return [...[...Array(8 - dec.length)].map(() => \"0\"), ...dec].join(\"\");\n}\n\nexport function paddingBits(bits: number, expectLength: number) {\n const dec = bits.toString(2);\n return [...[...Array(expectLength - dec.length)].map(() => \"0\"), ...dec].join(\n \"\",\n );\n}\n\nexport function bufferWriter(bytes: number[], values: (number | bigint)[]) {\n return createBufferWriter(bytes)(values);\n}\n\nexport function createBufferWriter(bytes: number[], singleBuffer?: boolean) {\n const length = bytes.reduce((acc, cur) => acc + cur, 0);\n const reuseBuffer = singleBuffer ? Buffer.alloc(length) : undefined;\n\n return (values: (number | bigint)[]) => {\n const buf = reuseBuffer || Buffer.alloc(length);\n let offset = 0;\n\n values.forEach((v, i) => {\n const size = bytes[i];\n if (size === 8) buf.writeBigUInt64BE(v as bigint, offset);\n else buf.writeUIntBE(v as number, offset, size);\n offset += size;\n });\n return buf;\n };\n}\n\nexport function bufferWriterLE(bytes: number[], values: (number | bigint)[]) {\n const length = bytes.reduce((acc, cur) => acc + cur, 0);\n const buf = Buffer.alloc(length);\n let offset = 0;\n\n values.forEach((v, i) => {\n const size = bytes[i];\n if (size === 8) buf.writeBigUInt64LE(v as bigint, offset);\n else buf.writeUIntLE(v as number, offset, size);\n\n offset += size;\n });\n return buf;\n}\n\nexport function bufferReader(buf: Buffer, bytes: number[]) {\n let offset = 0;\n return bytes.map((v) => {\n let read: number | bigint;\n if (v === 8) {\n read = buf.readBigUInt64BE(offset);\n } else {\n read = buf.readUIntBE(offset, v);\n }\n\n offset += v;\n\n return read as any;\n });\n}\n\nexport class BufferChain {\n buffer: Buffer;\n\n constructor(size: number) {\n this.buffer = Buffer.alloc(size);\n }\n\n writeInt16BE(value: number, offset?: number | undefined) {\n this.buffer.writeInt16BE(value, offset);\n return this;\n }\n\n writeUInt8(value: number, offset?: number | undefined) {\n this.buffer.writeUInt8(value, offset);\n return this;\n }\n}\n\nexport const dumpBuffer = (data: Buffer) =>\n \"0x\" +\n data\n .toString(\"hex\")\n .replace(/(.)(.)/g, \"$1$2 \")\n .split(\" \")\n .filter((s) => s != undefined && s.length > 0)\n .join(\",0x\");\n\nexport function buffer2ArrayBuffer(buf: Buffer) {\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n}\n\nexport class BitStream {\n private position = 0;\n private bitsPending = 0;\n\n constructor(public uint8Array: Buffer) {}\n\n writeBits(bits: number, value: number): BitStream {\n if (bits == 0) {\n return this;\n }\n value &= 0xffffffff >>> (32 - bits);\n let bitsConsumed;\n if (this.bitsPending > 0) {\n if (this.bitsPending > bits) {\n this.uint8Array[this.position - 1] |=\n value << (this.bitsPending - bits);\n bitsConsumed = bits;\n this.bitsPending -= bits;\n } else if (this.bitsPending == bits) {\n this.uint8Array[this.position - 1] |= value;\n bitsConsumed = bits;\n this.bitsPending = 0;\n } else {\n this.uint8Array[this.position - 1] |=\n value >> (bits - this.bitsPending);\n // ???\n bitsConsumed = this.bitsPending;\n this.bitsPending = 0;\n }\n } else {\n bitsConsumed = Math.min(8, bits);\n this.bitsPending = 8 - bitsConsumed;\n this.uint8Array[this.position++] =\n (value >> (bits - bitsConsumed)) << this.bitsPending;\n }\n bits -= bitsConsumed;\n if (bits > 0) {\n this.writeBits(bits, value);\n }\n\n return this;\n }\n\n readBits(bits: number, bitBuffer?: number): any {\n if (typeof bitBuffer == \"undefined\") {\n bitBuffer = 0;\n }\n if (bits == 0) {\n return bitBuffer;\n }\n let partial: number;\n let bitsConsumed: number;\n if (this.bitsPending > 0) {\n const byte =\n this.uint8Array[this.position - 1] & (0xff >> (8 - this.bitsPending));\n bitsConsumed = Math.min(this.bitsPending, bits);\n this.bitsPending -= bitsConsumed;\n partial = byte >> this.bitsPending;\n } else {\n bitsConsumed = Math.min(8, bits);\n this.bitsPending = 8 - bitsConsumed;\n partial = this.uint8Array[this.position++] >> this.bitsPending;\n }\n bits -= bitsConsumed;\n bitBuffer = (bitBuffer << bitsConsumed) | partial;\n return bits > 0 ? this.readBits(bits, bitBuffer) : bitBuffer;\n }\n\n seekTo(bitPos: number) {\n this.position = (bitPos / 8) | 0;\n this.bitsPending = bitPos % 8;\n if (this.bitsPending > 0) {\n this.bitsPending = 8 - this.bitsPending;\n this.position++;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"binary.js","sourceRoot":"","sources":["../../../../common/src/binary.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomBytes } from \"crypto\";\nimport { jspack } from \"@shinyoshiaki/jspack\";\n\nexport function random16() {\n return jspack.Unpack(\"!H\", randomBytes(2))[0];\n}\n\nexport function random32() {\n return jspack.Unpack(\"!L\", randomBytes(4))[0];\n}\n\nexport function bufferXor(a: Buffer, b: Buffer): Buffer {\n if (a.length !== b.length) {\n throw new TypeError(\n \"[webrtc-stun] You can not XOR buffers which length are different\",\n );\n }\n\n const length = a.length;\n const buffer = Buffer.allocUnsafe(length);\n\n for (let i = 0; i < length; i++) {\n buffer[i] = a[i] ^ b[i];\n }\n\n return buffer;\n}\n\nexport function bufferArrayXor(arr: Buffer[]): Buffer {\n const length = [...arr]\n .sort((a, b) => a.length - b.length)\n .reverse()[0].length;\n const xored = Buffer.allocUnsafe(length);\n\n for (let i = 0; i < length; i++) {\n xored[i] = 0;\n arr.forEach((buffer) => {\n xored[i] ^= buffer[i] ?? 0;\n });\n }\n\n return xored;\n}\n\nexport class BitWriter {\n value = 0;\n\n constructor(private bitLength: number) {}\n\n set(size: number, startIndex: number, value: number) {\n value &= (1 << size) - 1;\n this.value |= value << (this.bitLength - size - startIndex);\n\n return this;\n }\n\n get buffer() {\n const length = Math.ceil(this.bitLength / 8);\n const buf = Buffer.alloc(length);\n buf.writeUIntBE(this.value, 0, length);\n return buf;\n }\n}\n\nexport class BitWriter2 {\n private _value = 0n;\n offset = 0n;\n\n /**\n * 各valueがオクテットを跨いではならない\n */\n constructor(\n /**Max 32bit */\n private bitLength: number,\n ) {\n if (bitLength > 32) {\n throw new Error();\n }\n }\n\n set(value: number, size: number = 1) {\n let value_b = BigInt(value);\n const size_b = BigInt(size);\n\n value_b &= (1n << size_b) - 1n;\n this._value |= value_b << (BigInt(this.bitLength) - size_b - this.offset);\n this.offset += size_b;\n return this;\n }\n\n get value() {\n return Number(this._value);\n }\n\n get buffer() {\n const length = Math.ceil(this.bitLength / 8);\n const buf = Buffer.alloc(length);\n buf.writeUIntBE(this.value, 0, length);\n return buf;\n }\n}\n\nexport function getBit(bits: number, startIndex: number, length: number = 1) {\n let bin = bits.toString(2).split(\"\");\n bin = [...Array(8 - bin.length).fill(\"0\"), ...bin];\n const s = bin.slice(startIndex, startIndex + length).join(\"\");\n const v = parseInt(s, 2);\n return v;\n}\n\nexport function paddingByte(bits: number) {\n const dec = bits.toString(2).split(\"\");\n return [...[...Array(8 - dec.length)].map(() => \"0\"), ...dec].join(\"\");\n}\n\nexport function paddingBits(bits: number, expectLength: number) {\n const dec = bits.toString(2);\n return [...[...Array(expectLength - dec.length)].map(() => \"0\"), ...dec].join(\n \"\",\n );\n}\n\nexport function bufferWriter(bytes: number[], values: (number | bigint)[]) {\n return createBufferWriter(bytes)(values);\n}\n\nexport function createBufferWriter(bytes: number[], singleBuffer?: boolean) {\n const length = bytes.reduce((acc, cur) => acc + cur, 0);\n const reuseBuffer = singleBuffer ? Buffer.alloc(length) : undefined;\n\n return (values: (number | bigint)[]) => {\n const buf = reuseBuffer || Buffer.alloc(length);\n let offset = 0;\n\n values.forEach((v, i) => {\n const size = bytes[i];\n if (size === 8) buf.writeBigUInt64BE(v as bigint, offset);\n else buf.writeUIntBE(v as number, offset, size);\n offset += size;\n });\n return buf;\n };\n}\n\nexport function bufferWriterLE(bytes: number[], values: (number | bigint)[]) {\n const length = bytes.reduce((acc, cur) => acc + cur, 0);\n const buf = Buffer.alloc(length);\n let offset = 0;\n\n values.forEach((v, i) => {\n const size = bytes[i];\n if (size === 8) buf.writeBigUInt64LE(v as bigint, offset);\n else buf.writeUIntLE(v as number, offset, size);\n\n offset += size;\n });\n return buf;\n}\n\nexport function bufferReader(buf: Buffer, bytes: number[]) {\n let offset = 0;\n return bytes.map((v) => {\n let read: number | bigint;\n if (v === 8) {\n read = buf.readBigUInt64BE(offset);\n } else {\n read = buf.readUIntBE(offset, v);\n }\n\n offset += v;\n\n return read as any;\n });\n}\n\nexport class BufferChain {\n buffer: Buffer;\n\n constructor(size: number) {\n this.buffer = Buffer.alloc(size);\n }\n\n writeInt16BE(value: number, offset?: number | undefined) {\n this.buffer.writeInt16BE(value, offset);\n return this;\n }\n\n writeUInt8(value: number, offset?: number | undefined) {\n this.buffer.writeUInt8(value, offset);\n return this;\n }\n}\n\nexport const dumpBuffer = (data: Buffer) =>\n \"0x\" +\n data\n .toString(\"hex\")\n .replace(/(.)(.)/g, \"$1$2 \")\n .split(\" \")\n .filter((s) => s != undefined && s.length > 0)\n .join(\",0x\");\n\nexport function buffer2ArrayBuffer(buf: Buffer) {\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n}\n\nexport class BitStream {\n private position = 0;\n private bitsPending = 0;\n\n constructor(public uint8Array: Buffer) {}\n\n writeBits(bits: number, value: number): BitStream {\n if (bits == 0) {\n return this;\n }\n value &= 0xffffffff >>> (32 - bits);\n let bitsConsumed;\n if (this.bitsPending > 0) {\n if (this.bitsPending > bits) {\n this.uint8Array[this.position - 1] |=\n value << (this.bitsPending - bits);\n bitsConsumed = bits;\n this.bitsPending -= bits;\n } else if (this.bitsPending == bits) {\n this.uint8Array[this.position - 1] |= value;\n bitsConsumed = bits;\n this.bitsPending = 0;\n } else {\n this.uint8Array[this.position - 1] |=\n value >> (bits - this.bitsPending);\n // ???\n bitsConsumed = this.bitsPending;\n this.bitsPending = 0;\n }\n } else {\n bitsConsumed = Math.min(8, bits);\n this.bitsPending = 8 - bitsConsumed;\n this.uint8Array[this.position++] =\n (value >> (bits - bitsConsumed)) << this.bitsPending;\n }\n bits -= bitsConsumed;\n if (bits > 0) {\n this.writeBits(bits, value);\n }\n\n return this;\n }\n\n readBits(bits: number, bitBuffer?: number): any {\n if (typeof bitBuffer == \"undefined\") {\n bitBuffer = 0;\n }\n if (bits == 0) {\n return bitBuffer;\n }\n let partial: number;\n let bitsConsumed: number;\n if (this.bitsPending > 0) {\n const byte =\n this.uint8Array[this.position - 1] & (0xff >> (8 - this.bitsPending));\n bitsConsumed = Math.min(this.bitsPending, bits);\n this.bitsPending -= bitsConsumed;\n partial = byte >> this.bitsPending;\n } else {\n bitsConsumed = Math.min(8, bits);\n this.bitsPending = 8 - bitsConsumed;\n partial = this.uint8Array[this.position++] >> this.bitsPending;\n }\n bits -= bitsConsumed;\n bitBuffer = (bitBuffer << bitsConsumed) | partial;\n return bits > 0 ? this.readBits(bits, bitBuffer) : bitBuffer;\n }\n\n seekTo(bitPos: number) {\n this.position = (bitPos / 8) | 0;\n this.bitsPending = bitPos % 8;\n if (this.bitsPending > 0) {\n this.bitsPending = 8 - this.bitsPending;\n this.position++;\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"network.js","sourceRoot":"","sources":["../../../../common/src/network.ts"],"names":[],"mappings":"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","sourcesContent":["import { createSocket, SocketType } from \"dgram\";\n\nexport type InterfaceAddresses = {\n [K in SocketType]?: string;\n};\n\nexport const interfaceAddress = (\n type: SocketType,\n interfaceAddresses: InterfaceAddresses | undefined,\n) => (interfaceAddresses ? interfaceAddresses[type] : undefined);\n\nexport async function randomPort(\n protocol: SocketType = \"udp4\",\n interfaceAddresses?: InterfaceAddresses,\n) {\n const socket = createSocket(protocol);\n\n setImmediate(() =>\n socket.bind({\n port: 0,\n address: interfaceAddress(protocol, interfaceAddresses),\n }),\n );\n\n await new Promise<void>((r) => {\n socket.once(\"error\", r);\n socket.once(\"listening\", r);\n });\n\n const port = socket.address()?.port;\n await new Promise<void>((r) => socket.close(() => r()));\n return port;\n}\n\nexport async function randomPorts(\n num: number,\n protocol: SocketType = \"udp4\",\n interfaceAddresses?: InterfaceAddresses,\n) {\n return Promise.all(\n [...Array(num)].map(() => randomPort(protocol, interfaceAddresses)),\n );\n}\n\nexport async function findPort(\n min: number,\n max: number,\n protocol: SocketType = \"udp4\",\n interfaceAddresses?: InterfaceAddresses,\n) {\n let port: number | undefined;\n\n for (let i = min; i <= max; i++) {\n const socket = createSocket(protocol);\n\n setImmediate(() =>\n socket.bind({\n port: i,\n address: interfaceAddress(protocol, interfaceAddresses),\n }),\n );\n\n const err = await new Promise<Error | void>((r) => {\n socket.once(\"error\", (e) => r(e));\n socket.once(\"listening\", () => r());\n });\n if (err) {\n await new Promise<void>((r) => socket.close(() => r()));\n continue;\n }\n\n port = socket.address()?.port;\n await new Promise<void>((r) => socket.close(() => r()));\n if (min <= port && port <= max) {\n break;\n }\n }\n\n if (!port) throw new Error(\"port not found\");\n\n return port;\n}\n"]}
1
+ {"version":3,"file":"network.js","sourceRoot":"","sources":["../../../../common/src/network.ts"],"names":[],"mappings":"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","sourcesContent":["import { SocketType, createSocket } from \"dgram\";\n\nexport type InterfaceAddresses = {\n [K in SocketType]?: string;\n};\n\nexport const interfaceAddress = (\n type: SocketType,\n interfaceAddresses: InterfaceAddresses | undefined,\n) => (interfaceAddresses ? interfaceAddresses[type] : undefined);\n\nexport async function randomPort(\n protocol: SocketType = \"udp4\",\n interfaceAddresses?: InterfaceAddresses,\n) {\n const socket = createSocket(protocol);\n\n setImmediate(() =>\n socket.bind({\n port: 0,\n address: interfaceAddress(protocol, interfaceAddresses),\n }),\n );\n\n await new Promise<void>((r) => {\n socket.once(\"error\", r);\n socket.once(\"listening\", r);\n });\n\n const port = socket.address()?.port;\n await new Promise<void>((r) => socket.close(() => r()));\n return port;\n}\n\nexport async function randomPorts(\n num: number,\n protocol: SocketType = \"udp4\",\n interfaceAddresses?: InterfaceAddresses,\n) {\n return Promise.all(\n [...Array(num)].map(() => randomPort(protocol, interfaceAddresses)),\n );\n}\n\nexport async function findPort(\n min: number,\n max: number,\n protocol: SocketType = \"udp4\",\n interfaceAddresses?: InterfaceAddresses,\n) {\n let port: number | undefined;\n\n for (let i = min; i <= max; i++) {\n const socket = createSocket(protocol);\n\n setImmediate(() =>\n socket.bind({\n port: i,\n address: interfaceAddress(protocol, interfaceAddresses),\n }),\n );\n\n const err = await new Promise<Error | void>((r) => {\n socket.once(\"error\", (e) => r(e));\n socket.once(\"listening\", () => r());\n });\n if (err) {\n await new Promise<void>((r) => socket.close(() => r()));\n continue;\n }\n\n port = socket.address()?.port;\n await new Promise<void>((r) => socket.close(() => r()));\n if (min <= port && port <= max) {\n break;\n }\n }\n\n if (!port) throw new Error(\"port not found\");\n\n return port;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"promise.js","sourceRoot":"","sources":["../../../../common/src/promise.ts"],"names":[],"mappings":";;;AAAA,MAAa,YAAY;IAAzB;QACE;;;;mBAIM,EAAE;WAAC;QACT;;;;mBAAU,KAAK;WAAC;QAEhB;;;;mBAAO,CAAI,OAAyB,EAAE,EAAE,CACtC,IAAI,OAAO,CAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACtB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;gBACjD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;oBACjB,IAAI,CAAC,GAAG,EAAE,CAAC;iBACZ;YACH,CAAC,CAAC;WAAC;IAuBP,CAAC;IArBS,KAAK,CAAC,GAAG;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YAEpB,IAAI;gBACF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAChB;YAAC,OAAO,KAAK,EAAE;gBACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACpB;YAED,IAAI,CAAC,GAAG,EAAE,CAAC;SACZ;aAAM;YACL,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;SACtB;IACH,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAClB,CAAC;CACF;AArCD,oCAqCC","sourcesContent":["export class PromiseQueue {\n queue: {\n promise: () => Promise<unknown>;\n done: (...args: any[]) => void;\n failed: (...args: any[]) => void;\n }[] = [];\n running = false;\n\n push = <T>(promise: () => Promise<T>) =>\n new Promise<T>((r, f) => {\n this.queue.push({ promise, done: r, failed: f });\n if (!this.running) {\n this.run();\n }\n });\n\n private async run() {\n const task = this.queue.shift();\n if (task) {\n this.running = true;\n\n try {\n const res = await task.promise();\n task.done(res);\n } catch (error) {\n task.failed(error);\n }\n\n this.run();\n } else {\n this.running = false;\n }\n }\n\n cancel() {\n this.queue = [];\n }\n}\n"]}
1
+ {"version":3,"file":"promise.js","sourceRoot":"","sources":["../../../../common/src/promise.ts"],"names":[],"mappings":";;;AAAA,MAAa,YAAY;IAAzB;QACE;;;;mBAIM,EAAE;WAAC;QACT;;;;mBAAU,KAAK;WAAC;QAEhB;;;;mBAAO,CAAI,OAAyB,EAAE,EAAE,CACtC,IAAI,OAAO,CAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACtB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;gBACjD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;oBAClB,IAAI,CAAC,GAAG,EAAE,CAAC;gBACb,CAAC;YACH,CAAC,CAAC;WAAC;IAuBP,CAAC;IArBS,KAAK,CAAC,GAAG;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YAEpB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;YAED,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACvB,CAAC;IACH,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAClB,CAAC;CACF;AArCD,oCAqCC","sourcesContent":["export class PromiseQueue {\n queue: {\n promise: () => Promise<unknown>;\n done: (...args: any[]) => void;\n failed: (...args: any[]) => void;\n }[] = [];\n running = false;\n\n push = <T>(promise: () => Promise<T>) =>\n new Promise<T>((r, f) => {\n this.queue.push({ promise, done: r, failed: f });\n if (!this.running) {\n this.run();\n }\n });\n\n private async run() {\n const task = this.queue.shift();\n if (task) {\n this.running = true;\n\n try {\n const res = await task.promise();\n task.done(res);\n } catch (error) {\n task.failed(error);\n }\n\n this.run();\n } else {\n this.running = false;\n }\n }\n\n cancel() {\n this.queue = [];\n }\n}\n"]}
@@ -9,7 +9,7 @@ exports.HashAlgorithm = {
9
9
  sha256_4: 4,
10
10
  };
11
11
  exports.CipherSuite = {
12
- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_49195: 0xc02b,
12
+ TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_49195: 0xc02b, //49195,
13
13
  TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256_49199: 0xc02f, //49199
14
14
  };
15
15
  exports.CipherSuiteList = Object.values(exports.CipherSuite);
@@ -24,7 +24,7 @@ exports.SignatureScheme = {
24
24
  ecdsa_secp256r1_sha256: 0x0403,
25
25
  };
26
26
  exports.certificateTypes = [
27
- 1,
27
+ 1, // clientCertificateTypeRSASign
28
28
  64, // clientCertificateTypeECDSASign
29
29
  ];
30
30
  exports.signatures = [
@@ -1 +1 @@
1
- {"version":3,"file":"const.js","sourceRoot":"","sources":["../../../../../dtls/src/cipher/const.ts"],"names":[],"mappings":";;;AAAa,QAAA,kBAAkB,GAAG;IAChC,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;CACF,CAAC;AAIE,QAAA,aAAa,GAAG;IAC3B,QAAQ,EAAE,CAAC;CACH,CAAC;AAQE,QAAA,WAAW,GAAG;IACzB,6CAA6C,EAAE,MAAM;IACrD,2CAA2C,EAAE,MAAM,EAAE,OAAO;CACpD,CAAC;AAEE,QAAA,eAAe,GAAmB,MAAM,CAAC,MAAM,CAAC,mBAAW,CAAC,CAAC;AAE7D,QAAA,mBAAmB,GAAG;IACjC,SAAS,EAAE,EAAE;IACb,YAAY,EAAE,EAAE;CACR,CAAC;AAGE,QAAA,uBAAuB,GAClC,MAAM,CAAC,MAAM,CAAC,2BAAmB,CAAC,CAAC;AAExB,QAAA,SAAS,GAAG,EAAE,aAAa,EAAE,CAAC,EAAW,CAAC;AAG1C,QAAA,eAAe,GAAG;IAC7B,gBAAgB,EAAE,MAAM;IACxB,sBAAsB,EAAE,MAAM;CACtB,CAAC;AAIE,QAAA,gBAAgB,GAAG;IAC9B,CAAC;IACD,EAAE,EAAE,iCAAiC;CACtC,CAAC;AAEW,QAAA,UAAU,GAAG;IACxB,EAAE,IAAI,EAAE,qBAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,0BAAkB,CAAC,KAAK,EAAE;IACrE,EAAE,IAAI,EAAE,qBAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,0BAAkB,CAAC,OAAO,EAAE;CACxE,CAAC","sourcesContent":["export const SignatureAlgorithm = {\n rsa_1: 1,\n ecdsa_3: 3,\n} as const;\nexport type SignatureAlgorithms =\n (typeof SignatureAlgorithm)[keyof typeof SignatureAlgorithm];\n\nexport const HashAlgorithm = {\n sha256_4: 4,\n} as const;\nexport type HashAlgorithms = (typeof HashAlgorithm)[keyof typeof HashAlgorithm];\n\nexport type SignatureHash = {\n hash: HashAlgorithms;\n signature: SignatureAlgorithms;\n};\n\nexport const CipherSuite = {\n TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_49195: 0xc02b, //49195,\n TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256_49199: 0xc02f, //49199\n} as const;\nexport type CipherSuites = (typeof CipherSuite)[keyof typeof CipherSuite];\nexport const CipherSuiteList: CipherSuites[] = Object.values(CipherSuite);\n\nexport const NamedCurveAlgorithm = {\n x25519_29: 29,\n secp256r1_23: 23,\n} as const;\nexport type NamedCurveAlgorithms =\n (typeof NamedCurveAlgorithm)[keyof typeof NamedCurveAlgorithm];\nexport const NamedCurveAlgorithmList: NamedCurveAlgorithms[] =\n Object.values(NamedCurveAlgorithm);\n\nexport const CurveType = { named_curve_3: 3 } as const;\nexport type CurveTypes = (typeof CurveType)[keyof typeof CurveType];\n\nexport const SignatureScheme = {\n rsa_pkcs1_sha256: 0x0401,\n ecdsa_secp256r1_sha256: 0x0403,\n} as const;\nexport type SignatureSchemes =\n (typeof SignatureScheme)[keyof typeof SignatureScheme];\n\nexport const certificateTypes = [\n 1, // clientCertificateTypeRSASign\n 64, // clientCertificateTypeECDSASign\n];\n\nexport const signatures = [\n { hash: HashAlgorithm.sha256_4, signature: SignatureAlgorithm.rsa_1 },\n { hash: HashAlgorithm.sha256_4, signature: SignatureAlgorithm.ecdsa_3 },\n];\n"]}
1
+ {"version":3,"file":"const.js","sourceRoot":"","sources":["../../../../../dtls/src/cipher/const.ts"],"names":[],"mappings":";;;AAAa,QAAA,kBAAkB,GAAG;IAChC,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;CACF,CAAC;AAIE,QAAA,aAAa,GAAG;IAC3B,QAAQ,EAAE,CAAC;CACH,CAAC;AAQE,QAAA,WAAW,GAAG;IACzB,6CAA6C,EAAE,MAAM,EAAE,QAAQ;IAC/D,2CAA2C,EAAE,MAAM,EAAE,OAAO;CACpD,CAAC;AAEE,QAAA,eAAe,GAAmB,MAAM,CAAC,MAAM,CAAC,mBAAW,CAAC,CAAC;AAE7D,QAAA,mBAAmB,GAAG;IACjC,SAAS,EAAE,EAAE;IACb,YAAY,EAAE,EAAE;CACR,CAAC;AAGE,QAAA,uBAAuB,GAClC,MAAM,CAAC,MAAM,CAAC,2BAAmB,CAAC,CAAC;AAExB,QAAA,SAAS,GAAG,EAAE,aAAa,EAAE,CAAC,EAAW,CAAC;AAG1C,QAAA,eAAe,GAAG;IAC7B,gBAAgB,EAAE,MAAM;IACxB,sBAAsB,EAAE,MAAM;CACtB,CAAC;AAIE,QAAA,gBAAgB,GAAG;IAC9B,CAAC,EAAE,+BAA+B;IAClC,EAAE,EAAE,iCAAiC;CACtC,CAAC;AAEW,QAAA,UAAU,GAAG;IACxB,EAAE,IAAI,EAAE,qBAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,0BAAkB,CAAC,KAAK,EAAE;IACrE,EAAE,IAAI,EAAE,qBAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,0BAAkB,CAAC,OAAO,EAAE;CACxE,CAAC","sourcesContent":["export const SignatureAlgorithm = {\n rsa_1: 1,\n ecdsa_3: 3,\n} as const;\nexport type SignatureAlgorithms =\n (typeof SignatureAlgorithm)[keyof typeof SignatureAlgorithm];\n\nexport const HashAlgorithm = {\n sha256_4: 4,\n} as const;\nexport type HashAlgorithms = (typeof HashAlgorithm)[keyof typeof HashAlgorithm];\n\nexport type SignatureHash = {\n hash: HashAlgorithms;\n signature: SignatureAlgorithms;\n};\n\nexport const CipherSuite = {\n TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_49195: 0xc02b, //49195,\n TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256_49199: 0xc02f, //49199\n} as const;\nexport type CipherSuites = (typeof CipherSuite)[keyof typeof CipherSuite];\nexport const CipherSuiteList: CipherSuites[] = Object.values(CipherSuite);\n\nexport const NamedCurveAlgorithm = {\n x25519_29: 29,\n secp256r1_23: 23,\n} as const;\nexport type NamedCurveAlgorithms =\n (typeof NamedCurveAlgorithm)[keyof typeof NamedCurveAlgorithm];\nexport const NamedCurveAlgorithmList: NamedCurveAlgorithms[] =\n Object.values(NamedCurveAlgorithm);\n\nexport const CurveType = { named_curve_3: 3 } as const;\nexport type CurveTypes = (typeof CurveType)[keyof typeof CurveType];\n\nexport const SignatureScheme = {\n rsa_pkcs1_sha256: 0x0401,\n ecdsa_secp256r1_sha256: 0x0403,\n} as const;\nexport type SignatureSchemes =\n (typeof SignatureScheme)[keyof typeof SignatureScheme];\n\nexport const certificateTypes = [\n 1, // clientCertificateTypeRSASign\n 64, // clientCertificateTypeECDSASign\n];\n\nexport const signatures = [\n { hash: HashAlgorithm.sha256_4, signature: SignatureAlgorithm.rsa_1 },\n { hash: HashAlgorithm.sha256_4, signature: SignatureAlgorithm.ecdsa_3 },\n];\n"]}
@@ -23,22 +23,22 @@ const cipherSuites = {
23
23
  TLS_PSK_WITH_CHACHA20_POLY1305_SHA256: 0xccab,
24
24
  };
25
25
  const AEAD_AES_128_GCM = {
26
- K_LEN: 16,
27
- N_MIN: 12,
28
- N_MAX: 12,
29
- P_MAX: 2 ** 36 - 31,
26
+ K_LEN: 16, // Length of a key.
27
+ N_MIN: 12, // Min nonce length.
28
+ N_MAX: 12, // Max nonce length.
29
+ P_MAX: 2 ** 36 - 31, // Max length of a plaintext.
30
30
  // Max safe int in js is 2 ** 53. So, use this value
31
31
  // instead of 2 ** 61 as described in rfc5116.
32
- A_MAX: 2 ** 53 - 1,
32
+ A_MAX: 2 ** 53 - 1, // Max length of an additional data.
33
33
  C_MAX: 2 ** 36 - 15, // Cipher text length.
34
34
  };
35
35
  const AEAD_AES_256_GCM = {
36
- K_LEN: 32,
37
- N_MIN: 12,
38
- N_MAX: 12,
39
- P_MAX: 2 ** 36 - 31,
36
+ K_LEN: 32, // Length of a key.
37
+ N_MIN: 12, // Min nonce length.
38
+ N_MAX: 12, // Max nonce length.
39
+ P_MAX: 2 ** 36 - 31, // Max length of a plaintext.
40
40
  // Note: see above.
41
- A_MAX: 2 ** 53 - 1,
41
+ A_MAX: 2 ** 53 - 1, // Max length of an additional data.
42
42
  C_MAX: 2 ** 36 - 15, // Cipher text length.
43
43
  };
44
44
  const RSA_KEY_EXCHANGE = (0, key_exchange_1.createRSAKeyExchange)();
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../../../dtls/src/cipher/create.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n createECDHEECDSAKeyExchange,\n createECDHEPSKKeyExchange,\n createECDHERSAKeyExchange,\n createPSKKeyExchange,\n createRSAKeyExchange,\n KeyExchange,\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: string,\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 {\n 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: string,\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 +1 @@
1
- {"version":3,"file":"namedCurve.js","sourceRoot":"","sources":["../../../../../dtls/src/cipher/namedCurve.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA6B;AAE7B,mCAAoE;AACpE,6BAAmC;AAQnC,SAAgB,eAAe,CAC7B,UAAgC;IAEhC,QAAQ,UAAU,EAAE;QAClB,KAAK,2BAAmB,CAAC,YAAY,CAAC,CAAC;YACrC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,IAAA,gBAAW,GAAE,CAAC;YAEhD,OAAO;gBACL,KAAK,EAAE,UAAU;gBACjB,UAAU;gBACV,SAAS;aACV,CAAC;SACH;QACD,KAAK,2BAAmB,CAAC,SAAS,CAAC,CAAC;YAClC,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;SACH;QACD;YACE,MAAM,IAAI,KAAK,EAAE,CAAC;KACrB;AACH,CAAC;AAzBD,0CAyBC","sourcesContent":["import nacl from \"tweetnacl\";\n\nimport { NamedCurveAlgorithm, 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":";;;;;;AAAA,0DAA6B;AAE7B,mCAAoE;AACpE,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;AAzBD,0CAyBC","sourcesContent":["import nacl from \"tweetnacl\";\n\nimport { NamedCurveAlgorithm, 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"]}
@@ -4,8 +4,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.prfEncryptionKeys = exports.prfVerifyDataServer = exports.prfVerifyDataClient = exports.prfVerifyData = exports.hash = exports.exportKeyingMaterial = exports.prfExtendedMasterSecret = exports.prfMasterSecret = exports.prfPHash = exports.hmac = exports.prfPreMasterSecret = void 0;
7
- const binary_data_1 = require("binary-data");
8
7
  const crypto_1 = require("crypto");
8
+ const binary_data_1 = require("@shinyoshiaki/binary-data");
9
9
  const tweetnacl_1 = __importDefault(require("tweetnacl"));
10
10
  const const_1 = require("./const");
11
11
  const ec_1 = require("./ec");
@@ -1 +1 @@
1
- {"version":3,"file":"prf.js","sourceRoot":"","sources":["../../../../../dtls/src/cipher/prf.ts"],"names":[],"mappings":"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","sourcesContent":["import { createDecode } from \"binary-data\";\nimport { createHash, createHmac } from \"crypto\";\nimport nacl from \"tweetnacl\";\n\nimport { NamedCurveAlgorithm, 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 nacl from \"tweetnacl\";\n\nimport { NamedCurveAlgorithm, 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"]}
@@ -15,7 +15,7 @@ export default class AEADCipher extends Cipher {
15
15
  clientNonce?: Buffer;
16
16
  serverNonce?: Buffer;
17
17
  constructor();
18
- get summary(): {};
18
+ get summary(): any;
19
19
  init(masterSecret: Buffer, serverRandom: Buffer, clientRandom: Buffer): void;
20
20
  /**
21
21
  * Encrypt message.
@@ -28,10 +28,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  const crypto = __importStar(require("crypto"));
30
30
  const debug_1 = __importDefault(require("debug"));
31
+ const binary_data_1 = require("@shinyoshiaki/binary-data");
31
32
  const helper_1 = require("../../helper");
32
33
  const prf_1 = require("../prf");
33
34
  const abstract_1 = __importStar(require("./abstract"));
34
- const { createDecode, encode, types: { uint8, uint16be, uint48be }, } = require("binary-data");
35
+ const { uint8, uint16be, uint48be } = binary_data_1.types;
35
36
  const ContentType = uint8;
36
37
  const ProtocolVersion = uint16be;
37
38
  const AEADAdditionalData = {
@@ -138,7 +139,7 @@ class AEADCipher extends abstract_1.default {
138
139
  version: header.version,
139
140
  length: data.length,
140
141
  };
141
- const additionalBuffer = encode(additionalData, AEADAdditionalData).slice();
142
+ const additionalBuffer = (0, binary_data_1.encode)(additionalData, AEADAdditionalData).slice();
142
143
  const cipher = crypto.createCipheriv(this.blockAlgorithm, writeKey, iv, {
143
144
  authTagLength: this.authTagLength,
144
145
  });
@@ -159,7 +160,7 @@ class AEADCipher extends abstract_1.default {
159
160
  const writeKey = isClient ? this.serverWriteKey : this.clientWriteKey;
160
161
  if (!iv || !writeKey)
161
162
  throw new Error();
162
- const final = createDecode(data);
163
+ const final = (0, binary_data_1.createDecode)(data);
163
164
  const explicitNonce = final.readBuffer(this.nonceExplicitLength);
164
165
  explicitNonce.copy(iv, this.nonceImplicitLength);
165
166
  const encrypted = final.readBuffer(final.length - this.authTagLength);
@@ -171,7 +172,7 @@ class AEADCipher extends abstract_1.default {
171
172
  version: header.version,
172
173
  length: encrypted.length,
173
174
  };
174
- const additionalBuffer = encode(additionalData, AEADAdditionalData).slice();
175
+ const additionalBuffer = (0, binary_data_1.encode)(additionalData, AEADAdditionalData).slice();
175
176
  const decipher = crypto.createDecipheriv(this.blockAlgorithm, writeKey, iv, {
176
177
  authTagLength: this.authTagLength,
177
178
  });
@@ -1 +1 @@
1
- {"version":3,"file":"aead.js","sourceRoot":"","sources":["../../../../../../dtls/src/cipher/suites/aead.ts"],"names":[],"mappings":"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","sourcesContent":["import * as crypto from \"crypto\";\nimport debug from \"debug\";\n\nimport { dumpBuffer, getObjectSummary } from \"../../helper\";\nimport { prfEncryptionKeys } from \"../prf\";\nimport Cipher, { CipherHeader, SessionType, SessionTypes } from \"./abstract\";\nconst {\n createDecode,\n encode,\n types: { uint8, uint16be, uint48be },\n} = require(\"binary-data\");\n\nconst ContentType = uint8;\nconst ProtocolVersion = uint16be;\n\nconst AEADAdditionalData = {\n epoch: uint16be,\n sequence: uint48be,\n type: ContentType,\n version: ProtocolVersion,\n length: uint16be,\n};\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 additionalData = {\n epoch: header.epoch,\n sequence: header.sequenceNumber,\n type: header.type,\n version: header.version,\n length: data.length,\n };\n\n const additionalBuffer = encode(additionalData, AEADAdditionalData).slice();\n\n const cipher = crypto.createCipheriv(\n this.blockAlgorithm as crypto.CipherCCMTypes,\n writeKey,\n iv,\n {\n authTagLength: this.authTagLength,\n },\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 /**\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 final = createDecode(data);\n\n const explicitNonce = final.readBuffer(this.nonceExplicitLength);\n explicitNonce.copy(iv, this.nonceImplicitLength);\n\n const encrypted = final.readBuffer(final.length - this.authTagLength);\n const authTag = final.readBuffer(this.authTagLength);\n\n const additionalData = {\n epoch: header.epoch,\n sequence: header.sequenceNumber,\n type: header.type,\n version: header.version,\n length: encrypted.length,\n };\n\n const additionalBuffer = encode(additionalData, AEADAdditionalData).slice();\n\n const decipher = crypto.createDecipheriv(\n this.blockAlgorithm as crypto.CipherCCMTypes,\n writeKey,\n iv,\n {\n authTagLength: this.authTagLength,\n },\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AACjC,kDAA0B;AAE1B,2DAAwE;AACxE,yCAA4D;AAC5D,gCAA2C;AAC3C,uDAA6E;AAE7E,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,mBAAK,CAAC;AAE5C,MAAM,WAAW,GAAG,KAAK,CAAC;AAC1B,MAAM,eAAe,GAAG,QAAQ,CAAC;AAEjC,MAAM,kBAAkB,GAAG;IACzB,KAAK,EAAE,QAAQ;IACf,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,eAAe;IACxB,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF,MAAM,GAAG,GAAG,IAAA,eAAK,EACf,6DAA6D,CAC9D,CAAC;AAEF;;GAEG;AACH,MAAqB,UAAW,SAAQ,kBAAM;IAe5C;QACE,KAAK,EAAE,CAAC;QAfV;;;;mBAAY,CAAC;WAAC;QACd;;;;mBAAc,CAAC;WAAC;QAChB;;;;mBAAW,CAAC;WAAC;QACb;;;;mBAAgB,CAAC;WAAC;QAElB;;;;mBAAsB,CAAC;WAAC;QACxB;;;;mBAAsB,CAAC;WAAC;QAExB;;;;;WAAwB;QACxB;;;;;WAAwB;QAExB;;;;;WAAqB;QACrB;;;;;WAAqB;IAIrB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAA,yBAAgB,EAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,CAAC,YAAoB,EAAE,YAAoB,EAAE,YAAoB;QACnE,MAAM,IAAI,GAAG,IAAA,uBAAiB,EAC5B,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,aAAa,CACnB,CAAC;QAEF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAC1C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAC1C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,IAAkB,EAAE,IAAY,EAAE,MAAoB;QAC5D,MAAM,QAAQ,GAAG,IAAI,KAAK,sBAAW,CAAC,MAAM,CAAC;QAC7C,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;QAC1D,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;QACtE,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,EAAE,CAAC;QAExC,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACzD,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,mBAAmB,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAEvE,MAAM,aAAa,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAEzD,MAAM,cAAc,GAAG;YACrB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,QAAQ,EAAE,MAAM,CAAC,cAAc;YAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC;QAEF,MAAM,gBAAgB,GAAG,IAAA,oBAAM,EAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC,KAAK,EAAE,CAAC;QAE5E,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAClC,IAAI,CAAC,cAAuC,EAC5C,QAAQ,EACR,EAAE,EACF;YACE,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CACF,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE;YAC9B,eAAe,EAAE,IAAI,CAAC,MAAM;SAC7B,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAEpC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IACtE,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,IAAkB,EAAE,IAAY,EAAE,MAAoB;QAC5D,MAAM,QAAQ,GAAG,IAAI,KAAK,sBAAW,CAAC,MAAM,CAAC;QAC7C,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;QAC1D,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;QACtE,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,EAAE,CAAC;QAExC,MAAM,KAAK,GAAG,IAAA,0BAAY,EAAC,IAAI,CAAC,CAAC;QAEjC,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACjE,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAEjD,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;QACtE,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAErD,MAAM,cAAc,GAAG;YACrB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,QAAQ,EAAE,MAAM,CAAC,cAAc;YAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,SAAS,CAAC,MAAM;SACzB,CAAC;QAEF,MAAM,gBAAgB,GAAG,IAAA,oBAAM,EAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC,KAAK,EAAE,CAAC;QAE5E,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CACtC,IAAI,CAAC,cAAuC,EAC5C,QAAQ,EACR,EAAE,EACF;YACE,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CACF,CAAC;QAEF,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC7B,QAAQ,CAAC,MAAM,CAAC,gBAAgB,EAAE;YAChC,eAAe,EAAE,SAAS,CAAC,MAAM;SAClC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnC,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC;gBACzB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;gBACtC,CAAC,CAAC,QAAQ,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CACD,gBAAgB,EAChB,KAAK,EACL,IAAI,EACJ,IAAA,mBAAU,EAAC,IAAI,CAAC,EAChB,MAAM,EACN,IAAI,CAAC,OAAO,CACb,CAAC;YACF,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF;AA/ID,6BA+IC","sourcesContent":["import * as crypto from \"crypto\";\nimport debug from \"debug\";\n\nimport { createDecode, encode, types } from \"@shinyoshiaki/binary-data\";\nimport { dumpBuffer, getObjectSummary } from \"../../helper\";\nimport { prfEncryptionKeys } from \"../prf\";\nimport Cipher, { CipherHeader, SessionType, SessionTypes } from \"./abstract\";\n\nconst { uint8, uint16be, uint48be } = types;\n\nconst ContentType = uint8;\nconst ProtocolVersion = uint16be;\n\nconst AEADAdditionalData = {\n epoch: uint16be,\n sequence: uint48be,\n type: ContentType,\n version: ProtocolVersion,\n length: uint16be,\n};\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 additionalData = {\n epoch: header.epoch,\n sequence: header.sequenceNumber,\n type: header.type,\n version: header.version,\n length: data.length,\n };\n\n const additionalBuffer = encode(additionalData, AEADAdditionalData).slice();\n\n const cipher = crypto.createCipheriv(\n this.blockAlgorithm as crypto.CipherCCMTypes,\n writeKey,\n iv,\n {\n authTagLength: this.authTagLength,\n },\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 /**\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 final = createDecode(data);\n\n const explicitNonce = final.readBuffer(this.nonceExplicitLength);\n explicitNonce.copy(iv, this.nonceImplicitLength);\n\n const encrypted = final.readBuffer(final.length - this.authTagLength);\n const authTag = final.readBuffer(this.authTagLength);\n\n const additionalData = {\n epoch: header.epoch,\n sequence: header.sequenceNumber,\n type: header.type,\n version: header.version,\n length: encrypted.length,\n };\n\n const additionalBuffer = encode(additionalData, AEADAdditionalData).slice();\n\n const decipher = crypto.createDecipheriv(\n this.blockAlgorithm as crypto.CipherCCMTypes,\n writeKey,\n iv,\n {\n authTagLength: this.authTagLength,\n },\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 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../dtls/src/client.ts"],"names":[],"mappings":"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","sourcesContent":["import debug from \"debug\";\n\nimport { SessionType } from \"./cipher/suites/abstract\";\nimport { Flight1 } from \"./flight/client/flight1\";\nimport { Flight3 } from \"./flight/client/flight3\";\nimport { Flight5 } from \"./flight/client/flight5\";\nimport { HandshakeType } from \"./handshake/const\";\nimport { ServerHelloVerifyRequest } from \"./handshake/message/server/helloVerifyRequest\";\nimport { FragmentedHandshake } from \"./record/message/fragment\";\nimport { DtlsSocket, Options } from \"./socket\";\n\nconst log = debug(\"werift-dtls : packages/dtls/src/client.ts : log\");\n\nexport class DtlsClient extends DtlsSocket {\n constructor(options: Options) {\n super(options, SessionType.CLIENT);\n this.onHandleHandshakes = this.handleHandshakes;\n log(this.dtls.sessionId, \"start client\");\n }\n\n async connect() {\n await new Flight1(this.transport, this.dtls, this.cipher).exec(\n this.extensions,\n );\n }\n\n private flight5?: Flight5;\n private handleHandshakes = async (assembled: FragmentedHandshake[]) => {\n log(\n this.dtls.sessionId,\n \"handleHandshakes\",\n assembled.map((a) => a.msg_type),\n );\n\n for (const handshake of assembled) {\n switch (handshake.msg_type) {\n // flight2\n case HandshakeType.hello_verify_request_3:\n {\n const verifyReq = ServerHelloVerifyRequest.deSerialize(\n handshake.fragment,\n );\n await new Flight3(this.transport, this.dtls).exec(verifyReq);\n }\n break;\n // flight 4\n case HandshakeType.server_hello_2:\n {\n if (this.connected) return;\n this.flight5 = new Flight5(\n this.transport,\n this.dtls,\n this.cipher,\n this.srtp,\n );\n this.flight5.handleHandshake(handshake);\n }\n break;\n case HandshakeType.certificate_11:\n case HandshakeType.server_key_exchange_12:\n case HandshakeType.certificate_request_13:\n {\n await this.waitForReady(() => !!this.flight5);\n this.flight5?.handleHandshake(handshake);\n }\n break;\n case HandshakeType.server_hello_done_14:\n {\n await this.waitForReady(() => !!this.flight5);\n this.flight5?.handleHandshake(handshake);\n\n const targets = [\n 11,\n 12,\n this.options.certificateRequest && 13,\n ].filter((n): n is number => typeof n === \"number\");\n await this.waitForReady(() =>\n this.dtls.checkHandshakesExist(targets),\n );\n await this.flight5?.exec();\n }\n break;\n // flight 6\n case HandshakeType.finished_20:\n {\n this.dtls.flight = 7;\n this.connected = true;\n this.onConnect.execute();\n log(this.dtls.sessionId, \"dtls connected\");\n }\n break;\n }\n }\n };\n}\n"]}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../dtls/src/client.ts"],"names":[],"mappings":"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","sourcesContent":["import debug from \"debug\";\n\nimport { SessionType } from \"./cipher/suites/abstract\";\nimport { Flight1 } from \"./flight/client/flight1\";\nimport { Flight3 } from \"./flight/client/flight3\";\nimport { Flight5 } from \"./flight/client/flight5\";\nimport { HandshakeType } from \"./handshake/const\";\nimport { ServerHelloVerifyRequest } from \"./handshake/message/server/helloVerifyRequest\";\nimport { FragmentedHandshake } from \"./record/message/fragment\";\nimport { DtlsSocket, Options } from \"./socket\";\n\nconst log = debug(\"werift-dtls : packages/dtls/src/client.ts : log\");\n\nexport class DtlsClient extends DtlsSocket {\n constructor(options: Options) {\n super(options, SessionType.CLIENT);\n this.onHandleHandshakes = this.handleHandshakes;\n log(this.dtls.sessionId, \"start client\");\n }\n\n async connect() {\n await new Flight1(this.transport, this.dtls, this.cipher).exec(\n this.extensions,\n );\n }\n\n private flight5?: Flight5;\n private handleHandshakes = async (assembled: FragmentedHandshake[]) => {\n log(\n this.dtls.sessionId,\n \"handleHandshakes\",\n assembled.map((a) => a.msg_type),\n );\n\n for (const handshake of assembled) {\n switch (handshake.msg_type) {\n // flight2\n case HandshakeType.hello_verify_request_3: {\n const verifyReq = ServerHelloVerifyRequest.deSerialize(\n handshake.fragment,\n );\n await new Flight3(this.transport, this.dtls).exec(verifyReq);\n }\n break;\n // flight 4\n case HandshakeType.server_hello_2: {\n if (this.connected) return;\n this.flight5 = new Flight5(\n this.transport,\n this.dtls,\n this.cipher,\n this.srtp,\n );\n this.flight5.handleHandshake(handshake);\n }\n break;\n case HandshakeType.certificate_11:\n case HandshakeType.server_key_exchange_12:\n case HandshakeType.certificate_request_13: {\n await this.waitForReady(() => !!this.flight5);\n this.flight5?.handleHandshake(handshake);\n }\n break;\n case HandshakeType.server_hello_done_14: {\n await this.waitForReady(() => !!this.flight5);\n this.flight5?.handleHandshake(handshake);\n\n const targets = [\n 11,\n 12,\n this.options.certificateRequest && 13,\n ].filter((n): n is number => typeof n === \"number\");\n await this.waitForReady(() =>\n this.dtls.checkHandshakesExist(targets),\n );\n await this.flight5?.exec();\n }\n break;\n // flight 6\n case HandshakeType.finished_20: {\n this.dtls.flight = 7;\n this.connected = true;\n this.onConnect.execute();\n log(this.dtls.sessionId, \"dtls connected\");\n }\n break;\n }\n }\n };\n}\n"]}
@@ -28,11 +28,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
28
28
  var _a;
29
29
  Object.defineProperty(exports, "__esModule", { value: true });
30
30
  exports.CipherContext = void 0;
31
+ const crypto_1 = __importStar(require("crypto"));
31
32
  const x509_1 = require("@fidm/x509");
32
33
  const webcrypto_1 = require("@peculiar/webcrypto");
33
34
  const x509 = __importStar(require("@peculiar/x509"));
34
- const binary_data_1 = require("binary-data");
35
- const crypto_1 = __importStar(require("crypto"));
35
+ const binary_data_1 = require("@shinyoshiaki/binary-data");
36
36
  const addYears_1 = __importDefault(require("date-fns/addYears"));
37
37
  const const_1 = require("../cipher/const");
38
38
  const prf_1 = require("../cipher/prf");
@@ -197,6 +197,7 @@ class CipherContext {
197
197
  return Buffer.concat([clientRandom, serverRandom, serverParams, publicKey]);
198
198
  }
199
199
  }
200
+ exports.CipherContext = CipherContext;
200
201
  _a = CipherContext;
201
202
  /**
202
203
  *
@@ -267,5 +268,4 @@ Object.defineProperty(CipherContext, "createSelfSignedCertificateWithKey", {
267
268
  return { certPem, keyPem, signatureHash };
268
269
  }
269
270
  });
270
- exports.CipherContext = CipherContext;
271
271
  //# sourceMappingURL=cipher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cipher.js","sourceRoot":"","sources":["../../../../../dtls/src/context/cipher.ts"],"names":[],"mappings":"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","sourcesContent":["import { Certificate, PrivateKey } from \"@fidm/x509\";\nimport { Crypto } from \"@peculiar/webcrypto\";\nimport * as x509 from \"@peculiar/x509\";\nimport { decode, encode, types } from \"binary-data\";\nimport nodeCrypto, { createSign } from \"crypto\";\nimport addYears from \"date-fns/addYears\";\n\nimport {\n CipherSuites,\n CurveType,\n HashAlgorithm,\n NamedCurveAlgorithm,\n NamedCurveAlgorithms,\n SignatureAlgorithm,\n SignatureHash,\n} from \"../cipher/const\";\nimport { NamedCurveKeyPair } from \"../cipher/namedCurve\";\nimport { prfVerifyDataClient, prfVerifyDataServer } from \"../cipher/prf\";\nimport { SessionType, SessionTypes } from \"../cipher/suites/abstract\";\nimport AEADCipher from \"../cipher/suites/aead\";\nimport { ProtocolVersion } from \"../handshake/binary\";\nimport { DtlsRandom } from \"../handshake/random\";\nimport { DtlsPlaintext } from \"../record/message/plaintext\";\n\nconst crypto = new Crypto();\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, [\"sign\", \"verify\"]);\n\n const cert = await x509.X509CertificateGenerator.createSelfSigned({\n serialNumber: nodeCrypto.randomBytes(8).toString(\"hex\"),\n name: \"C=AU, ST=Some-State, O=Internet Widgits Pty Ltd\",\n notBefore: new Date(),\n notAfter: addYears(Date.now(), 10),\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 enc = this.cipher.encrypt(this.sessionType, pkt.fragment, {\n type: header.contentType,\n version: decode(\n Buffer.from(encode(header.protocolVersion, ProtocolVersion).slice()),\n { version: types.uint16be },\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 dec = this.cipher.decrypt(this.sessionType, pkt.fragment, {\n type: header.contentType,\n version: decode(\n Buffer.from(encode(header.protocolVersion, ProtocolVersion).slice()),\n { version: types.uint16be },\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 nodeCrypto, { createSign } from \"crypto\";\nimport { Certificate, PrivateKey } from \"@fidm/x509\";\nimport { Crypto } from \"@peculiar/webcrypto\";\nimport * as x509 from \"@peculiar/x509\";\nimport { decode, encode, types } from \"@shinyoshiaki/binary-data\";\nimport addYears from \"date-fns/addYears\";\n\nimport {\n CipherSuites,\n CurveType,\n HashAlgorithm,\n NamedCurveAlgorithm,\n NamedCurveAlgorithms,\n SignatureAlgorithm,\n SignatureHash,\n} from \"../cipher/const\";\nimport { NamedCurveKeyPair } from \"../cipher/namedCurve\";\nimport { prfVerifyDataClient, prfVerifyDataServer } from \"../cipher/prf\";\nimport { SessionType, SessionTypes } from \"../cipher/suites/abstract\";\nimport AEADCipher from \"../cipher/suites/aead\";\nimport { ProtocolVersion } from \"../handshake/binary\";\nimport { DtlsRandom } from \"../handshake/random\";\nimport { DtlsPlaintext } from \"../record/message/plaintext\";\n\nconst crypto = new Crypto();\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, [\"sign\", \"verify\"]);\n\n const cert = await x509.X509CertificateGenerator.createSelfSigned({\n serialNumber: nodeCrypto.randomBytes(8).toString(\"hex\"),\n name: \"C=AU, ST=Some-State, O=Internet Widgits Pty Ltd\",\n notBefore: new Date(),\n notAfter: addYears(Date.now(), 10),\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 enc = this.cipher.encrypt(this.sessionType, pkt.fragment, {\n type: header.contentType,\n version: decode(\n Buffer.from(encode(header.protocolVersion, ProtocolVersion).slice()),\n { version: types.uint16be },\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 dec = this.cipher.decrypt(this.sessionType, pkt.fragment, {\n type: header.contentType,\n version: decode(\n Buffer.from(encode(header.protocolVersion, ProtocolVersion).slice()),\n { version: types.uint16be },\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 +1 @@
1
- {"version":3,"file":"dtls.js","sourceRoot":"","sources":["../../../../../dtls/src/context/dtls.ts"],"names":[],"mappings":"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","sourcesContent":["import { debug } from \"debug\";\n\nimport { HashAlgorithms, SignatureAlgorithms } from \"../cipher/const\";\nimport { SessionTypes } from \"../cipher/suites/abstract\";\nimport { FragmentedHandshake } from \"../record/message/fragment\";\nimport { Options } from \"../socket\";\nimport { Handshake } from \"../typings/domain\";\n\nconst log = debug(\"werift-dtls : packages/dtls/src/context/dtls.ts : log\");\n\nexport class DtlsContext {\n version = { major: 255 - 1, minor: 255 - 2 };\n\n lastFlight: Handshake[] = [];\n lastMessage: Buffer[] = [];\n recordSequenceNumber = 0;\n sequenceNumber = 0;\n epoch = 0;\n flight = 0;\n handshakeCache: {\n [flight: number]: {\n isLocal: boolean;\n data: FragmentedHandshake[];\n flight: number;\n };\n } = {};\n cookie?: Buffer;\n requestedCertificateTypes: number[] = [];\n requestedSignatureAlgorithms: {\n hash: HashAlgorithms;\n signature: SignatureAlgorithms;\n }[] = [];\n remoteExtendedMasterSecret = false;\n\n constructor(\n public options: Options,\n public sessionType: SessionTypes,\n ) {}\n\n get sessionId() {\n return this.cookie ? this.cookie.toString(\"hex\").slice(0, 10) : \"\";\n }\n\n get sortedHandshakeCache() {\n return Object.entries(this.handshakeCache)\n .sort(([a], [b]) => Number(a) - Number(b))\n .map(([, { data }]) => data.sort((a, b) => a.message_seq - b.message_seq))\n .flatMap((v) => v);\n }\n\n checkHandshakesExist = (handshakes: number[]) =>\n !handshakes.find(\n (type) =>\n this.sortedHandshakeCache.find((h) => h.msg_type === type) == undefined,\n );\n\n bufferHandshakeCache(\n handshakes: FragmentedHandshake[],\n isLocal: boolean,\n flight: number,\n ) {\n if (!this.handshakeCache[flight]) {\n this.handshakeCache[flight] = { data: [], isLocal, flight };\n }\n\n const filtered = handshakes.filter((h) => {\n const exist = this.handshakeCache[flight].data.find(\n (t) => t.msg_type === h.msg_type,\n );\n if (exist) {\n log(this.sessionId, \"exist\", exist.summary, isLocal, flight);\n return false;\n }\n return true;\n });\n\n this.handshakeCache[flight].data = [\n ...this.handshakeCache[flight].data,\n ...filtered,\n ];\n }\n}\n"]}
1
+ {"version":3,"file":"dtls.js","sourceRoot":"","sources":["../../../../../dtls/src/context/dtls.ts"],"names":[],"mappings":"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","sourcesContent":["import { debug } from \"debug\";\n\nimport { HashAlgorithms, SignatureAlgorithms } from \"../cipher/const\";\nimport { SessionTypes } from \"../cipher/suites/abstract\";\nimport { FragmentedHandshake } from \"../record/message/fragment\";\nimport { Options } from \"../socket\";\nimport { Handshake } from \"../typings/domain\";\n\nconst log = debug(\"werift-dtls : packages/dtls/src/context/dtls.ts : log\");\n\nexport class DtlsContext {\n version = { major: 255 - 1, minor: 255 - 2 };\n\n lastFlight: Handshake[] = [];\n lastMessage: Buffer[] = [];\n recordSequenceNumber = 0;\n sequenceNumber = 0;\n epoch = 0;\n flight = 0;\n handshakeCache: {\n [flight: number]: {\n isLocal: boolean;\n data: FragmentedHandshake[];\n flight: number;\n };\n } = {};\n cookie?: Buffer;\n requestedCertificateTypes: number[] = [];\n requestedSignatureAlgorithms: {\n hash: HashAlgorithms;\n signature: SignatureAlgorithms;\n }[] = [];\n remoteExtendedMasterSecret = false;\n\n constructor(public options: Options, public sessionType: SessionTypes) {}\n\n get sessionId() {\n return this.cookie ? this.cookie.toString(\"hex\").slice(0, 10) : \"\";\n }\n\n get sortedHandshakeCache() {\n return Object.entries(this.handshakeCache)\n .sort(([a], [b]) => Number(a) - Number(b))\n .map(([, { data }]) => data.sort((a, b) => a.message_seq - b.message_seq))\n .flatMap((v) => v);\n }\n\n checkHandshakesExist = (handshakes: number[]) =>\n !handshakes.find(\n (type) =>\n this.sortedHandshakeCache.find((h) => h.msg_type === type) == undefined,\n );\n\n bufferHandshakeCache(\n handshakes: FragmentedHandshake[],\n isLocal: boolean,\n flight: number,\n ) {\n if (!this.handshakeCache[flight]) {\n this.handshakeCache[flight] = { data: [], isLocal, flight };\n }\n\n const filtered = handshakes.filter((h) => {\n const exist = this.handshakeCache[flight].data.find(\n (t) => t.msg_type === h.msg_type,\n );\n if (exist) {\n log(this.sessionId, \"exist\", exist.summary, isLocal, flight);\n return false;\n }\n return true;\n });\n\n this.handshakeCache[flight].data = [\n ...this.handshakeCache[flight].data,\n ...filtered,\n ];\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"srtp.js","sourceRoot":"","sources":["../../../../../dtls/src/context/srtp.ts"],"names":[],"mappings":";;;AAAA,MAAa,WAAW;IAAxB;QACE;;;;;WAAsB;IAOxB,CAAC;IALC,MAAM,CAAC,uBAAuB,CAAC,MAAiB,EAAE,KAAgB;QAChE,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;YACrB,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAC;SAClC;IACH,CAAC;CACF;AARD,kCAQC;AAEY,QAAA,oCAAoC,GAAG,MAAe,CAAC;AACvD,QAAA,8BAA8B,GAAG,MAAe,CAAC;AAEjD,QAAA,QAAQ,GAAG;IACtB,4CAAoC;IACpC,sCAA8B;CACtB,CAAC","sourcesContent":["export class SrtpContext {\n srtpProfile?: Profile;\n\n static findMatchingSRTPProfile(remote: Profile[], local: Profile[]) {\n for (const v of local) {\n if (remote.includes(v)) return v;\n }\n }\n}\n\nexport const ProtectionProfileAes128CmHmacSha1_80 = 0x0001 as const;\nexport const ProtectionProfileAeadAes128Gcm = 0x0007 as const;\n\nexport const Profiles = [\n ProtectionProfileAes128CmHmacSha1_80,\n ProtectionProfileAeadAes128Gcm,\n] as const;\n\nexport type Profile = (typeof Profiles)[number];\n"]}
1
+ {"version":3,"file":"srtp.js","sourceRoot":"","sources":["../../../../../dtls/src/context/srtp.ts"],"names":[],"mappings":";;;AAAA,MAAa,WAAW;IAAxB;QACE;;;;;WAAsB;IAOxB,CAAC;IALC,MAAM,CAAC,uBAAuB,CAAC,MAAiB,EAAE,KAAgB;QAChE,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;CACF;AARD,kCAQC;AAEY,QAAA,oCAAoC,GAAG,MAAe,CAAC;AACvD,QAAA,8BAA8B,GAAG,MAAe,CAAC;AAEjD,QAAA,QAAQ,GAAG;IACtB,4CAAoC;IACpC,sCAA8B;CACtB,CAAC","sourcesContent":["export class SrtpContext {\n srtpProfile?: Profile;\n\n static findMatchingSRTPProfile(remote: Profile[], local: Profile[]) {\n for (const v of local) {\n if (remote.includes(v)) return v;\n }\n }\n}\n\nexport const ProtectionProfileAes128CmHmacSha1_80 = 0x0001 as const;\nexport const ProtectionProfileAeadAes128Gcm = 0x0007 as const;\n\nexport const Profiles = [\n ProtectionProfileAes128CmHmacSha1_80,\n ProtectionProfileAeadAes128Gcm,\n] as const;\n\nexport type Profile = (typeof Profiles)[number];\n"]}
@@ -166,12 +166,14 @@ handlers[const_2.HandshakeType.server_hello_2] =
166
166
  message.extensions.forEach((extension) => {
167
167
  switch (extension.type) {
168
168
  case useSrtp_1.UseSRTP.type:
169
- const useSrtp = useSrtp_1.UseSRTP.fromData(extension.data);
170
- const profile = srtp_1.SrtpContext.findMatchingSRTPProfile(useSrtp.profiles, dtls.options.srtpProfiles || []);
171
- log(dtls.sessionId, "selected srtp profile", profile);
172
- if (profile == undefined)
173
- return;
174
- srtp.srtpProfile = profile;
169
+ {
170
+ const useSrtp = useSrtp_1.UseSRTP.fromData(extension.data);
171
+ const profile = srtp_1.SrtpContext.findMatchingSRTPProfile(useSrtp.profiles, dtls.options.srtpProfiles || []);
172
+ log(dtls.sessionId, "selected srtp profile", profile);
173
+ if (profile == undefined)
174
+ return;
175
+ srtp.srtpProfile = profile;
176
+ }
175
177
  break;
176
178
  case extendedMasterSecret_1.ExtendedMasterSecret.type:
177
179
  dtls.remoteExtendedMasterSecret = true;