werift 0.18.14 → 0.18.16

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 (217) hide show
  1. package/lib/common/src/binary.js.map +1 -1
  2. package/lib/common/src/network.js.map +1 -1
  3. package/lib/dtls/src/cipher/const.d.ts +6 -6
  4. package/lib/dtls/src/cipher/const.js.map +1 -1
  5. package/lib/dtls/src/cipher/create.js.map +1 -1
  6. package/lib/dtls/src/cipher/namedCurve.js.map +1 -1
  7. package/lib/dtls/src/cipher/prf.js.map +1 -1
  8. package/lib/dtls/src/cipher/suites/abstract.d.ts +1 -1
  9. package/lib/dtls/src/cipher/suites/abstract.js.map +1 -1
  10. package/lib/dtls/src/cipher/suites/aead.js.map +1 -1
  11. package/lib/dtls/src/client.js.map +1 -1
  12. package/lib/dtls/src/context/cipher.js +1 -1
  13. package/lib/dtls/src/context/cipher.js.map +1 -1
  14. package/lib/dtls/src/context/dtls.js.map +1 -1
  15. package/lib/dtls/src/context/srtp.d.ts +1 -1
  16. package/lib/dtls/src/context/srtp.js.map +1 -1
  17. package/lib/dtls/src/context/transport.js.map +1 -1
  18. package/lib/dtls/src/flight/client/flight1.js.map +1 -1
  19. package/lib/dtls/src/flight/client/flight5.js.map +1 -1
  20. package/lib/dtls/src/flight/flight.d.ts +1 -1
  21. package/lib/dtls/src/flight/flight.js +1 -1
  22. package/lib/dtls/src/flight/flight.js.map +1 -1
  23. package/lib/dtls/src/flight/server/flight2.js.map +1 -1
  24. package/lib/dtls/src/flight/server/flight4.js.map +1 -1
  25. package/lib/dtls/src/flight/server/flight6.js.map +1 -1
  26. package/lib/dtls/src/handshake/extensions/ellipticCurves.js +1 -1
  27. package/lib/dtls/src/handshake/extensions/ellipticCurves.js.map +1 -1
  28. package/lib/dtls/src/handshake/extensions/extendedMasterSecret.js +1 -1
  29. package/lib/dtls/src/handshake/extensions/extendedMasterSecret.js.map +1 -1
  30. package/lib/dtls/src/handshake/extensions/renegotiationIndication.js +1 -1
  31. package/lib/dtls/src/handshake/extensions/renegotiationIndication.js.map +1 -1
  32. package/lib/dtls/src/handshake/extensions/signature.js +1 -1
  33. package/lib/dtls/src/handshake/extensions/signature.js.map +1 -1
  34. package/lib/dtls/src/handshake/extensions/useSrtp.js +1 -1
  35. package/lib/dtls/src/handshake/extensions/useSrtp.js.map +1 -1
  36. package/lib/dtls/src/handshake/message/alert.js +1 -1
  37. package/lib/dtls/src/handshake/message/alert.js.map +1 -1
  38. package/lib/dtls/src/handshake/message/certificate.js +1 -1
  39. package/lib/dtls/src/handshake/message/certificate.js.map +1 -1
  40. package/lib/dtls/src/handshake/message/changeCipherSpec.js +1 -1
  41. package/lib/dtls/src/handshake/message/changeCipherSpec.js.map +1 -1
  42. package/lib/dtls/src/handshake/message/client/certificateVerify.js +1 -1
  43. package/lib/dtls/src/handshake/message/client/certificateVerify.js.map +1 -1
  44. package/lib/dtls/src/handshake/message/client/hello.js +1 -1
  45. package/lib/dtls/src/handshake/message/client/hello.js.map +1 -1
  46. package/lib/dtls/src/handshake/message/client/keyExchange.js +1 -1
  47. package/lib/dtls/src/handshake/message/client/keyExchange.js.map +1 -1
  48. package/lib/dtls/src/handshake/message/finished.js.map +1 -1
  49. package/lib/dtls/src/handshake/message/server/certificateRequest.js +1 -1
  50. package/lib/dtls/src/handshake/message/server/certificateRequest.js.map +1 -1
  51. package/lib/dtls/src/handshake/message/server/hello.js +1 -1
  52. package/lib/dtls/src/handshake/message/server/hello.js.map +1 -1
  53. package/lib/dtls/src/handshake/message/server/helloDone.js +1 -1
  54. package/lib/dtls/src/handshake/message/server/helloDone.js.map +1 -1
  55. package/lib/dtls/src/handshake/message/server/helloVerifyRequest.js +1 -1
  56. package/lib/dtls/src/handshake/message/server/helloVerifyRequest.js.map +1 -1
  57. package/lib/dtls/src/handshake/message/server/keyExchange.js +1 -1
  58. package/lib/dtls/src/handshake/message/server/keyExchange.js.map +1 -1
  59. package/lib/dtls/src/handshake/random.js +1 -1
  60. package/lib/dtls/src/handshake/random.js.map +1 -1
  61. package/lib/dtls/src/record/builder.js.map +1 -1
  62. package/lib/dtls/src/record/message/fragment.js +1 -1
  63. package/lib/dtls/src/record/message/fragment.js.map +1 -1
  64. package/lib/dtls/src/record/message/header.js +2 -2
  65. package/lib/dtls/src/record/message/header.js.map +1 -1
  66. package/lib/dtls/src/record/message/plaintext.js +1 -1
  67. package/lib/dtls/src/record/message/plaintext.js.map +1 -1
  68. package/lib/dtls/src/record/receive.js.map +1 -1
  69. package/lib/dtls/src/server.js.map +1 -1
  70. package/lib/dtls/src/socket.js.map +1 -1
  71. package/lib/dtls/src/transport.js.map +1 -1
  72. package/lib/ice/src/candidate.js.map +1 -1
  73. package/lib/ice/src/exceptions.js.map +1 -1
  74. package/lib/ice/src/helper.js.map +1 -1
  75. package/lib/ice/src/ice.js.map +1 -1
  76. package/lib/ice/src/stun/attributes.d.ts +3 -3
  77. package/lib/ice/src/stun/attributes.js.map +1 -1
  78. package/lib/ice/src/stun/message.js.map +1 -1
  79. package/lib/ice/src/stun/protocol.js.map +1 -1
  80. package/lib/ice/src/stun/transaction.js.map +1 -1
  81. package/lib/ice/src/transport.js.map +1 -1
  82. package/lib/ice/src/turn/protocol.js.map +1 -1
  83. package/lib/ice/src/types/model.js.map +1 -1
  84. package/lib/ice/src/utils.js.map +1 -1
  85. package/lib/rtp/src/codec/av1.d.ts +1 -1
  86. package/lib/rtp/src/codec/av1.js +1 -1
  87. package/lib/rtp/src/codec/av1.js.map +1 -1
  88. package/lib/rtp/src/codec/index.d.ts +1 -1
  89. package/lib/rtp/src/codec/index.js.map +1 -1
  90. package/lib/rtp/src/container/mp4/container.d.ts +1 -1
  91. package/lib/rtp/src/container/mp4/container.js.map +1 -1
  92. package/lib/rtp/src/container/mp4/exp-golomb.js.map +1 -1
  93. package/lib/rtp/src/container/mp4/h264.js.map +1 -1
  94. package/lib/rtp/src/container/webm/container.d.ts +1 -1
  95. package/lib/rtp/src/container/webm/container.js.map +1 -1
  96. package/lib/rtp/src/container/webm/ebml/ebml.js.map +1 -1
  97. package/lib/rtp/src/container/webm/ebml/typedArrayUtils.js.map +1 -1
  98. package/lib/rtp/src/helper.js +3 -2
  99. package/lib/rtp/src/helper.js.map +1 -1
  100. package/lib/rtp/src/processor/depacketizer.js.map +1 -1
  101. package/lib/rtp/src/processor/dtx.d.ts +1 -1
  102. package/lib/rtp/src/processor/dtx.js.map +1 -1
  103. package/lib/rtp/src/processor/interface.js.map +1 -1
  104. package/lib/rtp/src/processor/jitterBuffer.js.map +1 -1
  105. package/lib/rtp/src/processor/jitterBufferTransformer.js.map +1 -1
  106. package/lib/rtp/src/processor/lipsync.js.map +1 -1
  107. package/lib/rtp/src/processor/lipsyncCallback.js.map +1 -1
  108. package/lib/rtp/src/processor/mp4.js.map +1 -1
  109. package/lib/rtp/src/processor/mp4Callback.js +1 -1
  110. package/lib/rtp/src/processor/mp4Callback.js.map +1 -1
  111. package/lib/rtp/src/processor/mute.d.ts +1 -1
  112. package/lib/rtp/src/processor/mute.js.map +1 -1
  113. package/lib/rtp/src/processor/muteCallback.js.map +1 -1
  114. package/lib/rtp/src/processor/nack.js.map +1 -1
  115. package/lib/rtp/src/processor/ntpTime.d.ts +1 -1
  116. package/lib/rtp/src/processor/ntpTime.js.map +1 -1
  117. package/lib/rtp/src/processor/rtcpCallback.js.map +1 -1
  118. package/lib/rtp/src/processor/rtpCallback.js.map +1 -1
  119. package/lib/rtp/src/processor/rtpStream.js.map +1 -1
  120. package/lib/rtp/src/processor/rtpTime.js.map +1 -1
  121. package/lib/rtp/src/processor/webm.js.map +1 -1
  122. package/lib/rtp/src/processor/webmCallback.js.map +1 -1
  123. package/lib/rtp/src/processor/webmStream.js.map +1 -1
  124. package/lib/rtp/src/rtcp/psfb/fullIntraRequest.js +1 -1
  125. package/lib/rtp/src/rtcp/psfb/fullIntraRequest.js.map +1 -1
  126. package/lib/rtp/src/rtcp/psfb/index.js +1 -1
  127. package/lib/rtp/src/rtcp/psfb/index.js.map +1 -1
  128. package/lib/rtp/src/rtcp/psfb/pictureLossIndication.js +1 -1
  129. package/lib/rtp/src/rtcp/psfb/pictureLossIndication.js.map +1 -1
  130. package/lib/rtp/src/rtcp/psfb/remb.js +1 -1
  131. package/lib/rtp/src/rtcp/psfb/remb.js.map +1 -1
  132. package/lib/rtp/src/rtcp/rr.js +1 -1
  133. package/lib/rtp/src/rtcp/rr.js.map +1 -1
  134. package/lib/rtp/src/rtcp/rtcp.js.map +1 -1
  135. package/lib/rtp/src/rtcp/rtpfb/index.js +1 -1
  136. package/lib/rtp/src/rtcp/rtpfb/index.js.map +1 -1
  137. package/lib/rtp/src/rtcp/rtpfb/nack.js +1 -1
  138. package/lib/rtp/src/rtcp/rtpfb/nack.js.map +1 -1
  139. package/lib/rtp/src/rtcp/rtpfb/twcc.js +1 -1
  140. package/lib/rtp/src/rtcp/rtpfb/twcc.js.map +1 -1
  141. package/lib/rtp/src/rtcp/sdes.js +1 -1
  142. package/lib/rtp/src/rtcp/sdes.js.map +1 -1
  143. package/lib/rtp/src/rtcp/sr.js +1 -1
  144. package/lib/rtp/src/rtcp/sr.js.map +1 -1
  145. package/lib/rtp/src/rtp/headerExtension.js.map +1 -1
  146. package/lib/rtp/src/rtp/red/encoder.js.map +1 -1
  147. package/lib/rtp/src/rtp/red/handler.js.map +1 -1
  148. package/lib/rtp/src/rtp/rtp.d.ts +1 -1
  149. package/lib/rtp/src/rtp/rtp.js.map +1 -1
  150. package/lib/rtp/src/rtp/rtx.js.map +1 -1
  151. package/lib/rtp/src/srtp/cipher/ctr.js.map +1 -1
  152. package/lib/rtp/src/srtp/cipher/gcm.js.map +1 -1
  153. package/lib/rtp/src/srtp/cipher/index.js.map +1 -1
  154. package/lib/rtp/src/srtp/context/context.js.map +1 -1
  155. package/lib/rtp/src/srtp/session.js.map +1 -1
  156. package/lib/rtp/src/srtp/srtcp.js.map +1 -1
  157. package/lib/rtp/src/srtp/srtp.js.map +1 -1
  158. package/lib/rtp/src/util.js.map +1 -1
  159. package/lib/sctp/src/chunk.js +17 -17
  160. package/lib/sctp/src/chunk.js.map +1 -1
  161. package/lib/sctp/src/param.d.ts +1 -1
  162. package/lib/sctp/src/param.js +3 -3
  163. package/lib/sctp/src/param.js.map +1 -1
  164. package/lib/sctp/src/sctp.js.map +1 -1
  165. package/lib/sctp/src/transport.js.map +1 -1
  166. package/lib/webrtc/src/const.js.map +1 -1
  167. package/lib/webrtc/src/dataChannel.js.map +1 -1
  168. package/lib/webrtc/src/media/parameters.js.map +1 -1
  169. package/lib/webrtc/src/media/receiver/nack.js.map +1 -1
  170. package/lib/webrtc/src/media/receiver/receiverTwcc.js.map +1 -1
  171. package/lib/webrtc/src/media/receiver/statistics.js.map +1 -1
  172. package/lib/webrtc/src/media/router.js.map +1 -1
  173. package/lib/webrtc/src/media/rtpReceiver.js.map +1 -1
  174. package/lib/webrtc/src/media/rtpSender.js +11 -0
  175. package/lib/webrtc/src/media/rtpSender.js.map +1 -1
  176. package/lib/webrtc/src/media/rtpTransceiver.d.ts +1 -1
  177. package/lib/webrtc/src/media/rtpTransceiver.js.map +1 -1
  178. package/lib/webrtc/src/media/sender/senderBWE.js.map +1 -1
  179. package/lib/webrtc/src/media/track.js.map +1 -1
  180. package/lib/webrtc/src/nonstandard/recorder/index.js.map +1 -1
  181. package/lib/webrtc/src/nonstandard/recorder/writer/index.js.map +1 -1
  182. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js.map +1 -1
  183. package/lib/webrtc/src/nonstandard/userMedia.js.map +1 -1
  184. package/lib/webrtc/src/peerConnection.js.map +1 -1
  185. package/lib/webrtc/src/sdp.js.map +1 -1
  186. package/lib/webrtc/src/transport/dtls.d.ts +1 -1
  187. package/lib/webrtc/src/transport/dtls.js.map +1 -1
  188. package/lib/webrtc/src/transport/ice.d.ts +2 -2
  189. package/lib/webrtc/src/transport/ice.js.map +1 -1
  190. package/lib/webrtc/src/transport/sctp.js.map +1 -1
  191. package/lib/webrtc/src/types/domain.d.ts +2 -2
  192. package/lib/webrtc/src/types/domain.js.map +1 -1
  193. package/lib/webrtc/src/utils.js.map +1 -1
  194. package/package.json +5 -3
  195. package/src/const.ts +1 -1
  196. package/src/dataChannel.ts +3 -3
  197. package/src/media/parameters.ts +3 -3
  198. package/src/media/receiver/nack.ts +7 -4
  199. package/src/media/receiver/receiverTwcc.ts +5 -5
  200. package/src/media/receiver/statistics.ts +1 -1
  201. package/src/media/router.ts +5 -5
  202. package/src/media/rtpReceiver.ts +9 -9
  203. package/src/media/rtpSender.ts +18 -8
  204. package/src/media/rtpTransceiver.ts +3 -3
  205. package/src/media/sender/senderBWE.ts +2 -2
  206. package/src/media/track.ts +1 -1
  207. package/src/nonstandard/recorder/index.ts +1 -1
  208. package/src/nonstandard/recorder/writer/index.ts +1 -1
  209. package/src/nonstandard/recorder/writer/webm.ts +1 -1
  210. package/src/nonstandard/userMedia.ts +1 -1
  211. package/src/peerConnection.ts +52 -52
  212. package/src/sdp.ts +27 -21
  213. package/src/transport/dtls.ts +13 -10
  214. package/src/transport/ice.ts +6 -6
  215. package/src/transport/sctp.ts +4 -4
  216. package/src/types/domain.ts +2 -2
  217. package/src/utils.ts +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"flight5.js","sourceRoot":"","sources":["../../../../../../dtls/src/flight/client/flight5.ts"],"names":[],"mappings":"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","sourcesContent":["import debug from \"debug\";\n\nimport { SignatureAlgorithm, SignatureScheme } from \"../../cipher/const\";\nimport { createCipher } from \"../../cipher/create\";\nimport { generateKeyPair } from \"../../cipher/namedCurve\";\nimport {\n prfExtendedMasterSecret,\n prfMasterSecret,\n prfPreMasterSecret,\n} from \"../../cipher/prf\";\nimport { CipherContext } from \"../../context/cipher\";\nimport { DtlsContext } from \"../../context/dtls\";\nimport { Profile, SrtpContext } from \"../../context/srtp\";\nimport { TransportContext } from \"../../context/transport\";\nimport { HandshakeType } from \"../../handshake/const\";\nimport { ExtendedMasterSecret } from \"../../handshake/extensions/extendedMasterSecret\";\nimport { RenegotiationIndication } from \"../../handshake/extensions/renegotiationIndication\";\nimport { UseSRTP } from \"../../handshake/extensions/useSrtp\";\nimport { Certificate } from \"../../handshake/message/certificate\";\nimport { ChangeCipherSpec } from \"../../handshake/message/changeCipherSpec\";\nimport { CertificateVerify } from \"../../handshake/message/client/certificateVerify\";\nimport { ClientKeyExchange } from \"../../handshake/message/client/keyExchange\";\nimport { Finished } from \"../../handshake/message/finished\";\nimport { ServerCertificateRequest } from \"../../handshake/message/server/certificateRequest\";\nimport { ServerHello } from \"../../handshake/message/server/hello\";\nimport { ServerHelloDone } from \"../../handshake/message/server/helloDone\";\nimport { ServerKeyExchange } from \"../../handshake/message/server/keyExchange\";\nimport { DtlsRandom } from \"../../handshake/random\";\nimport { dumpBuffer } from \"../../helper\";\nimport { createPlaintext } from \"../../record/builder\";\nimport { ContentType } from \"../../record/const\";\nimport { FragmentedHandshake } from \"../../record/message/fragment\";\nimport { Flight } from \"../flight\";\n\nconst log = debug(\n \"werift-dtls : packages/dtls/src/flight/client/flight5.ts : log\"\n);\n\nexport class Flight5 extends Flight {\n constructor(\n udp: TransportContext,\n dtls: DtlsContext,\n private cipher: CipherContext,\n private srtp: SrtpContext\n ) {\n super(udp, dtls, 5, 7);\n }\n\n handleHandshake(handshake: FragmentedHandshake) {\n this.dtls.bufferHandshakeCache([handshake], false, 4);\n const message = (() => {\n switch (handshake.msg_type) {\n case HandshakeType.server_hello_2:\n return ServerHello.deSerialize(handshake.fragment);\n case HandshakeType.certificate_11:\n return Certificate.deSerialize(handshake.fragment);\n case HandshakeType.server_key_exchange_12:\n return ServerKeyExchange.deSerialize(handshake.fragment);\n case HandshakeType.certificate_request_13:\n return ServerCertificateRequest.deSerialize(handshake.fragment);\n case HandshakeType.server_hello_done_14:\n return ServerHelloDone.deSerialize(handshake.fragment);\n }\n })();\n\n if (message) {\n handlers[message.msgType]({\n dtls: this.dtls,\n cipher: this.cipher,\n srtp: this.srtp,\n })(message);\n }\n }\n\n async exec() {\n if (this.dtls.flight === 5) {\n log(this.dtls.sessionId, \"flight5 twice\");\n this.send(this.dtls.lastMessage);\n return;\n }\n this.dtls.flight = 5;\n\n const needCertificate = this.dtls.requestedCertificateTypes.length > 0;\n log(this.dtls.sessionId, \"send flight5\", needCertificate);\n\n const messages = [\n needCertificate && this.sendCertificate(),\n this.sendClientKeyExchange(),\n needCertificate && this.sendCertificateVerify(),\n this.sendChangeCipherSpec(),\n this.sendFinished(),\n ].filter((v) => v) as Buffer[];\n\n this.dtls.lastMessage = messages;\n await this.transmit(messages);\n }\n\n private sendCertificate() {\n const certificate = new Certificate([Buffer.from(this.cipher.localCert)]);\n\n const packets = this.createPacket([certificate]);\n\n const buf = Buffer.concat(packets.map((v) => v.serialize()));\n return buf;\n }\n\n private sendClientKeyExchange() {\n if (!this.cipher.localKeyPair) throw new Error();\n\n const clientKeyExchange = new ClientKeyExchange(\n this.cipher.localKeyPair.publicKey\n );\n const packets = this.createPacket([clientKeyExchange]);\n const buf = Buffer.concat(packets.map((v) => v.serialize()));\n\n const localKeyPair = this.cipher.localKeyPair;\n const remoteKeyPair = this.cipher.remoteKeyPair;\n\n if (!remoteKeyPair.publicKey) throw new Error(\"not exist\");\n\n const preMasterSecret = prfPreMasterSecret(\n remoteKeyPair.publicKey,\n localKeyPair.privateKey,\n localKeyPair.curve\n );\n\n log(\n this.dtls.sessionId,\n \"extendedMasterSecret\",\n this.dtls.options.extendedMasterSecret,\n this.dtls.remoteExtendedMasterSecret\n );\n\n const handshakes = Buffer.concat(\n this.dtls.sortedHandshakeCache.map((v) => v.serialize())\n );\n this.cipher.masterSecret =\n this.dtls.options.extendedMasterSecret &&\n this.dtls.remoteExtendedMasterSecret\n ? prfExtendedMasterSecret(preMasterSecret, handshakes)\n : prfMasterSecret(\n preMasterSecret,\n this.cipher.localRandom.serialize(),\n this.cipher.remoteRandom.serialize()\n );\n\n this.cipher.cipher = createCipher(this.cipher.cipherSuite);\n this.cipher.cipher.init(\n this.cipher.masterSecret,\n this.cipher.remoteRandom.serialize(),\n this.cipher.localRandom.serialize()\n );\n log(this.dtls.sessionId, \"cipher\", this.cipher.cipher.summary);\n\n return buf;\n }\n\n private sendCertificateVerify() {\n const cache = Buffer.concat(\n this.dtls.sortedHandshakeCache.map((v) => v.serialize())\n );\n const signed = this.cipher.signatureData(cache, \"sha256\");\n const signatureScheme = (() => {\n switch (this.cipher.signatureHashAlgorithm?.signature) {\n case SignatureAlgorithm.ecdsa_3:\n return SignatureScheme.ecdsa_secp256r1_sha256;\n case SignatureAlgorithm.rsa_1:\n return SignatureScheme.rsa_pkcs1_sha256;\n }\n })();\n if (!signatureScheme) throw new Error();\n log(\n this.dtls.sessionId,\n \"signatureScheme\",\n this.cipher.signatureHashAlgorithm?.signature,\n signatureScheme\n );\n\n const certificateVerify = new CertificateVerify(signatureScheme, signed);\n const packets = this.createPacket([certificateVerify]);\n const buf = Buffer.concat(packets.map((v) => v.serialize()));\n return buf;\n }\n\n private sendChangeCipherSpec() {\n const changeCipherSpec = ChangeCipherSpec.createEmpty().serialize();\n const packets = createPlaintext(this.dtls)(\n [{ type: ContentType.changeCipherSpec, fragment: changeCipherSpec }],\n ++this.dtls.recordSequenceNumber\n );\n const buf = Buffer.concat(packets.map((v) => v.serialize()));\n return buf;\n }\n\n private sendFinished() {\n const cache = Buffer.concat(\n this.dtls.sortedHandshakeCache.map((v) => v.serialize())\n );\n const localVerifyData = this.cipher.verifyData(cache);\n\n const finish = new Finished(localVerifyData);\n this.dtls.epoch = 1;\n const [packet] = this.createPacket([finish]);\n log(\n this.dtls.sessionId,\n \"raw finish packet\",\n packet.summary,\n this.dtls.sortedHandshakeCache.map((h) => h.summary)\n );\n\n this.dtls.recordSequenceNumber = 0;\n\n const buf = this.cipher.encryptPacket(packet).serialize();\n log(this.dtls.sessionId, \"finished\", this.cipher.cipher.summary);\n return buf;\n }\n}\n\nconst handlers: {\n [key: number]: (contexts: {\n dtls: DtlsContext;\n cipher: CipherContext;\n srtp: SrtpContext;\n }) => (message: any) => void;\n} = {};\n\nhandlers[HandshakeType.server_hello_2] =\n ({ cipher, srtp, dtls }) =>\n (message: ServerHello) => {\n log(dtls.sessionId, \"serverHello\", message.cipherSuite);\n cipher.remoteRandom = DtlsRandom.from(message.random);\n cipher.cipherSuite = message.cipherSuite;\n log(dtls.sessionId, \"selected cipherSuite\", cipher.cipherSuite);\n\n if (message.extensions) {\n message.extensions.forEach((extension) => {\n switch (extension.type) {\n case UseSRTP.type:\n const useSrtp = UseSRTP.fromData(extension.data);\n const profile = SrtpContext.findMatchingSRTPProfile(\n useSrtp.profiles as Profile[],\n dtls.options.srtpProfiles || []\n );\n log(dtls.sessionId, \"selected srtp profile\", profile);\n if (profile == undefined) return;\n srtp.srtpProfile = profile;\n break;\n case ExtendedMasterSecret.type:\n dtls.remoteExtendedMasterSecret = true;\n break;\n case RenegotiationIndication.type:\n log(dtls.sessionId, \"RenegotiationIndication\");\n break;\n }\n });\n }\n };\n\nhandlers[HandshakeType.certificate_11] =\n ({ cipher, dtls }) =>\n (message: Certificate) => {\n log(dtls.sessionId, \"handshake certificate\", message);\n cipher.remoteCertificate = message.certificateList[0];\n };\n\nhandlers[HandshakeType.server_key_exchange_12] =\n ({ cipher, dtls }) =>\n (message: ServerKeyExchange) => {\n if (!cipher.localRandom || !cipher.remoteRandom) throw new Error();\n log(dtls.sessionId, \"ServerKeyExchange\", message);\n\n log(dtls.sessionId, \"selected curve\", message.namedCurve);\n cipher.remoteKeyPair = {\n curve: message.namedCurve,\n publicKey: message.publicKey,\n };\n cipher.localKeyPair = generateKeyPair(message.namedCurve);\n };\n\nhandlers[HandshakeType.certificate_request_13] =\n ({ dtls }) =>\n (message: ServerCertificateRequest) => {\n log(dtls.sessionId, \"certificate_request\", message);\n dtls.requestedCertificateTypes = message.certificateTypes;\n dtls.requestedSignatureAlgorithms = message.signatures;\n };\n\nhandlers[HandshakeType.server_hello_done_14] =\n ({ dtls }) =>\n (msg) => {\n log(dtls.sessionId, \"server_hello_done\", msg);\n };\n"]}
