@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,349 @@
1
+ import { type TypedArray } from '../tdf/index.js';
2
+ import * as base64 from '../encodings/base64.js';
3
+ import { generateKeyPair, keyAgreement } from '../nanotdf-crypto/index.js';
4
+ import getHkdfSalt from './helpers/getHkdfSalt.js';
5
+ import DefaultParams from './models/DefaultParams.js';
6
+ import { fetchWrappedKey, KasPublicKeyInfo, OriginAllowList } from '../access.js';
7
+ import { AuthProvider, isAuthProvider, reqSignature } from '../auth/providers.js';
8
+ import { ConfigurationError, DecryptError, TdfError, UnsafeUrlError } from '../errors.js';
9
+ import { cryptoPublicToPem, pemToCryptoPublicKey, validateSecureUrl } from '../utils.js';
10
+
11
+ export interface ClientConfig {
12
+ allowedKases?: string[];
13
+ ignoreAllowList?: boolean;
14
+ authProvider: AuthProvider;
15
+ dpopEnabled?: boolean;
16
+ dpopKeys?: Promise<CryptoKeyPair>;
17
+ ephemeralKeyPair?: Promise<CryptoKeyPair>;
18
+ kasEndpoint: string;
19
+ }
20
+
21
+ function toJWSAlg(c: CryptoKey): string {
22
+ const { algorithm } = c;
23
+ switch (algorithm.name) {
24
+ case 'RSASSA-PKCS1-v1_5':
25
+ case 'RSA-PSS':
26
+ case 'RSA-OAEP': {
27
+ const r = algorithm as RsaHashedKeyGenParams;
28
+ switch (r.modulusLength) {
29
+ case 2048:
30
+ return 'RS256';
31
+ case 3072:
32
+ return 'RS384';
33
+ case 4096:
34
+ return 'RS512';
35
+ }
36
+ break;
37
+ }
38
+ case 'ECDSA':
39
+ case 'ECDH': {
40
+ return 'ES256';
41
+ }
42
+ }
43
+ throw new ConfigurationError(`unsupported key algorithm ${JSON.stringify(algorithm)}`);
44
+ }
45
+
46
+ async function generateEphemeralKeyPair(): Promise<CryptoKeyPair> {
47
+ const { publicKey, privateKey } = await generateKeyPair();
48
+ if (!privateKey || !publicKey) {
49
+ throw Error('Key pair generation failed');
50
+ }
51
+ return { publicKey, privateKey };
52
+ }
53
+
54
+ async function generateSignerKeyPair(): Promise<CryptoKeyPair> {
55
+ return crypto.subtle.generateKey(
56
+ {
57
+ name: 'RSASSA-PKCS1-v1_5',
58
+ hash: 'SHA-256',
59
+ modulusLength: 2048,
60
+ publicExponent: new Uint8Array([0x01, 0x00, 0x01]),
61
+ },
62
+ true,
63
+ ['sign', 'verify']
64
+ );
65
+ }
66
+
67
+ /**
68
+ * A Client encapsulates sessions interacting with TDF3 and nanoTDF backends, KAS and any
69
+ * plugin-based sessions like identity and further attribute control. Most importantly, it is responsible
70
+ * for local key and token management, including the ephemeral public/private keypairs
71
+ * used for encrypting and decrypting information.
72
+ *
73
+ * @link https://developer.mozilla.org/en-US/docs/Web/API/CryptoKeyPair
74
+ *
75
+ * @example
76
+ * import { Client, clientAuthProvider, decrypt, encrypt } from '@opentdf/sdk/nanotdf`
77
+ *
78
+ * const OIDC_ENDPOINT = 'http://localhost:65432/auth/';
79
+ * const KAS_URL = 'http://localhost:65432/kas';
80
+ *
81
+ * let client = new Client(
82
+ * await clientAuthProvider({
83
+ * clientId: 'tdf-client',
84
+ * clientSecret: '123-456',
85
+ * oidcOrigin: OIDC_ENDPOINT,
86
+ * }),
87
+ * KAS_URL
88
+ * );
89
+ *
90
+ * // t=1
91
+ * let nanoTDFEncrypted = await encrypt('some string', client.unwrappedKey);
92
+ * let nanoTDFDecrypted = await decrypt(nanoTDFEncrypted, client.unwrappedKey);
93
+ * nanoTDFDecrypted.toString() // 'some string'
94
+ *
95
+ */
96
+ export default class Client {
97
+ static readonly KEY_ACCESS_REMOTE = 'remote';
98
+ static readonly KAS_PROTOCOL = 'kas';
99
+ static readonly SDK_INITIAL_RELEASE = '0.0.0';
100
+ static readonly INITIAL_RELEASE_IV_SIZE = 3;
101
+ static readonly IV_SIZE = 12;
102
+
103
+ allowedKases: OriginAllowList;
104
+ /*
105
+ These variables are expected to be either assigned during initialization or within the methods.
106
+ This is needed as the flow is very specific. Errors should be thrown if the necessary step is not completed.
107
+ */
108
+ protected kasUrl: string;
109
+ kasPubKey?: KasPublicKeyInfo;
110
+ readonly authProvider: AuthProvider;
111
+ readonly dpopEnabled: boolean;
112
+ dissems: string[] = [];
113
+ dataAttributes: string[] = [];
114
+ protected ephemeralKeyPair: Promise<CryptoKeyPair>;
115
+ protected requestSignerKeyPair: Promise<CryptoKeyPair>;
116
+ protected iv?: number;
117
+
118
+ /**
119
+ * Create new NanoTDF Client
120
+ *
121
+ * The Ephemeral Key Pair can either be provided or will be generate when fetching the entity object. Once set it
122
+ * cannot be changed. If a new ephemeral key is desired it a new client should be initialized.
123
+ * There is no performance impact for creating a new client IFF the ephemeral key pair is provided.
124
+ */
125
+ constructor(
126
+ optsOrOldAuthProvider: AuthProvider | ClientConfig,
127
+ kasUrl?: string,
128
+ ephemeralKeyPair?: CryptoKeyPair,
129
+ dpopEnabled = false
130
+ ) {
131
+ if (isAuthProvider(optsOrOldAuthProvider)) {
132
+ this.authProvider = optsOrOldAuthProvider;
133
+ if (!kasUrl) {
134
+ throw new ConfigurationError('please specify kasEndpoint');
135
+ }
136
+ // TODO Disallow http KAS. For now just log as error
137
+ validateSecureUrl(kasUrl);
138
+ this.kasUrl = kasUrl;
139
+ this.allowedKases = new OriginAllowList([kasUrl]);
140
+ this.dpopEnabled = dpopEnabled;
141
+
142
+ if (ephemeralKeyPair) {
143
+ this.ephemeralKeyPair = Promise.resolve(ephemeralKeyPair);
144
+ } else {
145
+ this.ephemeralKeyPair = generateEphemeralKeyPair();
146
+ }
147
+ this.iv = 1;
148
+ } else {
149
+ const {
150
+ allowedKases,
151
+ ignoreAllowList,
152
+ authProvider,
153
+ dpopEnabled,
154
+ dpopKeys,
155
+ ephemeralKeyPair,
156
+ kasEndpoint,
157
+ } = optsOrOldAuthProvider;
158
+ this.authProvider = authProvider;
159
+ // TODO Disallow http KAS. For now just log as error
160
+ validateSecureUrl(kasEndpoint);
161
+ this.kasUrl = kasEndpoint;
162
+ this.allowedKases = new OriginAllowList(allowedKases || [kasEndpoint], !!ignoreAllowList);
163
+ this.dpopEnabled = !!dpopEnabled;
164
+ if (dpopKeys) {
165
+ this.requestSignerKeyPair = dpopKeys;
166
+ } else {
167
+ this.requestSignerKeyPair = generateSignerKeyPair();
168
+ }
169
+
170
+ if (ephemeralKeyPair) {
171
+ this.ephemeralKeyPair = ephemeralKeyPair;
172
+ } else {
173
+ this.ephemeralKeyPair = generateEphemeralKeyPair();
174
+ }
175
+ this.iv = 1;
176
+ }
177
+ }
178
+
179
+ /**
180
+ * Add attribute to the TDF file/data
181
+ *
182
+ * @param attribute The attribute that decides the access control of the TDF.
183
+ */
184
+ addAttribute(attribute: string): void {
185
+ this.dataAttributes.push(attribute);
186
+ }
187
+
188
+ /**
189
+ * Explicitly get a new Entity Object using the supplied EntityAttributeService.
190
+ *
191
+ * This method is expected to be called at least once per encrypt/decrypt cycle. If the entityObject is expired then
192
+ * this will need to be called again.
193
+ *
194
+ * @security the ephemeralKeyPair must be set in the constructor if desired to use here. If this is wished to be changed
195
+ * then a new client should be initialized.
196
+ * @performance key pair is generated when the entity object is fetched IFF the ephemeralKeyPair is not set. This will
197
+ * either be set on the first call or passed in the constructor.
198
+ */
199
+ async fetchOIDCToken(): Promise<void> {
200
+ const signer = await this.requestSignerKeyPair;
201
+ if (!signer) {
202
+ throw new ConfigurationError('failed to find or generate signer session key');
203
+ }
204
+
205
+ await this.authProvider.updateClientPublicKey(signer);
206
+ }
207
+
208
+ /**
209
+ * Rewrap key
210
+ *
211
+ * @important the `fetchEntityObject` method must be called prior to
212
+ * @param nanoTdfHeader the full header for the nanotdf
213
+ * @param kasRewrapUrl key access server's rewrap endpoint
214
+ * @param magicNumberVersion nanotdf container version
215
+ * @param clientVersion version of the client, as SemVer
216
+ */
217
+ async rewrapKey(
218
+ nanoTdfHeader: TypedArray | ArrayBuffer,
219
+ kasRewrapUrl: string,
220
+ magicNumberVersion: TypedArray | ArrayBuffer,
221
+ clientVersion: string
222
+ ): Promise<CryptoKey> {
223
+ if (!this.allowedKases.allows(kasRewrapUrl)) {
224
+ throw new UnsafeUrlError(`request URL ∉ ${this.allowedKases.origins};`, kasRewrapUrl);
225
+ }
226
+
227
+ // Ensure the ephemeral key pair has been set or generated (see createOidcServiceProvider)
228
+ await this.fetchOIDCToken();
229
+ const ephemeralKeyPair = await this.ephemeralKeyPair;
230
+ const requestSignerKeyPair = await this.requestSignerKeyPair;
231
+
232
+ // Ensure the ephemeral key pair has been set or generated (see fetchEntityObject)
233
+ if (!ephemeralKeyPair?.privateKey) {
234
+ throw new ConfigurationError('Ephemeral key has not been set or generated');
235
+ }
236
+
237
+ if (!requestSignerKeyPair?.privateKey) {
238
+ throw new ConfigurationError('Signer key has not been set or generated');
239
+ }
240
+
241
+ const requestBodyStr = JSON.stringify({
242
+ algorithm: DefaultParams.defaultECAlgorithm,
243
+ // nano keyAccess minimum, header is used for nano
244
+ keyAccess: {
245
+ type: Client.KEY_ACCESS_REMOTE,
246
+ url: '',
247
+ protocol: Client.KAS_PROTOCOL,
248
+ header: base64.encodeArrayBuffer(nanoTdfHeader),
249
+ },
250
+ clientPublicKey: await cryptoPublicToPem(ephemeralKeyPair.publicKey),
251
+ });
252
+
253
+ const jwtPayload = { requestBody: requestBodyStr };
254
+ const requestBody = {
255
+ signedRequestToken: await reqSignature(jwtPayload, requestSignerKeyPair.privateKey, {
256
+ alg: toJWSAlg(requestSignerKeyPair.publicKey),
257
+ }),
258
+ };
259
+
260
+ // Wrapped
261
+ const wrappedKey = await fetchWrappedKey(
262
+ kasRewrapUrl,
263
+ requestBody,
264
+ this.authProvider,
265
+ clientVersion
266
+ );
267
+
268
+ // Extract the iv and ciphertext
269
+ const entityWrappedKey = new Uint8Array(base64.decodeArrayBuffer(wrappedKey.entityWrappedKey));
270
+ const ivLength =
271
+ clientVersion == Client.SDK_INITIAL_RELEASE ? Client.INITIAL_RELEASE_IV_SIZE : Client.IV_SIZE;
272
+ const iv = entityWrappedKey.subarray(0, ivLength);
273
+ const encryptedSharedKey = entityWrappedKey.subarray(ivLength);
274
+
275
+ let kasPublicKey;
276
+ try {
277
+ // Let us import public key as a cert or public key
278
+ kasPublicKey = await pemToCryptoPublicKey(wrappedKey.sessionPublicKey);
279
+ } catch (cause) {
280
+ throw new ConfigurationError(
281
+ `internal: [${kasRewrapUrl}] PEM Public Key to crypto public key failed. Is PEM formatted correctly?`,
282
+ cause
283
+ );
284
+ }
285
+
286
+ let hkdfSalt;
287
+ try {
288
+ // Get the hkdf salt params
289
+ hkdfSalt = await getHkdfSalt(magicNumberVersion);
290
+ } catch (e) {
291
+ throw new TdfError('salting hkdf failed', e);
292
+ }
293
+ const { privateKey } = await this.ephemeralKeyPair;
294
+
295
+ // Get the unwrapping key
296
+ let unwrappingKey;
297
+ try {
298
+ unwrappingKey = await keyAgreement(
299
+ // Ephemeral private key
300
+ privateKey,
301
+ kasPublicKey,
302
+ hkdfSalt
303
+ );
304
+ } catch (e) {
305
+ if (e.name == 'InvalidAccessError' || e.name == 'OperationError') {
306
+ throw new DecryptError('unable to solve key agreement', e);
307
+ } else if (e.name == 'NotSupported') {
308
+ throw new ConfigurationError('unable to unwrap key from kas', e);
309
+ }
310
+ throw new TdfError('unable to reach agreement', e);
311
+ }
312
+
313
+ const authTagLength = 8 * (encryptedSharedKey.byteLength - 32);
314
+ let decryptedKey;
315
+ try {
316
+ // Decrypt the wrapped key
317
+ decryptedKey = await crypto.subtle.decrypt(
318
+ { name: 'AES-GCM', iv, tagLength: authTagLength },
319
+ unwrappingKey,
320
+ encryptedSharedKey
321
+ );
322
+ } catch (cause) {
323
+ throw new DecryptError(
324
+ `unable to decrypt key. Are you using the right KAS? Is the salt correct?`,
325
+ cause
326
+ );
327
+ }
328
+
329
+ // UnwrappedKey
330
+ let unwrappedKey;
331
+ try {
332
+ unwrappedKey = await crypto.subtle.importKey(
333
+ 'raw',
334
+ decryptedKey,
335
+ 'AES-GCM',
336
+ // @security This allows the key to be used in `exportKey` and `wrapKey`
337
+ // https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/exportKey
338
+ // https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/wrapKey
339
+ true,
340
+ // Want to use the key to encrypt and decrypt. Signing key will be used later.
341
+ ['encrypt', 'decrypt']
342
+ );
343
+ } catch (cause) {
344
+ throw new DecryptError('Unable to import raw key.', cause);
345
+ }
346
+
347
+ return unwrappedKey;
348
+ }
349
+ }
@@ -0,0 +1,121 @@
1
+ import { TypedArray } from '../tdf/index.js';
2
+ import { base64 } from '../encodings/index.js';
3
+ import Header from './models/Header.js';
4
+ import Payload from './models/Payload.js';
5
+ import Signature from './models/Signature.js';
6
+ import EncodingEnum from './enum/EncodingEnum.js';
7
+ import { ConfigurationError, InvalidFileError } from '../errors.js';
8
+
9
+ // Defaults when none set during encryption
10
+
11
+ export default class NanoTDF {
12
+ // Add encodings to the NanoTDF class for easy access
13
+ static Encodings: typeof EncodingEnum = EncodingEnum;
14
+ static Header = Header;
15
+ static Payload = Payload;
16
+ static Signature = Signature;
17
+
18
+ public header: Header;
19
+ public payload: Payload;
20
+
21
+ // TODO: This should be optional
22
+ public signature?: Signature;
23
+
24
+ static from(
25
+ content: TypedArray | ArrayBuffer | string,
26
+ encoding?: EncodingEnum,
27
+ legacyTDF = false
28
+ ): NanoTDF {
29
+ // If we don't assign an empty array buffer then TS reports buffer as unassigned
30
+ let buffer;
31
+ if (typeof content === 'string') {
32
+ if (!encoding || encoding === EncodingEnum.Base64) {
33
+ buffer = base64.decodeArrayBuffer(content);
34
+ } else {
35
+ throw new ConfigurationError(`Unsupported encoding: ${encoding}`);
36
+ }
37
+ }
38
+ // Handle Uint8Array types
39
+ else if (ArrayBuffer.isView(content) || content instanceof ArrayBuffer) {
40
+ buffer = content;
41
+ } else {
42
+ throw new ConfigurationError(`unsupported content type`);
43
+ }
44
+
45
+ const dataView = new Uint8Array(buffer);
46
+ let offset = 0;
47
+
48
+ // Header
49
+ const { header, offset: headerOffset } = Header.parse(dataView.subarray(offset));
50
+ offset += headerOffset;
51
+
52
+ // Payload
53
+ const { payload, offset: payloadOffset } = Payload.parse(
54
+ header,
55
+ dataView.subarray(offset),
56
+ legacyTDF
57
+ );
58
+ offset += payloadOffset;
59
+
60
+ // Signature
61
+ const { signature, offset: signatureOffset } = Signature.parse(
62
+ header,
63
+ dataView.subarray(offset)
64
+ );
65
+ offset += signatureOffset;
66
+
67
+ // Singature checking
68
+ if (!header.hasSignature && signature.length > 0) {
69
+ throw new InvalidFileError("Found signature when there shouldn't be one");
70
+ }
71
+ if (header.hasSignature && signature.length === 0) {
72
+ throw new InvalidFileError('Could not find signature');
73
+ }
74
+
75
+ return new NanoTDF(header, payload, signature);
76
+ }
77
+
78
+ constructor(header: Header, payload: Payload, signature?: Signature) {
79
+ this.header = header;
80
+ this.payload = payload;
81
+ this.signature = signature;
82
+ }
83
+
84
+ /**
85
+ * Return the content of nano tdf as binary buffer
86
+ */
87
+ toBuffer(): ArrayBuffer {
88
+ let offset = 0;
89
+
90
+ const lengthOfSignature = this.signature && this.signature.length ? this.signature.length : 0;
91
+ const lengthOfTDF = this.header.length + this.payload.length + lengthOfSignature;
92
+
93
+ const buffer = new ArrayBuffer(lengthOfTDF);
94
+
95
+ // Write the header
96
+ const headerBufferView = new Uint8Array(buffer, 0, this.header.length);
97
+ this.header.copyToBuffer(headerBufferView);
98
+ offset += headerBufferView.length;
99
+
100
+ // Write the payload
101
+ const payloadBufferView = new Uint8Array(buffer, offset, this.payload.length);
102
+ this.payload.copyToBuffer(payloadBufferView);
103
+ offset += payloadBufferView.length;
104
+
105
+ // Write the signature
106
+ if (this.header.hasSignature && this.signature) {
107
+ const signatureBufferView = new Uint8Array(buffer, offset, lengthOfSignature);
108
+ this.signature.copyToBuffer(signatureBufferView);
109
+ }
110
+
111
+ return buffer;
112
+ }
113
+
114
+ /**
115
+ * Return the content of nano tdf as base64 string
116
+ */
117
+ toBase64(): string {
118
+ const arrayBuffer = this.toBuffer();
119
+ return base64.encodeArrayBuffer(arrayBuffer);
120
+ }
121
+ }
@@ -0,0 +1,20 @@
1
+ /* globals window */
2
+ /**
3
+ * This file is used for:
4
+ *
5
+ * - es5 browser version of nanoTDF and add it to the window as NanoTDF
6
+ *
7
+ * This is not used for:
8
+ *
9
+ * - es6 web development (use node modules)
10
+ * - node applications
11
+ */
12
+ import NanoTDF from './NanoTDF.js';
13
+
14
+ declare global {
15
+ interface Window {
16
+ NanoTDF: typeof NanoTDF;
17
+ }
18
+ }
19
+
20
+ window.NanoTDF = NanoTDF;
@@ -0,0 +1 @@
1
+ export const GMAC_BINDING_LEN = 8;
@@ -0,0 +1,19 @@
1
+ import { decrypt as cryptoDecrypt } from '../nanotdf-crypto/index.js';
2
+ import type NanoTDF from './NanoTDF.js';
3
+
4
+ /**
5
+ * Decrypt nanotdf with a crypto key
6
+ *
7
+ * @param key Crypto key used to decrypt nanotdf
8
+ * @param nanotdf NanoTDF to decrypt
9
+ */
10
+ export default async function decrypt(key: CryptoKey, nanotdf: NanoTDF): Promise<ArrayBuffer> {
11
+ // console.log(`Decrypting for content: ${nanotdf}`, nanotdf.header.authTagLength);
12
+ return await cryptoDecrypt(
13
+ key,
14
+ nanotdf.payload.ciphertextWithAuthTag,
15
+ nanotdf.payload.iv,
16
+ // Auth tag length in bits
17
+ nanotdf.header.authTagLength
18
+ );
19
+ }
@@ -0,0 +1,52 @@
1
+ import NanoTDF from './NanoTDF.js';
2
+ import Header from './models/Header.js';
3
+ import DefaultParams from './models/DefaultParams.js';
4
+ import Payload from './models/Payload.js';
5
+ import { getBitLength as authTagLengthForCipher } from './models/Ciphers.js';
6
+ import TypedArray from '../tdf/TypedArray.js';
7
+ import encrypt from '../nanotdf-crypto/encrypt.js';
8
+
9
+ /**
10
+ * Encrypt the plain data into nanotdf buffer
11
+ *
12
+ * @param symmetricKey Key to encrypt the payload
13
+ * @param header NanoTDF header
14
+ * @param iv IV to be used for encrypting the payload
15
+ * @param data The data to be encrypted
16
+ */
17
+ export default async function encryptDataset(
18
+ symmetricKey: CryptoKey,
19
+ header: Header,
20
+ iv: Uint8Array,
21
+ data: string | TypedArray | ArrayBuffer
22
+ ): Promise<ArrayBuffer> {
23
+ // Auth tag length for policy and payload
24
+ const authTagLengthInBytes = authTagLengthForCipher(DefaultParams.symmetricCipher) / 8;
25
+
26
+ // Encrypt the payload
27
+ let payloadAsBuffer;
28
+ if (typeof data === 'string') {
29
+ payloadAsBuffer = new TextEncoder().encode(data);
30
+ } else {
31
+ payloadAsBuffer = data;
32
+ }
33
+
34
+ const encryptedPayload = await encrypt(
35
+ symmetricKey,
36
+ new Uint8Array(payloadAsBuffer),
37
+ iv,
38
+ authTagLengthInBytes * 8
39
+ );
40
+
41
+ // Create payload
42
+ const payload = new Payload(
43
+ iv.slice(-3),
44
+ new Uint8Array(encryptedPayload.slice(0, -authTagLengthInBytes)),
45
+ new Uint8Array(encryptedPayload.slice(-authTagLengthInBytes))
46
+ );
47
+
48
+ // Create a nanotdf.
49
+ const nanoTDF = new NanoTDF(header, payload);
50
+
51
+ return nanoTDF.toBuffer();
52
+ }