@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,9 @@
1
+ var ResourceLocatorIdentifierEnum;
2
+ (function (ResourceLocatorIdentifierEnum) {
3
+ ResourceLocatorIdentifierEnum[ResourceLocatorIdentifierEnum["None"] = 0] = "None";
4
+ ResourceLocatorIdentifierEnum[ResourceLocatorIdentifierEnum["TwoBytes"] = 2] = "TwoBytes";
5
+ ResourceLocatorIdentifierEnum[ResourceLocatorIdentifierEnum["EightBytes"] = 8] = "EightBytes";
6
+ ResourceLocatorIdentifierEnum[ResourceLocatorIdentifierEnum["ThirtyTwoBytes"] = 32] = "ThirtyTwoBytes";
7
+ })(ResourceLocatorIdentifierEnum || (ResourceLocatorIdentifierEnum = {}));
8
+ export default ResourceLocatorIdentifierEnum;
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzb3VyY2VMb2NhdG9ySWRlbnRpZmllckVudW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbmFub3RkZi9lbnVtL1Jlc291cmNlTG9jYXRvcklkZW50aWZpZXJFbnVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLElBQUssNkJBS0o7QUFMRCxXQUFLLDZCQUE2QjtJQUNoQyxpRkFBUSxDQUFBO0lBQ1IseUZBQVksQ0FBQTtJQUNaLDZGQUFjLENBQUE7SUFDZCxzR0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBTEksNkJBQTZCLEtBQTdCLDZCQUE2QixRQUtqQztBQUVELGVBQWUsNkJBQTZCLENBQUMifQ==
@@ -0,0 +1,24 @@
1
+ import { getCurveLength } from '../models/EcCurves.js';
2
+ /**
3
+ * Length of public key
4
+ *
5
+ * @param curveName CurveNameEnum
6
+ * @returns number length of the public key
7
+ */
8
+ export function lengthOfPublicKey(curveName) {
9
+ return Math.ceil(getCurveLength(curveName) / 8);
10
+ }
11
+ /**
12
+ * Length of signature
13
+ *
14
+ * ECDSA signatures are 2 times longer than the signer's private key for the curve used during the signing process.
15
+ * For example, for 256-bit elliptic curves (like secp256k1 ) the ECDSA signature is 512 bits (64 bytes) and for 521-bit
16
+ * curves (like secp521r1 ) the signature is 1042 bits.
17
+ *
18
+ * @param curveName CurveNameEnum
19
+ * @returns number length of the signature
20
+ */
21
+ export function lengthOfSignature(curveName) {
22
+ return Math.ceil((getCurveLength(curveName) * 2) / 8);
23
+ }
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsY3VsYXRlQnlDdXJ2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW5vdGRmL2hlbHBlcnMvY2FsY3VsYXRlQnlDdXJ2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsU0FBd0I7SUFDeEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLFNBQXdCO0lBQ3hELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4RCxDQUFDIn0=
@@ -0,0 +1,8 @@
1
+ import { digest, enums } from '../../nanotdf-crypto/index.js';
2
+ export default async function getHkdfSalt(buffer) {
3
+ return {
4
+ hkdfSalt: await digest(enums.HashType.Sha256, buffer),
5
+ hkdfHash: enums.HashType.Sha256,
6
+ };
7
+ }
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0SGtkZlNhbHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbmFub3RkZi9oZWxwZXJzL2dldEhrZGZTYWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFPOUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFVBQVUsV0FBVyxDQUFDLE1BQWdDO0lBQ3hFLE9BQU87UUFDTCxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDO1FBQ3JELFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07S0FDaEMsQ0FBQztBQUNKLENBQUMifQ==
@@ -0,0 +1,11 @@
1
+ // Don't export named values or the enduser will
2
+ // have to call `const NanoTDF = require('nanotdf').default`
3
+ export { default as Client } from './Client.js';
4
+ export { default as Header } from './models/Header.js';
5
+ export { default as NanoTDF } from './NanoTDF.js';
6
+ export { default as decrypt } from './decrypt.js';
7
+ export { default as encrypt } from './encrypt.js';
8
+ export { default as encryptDataset } from './encrypt-dataset.js';
9
+ export { default as getHkdfSalt } from './helpers/getHkdfSalt.js';
10
+ export { default as DefaultParams } from './models/DefaultParams.js';
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmFub3RkZi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnREFBZ0Q7QUFDaEQsNERBQTREO0FBQzVELE9BQU8sRUFBRSxPQUFPLElBQUksTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxPQUFPLElBQUksTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sSUFBSSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sSUFBSSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sSUFBSSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sSUFBSSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsT0FBTyxJQUFJLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxPQUFPLElBQUksYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUMifQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9saWN5SW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL25hbm90ZGYvaW50ZXJmYWNlcy9Qb2xpY3lJbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -0,0 +1,54 @@
1
+ import CipherEnum from '../enum/CipherEnum.js';
2
+ import { UnsupportedFeatureError } from '../../errors.js';
3
+ export const Aes256Gcm64 = {
4
+ name: CipherEnum.AES_256_GCM_64,
5
+ length: 64,
6
+ };
7
+ export const Aes256Gcm96 = {
8
+ name: CipherEnum.AES_256_GCM_96,
9
+ length: 96,
10
+ };
11
+ export const Aes256Gcm104 = {
12
+ name: CipherEnum.AES_256_GCM_104,
13
+ length: 104,
14
+ };
15
+ export const Aes256Gcm112 = {
16
+ name: CipherEnum.AES_256_GCM_112,
17
+ length: 112,
18
+ };
19
+ export const Aes256Gcm120 = {
20
+ name: CipherEnum.AES_256_GCM_120,
21
+ length: 120,
22
+ };
23
+ export const Aes256Gcm128 = {
24
+ name: CipherEnum.AES_256_GCM_128,
25
+ length: 128,
26
+ };
27
+ export function getBitLength(cipher) {
28
+ switch (cipher) {
29
+ case CipherEnum.AES_256_GCM_64:
30
+ return Aes256Gcm64.length;
31
+ case CipherEnum.AES_256_GCM_96:
32
+ return Aes256Gcm96.length;
33
+ case CipherEnum.AES_256_GCM_104:
34
+ return Aes256Gcm104.length;
35
+ case CipherEnum.AES_256_GCM_112:
36
+ return Aes256Gcm112.length;
37
+ case CipherEnum.AES_256_GCM_120:
38
+ return Aes256Gcm120.length;
39
+ case CipherEnum.AES_256_GCM_128:
40
+ return Aes256Gcm128.length;
41
+ default:
42
+ throw new UnsupportedFeatureError(`unsupported cipher enum value: [${cipher}]`);
43
+ }
44
+ }
45
+ // export default {
46
+ // Aes256Gcm64,
47
+ // Aes256Gcm96,
48
+ // Aes256Gcm104,
49
+ // Aes256Gcm112,
50
+ // Aes256Gcm120,
51
+ // Aes256Gcm128,
52
+ // getBitLength,
53
+ // };
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2lwaGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW5vdGRmL21vZGVscy9DaXBoZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sVUFBVSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBTzFELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBb0I7SUFDMUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxjQUFjO0lBQy9CLE1BQU0sRUFBRSxFQUFFO0NBQ1gsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBb0I7SUFDMUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxjQUFjO0lBQy9CLE1BQU0sRUFBRSxFQUFFO0NBQ1gsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBb0I7SUFDM0MsSUFBSSxFQUFFLFVBQVUsQ0FBQyxlQUFlO0lBQ2hDLE1BQU0sRUFBRSxHQUFHO0NBQ1osQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBb0I7SUFDM0MsSUFBSSxFQUFFLFVBQVUsQ0FBQyxlQUFlO0lBQ2hDLE1BQU0sRUFBRSxHQUFHO0NBQ1osQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBb0I7SUFDM0MsSUFBSSxFQUFFLFVBQVUsQ0FBQyxlQUFlO0lBQ2hDLE1BQU0sRUFBRSxHQUFHO0NBQ1osQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBb0I7SUFDM0MsSUFBSSxFQUFFLFVBQVUsQ0FBQyxlQUFlO0lBQ2hDLE1BQU0sRUFBRSxHQUFHO0NBQ1osQ0FBQztBQUVGLE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBa0I7SUFDN0MsUUFBUSxNQUFNLEVBQUU7UUFDZCxLQUFLLFVBQVUsQ0FBQyxjQUFjO1lBQzVCLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUM1QixLQUFLLFVBQVUsQ0FBQyxjQUFjO1lBQzVCLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUM1QixLQUFLLFVBQVUsQ0FBQyxlQUFlO1lBQzdCLE9BQU8sWUFBWSxDQUFDLE1BQU0sQ0FBQztRQUM3QixLQUFLLFVBQVUsQ0FBQyxlQUFlO1lBQzdCLE9BQU8sWUFBWSxDQUFDLE1BQU0sQ0FBQztRQUM3QixLQUFLLFVBQVUsQ0FBQyxlQUFlO1lBQzdCLE9BQU8sWUFBWSxDQUFDLE1BQU0sQ0FBQztRQUM3QixLQUFLLFVBQVUsQ0FBQyxlQUFlO1lBQzdCLE9BQU8sWUFBWSxDQUFDLE1BQU0sQ0FBQztRQUM3QjtZQUNFLE1BQU0sSUFBSSx1QkFBdUIsQ0FBQyxtQ0FBbUMsTUFBTSxHQUFHLENBQUMsQ0FBQztLQUNuRjtBQUNILENBQUM7QUFFRCxtQkFBbUI7QUFDbkIsaUJBQWlCO0FBQ2pCLGlCQUFpQjtBQUNqQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFFbEIsa0JBQWtCO0FBQ2xCLEtBQUsifQ==
@@ -0,0 +1,22 @@
1
+ import CipherEnum from '../enum/CipherEnum.js';
2
+ import CurveNameEnum from '../enum/CurveNameEnum.js';
3
+ import PolicyTypeEnum from '../enum/PolicyTypeEnum.js';
4
+ const enc = new TextEncoder();
5
+ /**
6
+ * Default encrypt param builders
7
+ *
8
+ * @link https://github.com/virtru/tdf3-cpp/blob/develop/tdf3-src/lib/src/nanotdf_builder_impl.h
9
+ */
10
+ const DefaultParams = {
11
+ ecdsaBinding: false,
12
+ ephemeralCurveName: CurveNameEnum.SECP256R1,
13
+ magicNumberVersion: enc.encode('L1L'),
14
+ offlineMode: false,
15
+ policyType: PolicyTypeEnum.EmbeddedEncrypted,
16
+ signature: false,
17
+ signatureCurveName: CurveNameEnum.SECP256R1,
18
+ symmetricCipher: CipherEnum.AES_256_GCM_96,
19
+ defaultECAlgorithm: 'ec:secp256r1',
20
+ };
21
+ export default DefaultParams;
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmYXVsdFBhcmFtcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW5vdGRmL21vZGVscy9EZWZhdWx0UGFyYW1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sVUFBVSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sYUFBYSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sY0FBYyxNQUFNLDJCQUEyQixDQUFDO0FBRXZELE1BQU0sR0FBRyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7QUFFOUI7Ozs7R0FJRztBQUNILE1BQU0sYUFBYSxHQUFHO0lBQ3BCLFlBQVksRUFBRSxLQUFLO0lBQ25CLGtCQUFrQixFQUFFLGFBQWEsQ0FBQyxTQUFTO0lBQzNDLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ3JDLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxjQUFjLENBQUMsaUJBQWlCO0lBQzVDLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLGtCQUFrQixFQUFFLGFBQWEsQ0FBQyxTQUFTO0lBQzNDLGVBQWUsRUFBRSxVQUFVLENBQUMsY0FBYztJQUMxQyxrQkFBa0IsRUFBRSxjQUFjO0NBQ25DLENBQUM7QUFFRixlQUFlLGFBQWEsQ0FBQyJ9
@@ -0,0 +1,32 @@
1
+ import CurveNameEnum from '../enum/CurveNameEnum.js';
2
+ import { UnsupportedFeatureError } from '../../errors.js';
3
+ export const Secp256R1 = {
4
+ name: CurveNameEnum.SECP256R1,
5
+ length: 256,
6
+ };
7
+ export const Secp384R1 = {
8
+ name: CurveNameEnum.SECP384R1,
9
+ length: 384,
10
+ };
11
+ export const Secp521R1 = {
12
+ name: CurveNameEnum.SECP521R1,
13
+ length: 521,
14
+ };
15
+ /**
16
+ * Get size from Curve
17
+ *
18
+ * @param curveName CurveNameEnum name of the curve
19
+ */
20
+ export function getCurveLength(curveName) {
21
+ switch (curveName) {
22
+ case Secp256R1.name:
23
+ return Secp256R1.length;
24
+ case Secp384R1.name:
25
+ return Secp384R1.length;
26
+ case Secp521R1.name:
27
+ return Secp521R1.length;
28
+ default:
29
+ throw new UnsupportedFeatureError(`unsupported curve name: ${curveName}`);
30
+ }
31
+ }
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWNDdXJ2ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbmFub3RkZi9tb2RlbHMvRWNDdXJ2ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxhQUFhLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFPMUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFtQjtJQUN2QyxJQUFJLEVBQUUsYUFBYSxDQUFDLFNBQVM7SUFDN0IsTUFBTSxFQUFFLEdBQUc7Q0FDWixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFtQjtJQUN2QyxJQUFJLEVBQUUsYUFBYSxDQUFDLFNBQVM7SUFDN0IsTUFBTSxFQUFFLEdBQUc7Q0FDWixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFtQjtJQUN2QyxJQUFJLEVBQUUsYUFBYSxDQUFDLFNBQVM7SUFDN0IsTUFBTSxFQUFFLEdBQUc7Q0FDWixDQUFDO0FBRUY7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsU0FBd0I7SUFDckQsUUFBUSxTQUFTLEVBQUU7UUFDakIsS0FBSyxTQUFTLENBQUMsSUFBSTtZQUNqQixPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDMUIsS0FBSyxTQUFTLENBQUMsSUFBSTtZQUNqQixPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDMUIsS0FBSyxTQUFTLENBQUMsSUFBSTtZQUNqQixPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDMUI7WUFDRSxNQUFNLElBQUksdUJBQXVCLENBQUMsMkJBQTJCLFNBQVMsRUFBRSxDQUFDLENBQUM7S0FDN0U7QUFDSCxDQUFDIn0=
@@ -0,0 +1,250 @@
1
+ // Models
2
+ import { getBitLength } from './Ciphers.js';
3
+ import ResourceLocator from './ResourceLocator.js';
4
+ import PolicyFactory from './Policy/PolicyFactory.js';
5
+ // Helpers
6
+ import { lengthOfPublicKey } from '../helpers/calculateByCurve.js';
7
+ import DefaultParams from './DefaultParams.js';
8
+ import { ConfigurationError, InvalidFileError } from '../../errors.js';
9
+ import { rstrip } from '../../utils.js';
10
+ /**
11
+ * NanoTDF Header
12
+ *
13
+ * The header section is intended to be sent to a KAS and is used by the KAS to derive the decryption key that can
14
+ * decrypts the nanotdf's payload. The Header is structured as follows:
15
+ *
16
+ * | Section | Minimum Length (B) | Maximum Length (B) |
17
+ * |------------------------|--------------------|--------------------|
18
+ * | Magic Number + Version | 3 | 3 |
19
+ * | KAS (resource locator) | 3 | 257 |
20
+ * | ECC Mode | 1 | 1 |
21
+ * | Payload + Sig Mode | 1 | 1 |
22
+ * | Policy | 3 | 257 |
23
+ * | Ephemeral Key | 33 | 67 |
24
+ *
25
+ */
26
+ class Header {
27
+ static parse(buff) {
28
+ let offset = 0;
29
+ /**
30
+ * Magic number and version
31
+ *
32
+ * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3311-magic-number--version
33
+ */
34
+ // Convert to ascii
35
+ const magicNumberVersion = buff.subarray(Header.MAGIC_NUMBER_VERSION_BYTE_OFF, Header.MAGIC_NUMBER_VERSION_BYTE_LEN);
36
+ offset += Header.MAGIC_NUMBER_VERSION_BYTE_LEN;
37
+ /**
38
+ * KAS Resource Locator
39
+ *
40
+ * KAS is a typeof Resource Locator
41
+ *
42
+ * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3312-kas
43
+ * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#341-resource-locator
44
+ */
45
+ const kas = ResourceLocator.parse(buff.subarray(offset));
46
+ offset += kas.length;
47
+ /**
48
+ * ECC & Binding Mode
49
+ *
50
+ * This section contains a 1-byte bitfield describing the ECC Params and Policy binding strategy to use.
51
+ * The Policy Binding strategy is either using a 64-bit GMAC (using AES-256-GCM) tag or an ECDSA signature.
52
+ * The signature size depends on the size of ECC Params used. The nanotdf at this time only supports methods that
53
+ * involve Elliptic Curve Cryptography. The fields are structured as follows:
54
+ *
55
+ * | Section | Bit Length | Bit start index |
56
+ * |---------------------------|------------|-----------------|
57
+ * | USE_ECDSA_BINDING | 1 | 7 |
58
+ * | UNUSED | 4 | 3 |
59
+ * | Ephemeral ECC Params Enum | 3 | 0 |
60
+ *
61
+ * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3313-ecc-and-binding-mode
62
+ */
63
+ const eccBindingModeDV = buff.subarray(offset, offset + Header.ECC_BINDING_MODE_BYTE_LEN);
64
+ const useECDSABinding = eccBindingModeDV[0] >> 7 === 1; // Last bit
65
+ const ephemeralCurveName = eccBindingModeDV[0] & 0x7; // First 3 bits
66
+ offset += Header.ECC_BINDING_MODE_BYTE_LEN;
67
+ /**
68
+ * Symmetric & payload config
69
+ *
70
+ * This section contains a 1 byte data structure composed of bitfields that describe the symmetric ciphers for
71
+ * encrypted payloads. This cipher applies to both the Payload and the Policy of the nanotdf. The fields are as
72
+ * follows:
73
+ *
74
+ * | Section | Bit Length | Bit start index |
75
+ * |-----------------------|------------|-----------------|
76
+ * | HAS_SIGNATURE | 1 | 7 |
77
+ * | Signature ECC Mode | 3 | 4 |
78
+ * | Symmetric Cipher Enum | 4 | 0 |
79
+ *
80
+ * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3314-symmetric-and-payload-config
81
+ */
82
+ const symmetricPayloadDV = buff.subarray(offset, offset + Header.ECC_BINDING_MODE_BYTE_LEN);
83
+ const hasSignature = symmetricPayloadDV[0] >> 7 === 1; // Last bit
84
+ const signatureCurveName = (symmetricPayloadDV[0] >> 4) & 0x7; // Middle 3 bits
85
+ const symmetricCipher = symmetricPayloadDV[0] & 0xf; // First 4 bits
86
+ offset += Header.SYMMETRIC_PAYLOAD_CONFIG_BYTE_LEN;
87
+ /**
88
+ * Policy
89
+ *
90
+ * This section contains a Policy object. The data contained in the Policy allows for definition flexible
91
+ * definitions of a policy including a policy by reference, or an embedded policy. Refer to the Policy object's
92
+ * definition in Section 3.4.2
93
+ *
94
+ * The structure of the Policy is as follows:
95
+ *
96
+ * | Section | Minimum Length (B) | Maximum Length (B) |
97
+ * |-----------|--------------------|--------------------|
98
+ * | Type Enum | 1 | 1 |
99
+ * | Body | 3 | 257 |
100
+ * | Binding | 8 | 132 |
101
+ *
102
+ * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3315-policy
103
+ * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#342-policy
104
+ */
105
+ const { policy, offset: nextOffset } = PolicyFactory.parse(buff.subarray(offset), useECDSABinding, ephemeralCurveName);
106
+ offset += nextOffset;
107
+ /**
108
+ * Ephemeral public key
109
+ *
110
+ * This section contains a Key object. The size of the key is determined by the Encryption Method Section.
111
+ *
112
+ * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3316-key
113
+ */
114
+ // TODO: Resolve where offset isn't adding 1 byte
115
+ const ephemeralPublicKeyLength = lengthOfPublicKey(ephemeralCurveName) + 1;
116
+ const ephemeralPublicKey = buff.subarray(offset, offset + ephemeralPublicKeyLength);
117
+ offset += ephemeralPublicKeyLength;
118
+ // Check if the ephemeral public key length is not the same length
119
+ if (ephemeralPublicKey.byteLength !== ephemeralPublicKeyLength) {
120
+ throw new InvalidFileError('nanotdf parse failure: public key read failure');
121
+ }
122
+ const header = new Header(magicNumberVersion, kas, useECDSABinding, ephemeralCurveName, hasSignature, signatureCurveName, symmetricCipher, policy, ephemeralPublicKey);
123
+ return {
124
+ header,
125
+ offset,
126
+ };
127
+ }
128
+ //Ephemeral Public Key
129
+ // protected _ephemeralPublicKey: string | null = null;
130
+ constructor(magicNumberVersion, kas, useECDSABinding, ephemeralCurveName, hasSignature, signatureCurveName, symmetricCipher, policy, ephemeralPublicKey) {
131
+ // Magic Number & Version
132
+ this.magicNumberVersion = DefaultParams.magicNumberVersion;
133
+ // ECC & Binding Mode
134
+ this.useECDSABinding = DefaultParams.ecdsaBinding;
135
+ this.ephemeralCurveName = DefaultParams.ephemeralCurveName;
136
+ // Symmetric & Payload Config
137
+ this.hasSignature = DefaultParams.signature;
138
+ this.signatureCurveName = DefaultParams.signatureCurveName;
139
+ this.symmetricCipher = DefaultParams.symmetricCipher;
140
+ this.magicNumberVersion = magicNumberVersion;
141
+ this.kas = kas;
142
+ this.useECDSABinding = useECDSABinding;
143
+ this.ephemeralCurveName = ephemeralCurveName;
144
+ this.hasSignature = hasSignature;
145
+ this.signatureCurveName = signatureCurveName;
146
+ this.symmetricCipher = symmetricCipher;
147
+ this.policy = policy;
148
+ this.ephemeralPublicKey = ephemeralPublicKey;
149
+ // Auth tag length in bits (i.e. AES GCM 64 bit)
150
+ this.authTagLength = getBitLength(this.symmetricCipher);
151
+ }
152
+ /**
153
+ * Copy the contents of the header to buffer
154
+ */
155
+ copyToBuffer(target) {
156
+ if (this.length > target.length) {
157
+ throw new InvalidFileError('invalid buffer size to copy tdf header');
158
+ }
159
+ let offset = 0;
160
+ // Write Magic number and version
161
+ target.set(this.magicNumberVersion, 0);
162
+ offset += this.magicNumberVersion.length;
163
+ // Write kas resource locator
164
+ const kasResourceLocatorBuf = this.kas.toBuffer();
165
+ target.set(kasResourceLocatorBuf, offset);
166
+ offset += kasResourceLocatorBuf.length;
167
+ // Write ECC & Binding Mode
168
+ const ecdsaBinding = this.useECDSABinding ? 1 : 0;
169
+ const eccBingingMode = (ecdsaBinding << 7) | this.ephemeralCurveName;
170
+ const eccBingingModeAsByte = new Uint8Array(1);
171
+ eccBingingModeAsByte[0] = eccBingingMode;
172
+ target.set(eccBingingModeAsByte, offset);
173
+ offset += eccBingingModeAsByte.length;
174
+ // Write symmetric & payload config
175
+ const isSignatureEnable = this.hasSignature ? 1 : 0;
176
+ const symmetricPayloadConfig = (isSignatureEnable << 7) | this.signatureCurveName | this.symmetricCipher;
177
+ const symmetricPayloadConfigAsByte = new Uint8Array(1);
178
+ symmetricPayloadConfigAsByte[0] = symmetricPayloadConfig;
179
+ target.set(symmetricPayloadConfigAsByte, offset);
180
+ offset += symmetricPayloadConfigAsByte.length;
181
+ // Write the policy
182
+ const policyBuffer = this.policy.toBuffer();
183
+ target.set(policyBuffer, offset);
184
+ offset += policyBuffer.length;
185
+ // Write the ephemeral public key
186
+ target.set(this.ephemeralPublicKey, offset);
187
+ }
188
+ /**
189
+ * Length
190
+ *
191
+ * @returns { number } Length of header
192
+ */
193
+ get length() {
194
+ return (
195
+ // Length of the magic number and version
196
+ this.magicNumberVersion.length +
197
+ // Length of the KAS resource locator
198
+ this.kas.length +
199
+ // ECC & Binding Mode - 1 Bytes
200
+ 1 +
201
+ // symmetric & payload config - 1 Bytes
202
+ 1 +
203
+ // Length of the policy
204
+ this.policy.getLength() +
205
+ // Length of the ephemeral public key
206
+ this.ephemeralPublicKey.length);
207
+ }
208
+ /**
209
+ * Return nanoTDF header as buffer
210
+ *
211
+ * Warning: This method will allocate memory of length of the header, use
212
+ * copyToBuffer() when copy is not needed.
213
+ */
214
+ toBuffer() {
215
+ const arrayBuffer = new ArrayBuffer(this.length);
216
+ const target = new Uint8Array(arrayBuffer);
217
+ this.copyToBuffer(target);
218
+ return arrayBuffer;
219
+ }
220
+ /**
221
+ * Get KAS Rewrap URL
222
+ */
223
+ getKasRewrapUrl() {
224
+ try {
225
+ return `${rstrip(this.kas.url, '/')}/v2/rewrap`;
226
+ }
227
+ catch (e) {
228
+ throw new ConfigurationError(`cannot construct KAS Rewrap URL: ${e.message}`);
229
+ }
230
+ }
231
+ }
232
+ // Magic Number & Version
233
+ Header.MAGIC_NUMBER_VERSION_BYTE_OFF = 0;
234
+ Header.MAGIC_NUMBER_VERSION_BYTE_LEN = 3;
235
+ Header.MAGIC_NUMBER_OFFSET = 0;
236
+ Header.MAGIC_NUMBER_LENGTH = 18;
237
+ // ECC & Binding Mode
238
+ Header.ECC_BINDING_MODE_BYTE_LEN = 1;
239
+ Header.USE_ECDSA_BINDING_BIT_OFF = 0;
240
+ Header.EPHEMERAL_ECC_CURVE_NAME_BIT_OFF = -3;
241
+ // Symmetric & Payload Config
242
+ Header.SYMMETRIC_PAYLOAD_CONFIG_BYTE_LEN = 1;
243
+ Header.HAS_SIGNATURE_BIT_OFF = 1;
244
+ Header.HAS_SIGNATURE_BIT_LEN = 1;
245
+ Header.SIGNATURE_ECC_CURVE_NAME_BIT_OFF = 1;
246
+ Header.SIGNATURE_ECC_CURVE_NAME_BIT_LEN = 3;
247
+ Header.SYMMETRIC_CIPHER_BIT_OFF = 4;
248
+ Header.SYMMETRIC_CIPHER_BIT_LEN = 4;
249
+ export default Header;
250
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL25hbm90ZGYvbW9kZWxzL0hlYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTO0FBQ1QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1QyxPQUFPLGVBQWUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLGFBQWEsTUFBTSwyQkFBMkIsQ0FBQztBQU10RCxVQUFVO0FBQ1YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxhQUFhLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhDOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQXFCLE1BQU07SUE0Q3pCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBZ0I7UUFDM0IsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRWY7Ozs7V0FJRztRQUNILG1CQUFtQjtRQUNuQixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQ3RDLE1BQU0sQ0FBQyw2QkFBNkIsRUFDcEMsTUFBTSxDQUFDLDZCQUE2QixDQUNyQyxDQUFDO1FBQ0YsTUFBTSxJQUFJLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQztRQUUvQzs7Ozs7OztXQU9HO1FBQ0gsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDekQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFFckI7Ozs7Ozs7Ozs7Ozs7OztXQWVHO1FBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0s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
@@ -0,0 +1,156 @@
1
+ import { getBitLength } from './Ciphers.js';
2
+ import { ConfigurationError, InvalidFileError } from '../../errors.js';
3
+ /**
4
+ * Payload
5
+ *
6
+ * The payload section of the nanotdf contains the ciphertext that is protected by the policy defined in the Header.
7
+ * The structure of the Payload is as follows:
8
+ *
9
+ * | Section | Minimum Length (B) | Maximum Length (B) |
10
+ * |-----------------------|--------------------|--------------------|
11
+ * | Length | 3 | 3 |
12
+ * | IV | 3 | 3 |
13
+ * | Ciphertext | 0 | 16777204 |
14
+ * | Payload MAC (AuthTag) | 8 | 32 |
15
+ */
16
+ class Payload {
17
+ /**
18
+ * Parse the payload
19
+ *
20
+ * Returns a new Payload object and the next offset
21
+ *
22
+ * @param buff Uint8Array
23
+ */
24
+ static parse(header, buff, legacyTDF = false) {
25
+ let offset = 0;
26
+ const authTagByteLength = getBitLength(header.symmetricCipher) / 8;
27
+ /**
28
+ * Length
29
+ *
30
+ * This 3 byte unsigned integer dictates the length of the subsequent ciphertext section.
31
+ *
32
+ * NOTE: it includes the IV + Ciphertext + Auth Tag. To get the Auth Tag length you have to subtract the other
33
+ * lengths
34
+ */
35
+ // TODO: This will not work in Big Endian host environments
36
+ const length = (buff[offset] << 16) + (buff[offset + 1] << 8) + buff[offset + 2];
37
+ const ciphertextLength = length - Payload.IV_LEN - authTagByteLength;
38
+ offset += Payload.LENGTH_LEN;
39
+ const inRange = length >= this.MIN_LENGTH && length <= this.MAX_NANO_TDF_ENCRYPT_PAYLOAD_SIZE;
40
+ if (!inRange) {
41
+ throw new InvalidFileError('nanotdf parse failure: Payload Length Out Of Range');
42
+ }
43
+ /**
44
+ * Parse IV
45
+ *
46
+ * The IV used for encryption. This value is a byte array containing the IV. This IV must never be reused with the
47
+ * same symmetric key. Also, to support an extremely compacted version of the nanotdf the IV value 00 00 00 is
48
+ * reserved for use with an encrypted policy.
49
+ */
50
+ let iv = buff.subarray(offset, offset + Payload.IV_LEN);
51
+ offset += Payload.IV_LEN;
52
+ if (iv.byteLength != 3) {
53
+ throw new InvalidFileError('nanotdf parse failure: Invalid Payload Length');
54
+ }
55
+ if (!legacyTDF) {
56
+ const actuallIV = new Uint8Array(12).fill(0);
57
+ // The the iv from payload to lower-order bits
58
+ actuallIV.set(iv, 9);
59
+ // update the iv
60
+ iv = actuallIV;
61
+ }
62
+ /**
63
+ * Parse Ciphertext w/ Auth Tag
64
+ */
65
+ const ciphertextWithAuthTag = buff.subarray(offset, offset + ciphertextLength + authTagByteLength);
66
+ if (ciphertextWithAuthTag.byteLength + Payload.LENGTH_LEN !== length) {
67
+ throw new InvalidFileError('nanotdf parse failure: Invalid Payload Length');
68
+ }
69
+ /**
70
+ * Parse Ciphertext
71
+ *
72
+ * The byte array of the ciphertext that is protected in the nanotdf. The encryption method used to create or decrypt
73
+ * the ciphertext is defined in the Key Access object in the header.
74
+ */
75
+ const ciphertext = buff.subarray(offset, offset + ciphertextLength);
76
+ offset += ciphertextLength;
77
+ /**
78
+ * Auth Tag
79
+ *
80
+ * GMAC = 8 byte
81
+ * ECDSA = size of curve
82
+ *
83
+ * The MAC of the payload. The Size of this MAC is determined by the Encryption Method Enum used in the Symmetric and
84
+ * Payload Config object in the header.
85
+ *
86
+ * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3314-symmetric-and-payload-config
87
+ */
88
+ const authTag = buff.subarray(offset, offset + authTagByteLength);
89
+ offset += authTagByteLength;
90
+ return {
91
+ payload: new Payload(iv, ciphertext, authTag, ciphertextWithAuthTag),
92
+ offset,
93
+ };
94
+ }
95
+ constructor(iv, ciphertext, authTag, ciphertextWithAuthTag) {
96
+ this.iv = iv;
97
+ this.ciphertext = ciphertext;
98
+ this.authTag = authTag;
99
+ // If ciphertextWithAuthTag is not set then combine it
100
+ // Ideally it is set so an additional buffer is not needed
101
+ if (ciphertextWithAuthTag === undefined) {
102
+ this.ciphertextWithAuthTag = new Uint8Array(ciphertext.length + authTag.length);
103
+ this.ciphertextWithAuthTag.set(ciphertext);
104
+ this.ciphertextWithAuthTag.set(authTag, ciphertext.length);
105
+ }
106
+ else {
107
+ this.ciphertextWithAuthTag = ciphertextWithAuthTag;
108
+ }
109
+ }
110
+ /**
111
+ * Length
112
+ *
113
+ * @returns { number } Length of signature
114
+ */
115
+ get length() {
116
+ return (
117
+ // Bytes(3) to hold the length of the payload
118
+ 3 +
119
+ // Length of the IV
120
+ this.iv.length +
121
+ // Length of the ciphertext
122
+ this.ciphertext.length +
123
+ // Length of the auth tag
124
+ this.authTag.length);
125
+ }
126
+ /**
127
+ * Copy the contents of the signature to buffer
128
+ */
129
+ copyToBuffer(target) {
130
+ if (this.length > target.length) {
131
+ throw new Error('internal: invalid buffer size to copy payload');
132
+ }
133
+ const lengthOfEncryptedPayload = this.iv.length + this.ciphertext.length + this.authTag.length;
134
+ if (lengthOfEncryptedPayload > Payload.MAX_NANO_TDF_ENCRYPT_PAYLOAD_SIZE) {
135
+ throw new ConfigurationError("TDF encrypted payload can't be more that 2^24");
136
+ }
137
+ const lengthAsUint32 = new Uint32Array(1);
138
+ lengthAsUint32[0] = lengthOfEncryptedPayload;
139
+ const lengthAsUint24 = new Uint8Array(lengthAsUint32.buffer);
140
+ // NOTE: We are only interested in only first 3 bytes.
141
+ const payloadSizeAsBg = new Uint8Array(3);
142
+ payloadSizeAsBg[0] = lengthAsUint24[2];
143
+ payloadSizeAsBg[1] = lengthAsUint24[1];
144
+ payloadSizeAsBg[2] = lengthAsUint24[0];
145
+ target.set(payloadSizeAsBg, 0);
146
+ target.set(this.iv, payloadSizeAsBg.length);
147
+ target.set(this.ciphertext, payloadSizeAsBg.length + this.iv.length);
148
+ target.set(this.authTag, payloadSizeAsBg.length + this.iv.length + this.ciphertext.length);
149
+ }
150
+ }
151
+ Payload.LENGTH_LEN = 3;
152
+ Payload.IV_LEN = 3;
153
+ Payload.MIN_LENGTH = 11;
154
+ Payload.MAX_NANO_TDF_ENCRYPT_PAYLOAD_SIZE = 16777216; // 3 bytes unsigned int.
155
+ export default Payload;
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGF5bG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW5vdGRmL21vZGVscy9QYXlsb2FkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDNUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdkU7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBcUIsT0FBTztJQVcxQjs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUNWLE1BQWMsRUFDZCxJQUFnQixFQUNoQixTQUFTLEdBQUcsS0FBSztRQUVqQixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDZixNQUFNLGlCQUFpQixHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRW5FOzs7Ozs7O1dBT0c7UUFDSCwyREFBMkQ7UUFDM0QsTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDakYsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQztRQUNyRSxNQUFNLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUU3QixNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLGlDQUFpQyxDQUFDO1FBRTlGLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDWixNQUFNLElBQUksZ0JBQWdCLENBQUMsb0RBQW9ELENBQUMsQ0FBQztTQUNsRjtRQUVEOzs7Ozs7V0FN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