1
+ {"version":3,"file":"flight5.js","sourceRoot":"","sources":["../../../../../../dtls/src/flight/client/flight5.ts"],"names":[],"mappings":"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","sourcesContent":["import debug from \"debug\";\n\nimport { SignatureAlgorithm, SignatureScheme } from \"../../cipher/const\";\nimport { createCipher } from \"../../cipher/create\";\nimport { generateKeyPair } from \"../../cipher/namedCurve\";\nimport {\n prfExtendedMasterSecret,\n prfMasterSecret,\n prfPreMasterSecret,\n} from \"../../cipher/prf\";\nimport { CipherContext } from \"../../context/cipher\";\nimport { DtlsContext } from \"../../context/dtls\";\nimport { Profile, SrtpContext } from \"../../context/srtp\";\nimport { TransportContext } from \"../../context/transport\";\nimport { HandshakeType } from \"../../handshake/const\";\nimport { ExtendedMasterSecret } from \"../../handshake/extensions/extendedMasterSecret\";\nimport { RenegotiationIndication } from \"../../handshake/extensions/renegotiationIndication\";\nimport { UseSRTP } from \"../../handshake/extensions/useSrtp\";\nimport { Certificate } from \"../../handshake/message/certificate\";\nimport { ChangeCipherSpec } from \"../../handshake/message/changeCipherSpec\";\nimport { CertificateVerify } from \"../../handshake/message/client/certificateVerify\";\nimport { ClientKeyExchange } from \"../../handshake/message/client/keyExchange\";\nimport { Finished } from \"../../handshake/message/finished\";\nimport { ServerCertificateRequest } from \"../../handshake/message/server/certificateRequest\";\nimport { ServerHello } from \"../../handshake/message/server/hello\";\nimport { ServerHelloDone } from \"../../handshake/message/server/helloDone\";\nimport { ServerKeyExchange } from \"../../handshake/message/server/keyExchange\";\nimport { DtlsRandom } from \"../../handshake/random\";\nimport { dumpBuffer } from \"../../helper\";\nimport { createPlaintext } from \"../../record/builder\";\nimport { ContentType } from \"../../record/const\";\nimport { FragmentedHandshake } from \"../../record/message/fragment\";\nimport { Flight } from \"../flight\";\n\nconst log = debug(\n \"werift-dtls : packages/dtls/src/flight/client/flight5.ts : log\",\n);\n\nexport class Flight5 extends Flight {\n constructor(\n udp: TransportContext,\n dtls: DtlsContext,\n private cipher: CipherContext,\n private srtp: SrtpContext,\n ) {\n super(udp, dtls, 5, 7);\n }\n\n handleHandshake(handshake: FragmentedHandshake) {\n this.dtls.bufferHandshakeCache([handshake], false, 4);\n const message = (() => {\n switch (handshake.msg_type) {\n case HandshakeType.server_hello_2:\n return ServerHello.deSerialize(handshake.fragment);\n case HandshakeType.certificate_11:\n return Certificate.deSerialize(handshake.fragment);\n case HandshakeType.server_key_exchange_12:\n return ServerKeyExchange.deSerialize(handshake.fragment);\n case HandshakeType.certificate_request_13:\n return ServerCertificateRequest.deSerialize(handshake.fragment);\n case HandshakeType.server_hello_done_14:\n return ServerHelloDone.deSerialize(handshake.fragment);\n }\n })();\n\n if (message) {\n handlers[message.msgType]({\n dtls: this.dtls,\n cipher: this.cipher,\n srtp: this.srtp,\n })(message);\n }\n }\n\n async exec() {\n if (this.dtls.flight === 5) {\n log(this.dtls.sessionId, \"flight5 twice\");\n this.send(this.dtls.lastMessage);\n return;\n }\n this.dtls.flight = 5;\n\n const needCertificate = this.dtls.requestedCertificateTypes.length > 0;\n log(this.dtls.sessionId, \"send flight5\", needCertificate);\n\n const messages = [\n needCertificate && this.sendCertificate(),\n this.sendClientKeyExchange(),\n needCertificate && this.sendCertificateVerify(),\n this.sendChangeCipherSpec(),\n this.sendFinished(),\n ].filter((v) => v) as Buffer[];\n\n this.dtls.lastMessage = messages;\n await this.transmit(messages);\n }\n\n private sendCertificate() {\n const certificate = new Certificate([Buffer.from(this.cipher.localCert)]);\n\n const packets = this.createPacket([certificate]);\n\n const buf = Buffer.concat(packets.map((v) => v.serialize()));\n return buf;\n }\n\n private sendClientKeyExchange() {\n if (!this.cipher.localKeyPair) throw new Error();\n\n const clientKeyExchange = new ClientKeyExchange(\n this.cipher.localKeyPair.publicKey,\n );\n const packets = this.createPacket([clientKeyExchange]);\n const buf = Buffer.concat(packets.map((v) => v.serialize()));\n\n const localKeyPair = this.cipher.localKeyPair;\n const remoteKeyPair = this.cipher.remoteKeyPair;\n\n if (!remoteKeyPair.publicKey) throw new Error(\"not exist\");\n\n const preMasterSecret = prfPreMasterSecret(\n remoteKeyPair.publicKey,\n localKeyPair.privateKey,\n localKeyPair.curve,\n );\n\n log(\n this.dtls.sessionId,\n \"extendedMasterSecret\",\n this.dtls.options.extendedMasterSecret,\n this.dtls.remoteExtendedMasterSecret,\n );\n\n const handshakes = Buffer.concat(\n this.dtls.sortedHandshakeCache.map((v) => v.serialize()),\n );\n this.cipher.masterSecret =\n this.dtls.options.extendedMasterSecret &&\n this.dtls.remoteExtendedMasterSecret\n ? prfExtendedMasterSecret(preMasterSecret, handshakes)\n : prfMasterSecret(\n preMasterSecret,\n this.cipher.localRandom.serialize(),\n this.cipher.remoteRandom.serialize(),\n );\n\n this.cipher.cipher = createCipher(this.cipher.cipherSuite);\n this.cipher.cipher.init(\n this.cipher.masterSecret,\n this.cipher.remoteRandom.serialize(),\n this.cipher.localRandom.serialize(),\n );\n log(this.dtls.sessionId, \"cipher\", this.cipher.cipher.summary);\n\n return buf;\n }\n\n private sendCertificateVerify() {\n const cache = Buffer.concat(\n this.dtls.sortedHandshakeCache.map((v) => v.serialize()),\n );\n const signed = this.cipher.signatureData(cache, \"sha256\");\n const signatureScheme = (() => {\n switch (this.cipher.signatureHashAlgorithm?.signature) {\n case SignatureAlgorithm.ecdsa_3:\n return SignatureScheme.ecdsa_secp256r1_sha256;\n case SignatureAlgorithm.rsa_1:\n return SignatureScheme.rsa_pkcs1_sha256;\n }\n })();\n if (!signatureScheme) throw new Error();\n log(\n this.dtls.sessionId,\n \"signatureScheme\",\n this.cipher.signatureHashAlgorithm?.signature,\n signatureScheme,\n );\n\n const certificateVerify = new CertificateVerify(signatureScheme, signed);\n const packets = this.createPacket([certificateVerify]);\n const buf = Buffer.concat(packets.map((v) => v.serialize()));\n return buf;\n }\n\n private sendChangeCipherSpec() {\n const changeCipherSpec = ChangeCipherSpec.createEmpty().serialize();\n const packets = createPlaintext(this.dtls)(\n [{ type: ContentType.changeCipherSpec, fragment: changeCipherSpec }],\n ++this.dtls.recordSequenceNumber,\n );\n const buf = Buffer.concat(packets.map((v) => v.serialize()));\n return buf;\n }\n\n private sendFinished() {\n const cache = Buffer.concat(\n this.dtls.sortedHandshakeCache.map((v) => v.serialize()),\n );\n const localVerifyData = this.cipher.verifyData(cache);\n\n const finish = new Finished(localVerifyData);\n this.dtls.epoch = 1;\n const [packet] = this.createPacket([finish]);\n log(\n this.dtls.sessionId,\n \"raw finish packet\",\n packet.summary,\n this.dtls.sortedHandshakeCache.map((h) => h.summary),\n );\n\n this.dtls.recordSequenceNumber = 0;\n\n const buf = this.cipher.encryptPacket(packet).serialize();\n log(this.dtls.sessionId, \"finished\", this.cipher.cipher.summary);\n return buf;\n }\n}\n\nconst handlers: {\n [key: number]: (contexts: {\n dtls: DtlsContext;\n cipher: CipherContext;\n srtp: SrtpContext;\n }) => (message: any) => void;\n} = {};\n\nhandlers[HandshakeType.server_hello_2] =\n ({ cipher, srtp, dtls }) =>\n (message: ServerHello) => {\n log(dtls.sessionId, \"serverHello\", message.cipherSuite);\n cipher.remoteRandom = DtlsRandom.from(message.random);\n cipher.cipherSuite = message.cipherSuite;\n log(dtls.sessionId, \"selected cipherSuite\", cipher.cipherSuite);\n\n if (message.extensions) {\n message.extensions.forEach((extension) => {\n switch (extension.type) {\n case UseSRTP.type:\n const useSrtp = UseSRTP.fromData(extension.data);\n const profile = SrtpContext.findMatchingSRTPProfile(\n useSrtp.profiles as Profile[],\n dtls.options.srtpProfiles || [],\n );\n log(dtls.sessionId, \"selected srtp profile\", profile);\n if (profile == undefined) return;\n srtp.srtpProfile = profile;\n break;\n case ExtendedMasterSecret.type:\n dtls.remoteExtendedMasterSecret = true;\n break;\n case RenegotiationIndication.type:\n log(dtls.sessionId, \"RenegotiationIndication\");\n break;\n }\n });\n }\n };\n\nhandlers[HandshakeType.certificate_11] =\n ({ cipher, dtls }) =>\n (message: Certificate) => {\n log(dtls.sessionId, \"handshake certificate\", message);\n cipher.remoteCertificate = message.certificateList[0];\n };\n\nhandlers[HandshakeType.server_key_exchange_12] =\n ({ cipher, dtls }) =>\n (message: ServerKeyExchange) => {\n if (!cipher.localRandom || !cipher.remoteRandom) throw new Error();\n log(dtls.sessionId, \"ServerKeyExchange\", message);\n\n log(dtls.sessionId, \"selected curve\", message.namedCurve);\n cipher.remoteKeyPair = {\n curve: message.namedCurve,\n publicKey: message.publicKey,\n };\n cipher.localKeyPair = generateKeyPair(message.namedCurve);\n };\n\nhandlers[HandshakeType.certificate_request_13] =\n ({ dtls }) =>\n (message: ServerCertificateRequest) => {\n log(dtls.sessionId, \"certificate_request\", message);\n dtls.requestedCertificateTypes = message.certificateTypes;\n dtls.requestedSignatureAlgorithms = message.signatures;\n };\n\nhandlers[HandshakeType.server_hello_done_14] =\n ({ dtls }) =>\n (msg) => {\n log(dtls.sessionId, \"server_hello_done\", msg);\n };\n"]}
@@ -3,7 +3,7 @@ import { DtlsContext } from "../context/dtls";
3
3
  import { TransportContext } from "../context/transport";
