@opentdf/sdk 0.1.0-beta.1701

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 (566) hide show
  1. package/README.md +52 -0
  2. package/dist/cjs/package.json +3 -0
  3. package/dist/cjs/src/access.js +155 -0
  4. package/dist/cjs/src/auth/Eas.js +60 -0
  5. package/dist/cjs/src/auth/auth.js +79 -0
  6. package/dist/cjs/src/auth/oidc-clientcredentials-provider.js +26 -0
  7. package/dist/cjs/src/auth/oidc-externaljwt-provider.js +33 -0
  8. package/dist/cjs/src/auth/oidc-refreshtoken-provider.js +34 -0
  9. package/dist/cjs/src/auth/oidc.js +222 -0
  10. package/dist/cjs/src/auth/providers.js +143 -0
  11. package/dist/cjs/src/encodings/base64.js +154 -0
  12. package/dist/cjs/src/encodings/hex.js +70 -0
  13. package/dist/cjs/src/encodings/index.js +29 -0
  14. package/dist/cjs/src/errors.js +138 -0
  15. package/dist/cjs/src/index.js +344 -0
  16. package/dist/cjs/src/nanotdf/Client.js +296 -0
  17. package/dist/cjs/src/nanotdf/NanoTDF.js +94 -0
  18. package/dist/cjs/src/nanotdf/browser-entry.js +19 -0
  19. package/dist/cjs/src/nanotdf/constants.js +5 -0
  20. package/dist/cjs/src/nanotdf/decrypt.js +17 -0
  21. package/dist/cjs/src/nanotdf/encrypt-dataset.js +38 -0
  22. package/dist/cjs/src/nanotdf/encrypt.js +132 -0
  23. package/dist/cjs/src/nanotdf/enum/CipherEnum.js +13 -0
  24. package/dist/cjs/src/nanotdf/enum/CurveNameEnum.js +15 -0
  25. package/dist/cjs/src/nanotdf/enum/EncodingEnum.js +8 -0
  26. package/dist/cjs/src/nanotdf/enum/PolicyTypeEnum.js +11 -0
  27. package/dist/cjs/src/nanotdf/enum/ProtocolEnum.js +10 -0
  28. package/dist/cjs/src/nanotdf/enum/ResourceLocatorIdentifierEnum.js +11 -0
  29. package/dist/cjs/src/nanotdf/helpers/calculateByCurve.js +29 -0
  30. package/dist/cjs/src/nanotdf/helpers/getHkdfSalt.js +11 -0
  31. package/dist/cjs/src/nanotdf/index.js +25 -0
  32. package/dist/cjs/src/nanotdf/interfaces/PolicyInterface.js +3 -0
  33. package/dist/cjs/src/nanotdf/models/Ciphers.js +61 -0
  34. package/dist/cjs/src/nanotdf/models/DefaultParams.js +27 -0
  35. package/dist/cjs/src/nanotdf/models/EcCurves.js +39 -0
  36. package/dist/cjs/src/nanotdf/models/Header.js +255 -0
  37. package/dist/cjs/src/nanotdf/models/Payload.js +158 -0
  38. package/dist/cjs/src/nanotdf/models/Policy/AbstractPolicy.js +73 -0
  39. package/dist/cjs/src/nanotdf/models/Policy/EmbeddedPolicy.js +82 -0
  40. package/dist/cjs/src/nanotdf/models/Policy/PolicyFactory.js +38 -0
  41. package/dist/cjs/src/nanotdf/models/Policy/RemotePolicy.js +62 -0
  42. package/dist/cjs/src/nanotdf/models/ResourceLocator.js +211 -0
  43. package/dist/cjs/src/nanotdf/models/Signature.js +77 -0
  44. package/dist/cjs/src/nanotdf-crypto/ciphers.js +17 -0
  45. package/dist/cjs/src/nanotdf-crypto/decrypt.js +24 -0
  46. package/dist/cjs/src/nanotdf-crypto/digest.js +7 -0
  47. package/dist/cjs/src/nanotdf-crypto/ecdsaSignature.js +83 -0
  48. package/dist/cjs/src/nanotdf-crypto/encrypt.js +24 -0
  49. package/dist/cjs/src/nanotdf-crypto/enums.js +52 -0
  50. package/dist/cjs/src/nanotdf-crypto/exportCryptoKey.js +20 -0
  51. package/dist/cjs/src/nanotdf-crypto/generateKeyPair.js +13 -0
  52. package/dist/cjs/src/nanotdf-crypto/generateRandomNumber.js +12 -0
  53. package/dist/cjs/src/nanotdf-crypto/importRawKey.js +18 -0
  54. package/dist/cjs/src/nanotdf-crypto/index.js +52 -0
  55. package/dist/cjs/src/nanotdf-crypto/keyAgreement.js +91 -0
  56. package/dist/cjs/src/nanotdf-crypto/pemPublicToCrypto.js +225 -0
  57. package/dist/cjs/src/policy/api.js +58 -0
  58. package/dist/cjs/src/policy/attributes.js +3 -0
  59. package/dist/cjs/src/policy/granter.js +146 -0
  60. package/dist/cjs/src/tdf/AttributeObject.js +15 -0
  61. package/dist/cjs/src/tdf/AttributeObjectJwt.js +3 -0
  62. package/dist/cjs/src/tdf/Crypto.js +47 -0
  63. package/dist/cjs/src/tdf/EntityObject.js +3 -0
  64. package/dist/cjs/src/tdf/NanoTDF/NanoTDF.js +38 -0
  65. package/dist/cjs/src/tdf/Policy.js +50 -0
  66. package/dist/cjs/src/tdf/PolicyObject.js +3 -0
  67. package/dist/cjs/src/tdf/TypedArray.js +3 -0
  68. package/dist/cjs/src/tdf/index.js +35 -0
  69. package/dist/cjs/src/types/index.js +3 -0
  70. package/dist/cjs/src/utils.js +147 -0
  71. package/dist/cjs/src/version.js +12 -0
  72. package/dist/cjs/tdf3/index.js +57 -0
  73. package/dist/cjs/tdf3/src/assertions.js +118 -0
  74. package/dist/cjs/tdf3/src/binary.js +153 -0
  75. package/dist/cjs/tdf3/src/ciphers/aes-gcm-cipher.js +56 -0
  76. package/dist/cjs/tdf3/src/ciphers/algorithms.js +8 -0
  77. package/dist/cjs/tdf3/src/ciphers/index.js +8 -0
  78. package/dist/cjs/tdf3/src/ciphers/symmetric-cipher-base.js +22 -0
  79. package/dist/cjs/tdf3/src/client/DecoratedReadableStream.js +116 -0
  80. package/dist/cjs/tdf3/src/client/builders.js +561 -0
  81. package/dist/cjs/tdf3/src/client/index.js +460 -0
  82. package/dist/cjs/tdf3/src/client/validation.js +63 -0
  83. package/dist/cjs/tdf3/src/crypto/crypto-utils.js +116 -0
  84. package/dist/cjs/tdf3/src/crypto/declarations.js +8 -0
  85. package/dist/cjs/tdf3/src/crypto/index.js +315 -0
  86. package/dist/cjs/tdf3/src/index.js +34 -0
  87. package/dist/cjs/tdf3/src/models/attribute-set.js +122 -0
  88. package/dist/cjs/tdf3/src/models/encryption-information.js +90 -0
  89. package/dist/cjs/tdf3/src/models/index.js +25 -0
  90. package/dist/cjs/tdf3/src/models/key-access.js +103 -0
  91. package/dist/cjs/tdf3/src/models/manifest.js +3 -0
  92. package/dist/cjs/tdf3/src/models/payload.js +3 -0
  93. package/dist/cjs/tdf3/src/models/policy.js +24 -0
  94. package/dist/cjs/tdf3/src/models/upsert-response.js +3 -0
  95. package/dist/cjs/tdf3/src/tdf.js +907 -0
  96. package/dist/cjs/tdf3/src/templates/default.html.js +98 -0
  97. package/dist/cjs/tdf3/src/templates/escaper.js +15 -0
  98. package/dist/cjs/tdf3/src/templates/index.js +12 -0
  99. package/dist/cjs/tdf3/src/utils/buffer-crc32.js +48 -0
  100. package/dist/cjs/tdf3/src/utils/chunkers.js +106 -0
  101. package/dist/cjs/tdf3/src/utils/index.js +296 -0
  102. package/dist/cjs/tdf3/src/utils/keysplit.js +61 -0
  103. package/dist/cjs/tdf3/src/utils/zip-reader.js +253 -0
  104. package/dist/cjs/tdf3/src/utils/zip-writer.js +308 -0
  105. package/dist/cjs/tdf3/src/version.js +6 -0
  106. package/dist/types/src/access.d.ts +47 -0
  107. package/dist/types/src/access.d.ts.map +1 -0
  108. package/dist/types/src/auth/Eas.d.ts +34 -0
  109. package/dist/types/src/auth/Eas.d.ts.map +1 -0
  110. package/dist/types/src/auth/auth.d.ts +86 -0
  111. package/dist/types/src/auth/auth.d.ts.map +1 -0
  112. package/dist/types/src/auth/oidc-clientcredentials-provider.d.ts +9 -0
  113. package/dist/types/src/auth/oidc-clientcredentials-provider.d.ts.map +1 -0
  114. package/dist/types/src/auth/oidc-externaljwt-provider.d.ts +10 -0
  115. package/dist/types/src/auth/oidc-externaljwt-provider.d.ts.map +1 -0
  116. package/dist/types/src/auth/oidc-refreshtoken-provider.d.ts +10 -0
  117. package/dist/types/src/auth/oidc-refreshtoken-provider.d.ts.map +1 -0
  118. package/dist/types/src/auth/oidc.d.ts +104 -0
  119. package/dist/types/src/auth/oidc.d.ts.map +1 -0
  120. package/dist/types/src/auth/providers.d.ts +67 -0
  121. package/dist/types/src/auth/providers.d.ts.map +1 -0
  122. package/dist/types/src/encodings/base64.d.ts +18 -0
  123. package/dist/types/src/encodings/base64.d.ts.map +1 -0
  124. package/dist/types/src/encodings/hex.d.ts +5 -0
  125. package/dist/types/src/encodings/hex.d.ts.map +1 -0
  126. package/dist/types/src/encodings/index.d.ts +3 -0
  127. package/dist/types/src/encodings/index.d.ts.map +1 -0
  128. package/dist/types/src/errors.d.ts +72 -0
  129. package/dist/types/src/errors.d.ts.map +1 -0
  130. package/dist/types/src/index.d.ts +138 -0
  131. package/dist/types/src/index.d.ts.map +1 -0
  132. package/dist/types/src/nanotdf/Client.d.ts +95 -0
  133. package/dist/types/src/nanotdf/Client.d.ts.map +1 -0
  134. package/dist/types/src/nanotdf/NanoTDF.d.ts +25 -0
  135. package/dist/types/src/nanotdf/NanoTDF.d.ts.map +1 -0
  136. package/dist/types/src/nanotdf/browser-entry.d.ts +17 -0
  137. package/dist/types/src/nanotdf/browser-entry.d.ts.map +1 -0
  138. package/dist/types/src/nanotdf/constants.d.ts +2 -0
  139. package/dist/types/src/nanotdf/constants.d.ts.map +1 -0
  140. package/dist/types/src/nanotdf/decrypt.d.ts +9 -0
  141. package/dist/types/src/nanotdf/decrypt.d.ts.map +1 -0
  142. package/dist/types/src/nanotdf/encrypt-dataset.d.ts +12 -0
  143. package/dist/types/src/nanotdf/encrypt-dataset.d.ts.map +1 -0
  144. package/dist/types/src/nanotdf/encrypt.d.ts +14 -0
  145. package/dist/types/src/nanotdf/encrypt.d.ts.map +1 -0
  146. package/dist/types/src/nanotdf/enum/CipherEnum.d.ts +10 -0
  147. package/dist/types/src/nanotdf/enum/CipherEnum.d.ts.map +1 -0
  148. package/dist/types/src/nanotdf/enum/CurveNameEnum.d.ts +12 -0
  149. package/dist/types/src/nanotdf/enum/CurveNameEnum.d.ts.map +1 -0
  150. package/dist/types/src/nanotdf/enum/EncodingEnum.d.ts +5 -0
  151. package/dist/types/src/nanotdf/enum/EncodingEnum.d.ts.map +1 -0
  152. package/dist/types/src/nanotdf/enum/PolicyTypeEnum.d.ts +8 -0
  153. package/dist/types/src/nanotdf/enum/PolicyTypeEnum.d.ts.map +1 -0
  154. package/dist/types/src/nanotdf/enum/ProtocolEnum.d.ts +7 -0
  155. package/dist/types/src/nanotdf/enum/ProtocolEnum.d.ts.map +1 -0
  156. package/dist/types/src/nanotdf/enum/ResourceLocatorIdentifierEnum.d.ts +8 -0
  157. package/dist/types/src/nanotdf/enum/ResourceLocatorIdentifierEnum.d.ts.map +1 -0
  158. package/dist/types/src/nanotdf/helpers/calculateByCurve.d.ts +20 -0
  159. package/dist/types/src/nanotdf/helpers/calculateByCurve.d.ts.map +1 -0
  160. package/dist/types/src/nanotdf/helpers/getHkdfSalt.d.ts +9 -0
  161. package/dist/types/src/nanotdf/helpers/getHkdfSalt.d.ts.map +1 -0
  162. package/dist/types/src/nanotdf/index.d.ts +9 -0
  163. package/dist/types/src/nanotdf/index.d.ts.map +1 -0
  164. package/dist/types/src/nanotdf/interfaces/PolicyInterface.d.ts +17 -0
  165. package/dist/types/src/nanotdf/interfaces/PolicyInterface.d.ts.map +1 -0
  166. package/dist/types/src/nanotdf/models/Ciphers.d.ts +14 -0
  167. package/dist/types/src/nanotdf/models/Ciphers.d.ts.map +1 -0
  168. package/dist/types/src/nanotdf/models/DefaultParams.d.ts +21 -0
  169. package/dist/types/src/nanotdf/models/DefaultParams.d.ts.map +1 -0
  170. package/dist/types/src/nanotdf/models/EcCurves.d.ts +15 -0
  171. package/dist/types/src/nanotdf/models/EcCurves.d.ts.map +1 -0
  172. package/dist/types/src/nanotdf/models/Header.d.ts +73 -0
  173. package/dist/types/src/nanotdf/models/Header.d.ts.map +1 -0
  174. package/dist/types/src/nanotdf/models/Payload.d.ts +47 -0
  175. package/dist/types/src/nanotdf/models/Payload.d.ts.map +1 -0
  176. package/dist/types/src/nanotdf/models/Policy/AbstractPolicy.d.ts +52 -0
  177. package/dist/types/src/nanotdf/models/Policy/AbstractPolicy.d.ts.map +1 -0
  178. package/dist/types/src/nanotdf/models/Policy/EmbeddedPolicy.d.ts +35 -0
  179. package/dist/types/src/nanotdf/models/Policy/EmbeddedPolicy.d.ts.map +1 -0
  180. package/dist/types/src/nanotdf/models/Policy/PolicyFactory.d.ts +11 -0
  181. package/dist/types/src/nanotdf/models/Policy/PolicyFactory.d.ts.map +1 -0
  182. package/dist/types/src/nanotdf/models/Policy/RemotePolicy.d.ts +31 -0
  183. package/dist/types/src/nanotdf/models/Policy/RemotePolicy.d.ts.map +1 -0
  184. package/dist/types/src/nanotdf/models/ResourceLocator.d.ts +65 -0
  185. package/dist/types/src/nanotdf/models/ResourceLocator.d.ts.map +1 -0
  186. package/dist/types/src/nanotdf/models/Signature.d.ts +33 -0
  187. package/dist/types/src/nanotdf/models/Signature.d.ts.map +1 -0
  188. package/dist/types/src/nanotdf-crypto/ciphers.d.ts +8 -0
  189. package/dist/types/src/nanotdf-crypto/ciphers.d.ts.map +1 -0
  190. package/dist/types/src/nanotdf-crypto/decrypt.d.ts +14 -0
  191. package/dist/types/src/nanotdf-crypto/decrypt.d.ts.map +1 -0
  192. package/dist/types/src/nanotdf-crypto/digest.d.ts +3 -0
  193. package/dist/types/src/nanotdf-crypto/digest.d.ts.map +1 -0
  194. package/dist/types/src/nanotdf-crypto/ecdsaSignature.d.ts +35 -0
  195. package/dist/types/src/nanotdf-crypto/ecdsaSignature.d.ts.map +1 -0
  196. package/dist/types/src/nanotdf-crypto/encrypt.d.ts +14 -0
  197. package/dist/types/src/nanotdf-crypto/encrypt.d.ts.map +1 -0
  198. package/dist/types/src/nanotdf-crypto/enums.d.ts +42 -0
  199. package/dist/types/src/nanotdf-crypto/enums.d.ts.map +1 -0
  200. package/dist/types/src/nanotdf-crypto/exportCryptoKey.d.ts +7 -0
  201. package/dist/types/src/nanotdf-crypto/exportCryptoKey.d.ts.map +1 -0
  202. package/dist/types/src/nanotdf-crypto/generateKeyPair.d.ts +10 -0
  203. package/dist/types/src/nanotdf-crypto/generateKeyPair.d.ts.map +1 -0
  204. package/dist/types/src/nanotdf-crypto/generateRandomNumber.d.ts +5 -0
  205. package/dist/types/src/nanotdf-crypto/generateRandomNumber.d.ts.map +1 -0
  206. package/dist/types/src/nanotdf-crypto/importRawKey.d.ts +13 -0
  207. package/dist/types/src/nanotdf-crypto/importRawKey.d.ts.map +1 -0
  208. package/dist/types/src/nanotdf-crypto/index.d.ts +12 -0
  209. package/dist/types/src/nanotdf-crypto/index.d.ts.map +1 -0
  210. package/dist/types/src/nanotdf-crypto/keyAgreement.d.ts +28 -0
  211. package/dist/types/src/nanotdf-crypto/keyAgreement.d.ts.map +1 -0
  212. package/dist/types/src/nanotdf-crypto/pemPublicToCrypto.d.ts +28 -0
  213. package/dist/types/src/nanotdf-crypto/pemPublicToCrypto.d.ts.map +1 -0
  214. package/dist/types/src/policy/api.d.ts +4 -0
  215. package/dist/types/src/policy/api.d.ts.map +1 -0
  216. package/dist/types/src/policy/attributes.d.ts +95 -0
  217. package/dist/types/src/policy/attributes.d.ts.map +1 -0
  218. package/dist/types/src/policy/granter.d.ts +23 -0
  219. package/dist/types/src/policy/granter.d.ts.map +1 -0
  220. package/dist/types/src/tdf/AttributeObject.d.ts +13 -0
  221. package/dist/types/src/tdf/AttributeObject.d.ts.map +1 -0
  222. package/dist/types/src/tdf/AttributeObjectJwt.d.ts +4 -0
  223. package/dist/types/src/tdf/AttributeObjectJwt.d.ts.map +1 -0
  224. package/dist/types/src/tdf/Crypto.d.ts +37 -0
  225. package/dist/types/src/tdf/Crypto.d.ts.map +1 -0
  226. package/dist/types/src/tdf/EntityObject.d.ts +18 -0
  227. package/dist/types/src/tdf/EntityObject.d.ts.map +1 -0
  228. package/dist/types/src/tdf/NanoTDF/NanoTDF.d.ts +99 -0
  229. package/dist/types/src/tdf/NanoTDF/NanoTDF.d.ts.map +1 -0
  230. package/dist/types/src/tdf/Policy.d.ts +28 -0
  231. package/dist/types/src/tdf/Policy.d.ts.map +1 -0
  232. package/dist/types/src/tdf/PolicyObject.d.ts +11 -0
  233. package/dist/types/src/tdf/PolicyObject.d.ts.map +1 -0
  234. package/dist/types/src/tdf/TypedArray.d.ts +3 -0
  235. package/dist/types/src/tdf/TypedArray.d.ts.map +1 -0
  236. package/dist/types/src/tdf/index.d.ts +7 -0
  237. package/dist/types/src/tdf/index.d.ts.map +1 -0
  238. package/dist/types/src/types/index.d.ts +45 -0
  239. package/dist/types/src/types/index.d.ts.map +1 -0
  240. package/dist/types/src/utils.d.ts +45 -0
  241. package/dist/types/src/utils.d.ts.map +1 -0
  242. package/dist/types/src/version.d.ts +9 -0
  243. package/dist/types/src/version.d.ts.map +1 -0
  244. package/dist/types/tdf3/index.d.ts +16 -0
  245. package/dist/types/tdf3/index.d.ts.map +1 -0
  246. package/dist/types/tdf3/src/assertions.d.ts +63 -0
  247. package/dist/types/tdf3/src/assertions.d.ts.map +1 -0
  248. package/dist/types/tdf3/src/binary.d.ts +38 -0
  249. package/dist/types/tdf3/src/binary.d.ts.map +1 -0
  250. package/dist/types/tdf3/src/ciphers/aes-gcm-cipher.d.ts +18 -0
  251. package/dist/types/tdf3/src/ciphers/aes-gcm-cipher.d.ts.map +1 -0
  252. package/dist/types/tdf3/src/ciphers/algorithms.d.ts +4 -0
  253. package/dist/types/tdf3/src/ciphers/algorithms.d.ts.map +1 -0
  254. package/dist/types/tdf3/src/ciphers/index.d.ts +3 -0
  255. package/dist/types/tdf3/src/ciphers/index.d.ts.map +1 -0
  256. package/dist/types/tdf3/src/ciphers/symmetric-cipher-base.d.ts +14 -0
  257. package/dist/types/tdf3/src/ciphers/symmetric-cipher-base.d.ts.map +1 -0
  258. package/dist/types/tdf3/src/client/DecoratedReadableStream.d.ts +53 -0
  259. package/dist/types/tdf3/src/client/DecoratedReadableStream.d.ts.map +1 -0
  260. package/dist/types/tdf3/src/client/builders.d.ts +436 -0
  261. package/dist/types/tdf3/src/client/builders.d.ts.map +1 -0
  262. package/dist/types/tdf3/src/client/index.d.ts +139 -0
  263. package/dist/types/tdf3/src/client/index.d.ts.map +1 -0
  264. package/dist/types/tdf3/src/client/validation.d.ts +8 -0
  265. package/dist/types/tdf3/src/client/validation.d.ts.map +1 -0
  266. package/dist/types/tdf3/src/crypto/crypto-utils.d.ts +34 -0
  267. package/dist/types/tdf3/src/crypto/crypto-utils.d.ts.map +1 -0
  268. package/dist/types/tdf3/src/crypto/declarations.d.ts +60 -0
  269. package/dist/types/tdf3/src/crypto/declarations.d.ts.map +1 -0
  270. package/dist/types/tdf3/src/crypto/index.d.ts +103 -0
  271. package/dist/types/tdf3/src/crypto/index.d.ts.map +1 -0
  272. package/dist/types/tdf3/src/index.d.ts +5 -0
  273. package/dist/types/tdf3/src/index.d.ts.map +1 -0
  274. package/dist/types/tdf3/src/models/attribute-set.d.ts +65 -0
  275. package/dist/types/tdf3/src/models/attribute-set.d.ts.map +1 -0
  276. package/dist/types/tdf3/src/models/encryption-information.d.ts +49 -0
  277. package/dist/types/tdf3/src/models/encryption-information.d.ts.map +1 -0
  278. package/dist/types/tdf3/src/models/index.d.ts +9 -0
  279. package/dist/types/tdf3/src/models/index.d.ts.map +1 -0
  280. package/dist/types/tdf3/src/models/key-access.d.ts +42 -0
  281. package/dist/types/tdf3/src/models/key-access.d.ts.map +1 -0
  282. package/dist/types/tdf3/src/models/manifest.d.ts +9 -0
  283. package/dist/types/tdf3/src/models/manifest.d.ts.map +1 -0
  284. package/dist/types/tdf3/src/models/payload.d.ts +7 -0
  285. package/dist/types/tdf3/src/models/payload.d.ts.map +1 -0
  286. package/dist/types/tdf3/src/models/policy.d.ts +13 -0
  287. package/dist/types/tdf3/src/models/policy.d.ts.map +1 -0
  288. package/dist/types/tdf3/src/models/upsert-response.d.ts +16 -0
  289. package/dist/types/tdf3/src/models/upsert-response.d.ts.map +1 -0
  290. package/dist/types/tdf3/src/tdf.d.ts +152 -0
  291. package/dist/types/tdf3/src/tdf.d.ts.map +1 -0
  292. package/dist/types/tdf3/src/templates/default.html.d.ts +8 -0
  293. package/dist/types/tdf3/src/templates/default.html.d.ts.map +1 -0
  294. package/dist/types/tdf3/src/templates/escaper.d.ts +6 -0
  295. package/dist/types/tdf3/src/templates/escaper.d.ts.map +1 -0
  296. package/dist/types/tdf3/src/templates/index.d.ts +3 -0
  297. package/dist/types/tdf3/src/templates/index.d.ts.map +1 -0
  298. package/dist/types/tdf3/src/utils/buffer-crc32.d.ts +2 -0
  299. package/dist/types/tdf3/src/utils/buffer-crc32.d.ts.map +1 -0
  300. package/dist/types/tdf3/src/utils/chunkers.d.ts +29 -0
  301. package/dist/types/tdf3/src/utils/chunkers.d.ts.map +1 -0
  302. package/dist/types/tdf3/src/utils/index.d.ts +36 -0
  303. package/dist/types/tdf3/src/utils/index.d.ts.map +1 -0
  304. package/dist/types/tdf3/src/utils/keysplit.d.ts +19 -0
  305. package/dist/types/tdf3/src/utils/keysplit.d.ts.map +1 -0
  306. package/dist/types/tdf3/src/utils/zip-reader.d.ts +63 -0
  307. package/dist/types/tdf3/src/utils/zip-reader.d.ts.map +1 -0
  308. package/dist/types/tdf3/src/utils/zip-writer.d.ts +35 -0
  309. package/dist/types/tdf3/src/utils/zip-writer.d.ts.map +1 -0
  310. package/dist/types/tdf3/src/version.d.ts +3 -0
  311. package/dist/types/tdf3/src/version.d.ts.map +1 -0
  312. package/dist/web/package.json +3 -0
  313. package/dist/web/src/access.js +147 -0
  314. package/dist/web/src/auth/Eas.js +55 -0
  315. package/dist/web/src/auth/auth.js +71 -0
  316. package/dist/web/src/auth/oidc-clientcredentials-provider.js +22 -0
  317. package/dist/web/src/auth/oidc-externaljwt-provider.js +29 -0
  318. package/dist/web/src/auth/oidc-refreshtoken-provider.js +30 -0
  319. package/dist/web/src/auth/oidc.js +215 -0
  320. package/dist/web/src/auth/providers.js +119 -0
  321. package/dist/web/src/encodings/base64.js +147 -0
  322. package/dist/web/src/encodings/hex.js +63 -0
  323. package/dist/web/src/encodings/index.js +3 -0
  324. package/dist/web/src/errors.js +123 -0
  325. package/dist/web/src/index.js +313 -0
  326. package/dist/web/src/nanotdf/Client.js +268 -0
  327. package/dist/web/src/nanotdf/NanoTDF.js +89 -0
  328. package/dist/web/src/nanotdf/browser-entry.js +14 -0
  329. package/dist/web/src/nanotdf/constants.js +2 -0
  330. package/dist/web/src/nanotdf/decrypt.js +14 -0
  331. package/dist/web/src/nanotdf/encrypt-dataset.js +32 -0
  332. package/dist/web/src/nanotdf/encrypt.js +126 -0
  333. package/dist/web/src/nanotdf/enum/CipherEnum.js +11 -0
  334. package/dist/web/src/nanotdf/enum/CurveNameEnum.js +13 -0
  335. package/dist/web/src/nanotdf/enum/EncodingEnum.js +6 -0
  336. package/dist/web/src/nanotdf/enum/PolicyTypeEnum.js +9 -0
  337. package/dist/web/src/nanotdf/enum/ProtocolEnum.js +8 -0
  338. package/dist/web/src/nanotdf/enum/ResourceLocatorIdentifierEnum.js +9 -0
  339. package/dist/web/src/nanotdf/helpers/calculateByCurve.js +24 -0
  340. package/dist/web/src/nanotdf/helpers/getHkdfSalt.js +8 -0
  341. package/dist/web/src/nanotdf/index.js +11 -0
  342. package/dist/web/src/nanotdf/interfaces/PolicyInterface.js +2 -0
  343. package/dist/web/src/nanotdf/models/Ciphers.js +54 -0
  344. package/dist/web/src/nanotdf/models/DefaultParams.js +22 -0
  345. package/dist/web/src/nanotdf/models/EcCurves.js +32 -0
  346. package/dist/web/src/nanotdf/models/Header.js +250 -0
  347. package/dist/web/src/nanotdf/models/Payload.js +156 -0
  348. package/dist/web/src/nanotdf/models/Policy/AbstractPolicy.js +71 -0
  349. package/dist/web/src/nanotdf/models/Policy/EmbeddedPolicy.js +77 -0
  350. package/dist/web/src/nanotdf/models/Policy/PolicyFactory.js +33 -0
  351. package/dist/web/src/nanotdf/models/Policy/RemotePolicy.js +57 -0
  352. package/dist/web/src/nanotdf/models/ResourceLocator.js +206 -0
  353. package/dist/web/src/nanotdf/models/Signature.js +74 -0
  354. package/dist/web/src/nanotdf-crypto/ciphers.js +14 -0
  355. package/dist/web/src/nanotdf-crypto/decrypt.js +21 -0
  356. package/dist/web/src/nanotdf-crypto/digest.js +4 -0
  357. package/dist/web/src/nanotdf-crypto/ecdsaSignature.js +77 -0
  358. package/dist/web/src/nanotdf-crypto/encrypt.js +21 -0
  359. package/dist/web/src/nanotdf-crypto/enums.js +49 -0
  360. package/dist/web/src/nanotdf-crypto/exportCryptoKey.js +17 -0
  361. package/dist/web/src/nanotdf-crypto/generateKeyPair.js +10 -0
  362. package/dist/web/src/nanotdf-crypto/generateRandomNumber.js +9 -0
  363. package/dist/web/src/nanotdf-crypto/importRawKey.js +15 -0
  364. package/dist/web/src/nanotdf-crypto/index.js +12 -0
  365. package/dist/web/src/nanotdf-crypto/keyAgreement.js +87 -0
  366. package/dist/web/src/nanotdf-crypto/pemPublicToCrypto.js +197 -0
  367. package/dist/web/src/policy/api.js +54 -0
  368. package/dist/web/src/policy/attributes.js +2 -0
  369. package/dist/web/src/policy/granter.js +141 -0
  370. package/dist/web/src/tdf/AttributeObject.js +11 -0
  371. package/dist/web/src/tdf/AttributeObjectJwt.js +2 -0
  372. package/dist/web/src/tdf/Crypto.js +44 -0
  373. package/dist/web/src/tdf/EntityObject.js +2 -0
  374. package/dist/web/src/tdf/NanoTDF/NanoTDF.js +35 -0
  375. package/dist/web/src/tdf/Policy.js +48 -0
  376. package/dist/web/src/tdf/PolicyObject.js +2 -0
  377. package/dist/web/src/tdf/TypedArray.js +2 -0
  378. package/dist/web/src/tdf/index.js +4 -0
  379. package/dist/web/src/types/index.js +2 -0
  380. package/dist/web/src/utils.js +133 -0
  381. package/dist/web/src/version.js +9 -0
  382. package/dist/web/tdf3/index.js +13 -0
  383. package/dist/web/tdf3/src/assertions.js +111 -0
  384. package/dist/web/tdf3/src/binary.js +149 -0
  385. package/dist/web/tdf3/src/ciphers/aes-gcm-cipher.js +52 -0
  386. package/dist/web/tdf3/src/ciphers/algorithms.js +5 -0
  387. package/dist/web/tdf3/src/ciphers/index.js +3 -0
  388. package/dist/web/tdf3/src/ciphers/symmetric-cipher-base.js +18 -0
  389. package/dist/web/tdf3/src/client/DecoratedReadableStream.js +107 -0
  390. package/dist/web/tdf3/src/client/builders.js +557 -0
  391. package/dist/web/tdf3/src/client/index.js +423 -0
  392. package/dist/web/tdf3/src/client/validation.js +58 -0
  393. package/dist/web/tdf3/src/crypto/crypto-utils.js +107 -0
  394. package/dist/web/tdf3/src/crypto/declarations.js +5 -0
  395. package/dist/web/tdf3/src/crypto/index.js +296 -0
  396. package/dist/web/tdf3/src/index.js +5 -0
  397. package/dist/web/tdf3/src/models/attribute-set.js +118 -0
  398. package/dist/web/tdf3/src/models/encryption-information.js +86 -0
  399. package/dist/web/tdf3/src/models/index.js +9 -0
  400. package/dist/web/tdf3/src/models/key-access.js +74 -0
  401. package/dist/web/tdf3/src/models/manifest.js +2 -0
  402. package/dist/web/tdf3/src/models/payload.js +2 -0
  403. package/dist/web/tdf3/src/models/policy.js +20 -0
  404. package/dist/web/tdf3/src/models/upsert-response.js +2 -0
  405. package/dist/web/tdf3/src/tdf.js +866 -0
  406. package/dist/web/tdf3/src/templates/default.html.js +96 -0
  407. package/dist/web/tdf3/src/templates/escaper.js +10 -0
  408. package/dist/web/tdf3/src/templates/index.js +3 -0
  409. package/dist/web/tdf3/src/utils/buffer-crc32.js +44 -0
  410. package/dist/web/tdf3/src/utils/chunkers.js +96 -0
  411. package/dist/web/tdf3/src/utils/index.js +248 -0
  412. package/dist/web/tdf3/src/utils/keysplit.js +55 -0
  413. package/dist/web/tdf3/src/utils/zip-reader.js +247 -0
  414. package/dist/web/tdf3/src/utils/zip-writer.js +302 -0
  415. package/dist/web/tdf3/src/version.js +3 -0
  416. package/package.json +126 -0
  417. package/src/access.ts +198 -0
  418. package/src/auth/Eas.ts +79 -0
  419. package/src/auth/auth.ts +141 -0
  420. package/src/auth/oidc-clientcredentials-provider.ts +32 -0
  421. package/src/auth/oidc-externaljwt-provider.ts +41 -0
  422. package/src/auth/oidc-refreshtoken-provider.ts +41 -0
  423. package/src/auth/oidc.ts +307 -0
  424. package/src/auth/providers.ts +139 -0
  425. package/src/encodings/base64.ts +160 -0
  426. package/src/encodings/hex.ts +69 -0
  427. package/src/encodings/index.ts +2 -0
  428. package/src/errors.ts +113 -0
  429. package/src/index.ts +441 -0
  430. package/src/nanotdf/Client.ts +349 -0
  431. package/src/nanotdf/NanoTDF.ts +121 -0
  432. package/src/nanotdf/browser-entry.ts +20 -0
  433. package/src/nanotdf/constants.ts +1 -0
  434. package/src/nanotdf/decrypt.ts +19 -0
  435. package/src/nanotdf/encrypt-dataset.ts +52 -0
  436. package/src/nanotdf/encrypt.ts +197 -0
  437. package/src/nanotdf/enum/CipherEnum.ts +10 -0
  438. package/src/nanotdf/enum/CurveNameEnum.ts +12 -0
  439. package/src/nanotdf/enum/EncodingEnum.ts +5 -0
  440. package/src/nanotdf/enum/PolicyTypeEnum.ts +8 -0
  441. package/src/nanotdf/enum/ProtocolEnum.ts +7 -0
  442. package/src/nanotdf/enum/ResourceLocatorIdentifierEnum.ts +8 -0
  443. package/src/nanotdf/helpers/calculateByCurve.ts +26 -0
  444. package/src/nanotdf/helpers/getHkdfSalt.ts +15 -0
  445. package/src/nanotdf/index.ts +10 -0
  446. package/src/nanotdf/interfaces/PolicyInterface.ts +27 -0
  447. package/src/nanotdf/models/Ciphers.ts +67 -0
  448. package/src/nanotdf/models/DefaultParams.ts +24 -0
  449. package/src/nanotdf/models/EcCurves.ts +40 -0
  450. package/src/nanotdf/models/Header.ts +322 -0
  451. package/src/nanotdf/models/Payload.ts +196 -0
  452. package/src/nanotdf/models/Policy/AbstractPolicy.ts +90 -0
  453. package/src/nanotdf/models/Policy/EmbeddedPolicy.ts +101 -0
  454. package/src/nanotdf/models/Policy/PolicyFactory.ts +48 -0
  455. package/src/nanotdf/models/Policy/RemotePolicy.ts +74 -0
  456. package/src/nanotdf/models/ResourceLocator.ts +212 -0
  457. package/src/nanotdf/models/Signature.ts +85 -0
  458. package/src/nanotdf-crypto/ciphers.ts +13 -0
  459. package/src/nanotdf-crypto/decrypt.ts +30 -0
  460. package/src/nanotdf-crypto/digest.ts +8 -0
  461. package/src/nanotdf-crypto/ecdsaSignature.ts +109 -0
  462. package/src/nanotdf-crypto/encrypt.ts +30 -0
  463. package/src/nanotdf-crypto/enums.ts +47 -0
  464. package/src/nanotdf-crypto/exportCryptoKey.ts +17 -0
  465. package/src/nanotdf-crypto/generateKeyPair.ts +19 -0
  466. package/src/nanotdf-crypto/generateRandomNumber.ts +8 -0
  467. package/src/nanotdf-crypto/importRawKey.ts +19 -0
  468. package/src/nanotdf-crypto/index.ts +11 -0
  469. package/src/nanotdf-crypto/keyAgreement.ts +139 -0
  470. package/src/nanotdf-crypto/pemPublicToCrypto.ts +232 -0
  471. package/src/package-lock.json +6 -0
  472. package/src/package.json +3 -0
  473. package/src/platform/authorization/authorization_connect.d.ts +44 -0
  474. package/src/platform/authorization/authorization_connect.js +44 -0
  475. package/src/platform/authorization/authorization_pb.d.ts +707 -0
  476. package/src/platform/authorization/authorization_pb.js +372 -0
  477. package/src/platform/common/common_pb.d.ts +129 -0
  478. package/src/platform/common/common_pb.js +58 -0
  479. package/src/platform/entityresolution/entity_resolution_connect.d.ts +35 -0
  480. package/src/platform/entityresolution/entity_resolution_connect.js +35 -0
  481. package/src/platform/entityresolution/entity_resolution_pb.d.ts +242 -0
  482. package/src/platform/entityresolution/entity_resolution_pb.js +139 -0
  483. package/src/platform/kas/kas_connect.d.ts +59 -0
  484. package/src/platform/kas/kas_connect.js +59 -0
  485. package/src/platform/kas/kas_pb.d.ts +200 -0
  486. package/src/platform/kas/kas_pb.js +84 -0
  487. package/src/platform/policy/attributes/attributes_connect.d.ts +168 -0
  488. package/src/platform/policy/attributes/attributes_connect.js +168 -0
  489. package/src/platform/policy/attributes/attributes_pb.d.ts +929 -0
  490. package/src/platform/policy/attributes/attributes_pb.js +363 -0
  491. package/src/platform/policy/kasregistry/key_access_server_registry_connect.d.ts +62 -0
  492. package/src/platform/policy/kasregistry/key_access_server_registry_connect.js +62 -0
  493. package/src/platform/policy/kasregistry/key_access_server_registry_pb.d.ts +283 -0
  494. package/src/platform/policy/kasregistry/key_access_server_registry_pb.js +113 -0
  495. package/src/platform/policy/namespaces/namespaces_connect.d.ts +62 -0
  496. package/src/platform/policy/namespaces/namespaces_connect.js +62 -0
  497. package/src/platform/policy/namespaces/namespaces_pb.d.ts +270 -0
  498. package/src/platform/policy/namespaces/namespaces_pb.js +110 -0
  499. package/src/platform/policy/objects_pb.d.ts +725 -0
  500. package/src/platform/policy/objects_pb.js +288 -0
  501. package/src/platform/policy/resourcemapping/resource_mapping_connect.d.ts +259 -0
  502. package/src/platform/policy/resourcemapping/resource_mapping_connect.js +259 -0
  503. package/src/platform/policy/resourcemapping/resource_mapping_pb.d.ts +314 -0
  504. package/src/platform/policy/resourcemapping/resource_mapping_pb.js +142 -0
  505. package/src/platform/policy/selectors_pb.d.ts +269 -0
  506. package/src/platform/policy/selectors_pb.js +110 -0
  507. package/src/platform/policy/subjectmapping/subject_mapping_connect.d.ts +118 -0
  508. package/src/platform/policy/subjectmapping/subject_mapping_connect.js +118 -0
  509. package/src/platform/policy/subjectmapping/subject_mapping_pb.d.ts +672 -0
  510. package/src/platform/policy/subjectmapping/subject_mapping_pb.js +260 -0
  511. package/src/platform/wellknownconfiguration/wellknown_configuration_connect.d.ts +26 -0
  512. package/src/platform/wellknownconfiguration/wellknown_configuration_connect.js +26 -0
  513. package/src/platform/wellknownconfiguration/wellknown_configuration_pb.d.ts +75 -0
  514. package/src/platform/wellknownconfiguration/wellknown_configuration_pb.js +35 -0
  515. package/src/policy/api.ts +61 -0
  516. package/src/policy/attributes.ts +117 -0
  517. package/src/policy/granter.ts +181 -0
  518. package/src/tdf/AttributeObject.ts +27 -0
  519. package/src/tdf/AttributeObjectJwt.ts +3 -0
  520. package/src/tdf/Crypto.ts +42 -0
  521. package/src/tdf/EntityObject.ts +18 -0
  522. package/src/tdf/NanoTDF/NanoTDF.ts +120 -0
  523. package/src/tdf/Policy.ts +51 -0
  524. package/src/tdf/PolicyObject.ts +12 -0
  525. package/src/tdf/TypedArray.ts +12 -0
  526. package/src/tdf/index.ts +6 -0
  527. package/src/types/index.ts +55 -0
  528. package/src/utils.ts +149 -0
  529. package/src/version.ts +9 -0
  530. package/tdf3/index.ts +91 -0
  531. package/tdf3/package-lock.json +6 -0
  532. package/tdf3/package.json +3 -0
  533. package/tdf3/src/assertions.ts +191 -0
  534. package/tdf3/src/binary.ts +195 -0
  535. package/tdf3/src/ciphers/aes-gcm-cipher.ts +76 -0
  536. package/tdf3/src/ciphers/algorithms.ts +9 -0
  537. package/tdf3/src/ciphers/index.ts +2 -0
  538. package/tdf3/src/ciphers/symmetric-cipher-base.ts +38 -0
  539. package/tdf3/src/client/DecoratedReadableStream.ts +148 -0
  540. package/tdf3/src/client/builders.ts +701 -0
  541. package/tdf3/src/client/index.ts +637 -0
  542. package/tdf3/src/client/validation.ts +79 -0
  543. package/tdf3/src/crypto/crypto-utils.ts +119 -0
  544. package/tdf3/src/crypto/declarations.ts +89 -0
  545. package/tdf3/src/crypto/index.ts +394 -0
  546. package/tdf3/src/index.ts +4 -0
  547. package/tdf3/src/models/attribute-set.ts +142 -0
  548. package/tdf3/src/models/encryption-information.ts +172 -0
  549. package/tdf3/src/models/index.ts +8 -0
  550. package/tdf3/src/models/key-access.ts +128 -0
  551. package/tdf3/src/models/manifest.ts +9 -0
  552. package/tdf3/src/models/payload.ts +6 -0
  553. package/tdf3/src/models/policy.ts +35 -0
  554. package/tdf3/src/models/upsert-response.ts +17 -0
  555. package/tdf3/src/tdf.ts +1351 -0
  556. package/tdf3/src/templates/default.html.ts +105 -0
  557. package/tdf3/src/templates/escaper.ts +10 -0
  558. package/tdf3/src/templates/index.ts +2 -0
  559. package/tdf3/src/utils/buffer-crc32.ts +46 -0
  560. package/tdf3/src/utils/chunkers.ts +118 -0
  561. package/tdf3/src/utils/index.ts +309 -0
  562. package/tdf3/src/utils/keysplit.ts +63 -0
  563. package/tdf3/src/utils/zip-reader.ts +341 -0
  564. package/tdf3/src/utils/zip-writer.ts +375 -0
  565. package/tdf3/src/version.ts +2 -0
  566. package/tdf3/types.d.ts +14 -0
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const Ciphers_js_1 = require("./Ciphers.js");
4
+ const errors_js_1 = require("../../errors.js");
5
+ /**
6
+ * Payload
7
+ *
8
+ * The payload section of the nanotdf contains the ciphertext that is protected by the policy defined in the Header.
9
+ * The structure of the Payload is as follows:
10
+ *
11
+ * | Section | Minimum Length (B) | Maximum Length (B) |
12
+ * |-----------------------|--------------------|--------------------|
13
+ * | Length | 3 | 3 |
14
+ * | IV | 3 | 3 |
15
+ * | Ciphertext | 0 | 16777204 |
16
+ * | Payload MAC (AuthTag) | 8 | 32 |
17
+ */
18
+ class Payload {
19
+ /**
20
+ * Parse the payload
21
+ *
22
+ * Returns a new Payload object and the next offset
23
+ *
24
+ * @param buff Uint8Array
25
+ */
26
+ static parse(header, buff, legacyTDF = false) {
27
+ let offset = 0;
28
+ const authTagByteLength = (0, Ciphers_js_1.getBitLength)(header.symmetricCipher) / 8;
29
+ /**
30
+ * Length
31
+ *
32
+ * This 3 byte unsigned integer dictates the length of the subsequent ciphertext section.
33
+ *
34
+ * NOTE: it includes the IV + Ciphertext + Auth Tag. To get the Auth Tag length you have to subtract the other
35
+ * lengths
36
+ */
37
+ // TODO: This will not work in Big Endian host environments
38
+ const length = (buff[offset] << 16) + (buff[offset + 1] << 8) + buff[offset + 2];
39
+ const ciphertextLength = length - Payload.IV_LEN - authTagByteLength;
40
+ offset += Payload.LENGTH_LEN;
41
+ const inRange = length >= this.MIN_LENGTH && length <= this.MAX_NANO_TDF_ENCRYPT_PAYLOAD_SIZE;
42
+ if (!inRange) {
43
+ throw new errors_js_1.InvalidFileError('nanotdf parse failure: Payload Length Out Of Range');
44
+ }
45
+ /**
46
+ * Parse IV
47
+ *
48
+ * The IV used for encryption. This value is a byte array containing the IV. This IV must never be reused with the
49
+ * same symmetric key. Also, to support an extremely compacted version of the nanotdf the IV value 00 00 00 is
50
+ * reserved for use with an encrypted policy.
51
+ */
52
+ let iv = buff.subarray(offset, offset + Payload.IV_LEN);
53
+ offset += Payload.IV_LEN;
54
+ if (iv.byteLength != 3) {
55
+ throw new errors_js_1.InvalidFileError('nanotdf parse failure: Invalid Payload Length');
56
+ }
57
+ if (!legacyTDF) {
58
+ const actuallIV = new Uint8Array(12).fill(0);
59
+ // The the iv from payload to lower-order bits
60
+ actuallIV.set(iv, 9);
61
+ // update the iv
62
+ iv = actuallIV;
63
+ }
64
+ /**
65
+ * Parse Ciphertext w/ Auth Tag
66
+ */
67
+ const ciphertextWithAuthTag = buff.subarray(offset, offset + ciphertextLength + authTagByteLength);
68
+ if (ciphertextWithAuthTag.byteLength + Payload.LENGTH_LEN !== length) {
69
+ throw new errors_js_1.InvalidFileError('nanotdf parse failure: Invalid Payload Length');
70
+ }
71
+ /**
72
+ * Parse Ciphertext
73
+ *
74
+ * The byte array of the ciphertext that is protected in the nanotdf. The encryption method used to create or decrypt
75
+ * the ciphertext is defined in the Key Access object in the header.
76
+ */
77
+ const ciphertext = buff.subarray(offset, offset + ciphertextLength);
78
+ offset += ciphertextLength;
79
+ /**
80
+ * Auth Tag
81
+ *
82
+ * GMAC = 8 byte
83
+ * ECDSA = size of curve
84
+ *
85
+ * The MAC of the payload. The Size of this MAC is determined by the Encryption Method Enum used in the Symmetric and
86
+ * Payload Config object in the header.
87
+ *
88
+ * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3314-symmetric-and-payload-config
89
+ */
90
+ const authTag = buff.subarray(offset, offset + authTagByteLength);
91
+ offset += authTagByteLength;
92
+ return {
93
+ payload: new Payload(iv, ciphertext, authTag, ciphertextWithAuthTag),
94
+ offset,
95
+ };
96
+ }
97
+ constructor(iv, ciphertext, authTag, ciphertextWithAuthTag) {
98
+ this.iv = iv;
99
+ this.ciphertext = ciphertext;
100
+ this.authTag = authTag;
101
+ // If ciphertextWithAuthTag is not set then combine it
102
+ // Ideally it is set so an additional buffer is not needed
103
+ if (ciphertextWithAuthTag === undefined) {
104
+ this.ciphertextWithAuthTag = new Uint8Array(ciphertext.length + authTag.length);
105
+ this.ciphertextWithAuthTag.set(ciphertext);
106
+ this.ciphertextWithAuthTag.set(authTag, ciphertext.length);
107
+ }
108
+ else {
109
+ this.ciphertextWithAuthTag = ciphertextWithAuthTag;
110
+ }
111
+ }
112
+ /**
113
+ * Length
114
+ *
115
+ * @returns { number } Length of signature
116
+ */
117
+ get length() {
118
+ return (
119
+ // Bytes(3) to hold the length of the payload
120
+ 3 +
121
+ // Length of the IV
122
+ this.iv.length +
123
+ // Length of the ciphertext
124
+ this.ciphertext.length +
125
+ // Length of the auth tag
126
+ this.authTag.length);
127
+ }
128
+ /**
129
+ * Copy the contents of the signature to buffer
130
+ */
131
+ copyToBuffer(target) {
132
+ if (this.length > target.length) {
133
+ throw new Error('internal: invalid buffer size to copy payload');
134
+ }
135
+ const lengthOfEncryptedPayload = this.iv.length + this.ciphertext.length + this.authTag.length;
136
+ if (lengthOfEncryptedPayload > Payload.MAX_NANO_TDF_ENCRYPT_PAYLOAD_SIZE) {
137
+ throw new errors_js_1.ConfigurationError("TDF encrypted payload can't be more that 2^24");
138
+ }
139
+ const lengthAsUint32 = new Uint32Array(1);
140
+ lengthAsUint32[0] = lengthOfEncryptedPayload;
141
+ const lengthAsUint24 = new Uint8Array(lengthAsUint32.buffer);
142
+ // NOTE: We are only interested in only first 3 bytes.
143
+ const payloadSizeAsBg = new Uint8Array(3);
144
+ payloadSizeAsBg[0] = lengthAsUint24[2];
145
+ payloadSizeAsBg[1] = lengthAsUint24[1];
146
+ payloadSizeAsBg[2] = lengthAsUint24[0];
147
+ target.set(payloadSizeAsBg, 0);
148
+ target.set(this.iv, payloadSizeAsBg.length);
149
+ target.set(this.ciphertext, payloadSizeAsBg.length + this.iv.length);
150
+ target.set(this.authTag, payloadSizeAsBg.length + this.iv.length + this.ciphertext.length);
151
+ }
152
+ }
153
+ Payload.LENGTH_LEN = 3;
154
+ Payload.IV_LEN = 3;
155
+ Payload.MIN_LENGTH = 11;
156
+ Payload.MAX_NANO_TDF_ENCRYPT_PAYLOAD_SIZE = 16777216; // 3 bytes unsigned int.
157
+ exports.default = Payload;
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGF5bG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW5vdGRmL21vZGVscy9QYXlsb2FkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0EsNkNBQTRDO0FBQzVDLCtDQUF1RTtBQUV2RTs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFxQixPQUFPO0lBVzFCOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQ1YsTUFBYyxFQUNkLElBQWdCLEVBQ2hCLFNBQVMsR0FBRyxLQUFLO1FBRWpCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNmLE1BQU0saUJBQWlCLEdBQUcsSUFBQSx5QkFBWSxFQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFbkU7Ozs7Ozs7V0FPRztRQUNILDJEQUEyRDtRQUMzRCxNQUFNLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqRixNQUFNLGdCQUFnQixHQUFHLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLGlCQUFpQixDQUFDO1FBQ3JFLE1BQU0sSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDO1FBRTdCLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsaUNBQWlDLENBQUM7UUFFOUYsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLE1BQU0sSUFBSSw0QkFBZ0IsQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1NBQ2xGO1FBRUQ7Ozs7OztXQU1HO1FBQ0gsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE9B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
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const errors_js_1 = require("../../../errors.js");
4
+ class AbstractPolicy {
5
+ // Static methods can't be defined in an interface
6
+ static parse(
7
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
8
+ buff,
9
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
10
+ useECDSABinding,
11
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
12
+ type) {
13
+ throw new errors_js_1.ConfigurationError('parsePolicy was not implemented');
14
+ }
15
+ constructor(type, binding) {
16
+ this.type = type;
17
+ this.binding = binding;
18
+ }
19
+ /**
20
+ * Length of policy
21
+ */
22
+ getLength() {
23
+ throw new errors_js_1.ConfigurationError('length was not implemented');
24
+ }
25
+ /**
26
+ * Return the content of the policy
27
+ */
28
+ toBuffer() {
29
+ throw new errors_js_1.ConfigurationError('toBuffer() was not implemented');
30
+ }
31
+ /**
32
+ * Parses an ECDSA binding from a given buffer.
33
+ *
34
+ * @param {Uint8Array} buff - The buffer containing the ECDSA binding.
35
+ * @returns {{ bindingLength: number; binding: Uint8Array }} - An object containing the binding length and the binding subarray.
36
+ */
37
+ static parseECDSABinding(buff) {
38
+ const lengthOfR = buff[0];
39
+ const lengthOfS = buff[this.SIZE_OF_LENGTH_FIELD + lengthOfR];
40
+ const bindingLength = this.SIZE_OF_LENGTH_FIELD + lengthOfR + this.SIZE_OF_LENGTH_FIELD + lengthOfS;
41
+ const binding = buff.subarray(0, bindingLength);
42
+ return { bindingLength, binding };
43
+ }
44
+ /**
45
+ * Parses a binding from a given buffer based on the specified binding type.
46
+ *
47
+ * @param {Uint8Array} buff - The buffer containing the binding.
48
+ * @param {boolean} useEcdsaBinding - Flag indicating whether to use ECDSA binding.
49
+ * @param {number} offset - The starting offset in the buffer.
50
+ * @returns {{ binding: Uint8Array; newOffset: number }} - An object containing the binding and the new offset.
51
+ */
52
+ static parseBinding(buff, useEcdsaBinding, offset) {
53
+ if (useEcdsaBinding) {
54
+ const ecdsaBinding = this.parseECDSABinding(buff.subarray(offset));
55
+ return { binding: ecdsaBinding.binding, newOffset: offset + ecdsaBinding.bindingLength };
56
+ }
57
+ else {
58
+ const binding = buff.subarray(offset, offset + this.GMAC_BINDING_LEN);
59
+ return { binding, newOffset: offset + this.GMAC_BINDING_LEN };
60
+ }
61
+ }
62
+ }
63
+ AbstractPolicy.TYPE_BYTE_OFF = 0;
64
+ AbstractPolicy.TYPE_BYTE_LEN = 1;
65
+ AbstractPolicy.BODY_BYTE_OFF = 1;
66
+ AbstractPolicy.BODY_BYTE_MIN_LEN = 3;
67
+ AbstractPolicy.BODY_BYTE_MAX_LEN = 257;
68
+ AbstractPolicy.BINDING_BYTE_MIN_LEN = 8;
69
+ AbstractPolicy.BINDING_BYTE_MAX_LEN = 132;
70
+ AbstractPolicy.SIZE_OF_LENGTH_FIELD = 1; // 1 byte for each length field (R and S)
71
+ AbstractPolicy.GMAC_BINDING_LEN = 8;
72
+ exports.default = AbstractPolicy;
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RQb2xpY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbmFub3RkZi9tb2RlbHMvUG9saWN5L0Fic3RyYWN0UG9saWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsa0RBQXdEO0FBRXhELE1BQWUsY0FBYztJQWMzQixrREFBa0Q7SUFDbEQsTUFBTSxDQUFDLEtBQUs7SUFDViw2REFBNkQ7SUFDN0QsSUFBZ0I7SUFDaEIsNkRBQTZEO0lBQzdELGVBQXdCO0lBQ3hCLDZEQUE2RDtJQUM3RCxJQUFpQjtRQUVqQixNQUFNLElBQUksOEJBQWtCLENBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsWUFBWSxJQUFnQixFQUFFLE9BQW1CO1FBQy9DLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVM7UUFDUCxNQUFNLElBQUksOEJBQWtCLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRO1FBQ04sTUFBTSxJQUFJLDhCQUFrQixDQUFDLGdDQUFnQyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQWdCO1FBQ3ZDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFNBQVMsQ0FBQyxDQUFDO1FBRTlELE1BQU0sYUFBYSxHQUNqQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxTQUFTLENBQUM7UUFDaEYsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxZQUFZLENBQ2pCLElBQWdCLEVBQ2hCLGVBQXdCLEVBQ3hCLE1BQWM7UUFFZCxJQUFJLGVBQWUsRUFBRTtZQUNuQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ25FLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxHQUFHLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUMxRjthQUFNO1lBQ0wsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3RFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUMvRDtJQUNILENBQUM7O0FBakZlLDRCQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLDRCQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLDRCQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLGdDQUFpQixHQUFHLENBQUMsQ0FBQztBQUN0QixnQ0FBaUIsR0FBRyxHQUFHLENBQUM7QUFDeEIsbUNBQW9CLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLG1DQUFvQixHQUFHLEdBQUcsQ0FBQztBQUMzQixtQ0FBb0IsR0FBRyxDQUFDLENBQUMsQ0FBQyx5Q0FBeUM7QUFDbkUsK0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBNEV2QyxrQkFBZSxjQUFjLENBQUMifQ==
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const AbstractPolicy_js_1 = __importDefault(require("./AbstractPolicy.js"));
7
+ const errors_js_1 = require("../../../errors.js");
8
+ /**
9
+ * Embedded Policy
10
+ *
11
+ * These policy types allow for creation and binding of arbitrary policies.
12
+ *
13
+ * | Section | Minimum Length (B) | Maximum Length (B) |
14
+ * |------------------------------|--------------------|--------------------|
15
+ * | Content Length | 2 | 2 |
16
+ * | Plaintext/Ciphertext | 1 | 255 |
17
+ * | (Optional) Policy Key Access | 36 | 136 |
18
+ */
19
+ class EmbeddedPolicy extends AbstractPolicy_js_1.default {
20
+ static parse(buff, useEcdsaBinding, type) {
21
+ let offset = 0;
22
+ // TODO: May not work on Big Endian systems. See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getUint16
23
+ // Also http://calculist.org/blog/2012/04/24/the-little-endian-web/
24
+ const length = new DataView(buff.slice(offset, 2).buffer).getUint16(0);
25
+ offset += 2;
26
+ const content = buff.subarray(offset, offset + length);
27
+ offset += length;
28
+ const { binding, newOffset: bindingOffset } = this.parseBinding(buff, useEcdsaBinding, offset);
29
+ offset = bindingOffset;
30
+ return {
31
+ policy: new EmbeddedPolicy(type, binding, content),
32
+ offset,
33
+ };
34
+ }
35
+ constructor(type, binding, content) {
36
+ super(type, binding);
37
+ this.content = content;
38
+ }
39
+ /**
40
+ * Length of policy
41
+ *
42
+ * @returns { number } length
43
+ */
44
+ getLength() {
45
+ return (
46
+ // Type length
47
+ 1 +
48
+ // Policy length
49
+ 2 +
50
+ // Content length
51
+ this.content.length +
52
+ // Binding length
53
+ this.binding.length);
54
+ }
55
+ /**
56
+ * Return the content of the policy
57
+ */
58
+ toBuffer() {
59
+ const target = new Uint8Array(this.getLength());
60
+ if (this.content.length > EmbeddedPolicy.MAX_POLICY_SIZE) {
61
+ throw new errors_js_1.ConfigurationError("TDF Policy can't be more that 2^16");
62
+ }
63
+ target.set([this.type], 0);
64
+ // Write the policy length, assuming the host system is little endian
65
+ // TODO: There should be better way to convert to big endian
66
+ const lengthAsUint16 = new Uint16Array(1);
67
+ lengthAsUint16[0] = this.content.length;
68
+ const temp = new Uint8Array(lengthAsUint16.buffer);
69
+ const policyContentSizeAsBg = new Uint8Array(2);
70
+ policyContentSizeAsBg[0] = temp[1];
71
+ policyContentSizeAsBg[1] = temp[0];
72
+ target.set(policyContentSizeAsBg, 1);
73
+ // Write the policy content
74
+ target.set(this.content, policyContentSizeAsBg.length + 1);
75
+ // Write the binding.
76
+ target.set(this.binding, this.content.length + policyContentSizeAsBg.length + 1);
77
+ return target;
78
+ }
79
+ }
80
+ EmbeddedPolicy.MAX_POLICY_SIZE = 65535; // 2 bytes unsigned int.
81
+ exports.default = EmbeddedPolicy;
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW1iZWRkZWRQb2xpY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbmFub3RkZi9tb2RlbHMvUG9saWN5L0VtYmVkZGVkUG9saWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNEVBQWlEO0FBR2pELGtEQUF3RDtBQUV4RDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxjQUFlLFNBQVEsMkJBQWM7SUFJekMsTUFBTSxDQUFVLEtBQUssQ0FDbkIsSUFBZ0IsRUFDaEIsZUFBd0IsRUFDeEIsSUFBaUI7UUFFakIsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRWYsb0pBQW9KO1FBQ3BKLG1FQUFtRTtRQUNuRSxNQUFNLE1BQU0sR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkUsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUVaLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksTUFBTSxDQUFDO1FBRWpCLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMvRixNQUFNLEdBQUcsYUFBYSxDQUFDO1FBRXZCLE9BQU87WUFDTCxNQUFNLEVBQUUsSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUM7WUFDbEQsTUFBTTtTQUNQLENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWSxJQUFpQixFQUFFLE9BQW1CLEVBQUUsT0FBbUI7UUFDckUsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNNLFNBQVM7UUFDaEIsT0FBTztRQUNMLGNBQWM7UUFDZCxDQUFDO1lBQ0QsZ0JBQWdCO1lBQ2hCLENBQUM7WUFDRCxpQkFBaUI7WUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNO1lBQ25CLGlCQUFpQjtZQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDcEIsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNNLFFBQVE7UUFDZixNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUVoRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQyxlQUFlLEVBQUU7WUFDeEQsTUFBTSxJQUFJLDhCQUFrQixDQUFDLG9DQUFvQyxDQUFDLENBQUM7U0FDcEU7UUFFRCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTNCLHFFQUFxRTtRQUNyRSw0REFBNEQ7UUFDNUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBRXhDLE1BQU0sSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRCxNQUFNLHFCQUFxQixHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hELHFCQUFxQixDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVyQywyQkFBMkI7UUFDM0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLHFCQUFxQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUUzRCxxQkFBcUI7UUFDckIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLHFCQUFxQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVqRixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOztBQWhGTSw4QkFBZSxHQUFHLEtBQUssQ0FBQyxDQUFDLHdCQUF3QjtBQW1GMUQsa0JBQWUsY0FBYyxDQUFDIn0=
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const AbstractPolicy_js_1 = __importDefault(require("./AbstractPolicy.js"));
7
+ const EmbeddedPolicy_js_1 = __importDefault(require("./EmbeddedPolicy.js"));
8
+ const RemotePolicy_js_1 = __importDefault(require("./RemotePolicy.js"));
9
+ const PolicyTypeEnum_js_1 = __importDefault(require("../../enum/PolicyTypeEnum.js"));
10
+ const errors_js_1 = require("../../../errors.js");
11
+ function parse(buff, useEcdsaBinding, curve) {
12
+ const type = buff[AbstractPolicy_js_1.default.TYPE_BYTE_OFF];
13
+ let policy;
14
+ let offset;
15
+ // Check if remote policy
16
+ if (type === PolicyTypeEnum_js_1.default.Remote) {
17
+ ({ policy, offset } = RemotePolicy_js_1.default.parse(buff.subarray(AbstractPolicy_js_1.default.TYPE_BYTE_LEN), useEcdsaBinding));
18
+ }
19
+ else if ([
20
+ // Check if is an embedded policy
21
+ PolicyTypeEnum_js_1.default.EmbeddedEncrypted,
22
+ PolicyTypeEnum_js_1.default.EmbeddedEncryptedPKA,
23
+ PolicyTypeEnum_js_1.default.EmbeddedText,
24
+ ].includes(type)) {
25
+ ({ policy, offset } = EmbeddedPolicy_js_1.default.parse(buff.subarray(AbstractPolicy_js_1.default.TYPE_BYTE_LEN), useEcdsaBinding, type));
26
+ }
27
+ else {
28
+ throw new errors_js_1.UnsupportedFeatureError(`unsupported policy type: ${type}`);
29
+ }
30
+ return {
31
+ policy,
32
+ offset: offset + AbstractPolicy_js_1.default.TYPE_BYTE_LEN,
33
+ };
34
+ }
35
+ exports.default = {
36
+ parse,
37
+ };
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9saWN5RmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9uYW5vdGRmL21vZGVscy9Qb2xpY3kvUG9saWN5RmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDRFQUFpRDtBQUNqRCw0RUFBaUQ7QUFDakQsd0VBQTZDO0FBQzdDLHFGQUEwRDtBQUMxRCxrREFBNkQ7QUFHN0QsU0FBUyxLQUFLLENBQ1osSUFBZ0IsRUFDaEIsZUFBd0IsRUFDeEIsS0FBb0I7SUFFcEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLDJCQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDaEQsSUFBSSxNQUFzQixDQUFDO0lBQzNCLElBQUksTUFBYyxDQUFDO0lBRW5CLHlCQUF5QjtJQUN6QixJQUFJLElBQUksS0FBSywyQkFBYyxDQUFDLE1BQU0sRUFBRTtRQUNsQyxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLHlCQUFZLENBQUMsS0FBSyxDQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLDJCQUFjLENBQUMsYUFBYSxDQUFDLEVBQzNDLGVBQWUsQ0FDaEIsQ0FBQyxDQUFDO0tBQ0o7U0FBTSxJQUNMO1FBQ0Usa0NBQWtDO1FBQ2xDLDJCQUFjLENBQUMsaUJBQWlCO1FBQ2hDLDJCQUFjLENBQUMsb0JBQW9CO1FBQ25DLDJCQUFjLENBQUMsWUFBWTtLQUM1QixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFDaEI7UUFDQSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLDJCQUFjLENBQUMsS0FBSyxDQUN4QyxJQUFJLENBQUMsUUFBUSxDQUFDLDJCQUFjLENBQUMsYUFBYSxDQUFDLEVBQzNDLGVBQWUsRUFDZixJQUFJLENBQ0wsQ0FBQyxDQUFDO0tBQ0o7U0FBTTtRQUNMLE1BQU0sSUFBSSxtQ0FBdUIsQ0FBQyw0QkFBNEIsSUFBSSxFQUFFLENBQUMsQ0FBQztLQUN2RTtJQUVELE9BQU87UUFDTCxNQUFNO1FBQ04sTUFBTSxFQUFFLE1BQU0sR0FBRywyQkFBYyxDQUFDLGFBQWE7S0FDOUMsQ0FBQztBQUNKLENBQUM7QUFFRCxrQkFBZTtJQUNiLEtBQUs7Q0FDTixDQUFDIn0=
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const AbstractPolicy_js_1 = __importDefault(require("./AbstractPolicy.js"));
7
+ const ResourceLocator_js_1 = __importDefault(require("../ResourceLocator.js"));
8
+ const PolicyTypeEnum_js_1 = __importDefault(require("../../enum/PolicyTypeEnum.js"));
9
+ /**
10
+ * Set remote policy body
11
+ *
12
+ * If the policy type is set to use a Remote Policy, then the Resource Locator object described in Section 3.4.1 is
13
+ * used to describe the remote policy.
14
+ */
15
+ class RemotePolicy extends AbstractPolicy_js_1.default {
16
+ static parse(buff, useEcdsaBinding) {
17
+ let offset = 0;
18
+ const resource = ResourceLocator_js_1.default.parse(buff);
19
+ offset += resource.offset;
20
+ const { binding, newOffset: bindingOffset } = this.parseBinding(buff, useEcdsaBinding, offset);
21
+ offset = bindingOffset;
22
+ return {
23
+ policy: new RemotePolicy(PolicyTypeEnum_js_1.default.Remote, binding, resource),
24
+ offset,
25
+ };
26
+ }
27
+ constructor(type, binding, resource) {
28
+ super(type, binding);
29
+ this.type = PolicyTypeEnum_js_1.default.Remote;
30
+ this.type = PolicyTypeEnum_js_1.default.Remote;
31
+ this.remotePolicy = resource;
32
+ }
33
+ /**
34
+ * Length of policy
35
+ *
36
+ * @returns { number } length
37
+ */
38
+ getLength() {
39
+ return (
40
+ // Type length
41
+ 1 +
42
+ // Resource locator length
43
+ this.remotePolicy.length +
44
+ // Binding length
45
+ this.binding.length);
46
+ }
47
+ /**
48
+ * Return the content of the policy
49
+ */
50
+ toBuffer() {
51
+ const target = new Uint8Array(this.getLength());
52
+ target.set([PolicyTypeEnum_js_1.default.Remote], 0);
53
+ // Write the remote policy location
54
+ const resourceLocatorAsBuf = this.remotePolicy.toBuffer();
55
+ target.set(resourceLocatorAsBuf, 1);
56
+ // Write the binding.
57
+ target.set(this.binding, resourceLocatorAsBuf.length + 1);
58
+ return target;
59
+ }
60
+ }
61
+ exports.default = RemotePolicy;
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVtb3RlUG9saWN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL25hbm90ZGYvbW9kZWxzL1BvbGljeS9SZW1vdGVQb2xpY3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw0RUFBaUQ7QUFDakQsK0VBQW9EO0FBRXBELHFGQUEwRDtBQUUxRDs7Ozs7R0FLRztBQUNILE1BQU0sWUFBYSxTQUFRLDJCQUFjO0lBSXZDLE1BQU0sQ0FBVSxLQUFLLENBQ25CLElBQWdCLEVBQ2hCLGVBQXdCO1FBRXhCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNmLE1BQU0sUUFBUSxHQUFHLDRCQUFlLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLE1BQU0sSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDO1FBRTFCLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMvRixNQUFNLEdBQUcsYUFBYSxDQUFDO1FBRXZCLE9BQU87WUFDTCxNQUFNLEVBQUUsSUFBSSxZQUFZLENBQUMsMkJBQWMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQztZQUNsRSxNQUFNO1NBQ1AsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZLElBQW9CLEVBQUUsT0FBbUIsRUFBRSxRQUF5QjtRQUM5RSxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBckJMLFNBQUksR0FBbUIsMkJBQWMsQ0FBQyxNQUFNLENBQUM7UUFzQjdELElBQUksQ0FBQyxJQUFJLEdBQUcsMkJBQWMsQ0FBQyxNQUFNLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDTSxTQUFTO1FBQ2hCLE9BQU87UUFDTCxjQUFjO1FBQ2QsQ0FBQztZQUNELDBCQUEwQjtZQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU07WUFDeEIsaUJBQWlCO1lBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUNwQixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ00sUUFBUTtRQUNmLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRWhELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQywyQkFBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXZDLG1DQUFtQztRQUNuQyxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVwQyxxQkFBcUI7UUFDckIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUUxRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0NBQ0Y7QUFFRCxrQkFBZSxZQUFZLENBQUMifQ==
@@ -0,0 +1,211 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const errors_js_1 = require("../../errors.js");
7
+ const ProtocolEnum_js_1 = __importDefault(require("../enum/ProtocolEnum.js"));
8
+ const ResourceLocatorIdentifierEnum_js_1 = __importDefault(require("../enum/ResourceLocatorIdentifierEnum.js"));
9
+ /**
10
+ *
11
+ * The Resource Locator is a way for the nanotdf to represent references to external resources in as succinct a format
12
+ * as possible.
13
+ *
14
+ * | Section | Minimum Length (B) | Maximum Length (B) |
15
+ * |---------------|--------------------|--------------------|
16
+ * | Protocol Enum | 1 | 1 |
17
+ * | Body Length | 1 | 1 |
18
+ * | Body | 1 | 255 |
19
+ * | Identifier | 0 | n |
20
+ *
21
+ * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3312-kas
22
+ * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#341-resource-locator
23
+ */
24
+ class ResourceLocator {
25
+ constructor(protocol, lengthOfBody, body, offset, id, idType = ResourceLocatorIdentifierEnum_js_1.default.None) {
26
+ this.protocol = protocol;
27
+ this.lengthOfBody = lengthOfBody;
28
+ this.body = body;
29
+ this.offset = offset;
30
+ this.id = id;
31
+ this.idType = idType;
32
+ }
33
+ /**
34
+ * Construct a new URL or URL + identifier pair, for use with NanoTDF envelopes.
35
+ * @param url The URL to encrypt; `http` and `https` schemes are supported
36
+ * @param identifier An optional identifier.
37
+ * For KAS URLs, this is usually a public key identifier (kid). Limit 32 characters
38
+ * @returns a value representing the URL and identifier, if present.
39
+ * This method throws an Error if the URL is invalid or of the wrong schema,
40
+ * or if the identifier is an unsupported value.
41
+ */
42
+ static fromURL(url, identifier) {
43
+ const [protocolStr, body] = url.split('://');
44
+ let protocol;
45
+ // Validate and set protocol identifier byte
46
+ switch (protocolStr.toLowerCase()) {
47
+ case 'http':
48
+ protocol = ProtocolEnum_js_1.default.Http;
49
+ break;
50
+ case 'https':
51
+ protocol = ProtocolEnum_js_1.default.Https;
52
+ break;
53
+ default:
54
+ throw new errors_js_1.ConfigurationError(`resource locator protocol [${protocolStr}] unsupported`);
55
+ }
56
+ // Set identifier padded length and protocol identifier byte
57
+ const identifierType = (() => {
58
+ if (!identifier) {
59
+ return ResourceLocatorIdentifierEnum_js_1.default.None;
60
+ }
61
+ const identifierLength = new TextEncoder().encode(identifier).length;
62
+ if (identifierLength <= 2) {
63
+ return ResourceLocatorIdentifierEnum_js_1.default.TwoBytes;
64
+ }
65
+ else if (identifierLength <= 8) {
66
+ return ResourceLocatorIdentifierEnum_js_1.default.EightBytes;
67
+ }
68
+ else if (identifierLength <= 32) {
69
+ return ResourceLocatorIdentifierEnum_js_1.default.ThirtyTwoBytes;
70
+ }
71
+ throw new errors_js_1.ConfigurationError(`unsupported identifier length: ${identifier.length}`);
72
+ })();
73
+ // Create buffer to hold protocol, body length, body, and identifier
74
+ const lengthOfBody = new TextEncoder().encode(body).length;
75
+ if (lengthOfBody == 0) {
76
+ throw new errors_js_1.ConfigurationError('url body empty');
77
+ }
78
+ const identifierLength = identifierType.valueOf();
79
+ const offset = ResourceLocator.BODY_OFFSET + lengthOfBody + identifierLength;
80
+ return new ResourceLocator(protocol, lengthOfBody, body, offset, identifier, identifierType);
81
+ }
82
+ static parse(buff) {
83
+ // Protocol
84
+ const protocolAndIdentifierType = buff[ResourceLocator.PROTOCOL_OFFSET];
85
+ // Length of body
86
+ const lengthOfBody = buff[ResourceLocator.LENGTH_OFFSET];
87
+ if (lengthOfBody == 0) {
88
+ throw new errors_js_1.InvalidFileError('url body empty');
89
+ }
90
+ // Body as utf8 string
91
+ const decoder = new TextDecoder();
92
+ let offset = ResourceLocator.BODY_OFFSET + lengthOfBody;
93
+ if (offset > buff.length) {
94
+ throw new errors_js_1.InvalidFileError('url parser: out of bounds error');
95
+ }
96
+ const body = decoder.decode(buff.subarray(ResourceLocator.BODY_OFFSET, offset));
97
+ const protocol = protocolAndIdentifierType & 0xf;
98
+ switch (protocol) {
99
+ case ProtocolEnum_js_1.default.Http:
100
+ case ProtocolEnum_js_1.default.Https:
101
+ break;
102
+ default:
103
+ throw new errors_js_1.InvalidFileError(`url parser: unsupported protocol type [${protocol}]`);
104
+ }
105
+ // identifier
106
+ const identifierTypeNibble = protocolAndIdentifierType & 0xf0;
107
+ let identifierType = ResourceLocatorIdentifierEnum_js_1.default.None;
108
+ if (identifierTypeNibble === ResourceLocator.IDENTIFIER_2_BYTE) {
109
+ identifierType = ResourceLocatorIdentifierEnum_js_1.default.TwoBytes;
110
+ }
111
+ else if (identifierTypeNibble === ResourceLocator.IDENTIFIER_8_BYTE) {
112
+ identifierType = ResourceLocatorIdentifierEnum_js_1.default.EightBytes;
113
+ }
114
+ else if (identifierTypeNibble === ResourceLocator.IDENTIFIER_32_BYTE) {
115
+ identifierType = ResourceLocatorIdentifierEnum_js_1.default.ThirtyTwoBytes;
116
+ }
117
+ else if (identifierTypeNibble !== ResourceLocator.IDENTIFIER_0_BYTE) {
118
+ throw new errors_js_1.InvalidFileError(`url parser: unsupported fragment type [${identifierTypeNibble}]`);
119
+ }
120
+ let identifier = undefined;
121
+ switch (identifierType) {
122
+ case ResourceLocatorIdentifierEnum_js_1.default.None:
123
+ // noop
124
+ break;
125
+ case ResourceLocatorIdentifierEnum_js_1.default.TwoBytes:
126
+ case ResourceLocatorIdentifierEnum_js_1.default.EightBytes:
127
+ case ResourceLocatorIdentifierEnum_js_1.default.ThirtyTwoBytes: {
128
+ const kidStart = offset;
129
+ offset = kidStart + identifierType.valueOf();
130
+ if (offset > buff.length) {
131
+ throw new errors_js_1.InvalidFileError('url parser: out of bounds error');
132
+ }
133
+ const kidSubarray = buff.subarray(kidStart, offset);
134
+ // Remove padding (assuming the padding is null bytes, 0x00)
135
+ const zeroIndex = kidSubarray.indexOf(0);
136
+ if (zeroIndex >= 0) {
137
+ const trimmedSubarray = kidSubarray.subarray(0, zeroIndex);
138
+ identifier = decoder.decode(trimmedSubarray);
139
+ }
140
+ else {
141
+ identifier = decoder.decode(kidSubarray);
142
+ }
143
+ break;
144
+ }
145
+ }
146
+ return new ResourceLocator(protocol, lengthOfBody, body, offset, identifier, identifierType);
147
+ }
148
+ /**
149
+ * Length
150
+ *
151
+ * @returns { number } Length of resource locator
152
+ */
153
+ get length() {
154
+ return this.offset;
155
+ }
156
+ get url() {
157
+ switch (this.protocol) {
158
+ case ProtocolEnum_js_1.default.Http:
159
+ return 'http://' + this.body;
160
+ case ProtocolEnum_js_1.default.Https:
161
+ return 'https://' + this.body;
162
+ default:
163
+ throw new errors_js_1.ConfigurationError(`resource locator protocol unsupported [${this.protocol}]`);
164
+ }
165
+ }
166
+ /**
167
+ * Return the contents of the Resource Locator in buffer
168
+ */
169
+ toBuffer() {
170
+ const target = new Uint8Array(ResourceLocator.BODY_OFFSET + this.body.length + this.idType);
171
+ let idTypeNibble = 0;
172
+ switch (this.idType) {
173
+ case ResourceLocatorIdentifierEnum_js_1.default.TwoBytes:
174
+ idTypeNibble = ResourceLocator.IDENTIFIER_2_BYTE;
175
+ break;
176
+ case ResourceLocatorIdentifierEnum_js_1.default.EightBytes:
177
+ idTypeNibble = ResourceLocator.IDENTIFIER_8_BYTE;
178
+ break;
179
+ case ResourceLocatorIdentifierEnum_js_1.default.ThirtyTwoBytes:
180
+ idTypeNibble = ResourceLocator.IDENTIFIER_32_BYTE;
181
+ break;
182
+ }
183
+ target.set([this.protocol | idTypeNibble], ResourceLocator.PROTOCOL_OFFSET);
184
+ target.set([this.lengthOfBody], ResourceLocator.LENGTH_OFFSET);
185
+ target.set(new TextEncoder().encode(this.body), ResourceLocator.BODY_OFFSET);
186
+ if (this.id) {
187
+ target.set(new TextEncoder().encode(this.id), ResourceLocator.BODY_OFFSET + this.body.length);
188
+ }
189
+ return target;
190
+ }
191
+ /**
192
+ * Get Identifier
193
+ *
194
+ * Returns the identifier of the ResourceLocator or an empty string if no identifier is present.
195
+ * @returns { string } Identifier of the resource locator.
196
+ */
197
+ get identifier() {
198
+ return this.id ?? '';
199
+ }
200
+ }
201
+ ResourceLocator.PROTOCOL_OFFSET = 0;
202
+ ResourceLocator.PROTOCOL_LENGTH = 1;
203
+ ResourceLocator.LENGTH_OFFSET = 1;
204
+ ResourceLocator.LENGTH_LENGTH = 1;
205
+ ResourceLocator.BODY_OFFSET = 2;
206
+ ResourceLocator.IDENTIFIER_0_BYTE = 0 << 4; // 0
207
+ ResourceLocator.IDENTIFIER_2_BYTE = 1 << 4; // 16
208
+ ResourceLocator.IDENTIFIER_8_BYTE = 2 << 4; // 32
209
+ ResourceLocator.IDENTIFIER_32_BYTE = 3 << 4; // 48
210
+ exports.default = ResourceLocator;
211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzb3VyY2VMb2NhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL25hbm90ZGYvbW9kZWxzL1Jlc291cmNlTG9jYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLCtDQUF1RTtBQUN2RSw4RUFBbUQ7QUFDbkQsZ0hBQXFGO0FBRXJGOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBcUIsZUFBZTtJQVdsQyxZQUNXLFFBQXNCLEVBQ3RCLFlBQW9CLEVBQ3BCLElBQVksRUFDWixNQUFjLEVBQ2QsRUFBVyxFQUNYLFNBQXdDLDBDQUE2QixDQUFDLElBQUk7UUFMMUUsYUFBUSxHQUFSLFFBQVEsQ0FBYztRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUNwQixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ1osV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLE9BQUUsR0FBRixFQUFFLENBQVM7UUFDWCxXQUFNLEdBQU4sTUFBTSxDQUFvRTtJQUNsRixDQUFDO0lBRUo7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQVcsRUFBRSxVQUFtQjtRQUM3QyxNQUFNLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0MsSUFBSSxRQUFzQixDQUFDO1FBRTNCLDRDQUE0QztRQUM1QyxRQUFRLFdBQVcsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUNqQyxLQUFLLE1BQU07Z0JBQ1QsUUFBUSxHQUFHLHlCQUFZLENBQUMsSUFBSSxDQUFDO2dCQUM3QixNQUFNO1lBQ1IsS0FBSyxPQUFPO2dCQUNWLFFBQVEsR0FBRyx5QkFBWSxDQUFDLEtBQUssQ0FBQztnQkFDOUIsTUFBTTtZQUNSO2dCQUNFLE1BQU0sSUFBSSw4QkFBa0IsQ0FBQyw4QkFBOEIsV0FBVyxlQUFlLENBQUMsQ0FBQztTQUMxRjtRQUVELDREQUE0RDtRQUM1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