@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
package/src/errors.ts ADDED
@@ -0,0 +1,113 @@
1
+ function scrubCause(error?: Error, d?: number): { cause?: Error } {
2
+ if (!error || (d && d > 4)) {
3
+ return {};
4
+ }
5
+ if (!error.name) {
6
+ return {};
7
+ }
8
+ const cause = new Error(error.name, scrubCause(error.cause as Error, (d || 0) + 1));
9
+ if (error.message) {
10
+ cause.message = error.message;
11
+ }
12
+ if (error.stack) {
13
+ cause.stack = error.stack;
14
+ }
15
+ return { cause };
16
+ }
17
+
18
+ /**
19
+ * Root class for all errors thrown by this library.
20
+ * This should not be thrown directly, but rather one of its subclasses.
21
+ */
22
+ export class TdfError extends Error {
23
+ override name = 'TdfError';
24
+
25
+ constructor(message?: string, cause?: Error) {
26
+ super(message, scrubCause(cause));
27
+ // Error is funny (only on ES5? So guess just IE11 we have to worry about?)
28
+ // https://github.com/Microsoft/TypeScript-wiki/blob/main/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work
29
+ // https://stackoverflow.com/questions/41102060/typescript-extending-error-class#comment70895020_41102306
30
+ Object.setPrototypeOf(this, new.target.prototype);
31
+ }
32
+ }
33
+
34
+ /**
35
+ * Errors that indicate the client or method does not have valid options.
36
+ */
37
+ export class ConfigurationError extends TdfError {
38
+ override name = 'ConfigurationError';
39
+ }
40
+
41
+ /**
42
+ * The assigned data attribute is not in the correct form.
43
+ */
44
+ export class AttributeValidationError extends ConfigurationError {
45
+ override name = 'AttributeValidationError';
46
+ attribute: unknown;
47
+ constructor(message: string, attribute: unknown, cause?: Error) {
48
+ super(message, cause);
49
+ this.attribute = attribute;
50
+ }
51
+ }
52
+
53
+ /**
54
+ * Errors that indicate the TDF object is corrupt, invalid, or fails validation or decrypt.
55
+ */
56
+ export class InvalidFileError extends TdfError {}
57
+
58
+ /**
59
+ * Indicates a decrypt failure, either due to an incorrect key, corrupt ciphertext, or inappropriate key parameters.
60
+ */
61
+ export class DecryptError extends InvalidFileError {
62
+ override name = 'DecryptError';
63
+ }
64
+
65
+ export class IntegrityError extends InvalidFileError {
66
+ override name = 'IntegrityError';
67
+ }
68
+
69
+ /**
70
+ * Thrown when a KAS URL found in one or more required key access objects are not in the list of known and allowed KASes in the client.
71
+ * This may indicate a malicious file - e.g. an attempt to DDoS a server by listing it as the KAS for many files, or to siphon credentials using a lookalike URL.
72
+ */
73
+ export class UnsafeUrlError extends InvalidFileError {
74
+ override name = 'UnsafeUrlError';
75
+ readonly url: string[];
76
+
77
+ constructor(message: string, ...url: string[]) {
78
+ super(message);
79
+ Object.setPrototypeOf(this, new.target.prototype);
80
+ this.url = url;
81
+ }
82
+ }
83
+
84
+ /**
85
+ * A network error (no response) from rewrap or other endpoint, Possibly fixed by retrying or adjusting your network settings; could indicate network failure.
86
+ */
87
+ export class NetworkError extends TdfError {
88
+ override name = 'NetworkError';
89
+ }
90
+
91
+ /**
92
+ * The service reports an unexpected error on its behalf, or a subcomponent (5xx).
93
+ */
94
+ export class ServiceError extends TdfError {
95
+ override name = 'ServiceError';
96
+ }
97
+
98
+ /** Authentication failure (401) */
99
+ export class UnauthenticatedError extends TdfError {
100
+ override name = 'UnauthenticatedError';
101
+ }
102
+
103
+ /** Authorization failure (403) */
104
+ export class PermissionDeniedError extends TdfError {
105
+ override name = 'PermissionDeniedError';
106
+ }
107
+
108
+ /**
109
+ * Version of file is unsupported, or file uses a feature that is not supported by this version of the library.
110
+ */
111
+ export class UnsupportedFeatureError extends TdfError {
112
+ override name = 'UnsupportedFeatureError';
113
+ }
package/src/index.ts ADDED
@@ -0,0 +1,441 @@
1
+ import {
2
+ Client,
3
+ NanoTDF,
4
+ Header,
5
+ encrypt,
6
+ decrypt,
7
+ encryptDataset,
8
+ getHkdfSalt,
9
+ DefaultParams,
10
+ } from './nanotdf/index.js';
11
+ import { keyAgreement } from './nanotdf-crypto/index.js';
12
+ import { TypedArray, createAttribute, Policy } from './tdf/index.js';
13
+ import { fetchECKasPubKey } from './access.js';
14
+ import { ClientConfig } from './nanotdf/Client.js';
15
+ import { ConfigurationError } from './errors.js';
16
+ export { attributeFQNsAsValues } from './policy/api.js';
17
+
18
+ // Define the EncryptOptions type
19
+ export type EncryptOptions = {
20
+ ecdsaBinding: boolean;
21
+ };
22
+
23
+ // Define default options
24
+ const defaultOptions: EncryptOptions = {
25
+ ecdsaBinding: false,
26
+ };
27
+
28
+ /**
29
+ * NanoTDF SDK Client
30
+ *
31
+ * @example
32
+ * ```
33
+ * import { clientSecretAuthProvider, NanoTDFClient } from '@opentdf/sdk';
34
+ *
35
+ * const OIDC_ENDPOINT = 'http://localhost:65432/auth/realms/opentdf-demo';
36
+ * const KAS_URL = 'http://localhost:65432/api/kas/';
37
+ *
38
+ * const ciphertext = '...';
39
+ * const client = new NanoTDFClient({
40
+ * authProvider: await clientSecretAuthProvider({
41
+ * clientId: 'tdf-client',
42
+ * clientSecret: '123-456',
43
+ * oidcOrigin: OIDC_ENDPOINT,
44
+ * }),
45
+ * kasEndpoint: KAS_URL
46
+ * }
47
+ * );
48
+ * client.decrypt(ciphertext)
49
+ * .then(plaintext => {
50
+ * console.log('Plaintext', plaintext);
51
+ * })
52
+ * .catch(err => {
53
+ * console.error('Some error occurred', err);
54
+ * })
55
+ */
56
+ export class NanoTDFClient extends Client {
57
+ /**
58
+ * Decrypt ciphertext
59
+ *
60
+ * Pass a base64 string, TypedArray, or ArrayBuffer ciphertext and get a promise which resolves plaintext
61
+ *
62
+ * @param ciphertext Ciphertext to decrypt
63
+ */
64
+ async decrypt(ciphertext: string | TypedArray | ArrayBuffer): Promise<ArrayBuffer> {
65
+ // Parse ciphertext
66
+ const nanotdf = NanoTDF.from(ciphertext);
67
+
68
+ await this.fetchOIDCToken();
69
+
70
+ // TODO: The version number should be fetched from the API
71
+ const version = '0.0.1';
72
+ const kasUrl = nanotdf.header.getKasRewrapUrl();
73
+
74
+ // Rewrap key on every request
75
+ const ukey = await this.rewrapKey(
76
+ nanotdf.header.toBuffer(),
77
+ kasUrl,
78
+ nanotdf.header.magicNumberVersion,
79
+ version
80
+ );
81
+
82
+ if (!ukey) {
83
+ throw new Error('internal: key rewrap failure');
84
+ }
85
+ // Return decrypt promise
86
+ return decrypt(ukey, nanotdf);
87
+ }
88
+
89
+ /**
90
+ * Decrypt ciphertext of the legacy TDF, with the older, smaller i.v. calculation.
91
+ *
92
+ * Pass a base64 string, TypedArray, or ArrayBuffer ciphertext and get a promise which resolves plaintext
93
+ *
94
+ * @param ciphertext Ciphertext to decrypt
95
+ */
96
+ async decryptLegacyTDF(ciphertext: string | TypedArray | ArrayBuffer): Promise<ArrayBuffer> {
97
+ // Parse ciphertext
98
+ const nanotdf = NanoTDF.from(ciphertext, undefined, true);
99
+
100
+ await this.fetchOIDCToken();
101
+
102
+ const legacyVersion = '0.0.0';
103
+ // Rewrap key on every request
104
+ const key = await this.rewrapKey(
105
+ nanotdf.header.toBuffer(),
106
+ nanotdf.header.getKasRewrapUrl(),
107
+ nanotdf.header.magicNumberVersion,
108
+ legacyVersion
109
+ );
110
+
111
+ if (!key) {
112
+ throw new Error('internal: failed unwrap');
113
+ }
114
+ // Return decrypt promise
115
+ return decrypt(key, nanotdf);
116
+ }
117
+
118
+ /**
119
+ * Encrypts the given data using the NanoTDF encryption scheme.
120
+ *
121
+ * @param {string | TypedArray | ArrayBuffer} data - The data to be encrypted.
122
+ * @param {EncryptOptions} [options=defaultOptions] - The encryption options (currently unused).
123
+ * @returns {Promise<ArrayBuffer>} A promise that resolves to the encrypted data as an ArrayBuffer.
124
+ * @throws {Error} If the initialization vector is not a number.
125
+ */
126
+ async encrypt(
127
+ data: string | TypedArray | ArrayBuffer,
128
+ options?: EncryptOptions
129
+ ): Promise<ArrayBuffer> {
130
+ // For encrypt always generate the client ephemeralKeyPair
131
+ const ephemeralKeyPair = await this.ephemeralKeyPair;
132
+ const initializationVector = this.iv;
133
+
134
+ if (typeof initializationVector !== 'number') {
135
+ throw new ConfigurationError(
136
+ 'NanoTDF clients are single use. Please generate a new client and keypair.'
137
+ );
138
+ }
139
+ delete this.iv;
140
+
141
+ if (!this.kasPubKey) {
142
+ this.kasPubKey = await fetchECKasPubKey(this.kasUrl);
143
+ }
144
+
145
+ // Create a policy for the tdf
146
+ const policy = new Policy();
147
+
148
+ // Add data attributes.
149
+ for (const dataAttribute of this.dataAttributes) {
150
+ const attribute = await createAttribute(dataAttribute, this.kasPubKey, this.kasUrl);
151
+ policy.addAttribute(attribute);
152
+ }
153
+
154
+ if (this.dissems.length == 0 && this.dataAttributes.length == 0) {
155
+ console.warn(
156
+ 'This policy has an empty attributes list and an empty dissemination list. This will allow any entity with a valid Entity Object to access this TDF.'
157
+ );
158
+ }
159
+
160
+ // Encrypt the policy.
161
+ const policyObjectAsStr = policy.toJSON();
162
+
163
+ // IV is always '1', since the new keypair is generated on encrypt
164
+ // using the same key is fine.
165
+ const lengthAsUint32 = new Uint32Array(1);
166
+ lengthAsUint32[0] = initializationVector;
167
+
168
+ const lengthAsUint24 = new Uint8Array(lengthAsUint32.buffer);
169
+
170
+ // NOTE: We are only interested in only first 3 bytes.
171
+ const payloadIV = new Uint8Array(12).fill(0);
172
+ payloadIV[9] = lengthAsUint24[2];
173
+ payloadIV[10] = lengthAsUint24[1];
174
+ payloadIV[11] = lengthAsUint24[0];
175
+
176
+ const mergedOptions: EncryptOptions = { ...defaultOptions, ...options };
177
+ return encrypt(
178
+ policyObjectAsStr,
179
+ this.kasPubKey,
180
+ ephemeralKeyPair,
181
+ payloadIV,
182
+ data,
183
+ mergedOptions.ecdsaBinding
184
+ );
185
+ }
186
+ }
187
+
188
+ export type DatasetConfig = ClientConfig & {
189
+ maxKeyIterations?: number;
190
+ };
191
+
192
+ /**
193
+ * NanoTDF Dataset SDK Client
194
+ *
195
+ *
196
+ * @example
197
+ * ```
198
+ * import { clientSecretAuthProvider, NanoTDFDatasetClient } from '@opentdf/sdk';
199
+ *
200
+ * const OIDC_ENDPOINT = 'http://localhost:65432/auth/realms/tdf';
201
+ * const KAS_URL = 'http://localhost:65432/api/kas/';
202
+ *
203
+ * const ciphertext = '...';
204
+ * const client = new NanoTDFDatasetClient({
205
+ * authProvider: await clientSecretAuthProvider({
206
+ * clientId: 'tdf-client',
207
+ * clientSecret: '123-456',
208
+ * exchange: 'client',
209
+ * oidcOrigin: OIDC_ENDPOINT,
210
+ * }),
211
+ * kasEndpoint: KAS_URL,
212
+ * });
213
+ * const plaintext = client.decrypt(ciphertext);
214
+ * console.log('Plaintext', plaintext);
215
+ * ```
216
+ */
217
+ export class NanoTDFDatasetClient extends Client {
218
+ // Total unique IVs(2^24 -1) used for encrypting the nano tdf payloads
219
+ // IV starts from 1 since the 0 IV is reserved for policy encryption
220
+ static readonly NTDF_MAX_KEY_ITERATIONS = 8388606;
221
+
222
+ private maxKeyIteration: number;
223
+ private keyIterationCount: number;
224
+ private cachedEphemeralKey?: Uint8Array;
225
+ private unwrappedKey?: CryptoKey;
226
+ private symmetricKey?: CryptoKey;
227
+ private cachedHeader?: Header;
228
+ private ecdsaBinding: boolean;
229
+
230
+ /**
231
+ * Create new NanoTDF Dataset Client
232
+ *
233
+ * The Ephemeral Key Pair can either be provided or will be generate when fetching the entity object. Once set it
234
+ * cannot be changed. If a new ephemeral key is desired it a new client should be initialized.
235
+ * There is no performance impact for creating a new client IFF the ephemeral key pair is provided.
236
+ *
237
+ * @param clientConfig OIDC client credentials
238
+ * @param kasUrl Key access service URL
239
+ * @param ephemeralKeyPair (optional) ephemeral key pair to use
240
+ * @param maxKeyIterations Max iteration to performe without a key rotation
241
+ */
242
+ constructor(opts: DatasetConfig) {
243
+ if (
244
+ opts.maxKeyIterations &&
245
+ opts.maxKeyIterations > NanoTDFDatasetClient.NTDF_MAX_KEY_ITERATIONS
246
+ ) {
247
+ throw new ConfigurationError(
248
+ `key iteration exceeds max iterations(${NanoTDFDatasetClient.NTDF_MAX_KEY_ITERATIONS})`
249
+ );
250
+ }
251
+ super(opts);
252
+
253
+ this.maxKeyIteration = opts.maxKeyIterations || NanoTDFDatasetClient.NTDF_MAX_KEY_ITERATIONS;
254
+ this.keyIterationCount = 0;
255
+ }
256
+
257
+ /**
258
+ * Encrypt data
259
+ *
260
+ * Pass a string, TypedArray, or ArrayBuffer data and get a promise which resolves ciphertext
261
+ *
262
+ * @param data to decrypt
263
+ */
264
+ async encrypt(
265
+ data: string | TypedArray | ArrayBuffer,
266
+ options?: EncryptOptions
267
+ ): Promise<ArrayBuffer> {
268
+ // Intial encrypt
269
+ if (this.keyIterationCount == 0) {
270
+ const mergedOptions: EncryptOptions = { ...defaultOptions, ...options };
271
+ this.ecdsaBinding = mergedOptions.ecdsaBinding;
272
+ // For encrypt always generate the client ephemeralKeyPair
273
+ const ephemeralKeyPair = await this.ephemeralKeyPair;
274
+
275
+ if (!this.kasPubKey) {
276
+ this.kasPubKey = await fetchECKasPubKey(this.kasUrl);
277
+ }
278
+
279
+ // Create a policy for the tdf
280
+ const policy = new Policy();
281
+
282
+ // Add data attributes.
283
+ for (const dataAttribute of this.dataAttributes) {
284
+ const attribute = await createAttribute(dataAttribute, this.kasPubKey, this.kasUrl);
285
+ policy.addAttribute(attribute);
286
+ }
287
+
288
+ if (this.dissems.length == 0 || this.dataAttributes.length == 0) {
289
+ console.warn(
290
+ 'This policy has an empty attributes list and an empty dissemination list. This will allow any entity with a valid Entity Object to access this TDF.'
291
+ );
292
+ }
293
+
294
+ // Encrypt the policy.
295
+ const policyObjectAsStr = policy.toJSON();
296
+
297
+ const ivVector = this.generateIV();
298
+
299
+ // Generate a symmetric key.
300
+ this.symmetricKey = await keyAgreement(
301
+ ephemeralKeyPair.privateKey,
302
+ await this.kasPubKey.key,
303
+ await getHkdfSalt(DefaultParams.magicNumberVersion)
304
+ );
305
+
306
+ const nanoTDFBuffer = await encrypt(
307
+ policyObjectAsStr,
308
+ this.kasPubKey,
309
+ ephemeralKeyPair,
310
+ ivVector,
311
+ data,
312
+ this.ecdsaBinding
313
+ );
314
+
315
+ // Cache the header and increment the key iteration
316
+ if (!this.cachedHeader) {
317
+ const nanoTDF = NanoTDF.from(nanoTDFBuffer);
318
+ this.cachedHeader = nanoTDF.header;
319
+ }
320
+
321
+ this.keyIterationCount += 1;
322
+
323
+ return nanoTDFBuffer;
324
+ }
325
+
326
+ this.keyIterationCount += 1;
327
+
328
+ if (!this.cachedHeader) {
329
+ throw new ConfigurationError('invalid dataset client: empty nanoTDF header');
330
+ }
331
+ if (!this.symmetricKey) {
332
+ throw new ConfigurationError('invalid dataset client: empty dek');
333
+ }
334
+
335
+ this.keyIterationCount += 1;
336
+ if (this.keyIterationCount == this.maxKeyIteration) {
337
+ // reset the key iteration
338
+ this.keyIterationCount = 0;
339
+ }
340
+
341
+ const ivVector = this.generateIV();
342
+
343
+ return encryptDataset(this.symmetricKey, this.cachedHeader, ivVector, data);
344
+ }
345
+
346
+ /**
347
+ * Decrypt ciphertext
348
+ *
349
+ * Pass a base64 string, TypedArray, or ArrayBuffer ciphertext and get a promise which resolves plaintext
350
+ *
351
+ * @param ciphertext Ciphertext to decrypt
352
+ */
353
+ async decrypt(ciphertext: string | TypedArray | ArrayBuffer): Promise<ArrayBuffer> {
354
+ // Parse ciphertext
355
+ const nanotdf = NanoTDF.from(ciphertext);
356
+
357
+ if (!this.cachedEphemeralKey) {
358
+ // First decrypt
359
+ return this.rewrapAndDecrypt(nanotdf);
360
+ }
361
+
362
+ // Other encrypts
363
+ if (this.cachedEphemeralKey.toString() == nanotdf.header.ephemeralPublicKey.toString()) {
364
+ const ukey = this.unwrappedKey;
365
+ if (!ukey) {
366
+ // These should have thrown already.
367
+ throw new Error('internal: key rewrap failure');
368
+ }
369
+ // Return decrypt promise
370
+ return decrypt(ukey, nanotdf);
371
+ } else {
372
+ return this.rewrapAndDecrypt(nanotdf);
373
+ }
374
+ }
375
+
376
+ async rewrapAndDecrypt(nanotdf: NanoTDF) {
377
+ // TODO: The version number should be fetched from the API
378
+ await this.fetchOIDCToken();
379
+
380
+ const version = '0.0.1';
381
+ // Rewrap key on every request
382
+ const ukey = await this.rewrapKey(
383
+ nanotdf.header.toBuffer(),
384
+ nanotdf.header.getKasRewrapUrl(),
385
+ nanotdf.header.magicNumberVersion,
386
+ version
387
+ );
388
+ if (!ukey) {
389
+ // These should have thrown already.
390
+ throw new Error('internal: key rewrap failure');
391
+ }
392
+
393
+ this.cachedEphemeralKey = nanotdf.header.ephemeralPublicKey;
394
+ this.unwrappedKey = ukey;
395
+
396
+ // Return decrypt promise
397
+ return decrypt(ukey, nanotdf);
398
+ }
399
+
400
+ generateIV(): Uint8Array {
401
+ const iv = this.iv;
402
+ if (iv === undefined) {
403
+ // iv has passed the maximum iteration count for this dek
404
+ throw new ConfigurationError('dataset full');
405
+ }
406
+ // assert iv ∈ ℤ ∩ (0, 2^24)
407
+ if (!Number.isInteger(iv) || iv <= 0 || 0xff_ffff < iv) {
408
+ // Something has fiddled with the iv outside of the expected behavior
409
+ // could indicate a race condition, e.g. if two workers or handlers are
410
+ // processing the file at once, for example.
411
+ throw new Error('internal: invalid state');
412
+ }
413
+
414
+ const lengthAsUint32 = new Uint32Array(1);
415
+ lengthAsUint32[0] = iv;
416
+
417
+ const lengthAsUint24 = new Uint8Array(lengthAsUint32.buffer);
418
+
419
+ // NOTE: We are only interested in only first 3 bytes.
420
+ const ivVector = new Uint8Array(Client.IV_SIZE).fill(0);
421
+ ivVector[9] = lengthAsUint24[2];
422
+ ivVector[10] = lengthAsUint24[1];
423
+ ivVector[11] = lengthAsUint24[0];
424
+
425
+ // Increment the IV
426
+ if (iv == 0xff_ffff) {
427
+ delete this.iv;
428
+ } else {
429
+ this.iv = iv + 1;
430
+ }
431
+
432
+ return ivVector;
433
+ }
434
+ }
435
+
436
+ /**
437
+ * Authorization for connecting authZ tokens to
438
+ * remote requests.
439
+ */
440
+ export * as AuthProviders from './auth/providers.js';
441
+ export { version, clientType } from './version.js';