4
4
  import { Handshake } from "../typings/domain";
5
5
  declare const flightTypes: readonly ["PREPARING", "SENDING", "WAITING", "FINISHED"];
6
- type FlightType = typeof flightTypes[number];
6
+ type FlightType = (typeof flightTypes)[number];
7
7
  export declare abstract class Flight {
8
8
  private transport;
9
9
  dtls: DtlsContext;
@@ -89,11 +89,11 @@ class Flight {
89
89
  this.state = state;
90
90
  }
91
91
  }
92
- exports.Flight = Flight;
93
92
  Object.defineProperty(Flight, "RetransmitCount", {
94
93
  enumerable: true,
95
94
  configurable: true,
96
95
  writable: true,
97
96
  value: 10
98
97
  });
98
+ exports.Flight = Flight;
99
99
  //# sourceMappingURL=flight.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"flight.js","sourceRoot":"","sources":["../../../../../dtls/src/flight/flight.ts"],"names":[],"mappings":"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","sourcesContent":["import debug from \"debug\";\nimport { setTimeout } from \"timers/promises\";\n\nimport { DtlsContext } from \"../context/dtls\";\nimport { TransportContext } from \"../context/transport\";\nimport { createFragments, createPlaintext } from \"../record/builder\";\nimport { ContentType } from \"../record/const\";\nimport { Handshake } from \"../typings/domain\";\n\nconst warn = debug(\"werift-dtls : packages/dtls/src/flight/flight.ts : warn\");\nconst err = debug(\"werift-dtls : packages/dtls/src/flight/flight.ts : err\");\n\nconst flightTypes = [\"PREPARING\", \"SENDING\", \"WAITING\", \"FINISHED\"] as const;\n\ntype FlightType = typeof flightTypes[number];\n\nexport abstract class Flight {\n state: FlightType = \"PREPARING\";\n static RetransmitCount = 10;\n\n constructor(\n private transport: TransportContext,\n public dtls: DtlsContext,\n private flight: number,\n private nextFlight?: number\n ) {}\n\n protected createPacket(handshakes: Handshake[]) {\n const fragments = createFragments(this.dtls)(handshakes);\n this.dtls.bufferHandshakeCache(fragments, true, this.flight);\n const packets = createPlaintext(this.dtls)(\n fragments.map((fragment) => ({\n type: ContentType.handshake,\n fragment: fragment.serialize(),\n })),\n ++this.dtls.recordSequenceNumber\n );\n return packets;\n }\n\n protected async transmit(buffers: Buffer[]) {\n let retransmitCount = 0;\n for (; retransmitCount <= Flight.RetransmitCount; retransmitCount++) {\n this.setState(\"SENDING\");\n this.send(buffers).catch((e) => {\n err(\"fail to send\", err);\n });\n this.setState(\"WAITING\");\n\n if (this.nextFlight === undefined) {\n this.setState(\"FINISHED\");\n break;\n }\n\n await setTimeout(1000 * ((retransmitCount + 1) / 2));\n\n if (this.dtls.flight >= this.nextFlight) {\n this.setState(\"FINISHED\");\n break;\n } else {\n warn(\n this.dtls.sessionId,\n \"retransmit\",\n retransmitCount,\n this.dtls.flight\n );\n }\n }\n\n if (retransmitCount > Flight.RetransmitCount) {\n err(this.dtls.sessionId, \"retransmit failed\", retransmitCount);\n throw new Error(\n `over retransmitCount : ${this.flight} ${this.nextFlight}`\n );\n }\n }\n\n protected send = (buf: Buffer[]) =>\n Promise.all(buf.map((v) => this.transport.send(v)));\n\n private setState(state: FlightType) {\n this.state = state;\n }\n}\n"]}
