@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,101 @@
1
+ import AbstractPolicy from './AbstractPolicy.js';
2
+ import { EmbeddedPolicyInterface } from '../../interfaces/PolicyInterface.js';
3
+ import PolicyTypes from '../../enum/PolicyTypeEnum.js';
4
+ import { ConfigurationError } from '../../../errors.js';
5
+
6
+ /**
7
+ * Embedded Policy
8
+ *
9
+ * These policy types allow for creation and binding of arbitrary policies.
10
+ *
11
+ * | Section | Minimum Length (B) | Maximum Length (B) |
12
+ * |------------------------------|--------------------|--------------------|
13
+ * | Content Length | 2 | 2 |
14
+ * | Plaintext/Ciphertext | 1 | 255 |
15
+ * | (Optional) Policy Key Access | 36 | 136 |
16
+ */
17
+ class EmbeddedPolicy extends AbstractPolicy implements EmbeddedPolicyInterface {
18
+ static MAX_POLICY_SIZE = 65535; // 2 bytes unsigned int.
19
+ readonly content: Uint8Array;
20
+
21
+ static override parse(
22
+ buff: Uint8Array,
23
+ useEcdsaBinding: boolean,
24
+ type: PolicyTypes
25
+ ): { offset: number; policy: EmbeddedPolicy } {
26
+ let offset = 0;
27
+
28
+ // TODO: May not work on Big Endian systems. See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getUint16
29
+ // Also http://calculist.org/blog/2012/04/24/the-little-endian-web/
30
+ const length = new DataView(buff.slice(offset, 2).buffer).getUint16(0);
31
+ offset += 2;
32
+
33
+ const content = buff.subarray(offset, offset + length);
34
+ offset += length;
35
+
36
+ const { binding, newOffset: bindingOffset } = this.parseBinding(buff, useEcdsaBinding, offset);
37
+ offset = bindingOffset;
38
+
39
+ return {
40
+ policy: new EmbeddedPolicy(type, binding, content),
41
+ offset,
42
+ };
43
+ }
44
+
45
+ constructor(type: PolicyTypes, binding: Uint8Array, content: Uint8Array) {
46
+ super(type, binding);
47
+ this.content = content;
48
+ }
49
+
50
+ /**
51
+ * Length of policy
52
+ *
53
+ * @returns { number } length
54
+ */
55
+ override getLength(): number {
56
+ return (
57
+ // Type length
58
+ 1 +
59
+ // Policy length
60
+ 2 +
61
+ // Content length
62
+ this.content.length +
63
+ // Binding length
64
+ this.binding.length
65
+ );
66
+ }
67
+
68
+ /**
69
+ * Return the content of the policy
70
+ */
71
+ override toBuffer(): Uint8Array {
72
+ const target = new Uint8Array(this.getLength());
73
+
74
+ if (this.content.length > EmbeddedPolicy.MAX_POLICY_SIZE) {
75
+ throw new ConfigurationError("TDF Policy can't be more that 2^16");
76
+ }
77
+
78
+ target.set([this.type], 0);
79
+
80
+ // Write the policy length, assuming the host system is little endian
81
+ // TODO: There should be better way to convert to big endian
82
+ const lengthAsUint16 = new Uint16Array(1);
83
+ lengthAsUint16[0] = this.content.length;
84
+
85
+ const temp = new Uint8Array(lengthAsUint16.buffer);
86
+ const policyContentSizeAsBg = new Uint8Array(2);
87
+ policyContentSizeAsBg[0] = temp[1];
88
+ policyContentSizeAsBg[1] = temp[0];
89
+ target.set(policyContentSizeAsBg, 1);
90
+
91
+ // Write the policy content
92
+ target.set(this.content, policyContentSizeAsBg.length + 1);
93
+
94
+ // Write the binding.
95
+ target.set(this.binding, this.content.length + policyContentSizeAsBg.length + 1);
96
+
97
+ return target;
98
+ }
99
+ }
100
+
101
+ export default EmbeddedPolicy;
@@ -0,0 +1,48 @@
1
+ import AbstractPolicy from './AbstractPolicy.js';
2
+ import EmbeddedPolicy from './EmbeddedPolicy.js';
3
+ import RemotePolicy from './RemotePolicy.js';
4
+ import PolicyTypeEnum from '../../enum/PolicyTypeEnum.js';
5
+ import { UnsupportedFeatureError } from '../../../errors.js';
6
+ import CurveNameEnum from '../../enum/CurveNameEnum.js';
7
+
8
+ function parse(
9
+ buff: Uint8Array,
10
+ useEcdsaBinding: boolean,
11
+ curve: CurveNameEnum
12
+ ): { policy: AbstractPolicy; offset: number } | never {
13
+ const type = buff[AbstractPolicy.TYPE_BYTE_OFF];
14
+ let policy: AbstractPolicy;
15
+ let offset: number;
16
+
17
+ // Check if remote policy
18
+ if (type === PolicyTypeEnum.Remote) {
19
+ ({ policy, offset } = RemotePolicy.parse(
20
+ buff.subarray(AbstractPolicy.TYPE_BYTE_LEN),
21
+ useEcdsaBinding
22
+ ));
23
+ } else if (
24
+ [
25
+ // Check if is an embedded policy
26
+ PolicyTypeEnum.EmbeddedEncrypted,
27
+ PolicyTypeEnum.EmbeddedEncryptedPKA,
28
+ PolicyTypeEnum.EmbeddedText,
29
+ ].includes(type)
30
+ ) {
31
+ ({ policy, offset } = EmbeddedPolicy.parse(
32
+ buff.subarray(AbstractPolicy.TYPE_BYTE_LEN),
33
+ useEcdsaBinding,
34
+ type
35
+ ));
36
+ } else {
37
+ throw new UnsupportedFeatureError(`unsupported policy type: ${type}`);
38
+ }
39
+
40
+ return {
41
+ policy,
42
+ offset: offset + AbstractPolicy.TYPE_BYTE_LEN,
43
+ };
44
+ }
45
+
46
+ export default {
47
+ parse,
48
+ };
@@ -0,0 +1,74 @@
1
+ import AbstractPolicy from './AbstractPolicy.js';
2
+ import ResourceLocator from '../ResourceLocator.js';
3
+ import { RemotePolicyInterface } from '../../interfaces/PolicyInterface.js';
4
+ import PolicyTypeEnum from '../../enum/PolicyTypeEnum.js';
5
+
6
+ /**
7
+ * Set remote policy body
8
+ *
9
+ * If the policy type is set to use a Remote Policy, then the Resource Locator object described in Section 3.4.1 is
10
+ * used to describe the remote policy.
11
+ */
12
+ class RemotePolicy extends AbstractPolicy implements RemotePolicyInterface {
13
+ override readonly type: PolicyTypeEnum = PolicyTypeEnum.Remote;
14
+ readonly remotePolicy: ResourceLocator;
15
+
16
+ static override parse(
17
+ buff: Uint8Array,
18
+ useEcdsaBinding: boolean
19
+ ): { offset: number; policy: RemotePolicy } {
20
+ let offset = 0;
21
+ const resource = ResourceLocator.parse(buff);
22
+ offset += resource.offset;
23
+
24
+ const { binding, newOffset: bindingOffset } = this.parseBinding(buff, useEcdsaBinding, offset);
25
+ offset = bindingOffset;
26
+
27
+ return {
28
+ policy: new RemotePolicy(PolicyTypeEnum.Remote, binding, resource),
29
+ offset,
30
+ };
31
+ }
32
+
33
+ constructor(type: PolicyTypeEnum, binding: Uint8Array, resource: ResourceLocator) {
34
+ super(type, binding);
35
+ this.type = PolicyTypeEnum.Remote;
36
+ this.remotePolicy = resource;
37
+ }
38
+
39
+ /**
40
+ * Length of policy
41
+ *
42
+ * @returns { number } length
43
+ */
44
+ override getLength(): number {
45
+ return (
46
+ // Type length
47
+ 1 +
48
+ // Resource locator length
49
+ this.remotePolicy.length +
50
+ // Binding length
51
+ this.binding.length
52
+ );
53
+ }
54
+
55
+ /**
56
+ * Return the content of the policy
57
+ */
58
+ override toBuffer(): Uint8Array {
59
+ const target = new Uint8Array(this.getLength());
60
+
61
+ target.set([PolicyTypeEnum.Remote], 0);
62
+
63
+ // Write the remote policy location
64
+ const resourceLocatorAsBuf = this.remotePolicy.toBuffer();
65
+ target.set(resourceLocatorAsBuf, 1);
66
+
67
+ // Write the binding.
68
+ target.set(this.binding, resourceLocatorAsBuf.length + 1);
69
+
70
+ return target;
71
+ }
72
+ }
73
+
74
+ export default RemotePolicy;
@@ -0,0 +1,212 @@
1
+ import { ConfigurationError, InvalidFileError } from '../../errors.js';
2
+ import ProtocolEnum from '../enum/ProtocolEnum.js';
3
+ import ResourceLocatorIdentifierEnum from '../enum/ResourceLocatorIdentifierEnum.js';
4
+
5
+ /**
6
+ *
7
+ * The Resource Locator is a way for the nanotdf to represent references to external resources in as succinct a format
8
+ * as possible.
9
+ *
10
+ * | Section | Minimum Length (B) | Maximum Length (B) |
11
+ * |---------------|--------------------|--------------------|
12
+ * | Protocol Enum | 1 | 1 |
13
+ * | Body Length | 1 | 1 |
14
+ * | Body | 1 | 255 |
15
+ * | Identifier | 0 | n |
16
+ *
17
+ * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3312-kas
18
+ * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#341-resource-locator
19
+ */
20
+ export default class ResourceLocator {
21
+ static readonly PROTOCOL_OFFSET = 0;
22
+ static readonly PROTOCOL_LENGTH = 1;
23
+ static readonly LENGTH_OFFSET = 1;
24
+ static readonly LENGTH_LENGTH = 1;
25
+ static readonly BODY_OFFSET = 2;
26
+ static readonly IDENTIFIER_0_BYTE: number = 0 << 4; // 0
27
+ static readonly IDENTIFIER_2_BYTE: number = 1 << 4; // 16
28
+ static readonly IDENTIFIER_8_BYTE: number = 2 << 4; // 32
29
+ static readonly IDENTIFIER_32_BYTE: number = 3 << 4; // 48
30
+
31
+ constructor(
32
+ readonly protocol: ProtocolEnum,
33
+ readonly lengthOfBody: number,
34
+ readonly body: string,
35
+ readonly offset: number,
36
+ readonly id?: string,
37
+ readonly idType: ResourceLocatorIdentifierEnum = ResourceLocatorIdentifierEnum.None
38
+ ) {}
39
+
40
+ /**
41
+ * Construct a new URL or URL + identifier pair, for use with NanoTDF envelopes.
42
+ * @param url The URL to encrypt; `http` and `https` schemes are supported
43
+ * @param identifier An optional identifier.
44
+ * For KAS URLs, this is usually a public key identifier (kid). Limit 32 characters
45
+ * @returns a value representing the URL and identifier, if present.
46
+ * This method throws an Error if the URL is invalid or of the wrong schema,
47
+ * or if the identifier is an unsupported value.
48
+ */
49
+ static fromURL(url: string, identifier?: string): ResourceLocator {
50
+ const [protocolStr, body] = url.split('://');
51
+
52
+ let protocol: ProtocolEnum;
53
+
54
+ // Validate and set protocol identifier byte
55
+ switch (protocolStr.toLowerCase()) {
56
+ case 'http':
57
+ protocol = ProtocolEnum.Http;
58
+ break;
59
+ case 'https':
60
+ protocol = ProtocolEnum.Https;
61
+ break;
62
+ default:
63
+ throw new ConfigurationError(`resource locator protocol [${protocolStr}] unsupported`);
64
+ }
65
+
66
+ // Set identifier padded length and protocol identifier byte
67
+ const identifierType = (() => {
68
+ if (!identifier) {
69
+ return ResourceLocatorIdentifierEnum.None;
70
+ }
71
+ const identifierLength = new TextEncoder().encode(identifier).length;
72
+ if (identifierLength <= 2) {
73
+ return ResourceLocatorIdentifierEnum.TwoBytes;
74
+ } else if (identifierLength <= 8) {
75
+ return ResourceLocatorIdentifierEnum.EightBytes;
76
+ } else if (identifierLength <= 32) {
77
+ return ResourceLocatorIdentifierEnum.ThirtyTwoBytes;
78
+ }
79
+ throw new ConfigurationError(`unsupported identifier length: ${identifier.length}`);
80
+ })();
81
+
82
+ // Create buffer to hold protocol, body length, body, and identifier
83
+ const lengthOfBody = new TextEncoder().encode(body).length;
84
+ if (lengthOfBody == 0) {
85
+ throw new ConfigurationError('url body empty');
86
+ }
87
+ const identifierLength = identifierType.valueOf();
88
+ const offset = ResourceLocator.BODY_OFFSET + lengthOfBody + identifierLength;
89
+ return new ResourceLocator(protocol, lengthOfBody, body, offset, identifier, identifierType);
90
+ }
91
+
92
+ static parse(buff: Uint8Array) {
93
+ // Protocol
94
+ const protocolAndIdentifierType = buff[ResourceLocator.PROTOCOL_OFFSET];
95
+ // Length of body
96
+ const lengthOfBody = buff[ResourceLocator.LENGTH_OFFSET];
97
+ if (lengthOfBody == 0) {
98
+ throw new InvalidFileError('url body empty');
99
+ }
100
+ // Body as utf8 string
101
+ const decoder = new TextDecoder();
102
+ let offset = ResourceLocator.BODY_OFFSET + lengthOfBody;
103
+ if (offset > buff.length) {
104
+ throw new InvalidFileError('url parser: out of bounds error');
105
+ }
106
+ const body = decoder.decode(buff.subarray(ResourceLocator.BODY_OFFSET, offset));
107
+ const protocol = protocolAndIdentifierType & 0xf;
108
+ switch (protocol) {
109
+ case ProtocolEnum.Http:
110
+ case ProtocolEnum.Https:
111
+ break;
112
+ default:
113
+ throw new InvalidFileError(`url parser: unsupported protocol type [${protocol}]`);
114
+ }
115
+ // identifier
116
+ const identifierTypeNibble = protocolAndIdentifierType & 0xf0;
117
+ let identifierType = ResourceLocatorIdentifierEnum.None;
118
+ if (identifierTypeNibble === ResourceLocator.IDENTIFIER_2_BYTE) {
119
+ identifierType = ResourceLocatorIdentifierEnum.TwoBytes;
120
+ } else if (identifierTypeNibble === ResourceLocator.IDENTIFIER_8_BYTE) {
121
+ identifierType = ResourceLocatorIdentifierEnum.EightBytes;
122
+ } else if (identifierTypeNibble === ResourceLocator.IDENTIFIER_32_BYTE) {
123
+ identifierType = ResourceLocatorIdentifierEnum.ThirtyTwoBytes;
124
+ } else if (identifierTypeNibble !== ResourceLocator.IDENTIFIER_0_BYTE) {
125
+ throw new InvalidFileError(`url parser: unsupported fragment type [${identifierTypeNibble}]`);
126
+ }
127
+
128
+ let identifier: string | undefined = undefined;
129
+
130
+ switch (identifierType) {
131
+ case ResourceLocatorIdentifierEnum.None:
132
+ // noop
133
+ break;
134
+ case ResourceLocatorIdentifierEnum.TwoBytes:
135
+ case ResourceLocatorIdentifierEnum.EightBytes:
136
+ case ResourceLocatorIdentifierEnum.ThirtyTwoBytes: {
137
+ const kidStart = offset;
138
+ offset = kidStart + identifierType.valueOf();
139
+ if (offset > buff.length) {
140
+ throw new InvalidFileError('url parser: out of bounds error');
141
+ }
142
+ const kidSubarray = buff.subarray(kidStart, offset);
143
+ // Remove padding (assuming the padding is null bytes, 0x00)
144
+ const zeroIndex = kidSubarray.indexOf(0);
145
+ if (zeroIndex >= 0) {
146
+ const trimmedSubarray = kidSubarray.subarray(0, zeroIndex);
147
+ identifier = decoder.decode(trimmedSubarray);
148
+ } else {
149
+ identifier = decoder.decode(kidSubarray);
150
+ }
151
+ break;
152
+ }
153
+ }
154
+ return new ResourceLocator(protocol, lengthOfBody, body, offset, identifier, identifierType);
155
+ }
156
+
157
+ /**
158
+ * Length
159
+ *
160
+ * @returns { number } Length of resource locator
161
+ */
162
+ get length(): number {
163
+ return this.offset;
164
+ }
165
+
166
+ get url(): string | never {
167
+ switch (this.protocol) {
168
+ case ProtocolEnum.Http:
169
+ return 'http://' + this.body;
170
+ case ProtocolEnum.Https:
171
+ return 'https://' + this.body;
172
+ default:
173
+ throw new ConfigurationError(`resource locator protocol unsupported [${this.protocol}]`);
174
+ }
175
+ }
176
+
177
+ /**
178
+ * Return the contents of the Resource Locator in buffer
179
+ */
180
+ toBuffer(): Uint8Array {
181
+ const target = new Uint8Array(ResourceLocator.BODY_OFFSET + this.body.length + this.idType);
182
+ let idTypeNibble = 0;
183
+ switch (this.idType) {
184
+ case ResourceLocatorIdentifierEnum.TwoBytes:
185
+ idTypeNibble = ResourceLocator.IDENTIFIER_2_BYTE;
186
+ break;
187
+ case ResourceLocatorIdentifierEnum.EightBytes:
188
+ idTypeNibble = ResourceLocator.IDENTIFIER_8_BYTE;
189
+ break;
190
+ case ResourceLocatorIdentifierEnum.ThirtyTwoBytes:
191
+ idTypeNibble = ResourceLocator.IDENTIFIER_32_BYTE;
192
+ break;
193
+ }
194
+ target.set([this.protocol | idTypeNibble], ResourceLocator.PROTOCOL_OFFSET);
195
+ target.set([this.lengthOfBody], ResourceLocator.LENGTH_OFFSET);
196
+ target.set(new TextEncoder().encode(this.body), ResourceLocator.BODY_OFFSET);
197
+ if (this.id) {
198
+ target.set(new TextEncoder().encode(this.id), ResourceLocator.BODY_OFFSET + this.body.length);
199
+ }
200
+ return target;
201
+ }
202
+
203
+ /**
204
+ * Get Identifier
205
+ *
206
+ * Returns the identifier of the ResourceLocator or an empty string if no identifier is present.
207
+ * @returns { string } Identifier of the resource locator.
208
+ */
209
+ get identifier(): string {
210
+ return this.id ?? '';
211
+ }
212
+ }
@@ -0,0 +1,85 @@
1
+ import Header from './Header.js';
2
+ import { lengthOfPublicKey, lengthOfSignature } from '../helpers/calculateByCurve.js';
3
+ import { ConfigurationError } from '../../errors.js';
4
+
5
+ /**
6
+ * NanoTDF Signature
7
+ *
8
+ * The signature section is an optional section that contains an ECDSA signature used to cryptographically bind the Header and Payload to a creator of the nanotdf. The key used for signing is the private key of the creator of the nanotdf. The ECC Params used for the signature are described in Section 3.3.1.4.2. The private key used for this signature is distinctly different than the ephemeral private key. This is a persistent key belonging to an individual, entity, or device that creates nanotdfs. The signature is used to authenticate the entire nanotdf and contains both the public key related to the creators private key and the resulting signature. The structure of this section:
9
+ *
10
+ * | Section | Minimum Length (B) | Maximum Length (B) |
11
+ * |------------|--------------------|--------------------|
12
+ * | Public Key | 33 | 67 |
13
+ * | Signature | 64 | 132 |
14
+ *
15
+ * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#333-signature
16
+ */
17
+ export default class Signature {
18
+ public publicKey: Uint8Array;
19
+ public signature: Uint8Array;
20
+
21
+ static parse(header: Header, buff: Uint8Array): { signature: Signature; offset: number } | never {
22
+ let offset = 0;
23
+
24
+ /**
25
+ * Parse the public key
26
+ *
27
+ * This section contains the compressed public key of the private key used to sign the message.
28
+ */
29
+ // TODO: Resolve where offset is missing 1 byte
30
+ const publicKeyLength = lengthOfPublicKey(header.signatureCurveName) + 1;
31
+ const publicKey = buff.subarray(offset, offset + publicKeyLength);
32
+ offset += publicKeyLength;
33
+
34
+ /**
35
+ * Parse signature
36
+ *
37
+ * This section contains the encoded `r` and `s` values of the ECDSA signature.
38
+ *
39
+ * ECDSA signatures are big endian encodings of the `r` and `s` values of an ECDSA signature.The length of `r` and `s`
40
+ * values is determined by the ECC Mode used for the signature. The encoding for the signature is the big endian
41
+ * encodings of R and S concatenated to each other. For example, `r = 1` and `s = 2` for an ECDSA signature of a
42
+ * ecp256k1 key would be (line breaks and spaces are added for easier visualization):
43
+ *
44
+ * ```
45
+ * 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
46
+ * 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01
47
+ * 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
48
+ * 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02
49
+ * ```
50
+ *
51
+ * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#52-ecdsa-signature-encoding
52
+ */
53
+ const signatureLength = lengthOfSignature(header.signatureCurveName);
54
+ const signature = buff.subarray(offset, offset + signatureLength);
55
+ offset += signatureLength;
56
+
57
+ return { signature: new Signature(publicKey, signature), offset };
58
+ }
59
+
60
+ constructor(publicKey: Uint8Array, signature: Uint8Array) {
61
+ this.publicKey = publicKey;
62
+ this.signature = signature;
63
+ }
64
+
65
+ /**
66
+ * Length
67
+ *
68
+ * @returns { number } Length of signature
69
+ */
70
+ get length(): number {
71
+ return this.publicKey.length + this.signature.length;
72
+ }
73
+
74
+ /**
75
+ * Copy the contents of the signature to buffer
76
+ */
77
+ copyToBuffer(target: Uint8Array): void {
78
+ if (this.length > target.length) {
79
+ throw new ConfigurationError('Invalid buffer size to copy signature');
80
+ }
81
+
82
+ target.set(this.publicKey, 0);
83
+ target.set(this.signature, this.publicKey.length);
84
+ }
85
+ }
@@ -0,0 +1,13 @@
1
+ export enum Ciphers {
2
+ AesGcm = 'AES-GCM',
3
+ }
4
+
5
+ export enum CipherTagLengths {
6
+ AesGcm = 128,
7
+ }
8
+
9
+ const cipherKeys = [];
10
+ for (const cipherKey in Ciphers) {
11
+ cipherKeys.push(cipherKey);
12
+ }
13
+ export const supportedCiphers = cipherKeys;
@@ -0,0 +1,30 @@
1
+ import { Ciphers, CipherTagLengths } from './ciphers.js';
2
+
3
+ /**
4
+ * Decrypt plaintext buffer to plaintext buffer
5
+ *
6
+ * Only supports AES-GCM
7
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/encrypt
8
+ *
9
+ * @param key Encryption key
10
+ * @param ciphertext Encrypted buffer
11
+ * @param iv Initialization vector
12
+ * @param tagLength Size (bits) of authentication tag
13
+ * @returns Resolves plaintext buffer
14
+ */
15
+ export default async function decrypt(
16
+ key: CryptoKey,
17
+ ciphertext: Uint8Array,
18
+ iv: Uint8Array,
19
+ tagLength?: number
20
+ ): Promise<ArrayBuffer> {
21
+ return crypto.subtle.decrypt(
22
+ {
23
+ name: Ciphers.AesGcm,
24
+ iv,
25
+ tagLength: tagLength || CipherTagLengths.AesGcm,
26
+ },
27
+ key,
28
+ ciphertext
29
+ );
30
+ }
@@ -0,0 +1,8 @@
1
+ import { TypedArray } from '../tdf/index.js';
2
+
3
+ export default function digest(
4
+ hashType: AlgorithmIdentifier,
5
+ data: TypedArray | ArrayBuffer
6
+ ): Promise<ArrayBuffer> {
7
+ return crypto.subtle.digest(hashType, data);
8
+ }
@@ -0,0 +1,109 @@
1
+ import { ConfigurationError } from '../errors.js';
2
+ import { AlgorithmName } from './../nanotdf-crypto/enums.js';
3
+
4
+ /**
5
+ * Computes an ECDSA signature for the given data using the provided private key.
6
+ *
7
+ * This function uses the Web Crypto API to generate a digital signature
8
+ * for the input data using the ECDSA algorithm with SHA-256 as the hash function.
9
+ *
10
+ * @param {CryptoKey} privateKey - The ECDSA private key used for signing.
11
+ * @param {Uint8Array} data - The data to be signed.
12
+ * @returns {Promise<ArrayBuffer>} - A promise that resolves to the generated signature.
13
+ */
14
+ export async function computeECDSASig(
15
+ privateKey: CryptoKey,
16
+ data: Uint8Array
17
+ ): Promise<ArrayBuffer> {
18
+ const signature = await crypto.subtle.sign(
19
+ {
20
+ name: AlgorithmName.ECDSA,
21
+ hash: { name: 'SHA-256' },
22
+ },
23
+ privateKey,
24
+ data
25
+ );
26
+ return signature;
27
+ }
28
+
29
+ /**
30
+ * Verifies an ECDSA signature using the provided public key and data.
31
+ *
32
+ * This function uses the Web Crypto API to verify the digital signature
33
+ * for the input data using the ECDSA algorithm with SHA-256 as the hash function.
34
+ *
35
+ * @param {CryptoKey} publicKey - The ECDSA public key used for verification.
36
+ * @param {Uint8Array} signature - The signature to be verified.
37
+ * @param {Uint8Array} data - The data that was signed.
38
+ * @returns {Promise<boolean>} - A promise that resolves to a boolean indicating whether the signature is valid.
39
+ */
40
+ export async function verifyECDSASignature(
41
+ publicKey: CryptoKey,
42
+ signature: Uint8Array,
43
+ data: Uint8Array
44
+ ): Promise<boolean> {
45
+ const isValid = await crypto.subtle.verify(
46
+ {
47
+ name: AlgorithmName.ECDSA,
48
+ hash: { name: 'SHA-256' },
49
+ },
50
+ publicKey,
51
+ signature,
52
+ data
53
+ );
54
+ return isValid;
55
+ }
56
+
57
+ /**
58
+ * Extracts the r and s values from a given ECDSA signature.
59
+ *
60
+ * @param {Uint8Array} signatureBytes - The raw ECDSA signature bytes.
61
+ * @returns {{ r: Uint8Array; s: Uint8Array }} An object containing the r and s values as Uint8Arrays.
62
+ * @throws {Error} If the validation of the signature fails.
63
+ */
64
+ export function extractRSValuesFromSignature(signatureBytes: Uint8Array): {
65
+ r: Uint8Array;
66
+ s: Uint8Array;
67
+ } {
68
+ // Split the raw signature into r and s values
69
+ const halfLength = Math.floor(signatureBytes.length / 2);
70
+ const rValue = signatureBytes.slice(0, halfLength);
71
+ const sValue = signatureBytes.slice(halfLength);
72
+
73
+ // Correct validation
74
+ if (!concatAndCompareUint8Arrays(rValue, sValue, signatureBytes)) {
75
+ throw new ConfigurationError('invalid ECDSA signature');
76
+ }
77
+
78
+ return {
79
+ r: rValue,
80
+ s: sValue,
81
+ };
82
+ }
83
+
84
+ function concatAndCompareUint8Arrays(
85
+ arr1: Uint8Array,
86
+ arr2: Uint8Array,
87
+ arr3: Uint8Array
88
+ ): boolean {
89
+ // Create a new Uint8Array with the combined length of arr1 and arr2
90
+ const concatenated = new Uint8Array(arr1.length + arr2.length);
91
+
92
+ // Copy arr1 and arr2 into the new array
93
+ concatenated.set(arr1, 0);
94
+ concatenated.set(arr2, arr1.length);
95
+
96
+ // Check if the lengths are the same
97
+ if (concatenated.length !== arr3.length) {
98
+ return false;
99
+ }
100
+
101
+ // Compare each element
102
+ for (let i = 0; i < concatenated.length; i++) {
103
+ if (concatenated[i] !== arr3[i]) {
104
+ return false;
105
+ }
106
+ }
107
+
108
+ return true;
109
+ }