1
+ {"version":3,"file":"flight.js","sourceRoot":"","sources":["../../../../../dtls/src/flight/flight.ts"],"names":[],"mappings":"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","sourcesContent":["import debug from \"debug\";\nimport { setTimeout } from \"timers/promises\";\n\nimport { DtlsContext } from \"../context/dtls\";\nimport { TransportContext } from \"../context/transport\";\nimport { createFragments, createPlaintext } from \"../record/builder\";\nimport { ContentType } from \"../record/const\";\nimport { Handshake } from \"../typings/domain\";\n\nconst warn = debug(\"werift-dtls : packages/dtls/src/flight/flight.ts : warn\");\nconst err = debug(\"werift-dtls : packages/dtls/src/flight/flight.ts : err\");\n\nconst flightTypes = [\"PREPARING\", \"SENDING\", \"WAITING\", \"FINISHED\"] as const;\n\ntype FlightType = (typeof flightTypes)[number];\n\nexport abstract class Flight {\n state: FlightType = \"PREPARING\";\n static RetransmitCount = 10;\n\n constructor(\n private transport: TransportContext,\n public dtls: DtlsContext,\n private flight: number,\n private nextFlight?: number,\n ) {}\n\n protected createPacket(handshakes: Handshake[]) {\n const fragments = createFragments(this.dtls)(handshakes);\n this.dtls.bufferHandshakeCache(fragments, true, this.flight);\n const packets = createPlaintext(this.dtls)(\n fragments.map((fragment) => ({\n type: ContentType.handshake,\n fragment: fragment.serialize(),\n })),\n ++this.dtls.recordSequenceNumber,\n );\n return packets;\n }\n\n protected async transmit(buffers: Buffer[]) {\n let retransmitCount = 0;\n for (; retransmitCount <= Flight.RetransmitCount; retransmitCount++) {\n this.setState(\"SENDING\");\n this.send(buffers).catch((e) => {\n err(\"fail to send\", err);\n });\n this.setState(\"WAITING\");\n\n if (this.nextFlight === undefined) {\n this.setState(\"FINISHED\");\n break;\n }\n\n await setTimeout(1000 * ((retransmitCount + 1) / 2));\n\n if (this.dtls.flight >= this.nextFlight) {\n this.setState(\"FINISHED\");\n break;\n } else {\n warn(\n this.dtls.sessionId,\n \"retransmit\",\n retransmitCount,\n this.dtls.flight,\n );\n }\n }\n\n if (retransmitCount > Flight.RetransmitCount) {\n err(this.dtls.sessionId, \"retransmit failed\", retransmitCount);\n throw new Error(\n `over retransmitCount : ${this.flight} ${this.nextFlight}`,\n );\n }\n }\n\n protected send = (buf: Buffer[]) =>\n Promise.all(buf.map((v) => this.transport.send(v)));\n\n private setState(state: FlightType) {\n this.state = state;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"flight2.js","sourceRoot":"","sources":["../../../../../../dtls/src/flight/server/flight2.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomBytes } from \"crypto\";\nimport debug from \"debug\";\n\nimport {\n CipherSuite,\n NamedCurveAlgorithmList,\n NamedCurveAlgorithms,\n SignatureAlgorithm,\n} from \"../../cipher/const\";\nimport { generateKeyPair } from \"../../cipher/namedCurve\";\nimport { CipherContext } from \"../../context/cipher\";\nimport { DtlsContext } from \"../../context/dtls\";\nimport { Profile, SrtpContext } from \"../../context/srtp\";\nimport { TransportContext } from \"../../context/transport\";\nimport { EllipticCurves } from \"../../handshake/extensions/ellipticCurves\";\nimport { ExtendedMasterSecret } from \"../../handshake/extensions/extendedMasterSecret\";\nimport { RenegotiationIndication } from \"../../handshake/extensions/renegotiationIndication\";\nimport { Signature } from \"../../handshake/extensions/signature\";\nimport { UseSRTP } from \"../../handshake/extensions/useSrtp\";\nimport { ClientHello } from \"../../handshake/message/client/hello\";\nimport { ServerHelloVerifyRequest } from \"../../handshake/message/server/helloVerifyRequest\";\nimport { DtlsRandom } from \"../../handshake/random\";\nimport { createFragments, createPlaintext } from \"../../record/builder\";\nimport { ContentType } from \"../../record/const\";\n\nconst log = debug(\"werift-dtls : packages/dtls/flight/server/flight2.ts : log\");\n\n// HelloVerifyRequest do not retransmit\n\nexport const flight2 =\n (\n udp: TransportContext,\n dtls: DtlsContext,\n cipher: CipherContext,\n srtp: SrtpContext\n ) =>\n (clientHello: ClientHello) => {\n dtls.flight = 2;\n\n // if flight 2 restarts due to packet loss, sequence numbers are reused from the top:\n // https://datatracker.ietf.org/doc/html/rfc6347#section-4.2.2\n // The first message each side transmits in each handshake always has\n // message_seq = 0. Whenever each new message is generated, the\n // message_seq value is incremented by one. Note that in the case of a\n // rehandshake, this implies that the HelloRequest will have message_seq = 0\n // and the ServerHello will have message_seq = 1. When a message is\n // retransmitted, the same message_seq value is used.\n dtls.recordSequenceNumber = 0;\n dtls.sequenceNumber = 0;\n\n clientHello.extensions.forEach((extension) => {\n switch (extension.type) {\n case EllipticCurves.type:\n {\n const curves = EllipticCurves.fromData(extension.data).data;\n log(dtls.sessionId, \"curves\", curves);\n const curve = curves.find((curve) =>\n NamedCurveAlgorithmList.includes(curve as any)\n ) as NamedCurveAlgorithms;\n cipher.namedCurve = curve;\n log(dtls.sessionId, \"curve selected\", cipher.namedCurve);\n }\n break;\n case Signature.type:\n {\n if (!cipher.signatureHashAlgorithm)\n throw new Error(\"need to set certificate\");\n\n const signatureHash = Signature.fromData(extension.data).data;\n log(dtls.sessionId, \"hash,signature\", signatureHash);\n const signature = signatureHash.find(\n (v) => v.signature === cipher.signatureHashAlgorithm?.signature\n )?.signature;\n const hash = signatureHash.find(\n (v) => v.hash === cipher.signatureHashAlgorithm?.hash\n )?.hash;\n if (signature == undefined || hash == undefined) {\n throw new Error(\"invalid signatureHash\");\n }\n }\n break;\n case UseSRTP.type:\n {\n if (!dtls.options?.srtpProfiles) return;\n if (dtls.options.srtpProfiles.length === 0) return;\n\n const useSrtp = UseSRTP.fromData(extension.data);\n log(dtls.sessionId, \"srtp profiles\", useSrtp.profiles);\n const profile = SrtpContext.findMatchingSRTPProfile(\n useSrtp.profiles as Profile[],\n dtls.options?.srtpProfiles\n );\n if (!profile) {\n throw new Error();\n }\n srtp.srtpProfile = profile;\n log(dtls.sessionId, \"srtp profile selected\", srtp.srtpProfile);\n }\n break;\n case ExtendedMasterSecret.type:\n {\n dtls.remoteExtendedMasterSecret = true;\n }\n break;\n case RenegotiationIndication.type:\n {\n log(dtls.sessionId, \"RenegotiationIndication\", extension.data);\n }\n break;\n }\n });\n\n cipher.localRandom = new DtlsRandom();\n cipher.remoteRandom = DtlsRandom.from(clientHello.random);\n\n const suites = clientHello.cipherSuites;\n log(dtls.sessionId, \"cipher suites\", suites);\n const suite = (() => {\n switch (cipher.signatureHashAlgorithm?.signature) {\n case SignatureAlgorithm.ecdsa_3:\n return CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_49195;\n case SignatureAlgorithm.rsa_1:\n return CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256_49199;\n }\n })();\n if (suite === undefined || !suites.includes(suite)) {\n throw new Error(\"dtls cipher suite negotiation failed\");\n }\n cipher.cipherSuite = suite;\n log(dtls.sessionId, \"selected cipherSuite\", cipher.cipherSuite);\n\n cipher.localKeyPair = generateKeyPair(cipher.namedCurve);\n\n dtls.cookie ||= randomBytes(20);\n const helloVerifyReq = new ServerHelloVerifyRequest(\n {\n major: 255 - 1,\n minor: 255 - 2,\n },\n dtls.cookie\n );\n const fragments = createFragments(dtls)([helloVerifyReq]);\n const packets = createPlaintext(dtls)(\n fragments.map((fragment) => ({\n type: ContentType.handshake,\n fragment: fragment.serialize(),\n })),\n ++dtls.recordSequenceNumber\n );\n\n const chunk = packets.map((v) => v.serialize());\n for (const buf of chunk) {\n udp.send(buf);\n }\n };\n"]}
1
+ {"version":3,"file":"flight2.js","sourceRoot":"","sources":["../../../../../../dtls/src/flight/server/flight2.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomBytes } from \"crypto\";\nimport debug from \"debug\";\n\nimport {\n CipherSuite,\n NamedCurveAlgorithmList,\n NamedCurveAlgorithms,\n SignatureAlgorithm,\n} from \"../../cipher/const\";\nimport { generateKeyPair } from \"../../cipher/namedCurve\";\nimport { CipherContext } from \"../../context/cipher\";\nimport { DtlsContext } from \"../../context/dtls\";\nimport { Profile, SrtpContext } from \"../../context/srtp\";\nimport { TransportContext } from \"../../context/transport\";\nimport { EllipticCurves } from \"../../handshake/extensions/ellipticCurves\";\nimport { ExtendedMasterSecret } from \"../../handshake/extensions/extendedMasterSecret\";\nimport { RenegotiationIndication } from \"../../handshake/extensions/renegotiationIndication\";\nimport { Signature } from \"../../handshake/extensions/signature\";\nimport { UseSRTP } from \"../../handshake/extensions/useSrtp\";\nimport { ClientHello } from \"../../handshake/message/client/hello\";\nimport { ServerHelloVerifyRequest } from \"../../handshake/message/server/helloVerifyRequest\";\nimport { DtlsRandom } from \"../../handshake/random\";\nimport { createFragments, createPlaintext } from \"../../record/builder\";\nimport { ContentType } from \"../../record/const\";\n\nconst log = debug(\"werift-dtls : packages/dtls/flight/server/flight2.ts : log\");\n\n// HelloVerifyRequest do not retransmit\n\nexport const flight2 =\n (\n udp: TransportContext,\n dtls: DtlsContext,\n cipher: CipherContext,\n srtp: SrtpContext,\n ) =>\n (clientHello: ClientHello) => {\n dtls.flight = 2;\n\n // if flight 2 restarts due to packet loss, sequence numbers are reused from the top:\n // https://datatracker.ietf.org/doc/html/rfc6347#section-4.2.2\n // The first message each side transmits in each handshake always has\n // message_seq = 0. Whenever each new message is generated, the\n // message_seq value is incremented by one. Note that in the case of a\n // rehandshake, this implies that the HelloRequest will have message_seq = 0\n // and the ServerHello will have message_seq = 1. When a message is\n // retransmitted, the same message_seq value is used.\n dtls.recordSequenceNumber = 0;\n dtls.sequenceNumber = 0;\n\n clientHello.extensions.forEach((extension) => {\n switch (extension.type) {\n case EllipticCurves.type:\n {\n const curves = EllipticCurves.fromData(extension.data).data;\n log(dtls.sessionId, \"curves\", curves);\n const curve = curves.find((curve) =>\n NamedCurveAlgorithmList.includes(curve as any),\n ) as NamedCurveAlgorithms;\n cipher.namedCurve = curve;\n log(dtls.sessionId, \"curve selected\", cipher.namedCurve);\n }\n break;\n case Signature.type:\n {\n if (!cipher.signatureHashAlgorithm)\n throw new Error(\"need to set certificate\");\n\n const signatureHash = Signature.fromData(extension.data).data;\n log(dtls.sessionId, \"hash,signature\", signatureHash);\n const signature = signatureHash.find(\n (v) => v.signature === cipher.signatureHashAlgorithm?.signature,\n )?.signature;\n const hash = signatureHash.find(\n (v) => v.hash === cipher.signatureHashAlgorithm?.hash,\n )?.hash;\n if (signature == undefined || hash == undefined) {\n throw new Error(\"invalid signatureHash\");\n }\n }\n break;\n case UseSRTP.type:\n {\n if (!dtls.options?.srtpProfiles) return;\n if (dtls.options.srtpProfiles.length === 0) return;\n\n const useSrtp = UseSRTP.fromData(extension.data);\n log(dtls.sessionId, \"srtp profiles\", useSrtp.profiles);\n const profile = SrtpContext.findMatchingSRTPProfile(\n useSrtp.profiles as Profile[],\n dtls.options?.srtpProfiles,\n );\n if (!profile) {\n throw new Error();\n }\n srtp.srtpProfile = profile;\n log(dtls.sessionId, \"srtp profile selected\", srtp.srtpProfile);\n }\n break;\n case ExtendedMasterSecret.type:\n {\n dtls.remoteExtendedMasterSecret = true;\n }\n break;\n case RenegotiationIndication.type:\n {\n log(dtls.sessionId, \"RenegotiationIndication\", extension.data);\n }\n break;\n }\n });\n\n cipher.localRandom = new DtlsRandom();\n cipher.remoteRandom = DtlsRandom.from(clientHello.random);\n\n const suites = clientHello.cipherSuites;\n log(dtls.sessionId, \"cipher suites\", suites);\n const suite = (() => {\n switch (cipher.signatureHashAlgorithm?.signature) {\n case SignatureAlgorithm.ecdsa_3:\n return CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_49195;\n case SignatureAlgorithm.rsa_1:\n return CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256_49199;\n }\n })();\n if (suite === undefined || !suites.includes(suite)) {\n throw new Error(\"dtls cipher suite negotiation failed\");\n }\n cipher.cipherSuite = suite;\n log(dtls.sessionId, \"selected cipherSuite\", cipher.cipherSuite);\n\n cipher.localKeyPair = generateKeyPair(cipher.namedCurve);\n\n dtls.cookie ||= randomBytes(20);\n const helloVerifyReq = new ServerHelloVerifyRequest(\n {\n major: 255 - 1,\n minor: 255 - 2,\n },\n dtls.cookie,\n );\n const fragments = createFragments(dtls)([helloVerifyReq]);\n const packets = createPlaintext(dtls)(\n fragments.map((fragment) => ({\n type: ContentType.handshake,\n fragment: fragment.serialize(),\n })),\n ++dtls.recordSequenceNumber,\n );\n\n const chunk = packets.map((v) => v.serialize());\n for (const buf of chunk) {\n udp.send(buf);\n }\n };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"flight4.js","sourceRoot":"","sources":["../../../../../../dtls/src/flight/server/flight4.ts"],"names":[],"mappings":"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","sourcesContent":["import debug from \"debug\";\n\nimport {\n CurveType,\n HashAlgorithm,\n SignatureAlgorithm,\n} from \"../../cipher/const\";\nimport { CipherContext } from \"../../context/cipher\";\nimport { DtlsContext } from \"../../context/dtls\";\nimport { SrtpContext } from \"../../context/srtp\";\nimport { TransportContext } from \"../../context/transport\";\nimport { ExtendedMasterSecret } from \"../../handshake/extensions/extendedMasterSecret\";\nimport { RenegotiationIndication } from \"../../handshake/extensions/renegotiationIndication\";\nimport { UseSRTP } from \"../../handshake/extensions/useSrtp\";\nimport { Certificate } from \"../../handshake/message/certificate\";\nimport { ServerCertificateRequest } from \"../../handshake/message/server/certificateRequest\";\nimport { ServerHello } from \"../../handshake/message/server/hello\";\nimport { ServerHelloDone } from \"../../handshake/message/server/helloDone\";\nimport { ServerKeyExchange } from \"../../handshake/message/server/keyExchange\";\nimport { FragmentedHandshake } from \"../../record/message/fragment\";\nimport { Extension } from \"../../typings/domain\";\nimport { Flight } from \"../flight\";\n\nconst log = debug(\"werift-dtls : packages/dtls/flight/server/flight4.ts : log\");\n\nexport class Flight4 extends Flight {\n constructor(\n udp: TransportContext,\n dtls: DtlsContext,\n private cipher: CipherContext,\n private srtp: SrtpContext\n ) {\n super(udp, dtls, 4, 6);\n }\n\n async exec(\n clientHello: FragmentedHandshake,\n certificateRequest: boolean = false\n ) {\n if (this.dtls.flight === 4) {\n log(this.dtls.sessionId, \"flight4 twice\");\n this.send(this.dtls.lastMessage);\n return;\n }\n this.dtls.flight = 4;\n this.dtls.sequenceNumber = 1;\n this.dtls.bufferHandshakeCache([clientHello], false, 4);\n\n const messages = [\n this.sendServerHello(),\n this.sendCertificate(),\n this.sendServerKeyExchange(),\n certificateRequest && this.sendCertificateRequest(),\n this.sendServerHelloDone(),\n ].filter((v) => v) as Buffer[];\n\n this.dtls.lastMessage = messages;\n await this.transmit(messages);\n }\n\n private sendServerHello() {\n // todo fix; should use socket.extensions\n const extensions: Extension[] = [];\n if (this.srtp.srtpProfile) {\n extensions.push(\n UseSRTP.create([this.srtp.srtpProfile], Buffer.from([0x00])).extension\n );\n }\n if (this.dtls.options.extendedMasterSecret) {\n extensions.push({\n type: ExtendedMasterSecret.type,\n data: Buffer.alloc(0),\n });\n }\n const renegotiationIndication = RenegotiationIndication.createEmpty();\n extensions.push(renegotiationIndication.extension);\n\n const serverHello = new ServerHello(\n this.dtls.version,\n this.cipher.localRandom,\n Buffer.from([0x00]),\n this.cipher.cipherSuite,\n 0, // do not compression\n extensions\n );\n const packets = this.createPacket([serverHello]);\n return Buffer.concat(packets.map((v) => v.serialize()));\n }\n\n // 7.4.2 Server Certificate\n private sendCertificate() {\n const certificate = new Certificate([Buffer.from(this.cipher.localCert)]);\n\n const packets = this.createPacket([certificate]);\n return Buffer.concat(packets.map((v) => v.serialize()));\n }\n\n private sendServerKeyExchange() {\n const signature = this.cipher.generateKeySignature(\"sha256\");\n if (!this.cipher.signatureHashAlgorithm) throw new Error(\"not exist\");\n\n const keyExchange = new ServerKeyExchange(\n CurveType.named_curve_3,\n this.cipher.namedCurve,\n this.cipher.localKeyPair.publicKey.length,\n this.cipher.localKeyPair.publicKey,\n this.cipher.signatureHashAlgorithm.hash,\n this.cipher.signatureHashAlgorithm.signature,\n signature.length,\n signature\n );\n\n const packets = this.createPacket([keyExchange]);\n return Buffer.concat(packets.map((v) => v.serialize()));\n }\n\n // 7.4.4. Certificate Request\n private sendCertificateRequest() {\n const handshake = new ServerCertificateRequest(\n [\n 1, // clientCertificateTypeRSASign\n 64, // clientCertificateTypeECDSASign\n ],\n [\n { hash: HashAlgorithm.sha256_4, signature: SignatureAlgorithm.rsa_1 },\n { hash: HashAlgorithm.sha256_4, signature: SignatureAlgorithm.ecdsa_3 },\n ],\n []\n );\n log(this.dtls.sessionId, \"sendCertificateRequest\", handshake);\n const packets = this.createPacket([handshake]);\n return Buffer.concat(packets.map((v) => v.serialize()));\n }\n\n private sendServerHelloDone() {\n const handshake = new ServerHelloDone();\n\n const packets = this.createPacket([handshake]);\n return Buffer.concat(packets.map((v) => v.serialize()));\n }\n}\n"]}
1
+ {"version":3,"file":"flight4.js","sourceRoot":"","sources":["../../../../../../dtls/src/flight/server/flight4.ts"],"names":[],"mappings":"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","sourcesContent":["import debug from \"debug\";\n\nimport {\n CurveType,\n HashAlgorithm,\n SignatureAlgorithm,\n} from \"../../cipher/const\";\nimport { CipherContext } from \"../../context/cipher\";\nimport { DtlsContext } from \"../../context/dtls\";\nimport { SrtpContext } from \"../../context/srtp\";\nimport { TransportContext } from \"../../context/transport\";\nimport { ExtendedMasterSecret } from \"../../handshake/extensions/extendedMasterSecret\";\nimport { RenegotiationIndication } from \"../../handshake/extensions/renegotiationIndication\";\nimport { UseSRTP } from \"../../handshake/extensions/useSrtp\";\nimport { Certificate } from \"../../handshake/message/certificate\";\nimport { ServerCertificateRequest } from \"../../handshake/message/server/certificateRequest\";\nimport { ServerHello } from \"../../handshake/message/server/hello\";\nimport { ServerHelloDone } from \"../../handshake/message/server/helloDone\";\nimport { ServerKeyExchange } from \"../../handshake/message/server/keyExchange\";\nimport { FragmentedHandshake } from \"../../record/message/fragment\";\nimport { Extension } from \"../../typings/domain\";\nimport { Flight } from \"../flight\";\n\nconst log = debug(\"werift-dtls : packages/dtls/flight/server/flight4.ts : log\");\n\nexport class Flight4 extends Flight {\n constructor(\n udp: TransportContext,\n dtls: DtlsContext,\n private cipher: CipherContext,\n private srtp: SrtpContext,\n ) {\n super(udp, dtls, 4, 6);\n }\n\n async exec(\n clientHello: FragmentedHandshake,\n certificateRequest: boolean = false,\n ) {\n if (this.dtls.flight === 4) {\n log(this.dtls.sessionId, \"flight4 twice\");\n this.send(this.dtls.lastMessage);\n return;\n }\n this.dtls.flight = 4;\n this.dtls.sequenceNumber = 1;\n this.dtls.bufferHandshakeCache([clientHello], false, 4);\n\n const messages = [\n this.sendServerHello(),\n this.sendCertificate(),\n this.sendServerKeyExchange(),\n certificateRequest && this.sendCertificateRequest(),\n this.sendServerHelloDone(),\n ].filter((v) => v) as Buffer[];\n\n this.dtls.lastMessage = messages;\n await this.transmit(messages);\n }\n\n private sendServerHello() {\n // todo fix; should use socket.extensions\n const extensions: Extension[] = [];\n if (this.srtp.srtpProfile) {\n extensions.push(\n UseSRTP.create([this.srtp.srtpProfile], Buffer.from([0x00])).extension,\n );\n }\n if (this.dtls.options.extendedMasterSecret) {\n extensions.push({\n type: ExtendedMasterSecret.type,\n data: Buffer.alloc(0),\n });\n }\n const renegotiationIndication = RenegotiationIndication.createEmpty();\n extensions.push(renegotiationIndication.extension);\n\n const serverHello = new ServerHello(\n this.dtls.version,\n this.cipher.localRandom,\n Buffer.from([0x00]),\n this.cipher.cipherSuite,\n 0, // do not compression\n extensions,\n );\n const packets = this.createPacket([serverHello]);\n return Buffer.concat(packets.map((v) => v.serialize()));\n }\n\n // 7.4.2 Server Certificate\n private sendCertificate() {\n const certificate = new Certificate([Buffer.from(this.cipher.localCert)]);\n\n const packets = this.createPacket([certificate]);\n return Buffer.concat(packets.map((v) => v.serialize()));\n }\n\n private sendServerKeyExchange() {\n const signature = this.cipher.generateKeySignature(\"sha256\");\n if (!this.cipher.signatureHashAlgorithm) throw new Error(\"not exist\");\n\n const keyExchange = new ServerKeyExchange(\n CurveType.named_curve_3,\n this.cipher.namedCurve,\n this.cipher.localKeyPair.publicKey.length,\n this.cipher.localKeyPair.publicKey,\n this.cipher.signatureHashAlgorithm.hash,\n this.cipher.signatureHashAlgorithm.signature,\n signature.length,\n signature,\n );\n\n const packets = this.createPacket([keyExchange]);\n return Buffer.concat(packets.map((v) => v.serialize()));\n }\n\n // 7.4.4. Certificate Request\n private sendCertificateRequest() {\n const handshake = new ServerCertificateRequest(\n [\n 1, // clientCertificateTypeRSASign\n 64, // clientCertificateTypeECDSASign\n ],\n [\n { hash: HashAlgorithm.sha256_4, signature: SignatureAlgorithm.rsa_1 },\n { hash: HashAlgorithm.sha256_4, signature: SignatureAlgorithm.ecdsa_3 },\n ],\n [],\n );\n log(this.dtls.sessionId, \"sendCertificateRequest\", handshake);\n const packets = this.createPacket([handshake]);\n return Buffer.concat(packets.map((v) => v.serialize()));\n }\n\n private sendServerHelloDone() {\n const handshake = new ServerHelloDone();\n\n const packets = this.createPacket([handshake]);\n return Buffer.concat(packets.map((v) => v.serialize()));\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"flight6.js","sourceRoot":"","sources":["../../../../../../dtls/src/flight/server/flight6.ts"],"names":[],"mappings":"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","sourcesContent":["import debug from \"debug\";\n\nimport { createCipher } from \"../../cipher/create\";\nimport {\n prfExtendedMasterSecret,\n prfMasterSecret,\n prfPreMasterSecret,\n} from \"../../cipher/prf\";\nimport { CipherContext } from \"../../context/cipher\";\nimport { DtlsContext } from \"../../context/dtls\";\nimport { TransportContext } from \"../../context/transport\";\nimport { HandshakeType } from \"../../handshake/const\";\nimport { Certificate } from \"../../handshake/message/certificate\";\nimport { ChangeCipherSpec } from \"../../handshake/message/changeCipherSpec\";\nimport { CertificateVerify } from \"../../handshake/message/client/certificateVerify\";\nimport { ClientKeyExchange } from \"../../handshake/message/client/keyExchange\";\nimport { Finished } from \"../../handshake/message/finished\";\nimport { createPlaintext } from \"../../record/builder\";\nimport { ContentType } from \"../../record/const\";\nimport { FragmentedHandshake } from \"../../record/message/fragment\";\nimport { Flight } from \"../flight\";\n\nconst log = debug(\"werift-dtls : packages/dtls/flight/server/flight6.ts\");\n\nexport class Flight6 extends Flight {\n constructor(\n udp: TransportContext,\n dtls: DtlsContext,\n private cipher: CipherContext\n ) {\n super(udp, dtls, 6);\n }\n\n handleHandshake(handshake: FragmentedHandshake) {\n this.dtls.bufferHandshakeCache([handshake], false, 5);\n\n const message = (() => {\n switch (handshake.msg_type) {\n case HandshakeType.certificate_11:\n return Certificate.deSerialize(handshake.fragment);\n case HandshakeType.certificate_verify_15:\n return CertificateVerify.deSerialize(handshake.fragment);\n case HandshakeType.client_key_exchange_16:\n return ClientKeyExchange.deSerialize(handshake.fragment);\n case HandshakeType.finished_20:\n return Finished.deSerialize(handshake.fragment);\n }\n })();\n\n if (message) {\n const handler = handlers[message.msgType];\n if (!handler) {\n // todo handle certificate_11\n // todo handle certificate_verify_15\n return;\n }\n handler({ dtls: this.dtls, cipher: this.cipher })(message);\n }\n }\n\n async exec() {\n if (this.dtls.flight === 6) {\n log(this.dtls.sessionId, \"flight6 twice\");\n this.send(this.dtls.lastMessage);\n return;\n }\n this.dtls.flight = 6;\n\n const messages = [this.sendChangeCipherSpec(), this.sendFinished()];\n this.dtls.lastMessage = messages;\n await this.transmit(messages);\n }\n\n private sendChangeCipherSpec() {\n const changeCipherSpec = ChangeCipherSpec.createEmpty().serialize();\n const packets = createPlaintext(this.dtls)(\n [{ type: ContentType.changeCipherSpec, fragment: changeCipherSpec }],\n ++this.dtls.recordSequenceNumber\n );\n const buf = Buffer.concat(packets.map((v) => v.serialize()));\n return buf;\n }\n\n private sendFinished() {\n const cache = Buffer.concat(\n this.dtls.sortedHandshakeCache.map((v) => v.serialize())\n );\n\n const localVerifyData = this.cipher.verifyData(cache);\n const finish = new Finished(localVerifyData);\n\n this.dtls.epoch = 1;\n const [packet] = this.createPacket([finish]);\n this.dtls.recordSequenceNumber = 0;\n\n const buf = this.cipher.encryptPacket(packet).serialize();\n return buf;\n }\n}\n\nconst handlers: {\n [key: number]: (contexts: {\n dtls: DtlsContext;\n cipher: CipherContext;\n }) => (message: any) => void;\n} = {};\n\nhandlers[HandshakeType.client_key_exchange_16] =\n ({ cipher, dtls }) =>\n (message: ClientKeyExchange) => {\n cipher.remoteKeyPair = {\n curve: cipher.namedCurve,\n publicKey: message.publicKey,\n };\n if (\n !cipher.remoteKeyPair.publicKey ||\n !cipher.localKeyPair ||\n !cipher.remoteRandom ||\n !cipher.localRandom\n )\n throw new Error(\"not exist\");\n\n const preMasterSecret = prfPreMasterSecret(\n cipher.remoteKeyPair.publicKey,\n cipher.localKeyPair.privateKey,\n cipher.localKeyPair.curve\n );\n\n log(\n dtls.sessionId,\n \"extendedMasterSecret\",\n dtls.options.extendedMasterSecret,\n dtls.remoteExtendedMasterSecret\n );\n\n const handshakes = Buffer.concat(\n dtls.sortedHandshakeCache.map((v) => v.serialize())\n );\n cipher.masterSecret =\n dtls.options.extendedMasterSecret && dtls.remoteExtendedMasterSecret\n ? prfExtendedMasterSecret(preMasterSecret, handshakes)\n : prfMasterSecret(\n preMasterSecret,\n cipher.remoteRandom.serialize(),\n cipher.localRandom.serialize()\n );\n\n cipher.cipher = createCipher(cipher.cipherSuite!);\n cipher.cipher.init(\n cipher.masterSecret,\n cipher.localRandom.serialize(),\n cipher.remoteRandom.serialize()\n );\n log(dtls.sessionId, \"setup cipher\", cipher.cipher.summary);\n };\n\nhandlers[HandshakeType.finished_20] =\n ({ dtls }) =>\n (message: Finished) => {\n log(dtls.sessionId, \"finished\", message);\n };\n"]}
1
+ {"version":3,"file":"flight6.js","sourceRoot":"","sources":["../../../../../../dtls/src/flight/server/flight6.ts"],"names":[],"mappings":"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","sourcesContent":["import debug from \"debug\";\n\nimport { createCipher } from \"../../cipher/create\";\nimport {\n prfExtendedMasterSecret,\n prfMasterSecret,\n prfPreMasterSecret,\n} from \"../../cipher/prf\";\nimport { CipherContext } from \"../../context/cipher\";\nimport { DtlsContext } from \"../../context/dtls\";\nimport { TransportContext } from \"../../context/transport\";\nimport { HandshakeType } from \"../../handshake/const\";\nimport { Certificate } from \"../../handshake/message/certificate\";\nimport { ChangeCipherSpec } from \"../../handshake/message/changeCipherSpec\";\nimport { CertificateVerify } from \"../../handshake/message/client/certificateVerify\";\nimport { ClientKeyExchange } from \"../../handshake/message/client/keyExchange\";\nimport { Finished } from \"../../handshake/message/finished\";\nimport { createPlaintext } from \"../../record/builder\";\nimport { ContentType } from \"../../record/const\";\nimport { FragmentedHandshake } from \"../../record/message/fragment\";\nimport { Flight } from \"../flight\";\n\nconst log = debug(\"werift-dtls : packages/dtls/flight/server/flight6.ts\");\n\nexport class Flight6 extends Flight {\n constructor(\n udp: TransportContext,\n dtls: DtlsContext,\n private cipher: CipherContext,\n ) {\n super(udp, dtls, 6);\n }\n\n handleHandshake(handshake: FragmentedHandshake) {\n this.dtls.bufferHandshakeCache([handshake], false, 5);\n\n const message = (() => {\n switch (handshake.msg_type) {\n case HandshakeType.certificate_11:\n return Certificate.deSerialize(handshake.fragment);\n case HandshakeType.certificate_verify_15:\n return CertificateVerify.deSerialize(handshake.fragment);\n case HandshakeType.client_key_exchange_16:\n return ClientKeyExchange.deSerialize(handshake.fragment);\n case HandshakeType.finished_20:\n return Finished.deSerialize(handshake.fragment);\n }\n })();\n\n if (message) {\n const handler = handlers[message.msgType];\n if (!handler) {\n // todo handle certificate_11\n // todo handle certificate_verify_15\n return;\n }\n handler({ dtls: this.dtls, cipher: this.cipher })(message);\n }\n }\n\n async exec() {\n if (this.dtls.flight === 6) {\n log(this.dtls.sessionId, \"flight6 twice\");\n this.send(this.dtls.lastMessage);\n return;\n }\n this.dtls.flight = 6;\n\n const messages = [this.sendChangeCipherSpec(), this.sendFinished()];\n this.dtls.lastMessage = messages;\n await this.transmit(messages);\n }\n\n private sendChangeCipherSpec() {\n const changeCipherSpec = ChangeCipherSpec.createEmpty().serialize();\n const packets = createPlaintext(this.dtls)(\n [{ type: ContentType.changeCipherSpec, fragment: changeCipherSpec }],\n ++this.dtls.recordSequenceNumber,\n );\n const buf = Buffer.concat(packets.map((v) => v.serialize()));\n return buf;\n }\n\n private sendFinished() {\n const cache = Buffer.concat(\n this.dtls.sortedHandshakeCache.map((v) => v.serialize()),\n );\n\n const localVerifyData = this.cipher.verifyData(cache);\n const finish = new Finished(localVerifyData);\n\n this.dtls.epoch = 1;\n const [packet] = this.createPacket([finish]);\n this.dtls.recordSequenceNumber = 0;\n\n const buf = this.cipher.encryptPacket(packet).serialize();\n return buf;\n }\n}\n\nconst handlers: {\n [key: number]: (contexts: {\n dtls: DtlsContext;\n cipher: CipherContext;\n }) => (message: any) => void;\n} = {};\n\nhandlers[HandshakeType.client_key_exchange_16] =\n ({ cipher, dtls }) =>\n (message: ClientKeyExchange) => {\n cipher.remoteKeyPair = {\n curve: cipher.namedCurve,\n publicKey: message.publicKey,\n };\n if (\n !cipher.remoteKeyPair.publicKey ||\n !cipher.localKeyPair ||\n !cipher.remoteRandom ||\n !cipher.localRandom\n )\n throw new Error(\"not exist\");\n\n const preMasterSecret = prfPreMasterSecret(\n cipher.remoteKeyPair.publicKey,\n cipher.localKeyPair.privateKey,\n cipher.localKeyPair.curve,\n );\n\n log(\n dtls.sessionId,\n \"extendedMasterSecret\",\n dtls.options.extendedMasterSecret,\n dtls.remoteExtendedMasterSecret,\n );\n\n const handshakes = Buffer.concat(\n dtls.sortedHandshakeCache.map((v) => v.serialize()),\n );\n cipher.masterSecret =\n dtls.options.extendedMasterSecret && dtls.remoteExtendedMasterSecret\n ? prfExtendedMasterSecret(preMasterSecret, handshakes)\n : prfMasterSecret(\n preMasterSecret,\n cipher.remoteRandom.serialize(),\n cipher.localRandom.serialize(),\n );\n\n cipher.cipher = createCipher(cipher.cipherSuite!);\n cipher.cipher.init(\n cipher.masterSecret,\n cipher.localRandom.serialize(),\n cipher.remoteRandom.serialize(),\n );\n log(dtls.sessionId, \"setup cipher\", cipher.cipher.summary);\n };\n\nhandlers[HandshakeType.finished_20] =\n ({ dtls }) =>\n (message: Finished) => {\n log(dtls.sessionId, \"finished\", message);\n };\n"]}
@@ -41,7 +41,6 @@ class EllipticCurves {
41
41
  };
42
42
  }
43
43
  }
44
- exports.EllipticCurves = EllipticCurves;
45
44
  Object.defineProperty(EllipticCurves, "type", {
46
45
  enumerable: true,
47
46
  configurable: true,
@@ -57,4 +56,5 @@ Object.defineProperty(EllipticCurves, "spec", {
57
56
  data: binary_data_1.types.array(binary_data_1.types.uint16be, binary_data_1.types.uint16be, "bytes"),
58
57
  }
59
58
  });
59
+ exports.EllipticCurves = EllipticCurves;
60
60
  //# sourceMappingURL=ellipticCurves.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ellipticCurves.js","sourceRoot":"","sources":["../../../../../../dtls/src/handshake/extensions/ellipticCurves.ts"],"names":[],"mappings":";;;AAAA,6CAAoD;AAIpD,UAAU;AACV,MAAa,cAAc;IAUzB,YAAY,QAAiC,EAAE;QAH/C;;;;mBAAsB,cAAc,CAAC,IAAI;WAAC;QAC1C;;;;mBAAwB,EAAE;WAAC;QAGzB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,OAAO,IAAI,cAAc,EAAE,CAAC;IAC9B,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,GAAW;QACzB,OAAO,IAAI,cAAc,CAAC;YACxB,IAAI,EAAE,cAAc,CAAC,IAAI;YACzB,IAAI,EAAE,IAAA,oBAAM,EAAC,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;SAC5C,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,GAAW;QAC5B,OAAO,IAAI,cAAc,CAAC,IAAA,oBAAM,EAAC,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,SAAS;QACP,OAAO,MAAM,CAAC,IAAI,CAAC,IAAA,oBAAM,EAAC,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,SAAS;QACX,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;SAChC,CAAC;IACJ,CAAC;;AAtCH,wCAuCC;AAtCQ;;;;WAAO,EAAE;GAAC;AACV;;;;WAAgB;QACrB,IAAI,EAAE,mBAAK,CAAC,QAAQ;QACpB,IAAI,EAAE,mBAAK,CAAC,KAAK,CAAC,mBAAK,CAAC,QAAQ,EAAE,mBAAK,CAAC,QAAQ,EAAE,OAAO,CAAC;KAC3D;GAAC","sourcesContent":["import { decode, encode, types } from \"binary-data\";\n\nimport { Extension } from \"../../typings/domain\";\n\n// rfc4492\nexport class EllipticCurves {\n static type = 10;\n static readonly spec = {\n type: types.uint16be,\n data: types.array(types.uint16be, types.uint16be, \"bytes\"),\n };\n\n public type: number = EllipticCurves.type;\n public data: number[] = [];\n\n constructor(props: Partial<EllipticCurves> = {}) {\n Object.assign(this, props);\n }\n\n static createEmpty() {\n return new EllipticCurves();\n }\n\n static fromData(buf: Buffer) {\n return new EllipticCurves({\n type: EllipticCurves.type,\n data: decode(buf, EllipticCurves.spec.data),\n });\n }\n\n static deSerialize(buf: Buffer) {\n return new EllipticCurves(decode(buf, EllipticCurves.spec));\n }\n\n serialize() {\n return Buffer.from(encode(this, EllipticCurves.spec).slice());\n }\n\n get extension(): Extension {\n return {\n type: this.type,\n data: this.serialize().slice(2),\n };\n }\n}\n"]}
1
+ {"version":3,"file":"ellipticCurves.js","sourceRoot":"","sources":["../../../../../../dtls/src/handshake/extensions/ellipticCurves.ts"],"names":[],"mappings":";;;AAAA,6CAAoD;AAIpD,UAAU;AACV,MAAa,cAAc;IAUzB,YAAY,QAAiC,EAAE;QAHxC;;;;mBAAe,cAAc,CAAC,IAAI;WAAC;QACnC;;;;mBAAiB,EAAE;WAAC;QAGzB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,OAAO,IAAI,cAAc,EAAE,CAAC;IAC9B,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,GAAW;QACzB,OAAO,IAAI,cAAc,CAAC;YACxB,IAAI,EAAE,cAAc,CAAC,IAAI;YACzB,IAAI,EAAE,IAAA,oBAAM,EAAC,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;SAC5C,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,GAAW;QAC5B,OAAO,IAAI,cAAc,CAAC,IAAA,oBAAM,EAAC,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,SAAS;QACP,OAAO,MAAM,CAAC,IAAI,CAAC,IAAA,oBAAM,EAAC,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,SAAS;QACX,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;SAChC,CAAC;IACJ,CAAC;;AArCM;;;;WAAO,EAAE;EAAL,CAAM;AACD;;;;WAAO;QACrB,IAAI,EAAE,mBAAK,CAAC,QAAQ;QACpB,IAAI,EAAE,mBAAK,CAAC,KAAK,CAAC,mBAAK,CAAC,QAAQ,EAAE,mBAAK,CAAC,QAAQ,EAAE,OAAO,CAAC;KAC3D;EAHmB,CAGlB;AALS,wCAAc","sourcesContent":["import { decode, encode, types } from \"binary-data\";\n\nimport { Extension } from \"../../typings/domain\";\n\n// rfc4492\nexport class EllipticCurves {\n static type = 10;\n static readonly spec = {\n type: types.uint16be,\n data: types.array(types.uint16be, types.uint16be, \"bytes\"),\n };\n\n public type: number = EllipticCurves.type;\n public data: number[] = [];\n\n constructor(props: Partial<EllipticCurves> = {}) {\n Object.assign(this, props);\n }\n\n static createEmpty() {\n return new EllipticCurves();\n }\n\n static fromData(buf: Buffer) {\n return new EllipticCurves({\n type: EllipticCurves.type,\n data: decode(buf, EllipticCurves.spec.data),\n });\n }\n\n static deSerialize(buf: Buffer) {\n return new EllipticCurves(decode(buf, EllipticCurves.spec));\n }\n\n serialize() {\n return Buffer.from(encode(this, EllipticCurves.spec).slice());\n }\n\n get extension(): Extension {\n return {\n type: this.type,\n data: this.serialize().slice(2),\n };\n }\n}\n"]}
@@ -3,11 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ExtendedMasterSecret = void 0;
4
4
  class ExtendedMasterSecret {
5
5
  }
6
- exports.ExtendedMasterSecret = ExtendedMasterSecret;
7
6
  Object.defineProperty(ExtendedMasterSecret, "type", {
8
7
  enumerable: true,
9
8
  configurable: true,
10
9
  writable: true,
11
10
  value: 23
12
11
  });
12
+ exports.ExtendedMasterSecret = ExtendedMasterSecret;
13
13
  //# sourceMappingURL=extendedMasterSecret.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"extendedMasterSecret.js","sourceRoot":"","sources":["../../../../../../dtls/src/handshake/extensions/extendedMasterSecret.ts"],"names":[],"mappings":";;;AAAA,MAAa,oBAAoB;;AAAjC,oDAEC;AADQ;;;;WAAO,EAAE;GAAC","sourcesContent":["export class ExtendedMasterSecret {\n static type = 23;\n}\n"]}
1
+ {"version":3,"file":"extendedMasterSecret.js","sourceRoot":"","sources":["../../../../../../dtls/src/handshake/extensions/extendedMasterSecret.ts"],"names":[],"mappings":";;;AAAA,MAAa,oBAAoB;;AACxB;;;;WAAO,EAAE;GAAC;AADN,oDAAoB","sourcesContent":["export class ExtendedMasterSecret {\n static type = 23;\n}\n"]}
@@ -36,7 +36,6 @@ class RenegotiationIndication {
36
36
  };
37
37
  }
38
38
  }
39
- exports.RenegotiationIndication = RenegotiationIndication;
40
39
  Object.defineProperty(RenegotiationIndication, "type", {
41
40
  enumerable: true,
42
41
  configurable: true,
@@ -52,4 +51,5 @@ Object.defineProperty(RenegotiationIndication, "spec", {
52
51
  data: binary_data_1.types.uint8,
53
52
  }
54
53
  });
54
+ exports.RenegotiationIndication = RenegotiationIndication;
55
55
  //# sourceMappingURL=renegotiationIndication.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"renegotiationIndication.js","sourceRoot":"","sources":["../../../../../../dtls/src/handshake/extensions/renegotiationIndication.ts"],"names":[],"mappings":";;;AAAA,6CAAoD;AAEpD,MAAa,uBAAuB;IAUlC,YAAY,QAA0C,EAAE;QAHxD;;;;mBAAsB,uBAAuB,CAAC,IAAI;WAAC;QACnD;;;;mBAAsB,CAAC;WAAC;QAGtB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,MAAM,CAAC,GAAG,IAAI,uBAAuB,EAAE,CAAC;QACxC,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,GAAW;QAC5B,OAAO,IAAI,uBAAuB,CAChC,IAAA,oBAAM,EAAC,GAAG,EAAE,uBAAuB,CAAC,IAAI,CAAC,CAC1C,CAAC;IACJ,CAAC;IAED,SAAS;QACP,MAAM,GAAG,GAAG,IAAA,oBAAM,EAAC,IAAI,EAAE,uBAAuB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QAC/D,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,SAAS;QACX,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;SAChC,CAAC;IACJ,CAAC;;AAnCH,0DAoCC;AAnCQ;;;;WAAO,KAAK;GAAC;AACb;;;;WAAgB;QACrB,IAAI,EAAE,mBAAK,CAAC,QAAQ;QACpB,IAAI,EAAE,mBAAK,CAAC,KAAK;KAClB;GAAC","sourcesContent":["import { decode, encode, types } from \"binary-data\";\n\nexport class RenegotiationIndication {\n static type = 65281;\n static readonly spec = {\n type: types.uint16be,\n data: types.uint8,\n };\n\n public type: number = RenegotiationIndication.type;\n public data: number = 0;\n\n constructor(props: Partial<RenegotiationIndication> = {}) {\n Object.assign(this, props);\n }\n\n static createEmpty() {\n const v = new RenegotiationIndication();\n return v;\n }\n\n static deSerialize(buf: Buffer) {\n return new RenegotiationIndication(\n decode(buf, RenegotiationIndication.spec)\n );\n }\n\n serialize() {\n const res = encode(this, RenegotiationIndication.spec).slice();\n return Buffer.from(res);\n }\n\n get extension() {\n return {\n type: this.type,\n data: this.serialize().slice(2),\n };\n }\n}\n"]}
1
+ {"version":3,"file":"renegotiationIndication.js","sourceRoot":"","sources":["../../../../../../dtls/src/handshake/extensions/renegotiationIndication.ts"],"names":[],"mappings":";;;AAAA,6CAAoD;AAEpD,MAAa,uBAAuB;IAUlC,YAAY,QAA0C,EAAE;QAHjD;;;;mBAAe,uBAAuB,CAAC,IAAI;WAAC;QAC5C;;;;mBAAe,CAAC;WAAC;QAGtB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,MAAM,CAAC,GAAG,IAAI,uBAAuB,EAAE,CAAC;QACxC,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,GAAW;QAC5B,OAAO,IAAI,uBAAuB,CAChC,IAAA,oBAAM,EAAC,GAAG,EAAE,uBAAuB,CAAC,IAAI,CAAC,CAC1C,CAAC;IACJ,CAAC;IAED,SAAS;QACP,MAAM,GAAG,GAAG,IAAA,oBAAM,EAAC,IAAI,EAAE,uBAAuB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QAC/D,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,SAAS;QACX,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;SAChC,CAAC;IACJ,CAAC;;AAlCM;;;;WAAO,KAAK;EAAR,CAAS;AACJ;;;;WAAO;QACrB,IAAI,EAAE,mBAAK,CAAC,QAAQ;QACpB,IAAI,EAAE,mBAAK,CAAC,KAAK;KAClB;EAHmB,CAGlB;AALS,0DAAuB","sourcesContent":["import { decode, encode, types } from \"binary-data\";\n\nexport class RenegotiationIndication {\n static type = 65281;\n static readonly spec = {\n type: types.uint16be,\n data: types.uint8,\n };\n\n public type: number = RenegotiationIndication.type;\n public data: number = 0;\n\n constructor(props: Partial<RenegotiationIndication> = {}) {\n Object.assign(this, props);\n }\n\n static createEmpty() {\n const v = new RenegotiationIndication();\n return v;\n }\n\n static deSerialize(buf: Buffer) {\n return new RenegotiationIndication(\n decode(buf, RenegotiationIndication.spec),\n );\n }\n\n serialize() {\n const res = encode(this, RenegotiationIndication.spec).slice();\n return Buffer.from(res);\n }\n\n get extension() {\n return {\n type: this.type,\n data: this.serialize().slice(2),\n };\n }\n}\n"]}
@@ -41,7 +41,6 @@ class Signature {
41
41
  };
42
42
  }
43
43
  }
44
- exports.Signature = Signature;
45
44
  Object.defineProperty(Signature, "type", {
46
45
  enumerable: true,
47
46
  configurable: true,
@@ -57,4 +56,5 @@ Object.defineProperty(Signature, "spec", {
57
56
  data: binary_data_1.types.array({ hash: binary_data_1.types.uint8, signature: binary_data_1.types.uint8 }, binary_data_1.types.uint16be, "bytes"),
58
57
  }
59
58
  });
59
+ exports.Signature = Signature;
60
60
  //# sourceMappingURL=signature.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"signature.js","sourceRoot":"","sources":["../../../../../../dtls/src/handshake/extensions/signature.ts"],"names":[],"mappings":";;;AAAA,6CAAoD;AAIpD,MAAa,SAAS;IAcpB,YAAY,QAA4B,EAAE;QAH1C;;;;mBAAsB,SAAS,CAAC,IAAI;WAAC;QACrC;;;;mBAA0E,EAAE;WAAC;QAG3E,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,MAAM,CAAC,GAAG,IAAI,SAAS,EAAE,CAAC;QAC1B,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,GAAW;QAC5B,OAAO,IAAI,SAAS,CAAC,IAAA,oBAAM,EAAC,GAAG,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,SAAS;QACP,MAAM,GAAG,GAAG,IAAA,oBAAM,EAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACjD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,GAAW;QACzB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,SAAS;QACX,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;SAChC,CAAC;IACJ,CAAC;;AA3CH,8BA4CC;AA3CQ;;;;WAAO,EAAE;GAAC;AACV;;;;WAAgB;QACrB,IAAI,EAAE,mBAAK,CAAC,QAAQ;QACpB,IAAI,EAAE,mBAAK,CAAC,KAAK,CACf,EAAE,IAAI,EAAE,mBAAK,CAAC,KAAK,EAAE,SAAS,EAAE,mBAAK,CAAC,KAAK,EAAE,EAC7C,mBAAK,CAAC,QAAQ,EACd,OAAO,CACR;KACF;GAAC","sourcesContent":["import { decode, encode, types } from \"binary-data\";\n\nimport { HashAlgorithms, SignatureAlgorithms } from \"../../cipher/const\";\n\nexport class Signature {\n static type = 13;\n static readonly spec = {\n type: types.uint16be,\n data: types.array(\n { hash: types.uint8, signature: types.uint8 },\n types.uint16be,\n \"bytes\"\n ),\n };\n\n public type: number = Signature.type;\n public data: { hash: HashAlgorithms; signature: SignatureAlgorithms }[] = [];\n\n constructor(props: Partial<Signature> = {}) {\n Object.assign(this, props);\n }\n\n static createEmpty() {\n const v = new Signature();\n return v;\n }\n\n static deSerialize(buf: Buffer) {\n return new Signature(decode(buf, Signature.spec));\n }\n\n serialize() {\n const res = encode(this, Signature.spec).slice();\n return Buffer.from(res);\n }\n\n static fromData(buf: Buffer) {\n const type = Buffer.alloc(2);\n type.writeUInt16BE(Signature.type);\n return Signature.deSerialize(Buffer.concat([type, buf]));\n }\n\n get extension() {\n return {\n type: this.type,\n data: this.serialize().slice(2),\n };\n }\n}\n"]}
1
+ {"version":3,"file":"signature.js","sourceRoot":"","sources":["../../../../../../dtls/src/handshake/extensions/signature.ts"],"names":[],"mappings":";;;AAAA,6CAAoD;AAIpD,MAAa,SAAS;IAcpB,YAAY,QAA4B,EAAE;QAHnC;;;;mBAAe,SAAS,CAAC,IAAI;WAAC;QAC9B;;;;mBAAmE,EAAE;WAAC;QAG3E,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,MAAM,CAAC,GAAG,IAAI,SAAS,EAAE,CAAC;QAC1B,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,GAAW;QAC5B,OAAO,IAAI,SAAS,CAAC,IAAA,oBAAM,EAAC,GAAG,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,SAAS;QACP,MAAM,GAAG,GAAG,IAAA,oBAAM,EAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACjD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,GAAW;QACzB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,SAAS;QACX,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;SAChC,CAAC;IACJ,CAAC;;AA1CM;;;;WAAO,EAAE;EAAL,CAAM;AACD;;;;WAAO;QACrB,IAAI,EAAE,mBAAK,CAAC,QAAQ;QACpB,IAAI,EAAE,mBAAK,CAAC,KAAK,CACf,EAAE,IAAI,EAAE,mBAAK,CAAC,KAAK,EAAE,SAAS,EAAE,mBAAK,CAAC,KAAK,EAAE,EAC7C,mBAAK,CAAC,QAAQ,EACd,OAAO,CACR;KACF;EAPmB,CAOlB;AATS,8BAAS","sourcesContent":["import { decode, encode, types } from \"binary-data\";\n\nimport { HashAlgorithms, SignatureAlgorithms } from \"../../cipher/const\";\n\nexport class Signature {\n static type = 13;\n static readonly spec = {\n type: types.uint16be,\n data: types.array(\n { hash: types.uint8, signature: types.uint8 },\n types.uint16be,\n \"bytes\",\n ),\n };\n\n public type: number = Signature.type;\n public data: { hash: HashAlgorithms; signature: SignatureAlgorithms }[] = [];\n\n constructor(props: Partial<Signature> = {}) {\n Object.assign(this, props);\n }\n\n static createEmpty() {\n const v = new Signature();\n return v;\n }\n\n static deSerialize(buf: Buffer) {\n return new Signature(decode(buf, Signature.spec));\n }\n\n serialize() {\n const res = encode(this, Signature.spec).slice();\n return Buffer.from(res);\n }\n\n static fromData(buf: Buffer) {\n const type = Buffer.alloc(2);\n type.writeUInt16BE(Signature.type);\n return Signature.deSerialize(Buffer.concat([type, buf]));\n }\n\n get extension() {\n return {\n type: this.type,\n data: this.serialize().slice(2),\n };\n }\n}\n"]}
@@ -80,7 +80,6 @@ class UseSRTP {
80
80
  };
81
81
  }
82
82
  }
83
- exports.UseSRTP = UseSRTP;
84
83
  Object.defineProperty(UseSRTP, "type", {
85
84
  enumerable: true,
86
85
  configurable: true,
@@ -96,4 +95,5 @@ Object.defineProperty(UseSRTP, "spec", {
96
95
  data: binary_data_1.types.buffer(binary_data_1.types.uint16be),
97
96
  }
98
97
  });
98
+ exports.UseSRTP = UseSRTP;
99
99
  //# sourceMappingURL=useSrtp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSrtp.js","sourceRoot":"","sources":["../../../../../../dtls/src/handshake/extensions/useSrtp.ts"],"names":[],"mappings":"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","sourcesContent":["import { decode, encode, types } from \"binary-data\";\nimport times from \"lodash/times\";\n\nimport { Extension } from \"../../typings/domain\";\n\nexport class UseSRTP {\n static type = 14; // 9. IANA Considerations\n static readonly spec = {\n type: types.uint16be,\n data: types.buffer(types.uint16be),\n };\n\n type: number = UseSRTP.type;\n data: Buffer = Buffer.from([]);\n profiles: number[] = [];\n mki: Buffer = Buffer.from([0x00]);\n\n constructor(props: Partial<UseSRTP> = {}) {\n Object.assign(this, props);\n }\n\n static create(profiles: number[], mki: Buffer) {\n const v = new UseSRTP({\n profiles,\n mki,\n });\n return v;\n }\n\n static deSerialize(buf: Buffer) {\n const useSrtp = new UseSRTP(decode(buf, UseSRTP.spec));\n const profileLength = useSrtp.data.readUInt16BE();\n const profiles = times(profileLength / 2).map((i) => {\n return useSrtp.data.readUInt16BE(i * 2 + 2);\n });\n useSrtp.profiles = profiles;\n useSrtp.mki = useSrtp.data.slice(profileLength + 2);\n return useSrtp;\n }\n\n serialize() {\n const profileLength = Buffer.alloc(2);\n profileLength.writeUInt16BE(this.profiles.length * 2);\n const data = Buffer.concat([\n profileLength,\n ...this.profiles.map((profile) => {\n const buf = Buffer.alloc(2);\n buf.writeUInt16BE(profile);\n return buf;\n }),\n this.mki,\n ]);\n this.data = data;\n const res = encode(this, UseSRTP.spec).slice();\n return Buffer.from(res);\n }\n\n static fromData(buf: Buffer) {\n const head = Buffer.alloc(4);\n head.writeUInt16BE(UseSRTP.type);\n head.writeUInt16BE(buf.length, 2);\n return UseSRTP.deSerialize(Buffer.concat([head, buf]));\n }\n\n get extension(): Extension {\n return {\n type: this.type,\n data: this.serialize().slice(4),\n };\n }\n}\n"]}
1
+ {"version":3,"file":"useSrtp.js","sourceRoot":"","sources":["../../../../../../dtls/src/handshake/extensions/useSrtp.ts"],"names":[],"mappings":"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","sourcesContent":["import { decode, encode, types } from \"binary-data\";\nimport times from \"lodash/times\";\n\nimport { Extension } from \"../../typings/domain\";\n\nexport class UseSRTP {\n static type = 14; // 9. IANA Considerations\n static readonly spec = {\n type: types.uint16be,\n data: types.buffer(types.uint16be),\n };\n\n type: number = UseSRTP.type;\n data: Buffer = Buffer.from([]);\n profiles: number[] = [];\n mki: Buffer = Buffer.from([0x00]);\n\n constructor(props: Partial<UseSRTP> = {}) {\n Object.assign(this, props);\n }\n\n static create(profiles: number[], mki: Buffer) {\n const v = new UseSRTP({\n profiles,\n mki,\n });\n return v;\n }\n\n static deSerialize(buf: Buffer) {\n const useSrtp = new UseSRTP(decode(buf, UseSRTP.spec));\n const profileLength = useSrtp.data.readUInt16BE();\n const profiles = times(profileLength / 2).map((i) => {\n return useSrtp.data.readUInt16BE(i * 2 + 2);\n });\n useSrtp.profiles = profiles;\n useSrtp.mki = useSrtp.data.slice(profileLength + 2);\n return useSrtp;\n }\n\n serialize() {\n const profileLength = Buffer.alloc(2);\n profileLength.writeUInt16BE(this.profiles.length * 2);\n const data = Buffer.concat([\n profileLength,\n ...this.profiles.map((profile) => {\n const buf = Buffer.alloc(2);\n buf.writeUInt16BE(profile);\n return buf;\n }),\n this.mki,\n ]);\n this.data = data;\n const res = encode(this, UseSRTP.spec).slice();\n return Buffer.from(res);\n }\n\n static fromData(buf: Buffer) {\n const head = Buffer.alloc(4);\n head.writeUInt16BE(UseSRTP.type);\n head.writeUInt16BE(buf.length, 2);\n return UseSRTP.deSerialize(Buffer.concat([head, buf]));\n }\n\n get extension(): Extension {\n return {\n type: this.type,\n data: this.serialize().slice(4),\n };\n }\n}\n"]}
@@ -27,7 +27,6 @@ class Alert {
27
27
  return Buffer.from(res);
28
28
  }
29
29
  }
30
- exports.Alert = Alert;
31
30
  Object.defineProperty(Alert, "spec", {
32
31
  enumerable: true,
33
32
  configurable: true,
@@ -37,4 +36,5 @@ Object.defineProperty(Alert, "spec", {
37
36
  description: binary_data_1.types.uint8,
38
37
  }
39
38
  });
39
+ exports.Alert = Alert;
40
40
  //# sourceMappingURL=alert.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"alert.js","sourceRoot":"","sources":["../../../../../../dtls/src/handshake/message/alert.ts"],"names":[],"mappings":";;;AAAA,6CAAoD;AAEpD,MAAa,KAAK;IAMhB,YAAmB,KAAa,EAAS,WAAmB;;;;;mBAAzC;;;;;;mBAAsB;;IAAsB,CAAC;IAEhE,MAAM,CAAC,WAAW,CAAC,GAAW;QAC5B,OAAO,IAAI,KAAK;QACd,YAAY;QACZ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAA,oBAAM,EAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAC1C,CAAC;IACJ,CAAC;IAED,SAAS;QACP,MAAM,GAAG,GAAG,IAAA,oBAAM,EAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QAC7C,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;;AAlBH,sBAmBC;AAlBQ;;;;WAAgB;QACrB,KAAK,EAAE,mBAAK,CAAC,KAAK;QAClB,WAAW,EAAE,mBAAK,CAAC,KAAK;KACzB;GAAC","sourcesContent":["import { decode, encode, types } from \"binary-data\";\n\nexport class Alert {\n static readonly spec = {\n level: types.uint8,\n description: types.uint8,\n };\n\n constructor(public level: number, public description: number) {}\n\n static deSerialize(buf: Buffer) {\n return new Alert(\n //@ts-ignore\n ...Object.values(decode(buf, Alert.spec))\n );\n }\n\n serialize() {\n const res = encode(this, Alert.spec).slice();\n return Buffer.from(res);\n }\n}\n"]}
1
+ {"version":3,"file":"alert.js","sourceRoot":"","sources":["../../../../../../dtls/src/handshake/message/alert.ts"],"names":[],"mappings":";;;AAAA,6CAAoD;AAEpD,MAAa,KAAK;IAMhB,YACS,KAAa,EACb,WAAmB;QAD1B;;;;mBAAO,KAAK;WAAQ;QACpB;;;;mBAAO,WAAW;WAAQ;IACzB,CAAC;IAEJ,MAAM,CAAC,WAAW,CAAC,GAAW;QAC5B,OAAO,IAAI,KAAK;QACd,YAAY;QACZ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAA,oBAAM,EAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAC1C,CAAC;IACJ,CAAC;IAED,SAAS;QACP,MAAM,GAAG,GAAG,IAAA,oBAAM,EAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QAC7C,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;;AApBe;;;;WAAO;QACrB,KAAK,EAAE,mBAAK,CAAC,KAAK;QAClB,WAAW,EAAE,mBAAK,CAAC,KAAK;KACzB;EAHmB,CAGlB;AAJS,sBAAK","sourcesContent":["import { decode, encode, types } from \"binary-data\";\n\nexport class Alert {\n static readonly spec = {\n level: types.uint8,\n description: types.uint8,\n };\n\n constructor(\n public level: number,\n public description: number,\n ) {}\n\n static deSerialize(buf: Buffer) {\n return new Alert(\n //@ts-ignore\n ...Object.values(decode(buf, Alert.spec)),\n );\n }\n\n serialize() {\n const res = encode(this, Alert.spec).slice();\n return Buffer.from(res);\n }\n}\n"]}
@@ -45,7 +45,6 @@ class Certificate {
45
45
  return new fragment_1.FragmentedHandshake(this.msgType, body.length, this.messageSeq, 0, body.length, body);
46
46
  }
47
47
  }
48
- exports.Certificate = Certificate;
49
48
  Object.defineProperty(Certificate, "spec", {
50
49
  enumerable: true,
51
50
  configurable: true,
@@ -54,4 +53,5 @@ Object.defineProperty(Certificate, "spec", {
54
53
  certificateList: binary_data_1.types.array(binary_1.ASN11Cert, binary_data_1.types.uint24be, "bytes"),
55
54
  }
56
55
  });
56
+ exports.Certificate = Certificate;
57
57
  //# sourceMappingURL=certificate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"certificate.js","sourceRoot":"","sources":["../../../../../../dtls/src/handshake/message/certificate.ts"],"names":[],"mappings":";;;AAAA,6CAAoD;AAEpD,4DAAoE;AAEpE,sCAAsC;AACtC,oCAAyC;AAEzC,6BAA6B;AAC7B,6BAA6B;AAE7B,MAAa,WAAW;IAOtB,YAAmB,eAAyB;;;;;mBAAzB;;QANnB;;;;mBAAU,qBAAa,CAAC,cAAc;WAAC;QACvC;;;;;WAAoB;IAK2B,CAAC;IAEhD,MAAM,CAAC,WAAW;QAChB,OAAO,IAAI,WAAW,CAAC,SAAgB,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,GAAW;QAC5B,OAAO,IAAI,WAAW;QACpB,YAAY;QACZ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAA,oBAAM,EAAC,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAChD,CAAC;IACJ,CAAC;IAED,SAAS;QACP,MAAM,GAAG,GAAG,IAAA,oBAAM,EAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACnD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,UAAU;QACR,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC9B,OAAO,IAAI,8BAAmB,CAC5B,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,UAAW,EAChB,CAAC,EACD,IAAI,CAAC,MAAM,EACX,IAAI,CACL,CAAC;IACJ,CAAC;;AAnCH,kCAoCC;AAjCQ;;;;WAAgB;QACrB,eAAe,EAAE,mBAAK,CAAC,KAAK,CAAC,kBAAS,EAAE,mBAAK,CAAC,QAAQ,EAAE,OAAO,CAAC;KACjE;GAAC","sourcesContent":["import { decode, encode, types } from \"binary-data\";\n\nimport { FragmentedHandshake } from \"../../record/message/fragment\";\nimport { Handshake } from \"../../typings/domain\";\nimport { ASN11Cert } from \"../binary\";\nimport { HandshakeType } from \"../const\";\n\n// 7.4.2. Server Certificate\n// 7.4.6. Client Certificate\n\nexport class Certificate implements Handshake {\n msgType = HandshakeType.certificate_11;\n messageSeq?: number;\n static readonly spec = {\n certificateList: types.array(ASN11Cert, types.uint24be, \"bytes\"),\n };\n\n constructor(public certificateList: Buffer[]) {}\n\n static createEmpty() {\n return new Certificate(undefined as any);\n }\n\n static deSerialize(buf: Buffer) {\n return new Certificate(\n //@ts-ignore\n ...Object.values(decode(buf, Certificate.spec))\n );\n }\n\n serialize() {\n const res = encode(this, Certificate.spec).slice();\n return Buffer.from(res);\n }\n\n toFragment() {\n const body = this.serialize();\n return new FragmentedHandshake(\n this.msgType,\n body.length,\n this.messageSeq!,\n 0,\n body.length,\n body\n );\n }\n}\n"]}
1
+ {"version":3,"file":"certificate.js","sourceRoot":"","sources":["../../../../../../dtls/src/handshake/message/certificate.ts"],"names":[],"mappings":";;;AAAA,6CAAoD;AAEpD,4DAAoE;AAEpE,sCAAsC;AACtC,oCAAyC;AAEzC,6BAA6B;AAC7B,6BAA6B;AAE7B,MAAa,WAAW;IAOtB,YAAmB,eAAyB;QAAhC;;;;mBAAO,eAAe;WAAU;QAN5C;;;;mBAAU,qBAAa,CAAC,cAAc;WAAC;QACvC;;;;;WAAoB;IAK2B,CAAC;IAEhD,MAAM,CAAC,WAAW;QAChB,OAAO,IAAI,WAAW,CAAC,SAAgB,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,GAAW;QAC5B,OAAO,IAAI,WAAW;QACpB,YAAY;QACZ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAA,oBAAM,EAAC,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAChD,CAAC;IACJ,CAAC;IAED,SAAS;QACP,MAAM,GAAG,GAAG,IAAA,oBAAM,EAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACnD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,UAAU;QACR,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC9B,OAAO,IAAI,8BAAmB,CAC5B,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,UAAW,EAChB,CAAC,EACD,IAAI,CAAC,MAAM,EACX,IAAI,CACL,CAAC;IACJ,CAAC;;AAhCe;;;;WAAO;QACrB,eAAe,EAAE,mBAAK,CAAC,KAAK,CAAC,kBAAS,EAAE,mBAAK,CAAC,QAAQ,EAAE,OAAO,CAAC;KACjE;EAFmB,CAElB;AALS,kCAAW","sourcesContent":["import { decode, encode, types } from \"binary-data\";\n\nimport { FragmentedHandshake } from \"../../record/message/fragment\";\nimport { Handshake } from \"../../typings/domain\";\nimport { ASN11Cert } from \"../binary\";\nimport { HandshakeType } from \"../const\";\n\n// 7.4.2. Server Certificate\n// 7.4.6. Client Certificate\n\nexport class Certificate implements Handshake {\n msgType = HandshakeType.certificate_11;\n messageSeq?: number;\n static readonly spec = {\n certificateList: types.array(ASN11Cert, types.uint24be, \"bytes\"),\n };\n\n constructor(public certificateList: Buffer[]) {}\n\n static createEmpty() {\n return new Certificate(undefined as any);\n }\n\n static deSerialize(buf: Buffer) {\n return new Certificate(\n //@ts-ignore\n ...Object.values(decode(buf, Certificate.spec)),\n );\n }\n\n serialize() {\n const res = encode(this, Certificate.spec).slice();\n return Buffer.from(res);\n }\n\n toFragment() {\n const body = this.serialize();\n return new FragmentedHandshake(\n this.msgType,\n body.length,\n this.messageSeq!,\n 0,\n body.length,\n body,\n );\n }\n}\n"]}
@@ -25,7 +25,6 @@ class ChangeCipherSpec {
25
25
  return Buffer.from(res);
26
26
  }
27
27
  }
28
- exports.ChangeCipherSpec = ChangeCipherSpec;
29
28
  Object.defineProperty(ChangeCipherSpec, "spec", {
30
29
  enumerable: true,
31
30
  configurable: true,
@@ -34,4 +33,5 @@ Object.defineProperty(ChangeCipherSpec, "spec", {
34
33
  type: binary_data_1.types.uint8,
35
34
  }
36
35
  });
36
+ exports.ChangeCipherSpec = ChangeCipherSpec;
37
37
  //# sourceMappingURL=changeCipherSpec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"changeCipherSpec.js","sourceRoot":"","sources":["../../../../../../dtls/src/handshake/message/changeCipherSpec.ts"],"names":[],"mappings":";;;AAAA,6CAAoD;AAEpD,oCAAoC;AAEpC,MAAa,gBAAgB;IAK3B,YAAmB,OAAO,CAAC;;;;;mBAAR;;IAAW,CAAC;IAE/B,MAAM,CAAC,WAAW;QAChB,OAAO,IAAI,gBAAgB,EAAE,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,GAAW;QAC5B,OAAO,IAAI,gBAAgB;QACzB,YAAY;QACZ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAA,oBAAM,EAAC,GAAG,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC,CACrD,CAAC;IACJ,CAAC;IAED,SAAS;QACP,MAAM,GAAG,GAAG,IAAA,oBAAM,EAAC,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACxD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;;AArBH,4CAsBC;AArBQ;;;;WAAgB;QACrB,IAAI,EAAE,mBAAK,CAAC,KAAK;KAClB;GAAC","sourcesContent":["import { decode, encode, types } from \"binary-data\";\n\n// 7.1. Change Cipher Spec Protocol\n\nexport class ChangeCipherSpec {\n static readonly spec = {\n type: types.uint8,\n };\n\n constructor(public type = 1) {}\n\n static createEmpty() {\n return new ChangeCipherSpec();\n }\n\n static deSerialize(buf: Buffer) {\n return new ChangeCipherSpec(\n //@ts-ignore\n ...Object.values(decode(buf, ChangeCipherSpec.spec))\n );\n }\n\n serialize() {\n const res = encode(this, ChangeCipherSpec.spec).slice();\n return Buffer.from(res);\n }\n}\n"]}
1
+ {"version":3,"file":"changeCipherSpec.js","sourceRoot":"","sources":["../../../../../../dtls/src/handshake/message/changeCipherSpec.ts"],"names":[],"mappings":";;;AAAA,6CAAoD;AAEpD,oCAAoC;AAEpC,MAAa,gBAAgB;IAK3B,YAAmB,OAAO,CAAC;QAAf;;;;mBAAO,IAAI;WAAI;IAAG,CAAC;IAE/B,MAAM,CAAC,WAAW;QAChB,OAAO,IAAI,gBAAgB,EAAE,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,GAAW;QAC5B,OAAO,IAAI,gBAAgB;QACzB,YAAY;QACZ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAA,oBAAM,EAAC,GAAG,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC,CACrD,CAAC;IACJ,CAAC;IAED,SAAS;QACP,MAAM,GAAG,GAAG,IAAA,oBAAM,EAAC,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACxD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;;AApBe;;;;WAAO;QACrB,IAAI,EAAE,mBAAK,CAAC,KAAK;KAClB;EAFmB,CAElB;AAHS,4CAAgB","sourcesContent":["import { decode, encode, types } from \"binary-data\";\n\n// 7.1. Change Cipher Spec Protocol\n\nexport class ChangeCipherSpec {\n static readonly spec = {\n type: types.uint8,\n };\n\n constructor(public type = 1) {}\n\n static createEmpty() {\n return new ChangeCipherSpec();\n }\n\n static deSerialize(buf: Buffer) {\n return new ChangeCipherSpec(\n //@ts-ignore\n ...Object.values(decode(buf, ChangeCipherSpec.spec)),\n );\n }\n\n serialize() {\n const res = encode(this, ChangeCipherSpec.spec).slice();\n return Buffer.from(res);\n }\n}\n"]}
@@ -49,7 +49,6 @@ class CertificateVerify {
49
49
  return new fragment_1.FragmentedHandshake(this.msgType, body.length, this.messageSeq, 0, body.length, body);
50
50
  }
51
51
  }
52
- exports.CertificateVerify = CertificateVerify;
53
52
  Object.defineProperty(CertificateVerify, "spec", {
54
53
  enumerable: true,
55
54
  configurable: true,
@@ -59,4 +58,5 @@ Object.defineProperty(CertificateVerify, "spec", {
59
58
  signature: binary_data_1.types.buffer(binary_data_1.types.uint16be),
60
59
  }
61
60
  });
61
+ exports.CertificateVerify = CertificateVerify;
62
62
  //# sourceMappingURL=certificateVerify.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"certificateVerify.js","sourceRoot":"","sources":["../../../../../../../dtls/src/handshake/message/client/certificateVerify.ts"],"names":[],"mappings":";;;AAAA,6CAAoD;AAGpD,+DAAuE;AAEvE,uCAA4C;AAE5C,MAAa,iBAAiB;IAS5B,YAAmB,SAA2B,EAAS,SAAiB;;;;;mBAArD;;;;;;mBAAoC;;QARvD;;;;mBAAU,qBAAa,CAAC,qBAAqB;WAAC;QAC9C;;;;;WAAoB;IAOuD,CAAC;IAE5E,MAAM,CAAC,WAAW;QAChB,OAAO,IAAI,iBAAiB,CAAC,SAAgB,EAAE,SAAgB,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,GAAW;QAC5B,MAAM,GAAG,GAAG,IAAA,oBAAM,EAAC,GAAG,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAChD,OAAO,IAAI,iBAAiB;QAC1B,YAAY;QACZ,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CACtB,CAAC;IACJ,CAAC;IAED,SAAS;QACP,MAAM,GAAG,GAAG,IAAA,oBAAM,EAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACzD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,UAAU;QACR,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC9B,OAAO,IAAI,8BAAmB,CAC5B,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,UAAW,EAChB,CAAC,EACD,IAAI,CAAC,MAAM,EACX,IAAI,CACL,CAAC;IACJ,CAAC;;AAtCH,8CAuCC;AAnCQ;;;;WAAgB;QACrB,SAAS,EAAE,mBAAK,CAAC,QAAQ;QACzB,SAAS,EAAE,mBAAK,CAAC,MAAM,CAAC,mBAAK,CAAC,QAAQ,CAAC;KACxC;GAAC","sourcesContent":["import { decode, encode, types } from \"binary-data\";\n\nimport { SignatureSchemes } from \"../../../cipher/const\";\nimport { FragmentedHandshake } from \"../../../record/message/fragment\";\nimport { Handshake } from \"../../../typings/domain\";\nimport { HandshakeType } from \"../../const\";\n\nexport class CertificateVerify implements Handshake {\n msgType = HandshakeType.certificate_verify_15;\n messageSeq?: number;\n\n static readonly spec = {\n algorithm: types.uint16be,\n signature: types.buffer(types.uint16be),\n };\n\n constructor(public algorithm: SignatureSchemes, public signature: Buffer) {}\n\n static createEmpty() {\n return new CertificateVerify(undefined as any, undefined as any);\n }\n\n static deSerialize(buf: Buffer) {\n const res = decode(buf, CertificateVerify.spec);\n return new CertificateVerify(\n //@ts-ignore\n ...Object.values(res)\n );\n }\n\n serialize() {\n const res = encode(this, CertificateVerify.spec).slice();\n return Buffer.from(res);\n }\n\n toFragment() {\n const body = this.serialize();\n return new FragmentedHandshake(\n this.msgType,\n body.length,\n this.messageSeq!,\n 0,\n body.length,\n body\n );\n }\n}\n"]}
1
+ {"version":3,"file":"certificateVerify.js","sourceRoot":"","sources":["../../../../../../../dtls/src/handshake/message/client/certificateVerify.ts"],"names":[],"mappings":";;;AAAA,6CAAoD;AAGpD,+DAAuE;AAEvE,uCAA4C;AAE5C,MAAa,iBAAiB;IAS5B,YACS,SAA2B,EAC3B,SAAiB;QADxB;;;;mBAAO,SAAS;WAAkB;QAClC;;;;mBAAO,SAAS;WAAQ;QAV1B;;;;mBAAU,qBAAa,CAAC,qBAAqB;WAAC;QAC9C;;;;;WAAoB;IAUjB,CAAC;IAEJ,MAAM,CAAC,WAAW;QAChB,OAAO,IAAI,iBAAiB,CAAC,SAAgB,EAAE,SAAgB,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,GAAW;QAC5B,MAAM,GAAG,GAAG,IAAA,oBAAM,EAAC,GAAG,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAChD,OAAO,IAAI,iBAAiB;QAC1B,YAAY;QACZ,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CACtB,CAAC;IACJ,CAAC;IAED,SAAS;QACP,MAAM,GAAG,GAAG,IAAA,oBAAM,EAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACzD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,UAAU;QACR,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC9B,OAAO,IAAI,8BAAmB,CAC5B,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,UAAW,EAChB,CAAC,EACD,IAAI,CAAC,MAAM,EACX,IAAI,CACL,CAAC;IACJ,CAAC;;AArCe;;;;WAAO;QACrB,SAAS,EAAE,mBAAK,CAAC,QAAQ;QACzB,SAAS,EAAE,mBAAK,CAAC,MAAM,CAAC,mBAAK,CAAC,QAAQ,CAAC;KACxC;EAHmB,CAGlB;AAPS,8CAAiB","sourcesContent":["import { decode, encode, types } from \"binary-data\";\n\nimport { SignatureSchemes } from \"../../../cipher/const\";\nimport { FragmentedHandshake } from \"../../../record/message/fragment\";\nimport { Handshake } from \"../../../typings/domain\";\nimport { HandshakeType } from \"../../const\";\n\nexport class CertificateVerify implements Handshake {\n msgType = HandshakeType.certificate_verify_15;\n messageSeq?: number;\n\n static readonly spec = {\n algorithm: types.uint16be,\n signature: types.buffer(types.uint16be),\n };\n\n constructor(\n public algorithm: SignatureSchemes,\n public signature: Buffer,\n ) {}\n\n static createEmpty() {\n return new CertificateVerify(undefined as any, undefined as any);\n }\n\n static deSerialize(buf: Buffer) {\n const res = decode(buf, CertificateVerify.spec);\n return new CertificateVerify(\n //@ts-ignore\n ...Object.values(res),\n );\n }\n\n serialize() {\n const res = encode(this, CertificateVerify.spec).slice();\n return Buffer.from(res);\n }\n\n toFragment() {\n const body = this.serialize();\n return new FragmentedHandshake(\n this.msgType,\n body.length,\n this.messageSeq!,\n 0,\n body.length,\n body,\n );\n }\n}\n"]}
@@ -81,7 +81,6 @@ class ClientHello {
81
81
  return new fragment_1.FragmentedHandshake(this.msgType, body.length, this.messageSeq, 0, body.length, body);
82
82
  }
83
83
  }
84
- exports.ClientHello = ClientHello;
85
84
  Object.defineProperty(ClientHello, "spec", {
86
85
  enumerable: true,
87
86
  configurable: true,
@@ -96,4 +95,5 @@ Object.defineProperty(ClientHello, "spec", {
96
95
  extensions: binary_1.ExtensionList,
97
96
  }
98
97
  });
98
+ exports.ClientHello = ClientHello;
99
99
  //# sourceMappingURL=hello.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hello.js","sourceRoot":"","sources":["../../../../../../../dtls/src/handshake/message/client/hello.ts"],"names":[],"mappings":";;;AAAA,6CAAoD;AAEpD,+DAAuE;AAEvE,yCAA6C;AAC7C,uCAA4C;AAC5C,yCAA0C;AAE1C,yBAAyB;AAEzB,MAAa,WAAW;IAatB,YACS,aAA+C,EAC/C,MAAuD,EACvD,SAAiB,EACjB,MAAc,EACd,YAAsB,EACtB,kBAA4B,EAC5B,UAAuB;;;;;mBANvB;;;;;;mBACA;;;;;;mBACA;;;;;;mBACA;;;;;;mBACA;;;;;;mBACA;;;;;;mBACA;;QAnBT;;;;mBAAU,qBAAa,CAAC,cAAc;WAAC;QACvC;;;;mBAAqB,CAAC;WAAC;IAmBpB,CAAC;IAEJ,MAAM,CAAC,WAAW;QAChB,OAAO,IAAI,WAAW,CACpB,SAAgB,EAChB,SAAgB,EAChB,SAAgB,EAChB,SAAgB,EAChB,SAAgB,EAChB,SAAgB,EAChB,SAAgB,CACjB,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,GAAW;QAC5B,OAAO,IAAI,WAAW;QACpB,YAAY;QACZ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAA,oBAAM,EAAC,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAChD,CAAC;IACJ,CAAC;IAED,SAAS;QACP,MAAM,GAAG,GAAG,IAAA,oBAAM,EAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACnD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,UAAU;QACR,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC9B,OAAO,IAAI,8BAAmB,CAC5B,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,UAAU,EACf,CAAC,EACD,IAAI,CAAC,MAAM,EACX,IAAI,CACL,CAAC;IACJ,CAAC;;AAzDH,kCA0DC;AAvDQ;;;;WAAgB;QACrB,aAAa,EAAE,EAAE,KAAK,EAAE,mBAAK,CAAC,KAAK,EAAE,KAAK,EAAE,mBAAK,CAAC,KAAK,EAAE;QACzD,MAAM,EAAE,mBAAU,CAAC,IAAI;QACvB,SAAS,EAAE,mBAAK,CAAC,MAAM,CAAC,mBAAK,CAAC,KAAK,CAAC;QACpC,MAAM,EAAE,mBAAK,CAAC,MAAM,CAAC,mBAAK,CAAC,KAAK,CAAC;QACjC,YAAY,EAAE,mBAAK,CAAC,KAAK,CAAC,mBAAK,CAAC,QAAQ,EAAE,mBAAK,CAAC,QAAQ,EAAE,OAAO,CAAC;QAClE,kBAAkB,EAAE,mBAAK,CAAC,KAAK,CAAC,mBAAK,CAAC,KAAK,EAAE,mBAAK,CAAC,KAAK,EAAE,OAAO,CAAC;QAClE,UAAU,EAAE,sBAAa;KAC1B;GAAC","sourcesContent":["import { decode, encode, types } from \"binary-data\";\n\nimport { FragmentedHandshake } from \"../../../record/message/fragment\";\nimport { Extension } from \"../../../typings/domain\";\nimport { ExtensionList } from \"../../binary\";\nimport { HandshakeType } from \"../../const\";\nimport { DtlsRandom } from \"../../random\";\n\n// 7.4.1.2. Client Hello\n\nexport class ClientHello {\n msgType = HandshakeType.client_hello_1;\n messageSeq: number = 0;\n static readonly spec = {\n clientVersion: { major: types.uint8, minor: types.uint8 },\n random: DtlsRandom.spec,\n sessionId: types.buffer(types.uint8),\n cookie: types.buffer(types.uint8),\n cipherSuites: types.array(types.uint16be, types.uint16be, \"bytes\"),\n compressionMethods: types.array(types.uint8, types.uint8, \"bytes\"),\n extensions: ExtensionList,\n };\n\n constructor(\n public clientVersion: { major: number; minor: number },\n public random: { gmt_unix_time: number; random_bytes: Buffer },\n public sessionId: Buffer,\n public cookie: Buffer,\n public cipherSuites: number[],\n public compressionMethods: number[],\n public extensions: Extension[]\n ) {}\n\n static createEmpty() {\n return new ClientHello(\n undefined as any,\n undefined as any,\n undefined as any,\n undefined as any,\n undefined as any,\n undefined as any,\n undefined as any\n );\n }\n\n static deSerialize(buf: Buffer) {\n return new ClientHello(\n //@ts-ignore\n ...Object.values(decode(buf, ClientHello.spec))\n );\n }\n\n serialize() {\n const res = encode(this, ClientHello.spec).slice();\n return Buffer.from(res);\n }\n\n toFragment() {\n const body = this.serialize();\n return new FragmentedHandshake(\n this.msgType,\n body.length,\n this.messageSeq,\n 0,\n body.length,\n body\n );\n }\n}\n"]}
1
+ {"version":3,"file":"hello.js","sourceRoot":"","sources":["../../../../../../../dtls/src/handshake/message/client/hello.ts"],"names":[],"mappings":";;;AAAA,6CAAoD;AAEpD,+DAAuE;AAEvE,yCAA6C;AAC7C,uCAA4C;AAC5C,yCAA0C;AAE1C,yBAAyB;AAEzB,MAAa,WAAW;IAatB,YACS,aAA+C,EAC/C,MAAuD,EACvD,SAAiB,EACjB,MAAc,EACd,YAAsB,EACtB,kBAA4B,EAC5B,UAAuB;QAN9B;;;;mBAAO,aAAa;WAAkC;QACtD;;;;mBAAO,MAAM;WAAiD;QAC9D;;;;mBAAO,SAAS;WAAQ;QACxB;;;;mBAAO,MAAM;WAAQ;QACrB;;;;mBAAO,YAAY;WAAU;QAC7B;;;;mBAAO,kBAAkB;WAAU;QACnC;;;;mBAAO,UAAU;WAAa;QAnBhC;;;;mBAAU,qBAAa,CAAC,cAAc;WAAC;QACvC;;;;mBAAqB,CAAC;WAAC;IAmBpB,CAAC;IAEJ,MAAM,CAAC,WAAW;QAChB,OAAO,IAAI,WAAW,CACpB,SAAgB,EAChB,SAAgB,EAChB,SAAgB,EAChB,SAAgB,EAChB,SAAgB,EAChB,SAAgB,EAChB,SAAgB,CACjB,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,GAAW;QAC5B,OAAO,IAAI,WAAW;QACpB,YAAY;QACZ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAA,oBAAM,EAAC,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAChD,CAAC;IACJ,CAAC;IAED,SAAS;QACP,MAAM,GAAG,GAAG,IAAA,oBAAM,EAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACnD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,UAAU;QACR,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC9B,OAAO,IAAI,8BAAmB,CAC5B,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,UAAU,EACf,CAAC,EACD,IAAI,CAAC,MAAM,EACX,IAAI,CACL,CAAC;IACJ,CAAC;;AAtDe;;;;WAAO;QACrB,aAAa,EAAE,EAAE,KAAK,EAAE,mBAAK,CAAC,KAAK,EAAE,KAAK,EAAE,mBAAK,CAAC,KAAK,EAAE;QACzD,MAAM,EAAE,mBAAU,CAAC,IAAI;QACvB,SAAS,EAAE,mBAAK,CAAC,MAAM,CAAC,mBAAK,CAAC,KAAK,CAAC;QACpC,MAAM,EAAE,mBAAK,CAAC,MAAM,CAAC,mBAAK,CAAC,KAAK,CAAC;QACjC,YAAY,EAAE,mBAAK,CAAC,KAAK,CAAC,mBAAK,CAAC,QAAQ,EAAE,mBAAK,CAAC,QAAQ,EAAE,OAAO,CAAC;QAClE,kBAAkB,EAAE,mBAAK,CAAC,KAAK,CAAC,mBAAK,CAAC,KAAK,EAAE,mBAAK,CAAC,KAAK,EAAE,OAAO,CAAC;QAClE,UAAU,EAAE,sBAAa;KAC1B;EARmB,CAQlB;AAXS,kCAAW","sourcesContent":["import { decode, encode, types } from \"binary-data\";\n\nimport { FragmentedHandshake } from \"../../../record/message/fragment\";\nimport { Extension } from \"../../../typings/domain\";\nimport { ExtensionList } from \"../../binary\";\nimport { HandshakeType } from \"../../const\";\nimport { DtlsRandom } from \"../../random\";\n\n// 7.4.1.2. Client Hello\n\nexport class ClientHello {\n msgType = HandshakeType.client_hello_1;\n messageSeq: number = 0;\n static readonly spec = {\n clientVersion: { major: types.uint8, minor: types.uint8 },\n random: DtlsRandom.spec,\n sessionId: types.buffer(types.uint8),\n cookie: types.buffer(types.uint8),\n cipherSuites: types.array(types.uint16be, types.uint16be, \"bytes\"),\n compressionMethods: types.array(types.uint8, types.uint8, \"bytes\"),\n extensions: ExtensionList,\n };\n\n constructor(\n public clientVersion: { major: number; minor: number },\n public random: { gmt_unix_time: number; random_bytes: Buffer },\n public sessionId: Buffer,\n public cookie: Buffer,\n public cipherSuites: number[],\n public compressionMethods: number[],\n public extensions: Extension[],\n ) {}\n\n static createEmpty() {\n return new ClientHello(\n undefined as any,\n undefined as any,\n undefined as any,\n undefined as any,\n undefined as any,\n undefined as any,\n undefined as any,\n );\n }\n\n static deSerialize(buf: Buffer) {\n return new ClientHello(\n //@ts-ignore\n ...Object.values(decode(buf, ClientHello.spec)),\n );\n }\n\n serialize() {\n const res = encode(this, ClientHello.spec).slice();\n return Buffer.from(res);\n }\n\n toFragment() {\n const body = this.serialize();\n return new FragmentedHandshake(\n this.msgType,\n body.length,\n this.messageSeq,\n 0,\n body.length,\n body,\n );\n }\n}\n"]}