@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.
- package/README.md +52 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/src/access.js +155 -0
- package/dist/cjs/src/auth/Eas.js +60 -0
- package/dist/cjs/src/auth/auth.js +79 -0
- package/dist/cjs/src/auth/oidc-clientcredentials-provider.js +26 -0
- package/dist/cjs/src/auth/oidc-externaljwt-provider.js +33 -0
- package/dist/cjs/src/auth/oidc-refreshtoken-provider.js +34 -0
- package/dist/cjs/src/auth/oidc.js +222 -0
- package/dist/cjs/src/auth/providers.js +143 -0
- package/dist/cjs/src/encodings/base64.js +154 -0
- package/dist/cjs/src/encodings/hex.js +70 -0
- package/dist/cjs/src/encodings/index.js +29 -0
- package/dist/cjs/src/errors.js +138 -0
- package/dist/cjs/src/index.js +344 -0
- package/dist/cjs/src/nanotdf/Client.js +296 -0
- package/dist/cjs/src/nanotdf/NanoTDF.js +94 -0
- package/dist/cjs/src/nanotdf/browser-entry.js +19 -0
- package/dist/cjs/src/nanotdf/constants.js +5 -0
- package/dist/cjs/src/nanotdf/decrypt.js +17 -0
- package/dist/cjs/src/nanotdf/encrypt-dataset.js +38 -0
- package/dist/cjs/src/nanotdf/encrypt.js +132 -0
- package/dist/cjs/src/nanotdf/enum/CipherEnum.js +13 -0
- package/dist/cjs/src/nanotdf/enum/CurveNameEnum.js +15 -0
- package/dist/cjs/src/nanotdf/enum/EncodingEnum.js +8 -0
- package/dist/cjs/src/nanotdf/enum/PolicyTypeEnum.js +11 -0
- package/dist/cjs/src/nanotdf/enum/ProtocolEnum.js +10 -0
- package/dist/cjs/src/nanotdf/enum/ResourceLocatorIdentifierEnum.js +11 -0
- package/dist/cjs/src/nanotdf/helpers/calculateByCurve.js +29 -0
- package/dist/cjs/src/nanotdf/helpers/getHkdfSalt.js +11 -0
- package/dist/cjs/src/nanotdf/index.js +25 -0
- package/dist/cjs/src/nanotdf/interfaces/PolicyInterface.js +3 -0
- package/dist/cjs/src/nanotdf/models/Ciphers.js +61 -0
- package/dist/cjs/src/nanotdf/models/DefaultParams.js +27 -0
- package/dist/cjs/src/nanotdf/models/EcCurves.js +39 -0
- package/dist/cjs/src/nanotdf/models/Header.js +255 -0
- package/dist/cjs/src/nanotdf/models/Payload.js +158 -0
- package/dist/cjs/src/nanotdf/models/Policy/AbstractPolicy.js +73 -0
- package/dist/cjs/src/nanotdf/models/Policy/EmbeddedPolicy.js +82 -0
- package/dist/cjs/src/nanotdf/models/Policy/PolicyFactory.js +38 -0
- package/dist/cjs/src/nanotdf/models/Policy/RemotePolicy.js +62 -0
- package/dist/cjs/src/nanotdf/models/ResourceLocator.js +211 -0
- package/dist/cjs/src/nanotdf/models/Signature.js +77 -0
- package/dist/cjs/src/nanotdf-crypto/ciphers.js +17 -0
- package/dist/cjs/src/nanotdf-crypto/decrypt.js +24 -0
- package/dist/cjs/src/nanotdf-crypto/digest.js +7 -0
- package/dist/cjs/src/nanotdf-crypto/ecdsaSignature.js +83 -0
- package/dist/cjs/src/nanotdf-crypto/encrypt.js +24 -0
- package/dist/cjs/src/nanotdf-crypto/enums.js +52 -0
- package/dist/cjs/src/nanotdf-crypto/exportCryptoKey.js +20 -0
- package/dist/cjs/src/nanotdf-crypto/generateKeyPair.js +13 -0
- package/dist/cjs/src/nanotdf-crypto/generateRandomNumber.js +12 -0
- package/dist/cjs/src/nanotdf-crypto/importRawKey.js +18 -0
- package/dist/cjs/src/nanotdf-crypto/index.js +52 -0
- package/dist/cjs/src/nanotdf-crypto/keyAgreement.js +91 -0
- package/dist/cjs/src/nanotdf-crypto/pemPublicToCrypto.js +225 -0
- package/dist/cjs/src/policy/api.js +58 -0
- package/dist/cjs/src/policy/attributes.js +3 -0
- package/dist/cjs/src/policy/granter.js +146 -0
- package/dist/cjs/src/tdf/AttributeObject.js +15 -0
- package/dist/cjs/src/tdf/AttributeObjectJwt.js +3 -0
- package/dist/cjs/src/tdf/Crypto.js +47 -0
- package/dist/cjs/src/tdf/EntityObject.js +3 -0
- package/dist/cjs/src/tdf/NanoTDF/NanoTDF.js +38 -0
- package/dist/cjs/src/tdf/Policy.js +50 -0
- package/dist/cjs/src/tdf/PolicyObject.js +3 -0
- package/dist/cjs/src/tdf/TypedArray.js +3 -0
- package/dist/cjs/src/tdf/index.js +35 -0
- package/dist/cjs/src/types/index.js +3 -0
- package/dist/cjs/src/utils.js +147 -0
- package/dist/cjs/src/version.js +12 -0
- package/dist/cjs/tdf3/index.js +57 -0
- package/dist/cjs/tdf3/src/assertions.js +118 -0
- package/dist/cjs/tdf3/src/binary.js +153 -0
- package/dist/cjs/tdf3/src/ciphers/aes-gcm-cipher.js +56 -0
- package/dist/cjs/tdf3/src/ciphers/algorithms.js +8 -0
- package/dist/cjs/tdf3/src/ciphers/index.js +8 -0
- package/dist/cjs/tdf3/src/ciphers/symmetric-cipher-base.js +22 -0
- package/dist/cjs/tdf3/src/client/DecoratedReadableStream.js +116 -0
- package/dist/cjs/tdf3/src/client/builders.js +561 -0
- package/dist/cjs/tdf3/src/client/index.js +460 -0
- package/dist/cjs/tdf3/src/client/validation.js +63 -0
- package/dist/cjs/tdf3/src/crypto/crypto-utils.js +116 -0
- package/dist/cjs/tdf3/src/crypto/declarations.js +8 -0
- package/dist/cjs/tdf3/src/crypto/index.js +315 -0
- package/dist/cjs/tdf3/src/index.js +34 -0
- package/dist/cjs/tdf3/src/models/attribute-set.js +122 -0
- package/dist/cjs/tdf3/src/models/encryption-information.js +90 -0
- package/dist/cjs/tdf3/src/models/index.js +25 -0
- package/dist/cjs/tdf3/src/models/key-access.js +103 -0
- package/dist/cjs/tdf3/src/models/manifest.js +3 -0
- package/dist/cjs/tdf3/src/models/payload.js +3 -0
- package/dist/cjs/tdf3/src/models/policy.js +24 -0
- package/dist/cjs/tdf3/src/models/upsert-response.js +3 -0
- package/dist/cjs/tdf3/src/tdf.js +907 -0
- package/dist/cjs/tdf3/src/templates/default.html.js +98 -0
- package/dist/cjs/tdf3/src/templates/escaper.js +15 -0
- package/dist/cjs/tdf3/src/templates/index.js +12 -0
- package/dist/cjs/tdf3/src/utils/buffer-crc32.js +48 -0
- package/dist/cjs/tdf3/src/utils/chunkers.js +106 -0
- package/dist/cjs/tdf3/src/utils/index.js +296 -0
- package/dist/cjs/tdf3/src/utils/keysplit.js +61 -0
- package/dist/cjs/tdf3/src/utils/zip-reader.js +253 -0
- package/dist/cjs/tdf3/src/utils/zip-writer.js +308 -0
- package/dist/cjs/tdf3/src/version.js +6 -0
- package/dist/types/src/access.d.ts +47 -0
- package/dist/types/src/access.d.ts.map +1 -0
- package/dist/types/src/auth/Eas.d.ts +34 -0
- package/dist/types/src/auth/Eas.d.ts.map +1 -0
- package/dist/types/src/auth/auth.d.ts +86 -0
- package/dist/types/src/auth/auth.d.ts.map +1 -0
- package/dist/types/src/auth/oidc-clientcredentials-provider.d.ts +9 -0
- package/dist/types/src/auth/oidc-clientcredentials-provider.d.ts.map +1 -0
- package/dist/types/src/auth/oidc-externaljwt-provider.d.ts +10 -0
- package/dist/types/src/auth/oidc-externaljwt-provider.d.ts.map +1 -0
- package/dist/types/src/auth/oidc-refreshtoken-provider.d.ts +10 -0
- package/dist/types/src/auth/oidc-refreshtoken-provider.d.ts.map +1 -0
- package/dist/types/src/auth/oidc.d.ts +104 -0
- package/dist/types/src/auth/oidc.d.ts.map +1 -0
- package/dist/types/src/auth/providers.d.ts +67 -0
- package/dist/types/src/auth/providers.d.ts.map +1 -0
- package/dist/types/src/encodings/base64.d.ts +18 -0
- package/dist/types/src/encodings/base64.d.ts.map +1 -0
- package/dist/types/src/encodings/hex.d.ts +5 -0
- package/dist/types/src/encodings/hex.d.ts.map +1 -0
- package/dist/types/src/encodings/index.d.ts +3 -0
- package/dist/types/src/encodings/index.d.ts.map +1 -0
- package/dist/types/src/errors.d.ts +72 -0
- package/dist/types/src/errors.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +138 -0
- package/dist/types/src/index.d.ts.map +1 -0
- package/dist/types/src/nanotdf/Client.d.ts +95 -0
- package/dist/types/src/nanotdf/Client.d.ts.map +1 -0
- package/dist/types/src/nanotdf/NanoTDF.d.ts +25 -0
- package/dist/types/src/nanotdf/NanoTDF.d.ts.map +1 -0
- package/dist/types/src/nanotdf/browser-entry.d.ts +17 -0
- package/dist/types/src/nanotdf/browser-entry.d.ts.map +1 -0
- package/dist/types/src/nanotdf/constants.d.ts +2 -0
- package/dist/types/src/nanotdf/constants.d.ts.map +1 -0
- package/dist/types/src/nanotdf/decrypt.d.ts +9 -0
- package/dist/types/src/nanotdf/decrypt.d.ts.map +1 -0
- package/dist/types/src/nanotdf/encrypt-dataset.d.ts +12 -0
- package/dist/types/src/nanotdf/encrypt-dataset.d.ts.map +1 -0
- package/dist/types/src/nanotdf/encrypt.d.ts +14 -0
- package/dist/types/src/nanotdf/encrypt.d.ts.map +1 -0
- package/dist/types/src/nanotdf/enum/CipherEnum.d.ts +10 -0
- package/dist/types/src/nanotdf/enum/CipherEnum.d.ts.map +1 -0
- package/dist/types/src/nanotdf/enum/CurveNameEnum.d.ts +12 -0
- package/dist/types/src/nanotdf/enum/CurveNameEnum.d.ts.map +1 -0
- package/dist/types/src/nanotdf/enum/EncodingEnum.d.ts +5 -0
- package/dist/types/src/nanotdf/enum/EncodingEnum.d.ts.map +1 -0
- package/dist/types/src/nanotdf/enum/PolicyTypeEnum.d.ts +8 -0
- package/dist/types/src/nanotdf/enum/PolicyTypeEnum.d.ts.map +1 -0
- package/dist/types/src/nanotdf/enum/ProtocolEnum.d.ts +7 -0
- package/dist/types/src/nanotdf/enum/ProtocolEnum.d.ts.map +1 -0
- package/dist/types/src/nanotdf/enum/ResourceLocatorIdentifierEnum.d.ts +8 -0
- package/dist/types/src/nanotdf/enum/ResourceLocatorIdentifierEnum.d.ts.map +1 -0
- package/dist/types/src/nanotdf/helpers/calculateByCurve.d.ts +20 -0
- package/dist/types/src/nanotdf/helpers/calculateByCurve.d.ts.map +1 -0
- package/dist/types/src/nanotdf/helpers/getHkdfSalt.d.ts +9 -0
- package/dist/types/src/nanotdf/helpers/getHkdfSalt.d.ts.map +1 -0
- package/dist/types/src/nanotdf/index.d.ts +9 -0
- package/dist/types/src/nanotdf/index.d.ts.map +1 -0
- package/dist/types/src/nanotdf/interfaces/PolicyInterface.d.ts +17 -0
- package/dist/types/src/nanotdf/interfaces/PolicyInterface.d.ts.map +1 -0
- package/dist/types/src/nanotdf/models/Ciphers.d.ts +14 -0
- package/dist/types/src/nanotdf/models/Ciphers.d.ts.map +1 -0
- package/dist/types/src/nanotdf/models/DefaultParams.d.ts +21 -0
- package/dist/types/src/nanotdf/models/DefaultParams.d.ts.map +1 -0
- package/dist/types/src/nanotdf/models/EcCurves.d.ts +15 -0
- package/dist/types/src/nanotdf/models/EcCurves.d.ts.map +1 -0
- package/dist/types/src/nanotdf/models/Header.d.ts +73 -0
- package/dist/types/src/nanotdf/models/Header.d.ts.map +1 -0
- package/dist/types/src/nanotdf/models/Payload.d.ts +47 -0
- package/dist/types/src/nanotdf/models/Payload.d.ts.map +1 -0
- package/dist/types/src/nanotdf/models/Policy/AbstractPolicy.d.ts +52 -0
- package/dist/types/src/nanotdf/models/Policy/AbstractPolicy.d.ts.map +1 -0
- package/dist/types/src/nanotdf/models/Policy/EmbeddedPolicy.d.ts +35 -0
- package/dist/types/src/nanotdf/models/Policy/EmbeddedPolicy.d.ts.map +1 -0
- package/dist/types/src/nanotdf/models/Policy/PolicyFactory.d.ts +11 -0
- package/dist/types/src/nanotdf/models/Policy/PolicyFactory.d.ts.map +1 -0
- package/dist/types/src/nanotdf/models/Policy/RemotePolicy.d.ts +31 -0
- package/dist/types/src/nanotdf/models/Policy/RemotePolicy.d.ts.map +1 -0
- package/dist/types/src/nanotdf/models/ResourceLocator.d.ts +65 -0
- package/dist/types/src/nanotdf/models/ResourceLocator.d.ts.map +1 -0
- package/dist/types/src/nanotdf/models/Signature.d.ts +33 -0
- package/dist/types/src/nanotdf/models/Signature.d.ts.map +1 -0
- package/dist/types/src/nanotdf-crypto/ciphers.d.ts +8 -0
- package/dist/types/src/nanotdf-crypto/ciphers.d.ts.map +1 -0
- package/dist/types/src/nanotdf-crypto/decrypt.d.ts +14 -0
- package/dist/types/src/nanotdf-crypto/decrypt.d.ts.map +1 -0
- package/dist/types/src/nanotdf-crypto/digest.d.ts +3 -0
- package/dist/types/src/nanotdf-crypto/digest.d.ts.map +1 -0
- package/dist/types/src/nanotdf-crypto/ecdsaSignature.d.ts +35 -0
- package/dist/types/src/nanotdf-crypto/ecdsaSignature.d.ts.map +1 -0
- package/dist/types/src/nanotdf-crypto/encrypt.d.ts +14 -0
- package/dist/types/src/nanotdf-crypto/encrypt.d.ts.map +1 -0
- package/dist/types/src/nanotdf-crypto/enums.d.ts +42 -0
- package/dist/types/src/nanotdf-crypto/enums.d.ts.map +1 -0
- package/dist/types/src/nanotdf-crypto/exportCryptoKey.d.ts +7 -0
- package/dist/types/src/nanotdf-crypto/exportCryptoKey.d.ts.map +1 -0
- package/dist/types/src/nanotdf-crypto/generateKeyPair.d.ts +10 -0
- package/dist/types/src/nanotdf-crypto/generateKeyPair.d.ts.map +1 -0
- package/dist/types/src/nanotdf-crypto/generateRandomNumber.d.ts +5 -0
- package/dist/types/src/nanotdf-crypto/generateRandomNumber.d.ts.map +1 -0
- package/dist/types/src/nanotdf-crypto/importRawKey.d.ts +13 -0
- package/dist/types/src/nanotdf-crypto/importRawKey.d.ts.map +1 -0
- package/dist/types/src/nanotdf-crypto/index.d.ts +12 -0
- package/dist/types/src/nanotdf-crypto/index.d.ts.map +1 -0
- package/dist/types/src/nanotdf-crypto/keyAgreement.d.ts +28 -0
- package/dist/types/src/nanotdf-crypto/keyAgreement.d.ts.map +1 -0
- package/dist/types/src/nanotdf-crypto/pemPublicToCrypto.d.ts +28 -0
- package/dist/types/src/nanotdf-crypto/pemPublicToCrypto.d.ts.map +1 -0
- package/dist/types/src/policy/api.d.ts +4 -0
- package/dist/types/src/policy/api.d.ts.map +1 -0
- package/dist/types/src/policy/attributes.d.ts +95 -0
- package/dist/types/src/policy/attributes.d.ts.map +1 -0
- package/dist/types/src/policy/granter.d.ts +23 -0
- package/dist/types/src/policy/granter.d.ts.map +1 -0
- package/dist/types/src/tdf/AttributeObject.d.ts +13 -0
- package/dist/types/src/tdf/AttributeObject.d.ts.map +1 -0
- package/dist/types/src/tdf/AttributeObjectJwt.d.ts +4 -0
- package/dist/types/src/tdf/AttributeObjectJwt.d.ts.map +1 -0
- package/dist/types/src/tdf/Crypto.d.ts +37 -0
- package/dist/types/src/tdf/Crypto.d.ts.map +1 -0
- package/dist/types/src/tdf/EntityObject.d.ts +18 -0
- package/dist/types/src/tdf/EntityObject.d.ts.map +1 -0
- package/dist/types/src/tdf/NanoTDF/NanoTDF.d.ts +99 -0
- package/dist/types/src/tdf/NanoTDF/NanoTDF.d.ts.map +1 -0
- package/dist/types/src/tdf/Policy.d.ts +28 -0
- package/dist/types/src/tdf/Policy.d.ts.map +1 -0
- package/dist/types/src/tdf/PolicyObject.d.ts +11 -0
- package/dist/types/src/tdf/PolicyObject.d.ts.map +1 -0
- package/dist/types/src/tdf/TypedArray.d.ts +3 -0
- package/dist/types/src/tdf/TypedArray.d.ts.map +1 -0
- package/dist/types/src/tdf/index.d.ts +7 -0
- package/dist/types/src/tdf/index.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +45 -0
- package/dist/types/src/types/index.d.ts.map +1 -0
- package/dist/types/src/utils.d.ts +45 -0
- package/dist/types/src/utils.d.ts.map +1 -0
- package/dist/types/src/version.d.ts +9 -0
- package/dist/types/src/version.d.ts.map +1 -0
- package/dist/types/tdf3/index.d.ts +16 -0
- package/dist/types/tdf3/index.d.ts.map +1 -0
- package/dist/types/tdf3/src/assertions.d.ts +63 -0
- package/dist/types/tdf3/src/assertions.d.ts.map +1 -0
- package/dist/types/tdf3/src/binary.d.ts +38 -0
- package/dist/types/tdf3/src/binary.d.ts.map +1 -0
- package/dist/types/tdf3/src/ciphers/aes-gcm-cipher.d.ts +18 -0
- package/dist/types/tdf3/src/ciphers/aes-gcm-cipher.d.ts.map +1 -0
- package/dist/types/tdf3/src/ciphers/algorithms.d.ts +4 -0
- package/dist/types/tdf3/src/ciphers/algorithms.d.ts.map +1 -0
- package/dist/types/tdf3/src/ciphers/index.d.ts +3 -0
- package/dist/types/tdf3/src/ciphers/index.d.ts.map +1 -0
- package/dist/types/tdf3/src/ciphers/symmetric-cipher-base.d.ts +14 -0
- package/dist/types/tdf3/src/ciphers/symmetric-cipher-base.d.ts.map +1 -0
- package/dist/types/tdf3/src/client/DecoratedReadableStream.d.ts +53 -0
- package/dist/types/tdf3/src/client/DecoratedReadableStream.d.ts.map +1 -0
- package/dist/types/tdf3/src/client/builders.d.ts +436 -0
- package/dist/types/tdf3/src/client/builders.d.ts.map +1 -0
- package/dist/types/tdf3/src/client/index.d.ts +139 -0
- package/dist/types/tdf3/src/client/index.d.ts.map +1 -0
- package/dist/types/tdf3/src/client/validation.d.ts +8 -0
- package/dist/types/tdf3/src/client/validation.d.ts.map +1 -0
- package/dist/types/tdf3/src/crypto/crypto-utils.d.ts +34 -0
- package/dist/types/tdf3/src/crypto/crypto-utils.d.ts.map +1 -0
- package/dist/types/tdf3/src/crypto/declarations.d.ts +60 -0
- package/dist/types/tdf3/src/crypto/declarations.d.ts.map +1 -0
- package/dist/types/tdf3/src/crypto/index.d.ts +103 -0
- package/dist/types/tdf3/src/crypto/index.d.ts.map +1 -0
- package/dist/types/tdf3/src/index.d.ts +5 -0
- package/dist/types/tdf3/src/index.d.ts.map +1 -0
- package/dist/types/tdf3/src/models/attribute-set.d.ts +65 -0
- package/dist/types/tdf3/src/models/attribute-set.d.ts.map +1 -0
- package/dist/types/tdf3/src/models/encryption-information.d.ts +49 -0
- package/dist/types/tdf3/src/models/encryption-information.d.ts.map +1 -0
- package/dist/types/tdf3/src/models/index.d.ts +9 -0
- package/dist/types/tdf3/src/models/index.d.ts.map +1 -0
- package/dist/types/tdf3/src/models/key-access.d.ts +42 -0
- package/dist/types/tdf3/src/models/key-access.d.ts.map +1 -0
- package/dist/types/tdf3/src/models/manifest.d.ts +9 -0
- package/dist/types/tdf3/src/models/manifest.d.ts.map +1 -0
- package/dist/types/tdf3/src/models/payload.d.ts +7 -0
- package/dist/types/tdf3/src/models/payload.d.ts.map +1 -0
- package/dist/types/tdf3/src/models/policy.d.ts +13 -0
- package/dist/types/tdf3/src/models/policy.d.ts.map +1 -0
- package/dist/types/tdf3/src/models/upsert-response.d.ts +16 -0
- package/dist/types/tdf3/src/models/upsert-response.d.ts.map +1 -0
- package/dist/types/tdf3/src/tdf.d.ts +152 -0
- package/dist/types/tdf3/src/tdf.d.ts.map +1 -0
- package/dist/types/tdf3/src/templates/default.html.d.ts +8 -0
- package/dist/types/tdf3/src/templates/default.html.d.ts.map +1 -0
- package/dist/types/tdf3/src/templates/escaper.d.ts +6 -0
- package/dist/types/tdf3/src/templates/escaper.d.ts.map +1 -0
- package/dist/types/tdf3/src/templates/index.d.ts +3 -0
- package/dist/types/tdf3/src/templates/index.d.ts.map +1 -0
- package/dist/types/tdf3/src/utils/buffer-crc32.d.ts +2 -0
- package/dist/types/tdf3/src/utils/buffer-crc32.d.ts.map +1 -0
- package/dist/types/tdf3/src/utils/chunkers.d.ts +29 -0
- package/dist/types/tdf3/src/utils/chunkers.d.ts.map +1 -0
- package/dist/types/tdf3/src/utils/index.d.ts +36 -0
- package/dist/types/tdf3/src/utils/index.d.ts.map +1 -0
- package/dist/types/tdf3/src/utils/keysplit.d.ts +19 -0
- package/dist/types/tdf3/src/utils/keysplit.d.ts.map +1 -0
- package/dist/types/tdf3/src/utils/zip-reader.d.ts +63 -0
- package/dist/types/tdf3/src/utils/zip-reader.d.ts.map +1 -0
- package/dist/types/tdf3/src/utils/zip-writer.d.ts +35 -0
- package/dist/types/tdf3/src/utils/zip-writer.d.ts.map +1 -0
- package/dist/types/tdf3/src/version.d.ts +3 -0
- package/dist/types/tdf3/src/version.d.ts.map +1 -0
- package/dist/web/package.json +3 -0
- package/dist/web/src/access.js +147 -0
- package/dist/web/src/auth/Eas.js +55 -0
- package/dist/web/src/auth/auth.js +71 -0
- package/dist/web/src/auth/oidc-clientcredentials-provider.js +22 -0
- package/dist/web/src/auth/oidc-externaljwt-provider.js +29 -0
- package/dist/web/src/auth/oidc-refreshtoken-provider.js +30 -0
- package/dist/web/src/auth/oidc.js +215 -0
- package/dist/web/src/auth/providers.js +119 -0
- package/dist/web/src/encodings/base64.js +147 -0
- package/dist/web/src/encodings/hex.js +63 -0
- package/dist/web/src/encodings/index.js +3 -0
- package/dist/web/src/errors.js +123 -0
- package/dist/web/src/index.js +313 -0
- package/dist/web/src/nanotdf/Client.js +268 -0
- package/dist/web/src/nanotdf/NanoTDF.js +89 -0
- package/dist/web/src/nanotdf/browser-entry.js +14 -0
- package/dist/web/src/nanotdf/constants.js +2 -0
- package/dist/web/src/nanotdf/decrypt.js +14 -0
- package/dist/web/src/nanotdf/encrypt-dataset.js +32 -0
- package/dist/web/src/nanotdf/encrypt.js +126 -0
- package/dist/web/src/nanotdf/enum/CipherEnum.js +11 -0
- package/dist/web/src/nanotdf/enum/CurveNameEnum.js +13 -0
- package/dist/web/src/nanotdf/enum/EncodingEnum.js +6 -0
- package/dist/web/src/nanotdf/enum/PolicyTypeEnum.js +9 -0
- package/dist/web/src/nanotdf/enum/ProtocolEnum.js +8 -0
- package/dist/web/src/nanotdf/enum/ResourceLocatorIdentifierEnum.js +9 -0
- package/dist/web/src/nanotdf/helpers/calculateByCurve.js +24 -0
- package/dist/web/src/nanotdf/helpers/getHkdfSalt.js +8 -0
- package/dist/web/src/nanotdf/index.js +11 -0
- package/dist/web/src/nanotdf/interfaces/PolicyInterface.js +2 -0
- package/dist/web/src/nanotdf/models/Ciphers.js +54 -0
- package/dist/web/src/nanotdf/models/DefaultParams.js +22 -0
- package/dist/web/src/nanotdf/models/EcCurves.js +32 -0
- package/dist/web/src/nanotdf/models/Header.js +250 -0
- package/dist/web/src/nanotdf/models/Payload.js +156 -0
- package/dist/web/src/nanotdf/models/Policy/AbstractPolicy.js +71 -0
- package/dist/web/src/nanotdf/models/Policy/EmbeddedPolicy.js +77 -0
- package/dist/web/src/nanotdf/models/Policy/PolicyFactory.js +33 -0
- package/dist/web/src/nanotdf/models/Policy/RemotePolicy.js +57 -0
- package/dist/web/src/nanotdf/models/ResourceLocator.js +206 -0
- package/dist/web/src/nanotdf/models/Signature.js +74 -0
- package/dist/web/src/nanotdf-crypto/ciphers.js +14 -0
- package/dist/web/src/nanotdf-crypto/decrypt.js +21 -0
- package/dist/web/src/nanotdf-crypto/digest.js +4 -0
- package/dist/web/src/nanotdf-crypto/ecdsaSignature.js +77 -0
- package/dist/web/src/nanotdf-crypto/encrypt.js +21 -0
- package/dist/web/src/nanotdf-crypto/enums.js +49 -0
- package/dist/web/src/nanotdf-crypto/exportCryptoKey.js +17 -0
- package/dist/web/src/nanotdf-crypto/generateKeyPair.js +10 -0
- package/dist/web/src/nanotdf-crypto/generateRandomNumber.js +9 -0
- package/dist/web/src/nanotdf-crypto/importRawKey.js +15 -0
- package/dist/web/src/nanotdf-crypto/index.js +12 -0
- package/dist/web/src/nanotdf-crypto/keyAgreement.js +87 -0
- package/dist/web/src/nanotdf-crypto/pemPublicToCrypto.js +197 -0
- package/dist/web/src/policy/api.js +54 -0
- package/dist/web/src/policy/attributes.js +2 -0
- package/dist/web/src/policy/granter.js +141 -0
- package/dist/web/src/tdf/AttributeObject.js +11 -0
- package/dist/web/src/tdf/AttributeObjectJwt.js +2 -0
- package/dist/web/src/tdf/Crypto.js +44 -0
- package/dist/web/src/tdf/EntityObject.js +2 -0
- package/dist/web/src/tdf/NanoTDF/NanoTDF.js +35 -0
- package/dist/web/src/tdf/Policy.js +48 -0
- package/dist/web/src/tdf/PolicyObject.js +2 -0
- package/dist/web/src/tdf/TypedArray.js +2 -0
- package/dist/web/src/tdf/index.js +4 -0
- package/dist/web/src/types/index.js +2 -0
- package/dist/web/src/utils.js +133 -0
- package/dist/web/src/version.js +9 -0
- package/dist/web/tdf3/index.js +13 -0
- package/dist/web/tdf3/src/assertions.js +111 -0
- package/dist/web/tdf3/src/binary.js +149 -0
- package/dist/web/tdf3/src/ciphers/aes-gcm-cipher.js +52 -0
- package/dist/web/tdf3/src/ciphers/algorithms.js +5 -0
- package/dist/web/tdf3/src/ciphers/index.js +3 -0
- package/dist/web/tdf3/src/ciphers/symmetric-cipher-base.js +18 -0
- package/dist/web/tdf3/src/client/DecoratedReadableStream.js +107 -0
- package/dist/web/tdf3/src/client/builders.js +557 -0
- package/dist/web/tdf3/src/client/index.js +423 -0
- package/dist/web/tdf3/src/client/validation.js +58 -0
- package/dist/web/tdf3/src/crypto/crypto-utils.js +107 -0
- package/dist/web/tdf3/src/crypto/declarations.js +5 -0
- package/dist/web/tdf3/src/crypto/index.js +296 -0
- package/dist/web/tdf3/src/index.js +5 -0
- package/dist/web/tdf3/src/models/attribute-set.js +118 -0
- package/dist/web/tdf3/src/models/encryption-information.js +86 -0
- package/dist/web/tdf3/src/models/index.js +9 -0
- package/dist/web/tdf3/src/models/key-access.js +74 -0
- package/dist/web/tdf3/src/models/manifest.js +2 -0
- package/dist/web/tdf3/src/models/payload.js +2 -0
- package/dist/web/tdf3/src/models/policy.js +20 -0
- package/dist/web/tdf3/src/models/upsert-response.js +2 -0
- package/dist/web/tdf3/src/tdf.js +866 -0
- package/dist/web/tdf3/src/templates/default.html.js +96 -0
- package/dist/web/tdf3/src/templates/escaper.js +10 -0
- package/dist/web/tdf3/src/templates/index.js +3 -0
- package/dist/web/tdf3/src/utils/buffer-crc32.js +44 -0
- package/dist/web/tdf3/src/utils/chunkers.js +96 -0
- package/dist/web/tdf3/src/utils/index.js +248 -0
- package/dist/web/tdf3/src/utils/keysplit.js +55 -0
- package/dist/web/tdf3/src/utils/zip-reader.js +247 -0
- package/dist/web/tdf3/src/utils/zip-writer.js +302 -0
- package/dist/web/tdf3/src/version.js +3 -0
- package/package.json +126 -0
- package/src/access.ts +198 -0
- package/src/auth/Eas.ts +79 -0
- package/src/auth/auth.ts +141 -0
- package/src/auth/oidc-clientcredentials-provider.ts +32 -0
- package/src/auth/oidc-externaljwt-provider.ts +41 -0
- package/src/auth/oidc-refreshtoken-provider.ts +41 -0
- package/src/auth/oidc.ts +307 -0
- package/src/auth/providers.ts +139 -0
- package/src/encodings/base64.ts +160 -0
- package/src/encodings/hex.ts +69 -0
- package/src/encodings/index.ts +2 -0
- package/src/errors.ts +113 -0
- package/src/index.ts +441 -0
- package/src/nanotdf/Client.ts +349 -0
- package/src/nanotdf/NanoTDF.ts +121 -0
- package/src/nanotdf/browser-entry.ts +20 -0
- package/src/nanotdf/constants.ts +1 -0
- package/src/nanotdf/decrypt.ts +19 -0
- package/src/nanotdf/encrypt-dataset.ts +52 -0
- package/src/nanotdf/encrypt.ts +197 -0
- package/src/nanotdf/enum/CipherEnum.ts +10 -0
- package/src/nanotdf/enum/CurveNameEnum.ts +12 -0
- package/src/nanotdf/enum/EncodingEnum.ts +5 -0
- package/src/nanotdf/enum/PolicyTypeEnum.ts +8 -0
- package/src/nanotdf/enum/ProtocolEnum.ts +7 -0
- package/src/nanotdf/enum/ResourceLocatorIdentifierEnum.ts +8 -0
- package/src/nanotdf/helpers/calculateByCurve.ts +26 -0
- package/src/nanotdf/helpers/getHkdfSalt.ts +15 -0
- package/src/nanotdf/index.ts +10 -0
- package/src/nanotdf/interfaces/PolicyInterface.ts +27 -0
- package/src/nanotdf/models/Ciphers.ts +67 -0
- package/src/nanotdf/models/DefaultParams.ts +24 -0
- package/src/nanotdf/models/EcCurves.ts +40 -0
- package/src/nanotdf/models/Header.ts +322 -0
- package/src/nanotdf/models/Payload.ts +196 -0
- package/src/nanotdf/models/Policy/AbstractPolicy.ts +90 -0
- package/src/nanotdf/models/Policy/EmbeddedPolicy.ts +101 -0
- package/src/nanotdf/models/Policy/PolicyFactory.ts +48 -0
- package/src/nanotdf/models/Policy/RemotePolicy.ts +74 -0
- package/src/nanotdf/models/ResourceLocator.ts +212 -0
- package/src/nanotdf/models/Signature.ts +85 -0
- package/src/nanotdf-crypto/ciphers.ts +13 -0
- package/src/nanotdf-crypto/decrypt.ts +30 -0
- package/src/nanotdf-crypto/digest.ts +8 -0
- package/src/nanotdf-crypto/ecdsaSignature.ts +109 -0
- package/src/nanotdf-crypto/encrypt.ts +30 -0
- package/src/nanotdf-crypto/enums.ts +47 -0
- package/src/nanotdf-crypto/exportCryptoKey.ts +17 -0
- package/src/nanotdf-crypto/generateKeyPair.ts +19 -0
- package/src/nanotdf-crypto/generateRandomNumber.ts +8 -0
- package/src/nanotdf-crypto/importRawKey.ts +19 -0
- package/src/nanotdf-crypto/index.ts +11 -0
- package/src/nanotdf-crypto/keyAgreement.ts +139 -0
- package/src/nanotdf-crypto/pemPublicToCrypto.ts +232 -0
- package/src/package-lock.json +6 -0
- package/src/package.json +3 -0
- package/src/platform/authorization/authorization_connect.d.ts +44 -0
- package/src/platform/authorization/authorization_connect.js +44 -0
- package/src/platform/authorization/authorization_pb.d.ts +707 -0
- package/src/platform/authorization/authorization_pb.js +372 -0
- package/src/platform/common/common_pb.d.ts +129 -0
- package/src/platform/common/common_pb.js +58 -0
- package/src/platform/entityresolution/entity_resolution_connect.d.ts +35 -0
- package/src/platform/entityresolution/entity_resolution_connect.js +35 -0
- package/src/platform/entityresolution/entity_resolution_pb.d.ts +242 -0
- package/src/platform/entityresolution/entity_resolution_pb.js +139 -0
- package/src/platform/kas/kas_connect.d.ts +59 -0
- package/src/platform/kas/kas_connect.js +59 -0
- package/src/platform/kas/kas_pb.d.ts +200 -0
- package/src/platform/kas/kas_pb.js +84 -0
- package/src/platform/policy/attributes/attributes_connect.d.ts +168 -0
- package/src/platform/policy/attributes/attributes_connect.js +168 -0
- package/src/platform/policy/attributes/attributes_pb.d.ts +929 -0
- package/src/platform/policy/attributes/attributes_pb.js +363 -0
- package/src/platform/policy/kasregistry/key_access_server_registry_connect.d.ts +62 -0
- package/src/platform/policy/kasregistry/key_access_server_registry_connect.js +62 -0
- package/src/platform/policy/kasregistry/key_access_server_registry_pb.d.ts +283 -0
- package/src/platform/policy/kasregistry/key_access_server_registry_pb.js +113 -0
- package/src/platform/policy/namespaces/namespaces_connect.d.ts +62 -0
- package/src/platform/policy/namespaces/namespaces_connect.js +62 -0
- package/src/platform/policy/namespaces/namespaces_pb.d.ts +270 -0
- package/src/platform/policy/namespaces/namespaces_pb.js +110 -0
- package/src/platform/policy/objects_pb.d.ts +725 -0
- package/src/platform/policy/objects_pb.js +288 -0
- package/src/platform/policy/resourcemapping/resource_mapping_connect.d.ts +259 -0
- package/src/platform/policy/resourcemapping/resource_mapping_connect.js +259 -0
- package/src/platform/policy/resourcemapping/resource_mapping_pb.d.ts +314 -0
- package/src/platform/policy/resourcemapping/resource_mapping_pb.js +142 -0
- package/src/platform/policy/selectors_pb.d.ts +269 -0
- package/src/platform/policy/selectors_pb.js +110 -0
- package/src/platform/policy/subjectmapping/subject_mapping_connect.d.ts +118 -0
- package/src/platform/policy/subjectmapping/subject_mapping_connect.js +118 -0
- package/src/platform/policy/subjectmapping/subject_mapping_pb.d.ts +672 -0
- package/src/platform/policy/subjectmapping/subject_mapping_pb.js +260 -0
- package/src/platform/wellknownconfiguration/wellknown_configuration_connect.d.ts +26 -0
- package/src/platform/wellknownconfiguration/wellknown_configuration_connect.js +26 -0
- package/src/platform/wellknownconfiguration/wellknown_configuration_pb.d.ts +75 -0
- package/src/platform/wellknownconfiguration/wellknown_configuration_pb.js +35 -0
- package/src/policy/api.ts +61 -0
- package/src/policy/attributes.ts +117 -0
- package/src/policy/granter.ts +181 -0
- package/src/tdf/AttributeObject.ts +27 -0
- package/src/tdf/AttributeObjectJwt.ts +3 -0
- package/src/tdf/Crypto.ts +42 -0
- package/src/tdf/EntityObject.ts +18 -0
- package/src/tdf/NanoTDF/NanoTDF.ts +120 -0
- package/src/tdf/Policy.ts +51 -0
- package/src/tdf/PolicyObject.ts +12 -0
- package/src/tdf/TypedArray.ts +12 -0
- package/src/tdf/index.ts +6 -0
- package/src/types/index.ts +55 -0
- package/src/utils.ts +149 -0
- package/src/version.ts +9 -0
- package/tdf3/index.ts +91 -0
- package/tdf3/package-lock.json +6 -0
- package/tdf3/package.json +3 -0
- package/tdf3/src/assertions.ts +191 -0
- package/tdf3/src/binary.ts +195 -0
- package/tdf3/src/ciphers/aes-gcm-cipher.ts +76 -0
- package/tdf3/src/ciphers/algorithms.ts +9 -0
- package/tdf3/src/ciphers/index.ts +2 -0
- package/tdf3/src/ciphers/symmetric-cipher-base.ts +38 -0
- package/tdf3/src/client/DecoratedReadableStream.ts +148 -0
- package/tdf3/src/client/builders.ts +701 -0
- package/tdf3/src/client/index.ts +637 -0
- package/tdf3/src/client/validation.ts +79 -0
- package/tdf3/src/crypto/crypto-utils.ts +119 -0
- package/tdf3/src/crypto/declarations.ts +89 -0
- package/tdf3/src/crypto/index.ts +394 -0
- package/tdf3/src/index.ts +4 -0
- package/tdf3/src/models/attribute-set.ts +142 -0
- package/tdf3/src/models/encryption-information.ts +172 -0
- package/tdf3/src/models/index.ts +8 -0
- package/tdf3/src/models/key-access.ts +128 -0
- package/tdf3/src/models/manifest.ts +9 -0
- package/tdf3/src/models/payload.ts +6 -0
- package/tdf3/src/models/policy.ts +35 -0
- package/tdf3/src/models/upsert-response.ts +17 -0
- package/tdf3/src/tdf.ts +1351 -0
- package/tdf3/src/templates/default.html.ts +105 -0
- package/tdf3/src/templates/escaper.ts +10 -0
- package/tdf3/src/templates/index.ts +2 -0
- package/tdf3/src/utils/buffer-crc32.ts +46 -0
- package/tdf3/src/utils/chunkers.ts +118 -0
- package/tdf3/src/utils/index.ts +309 -0
- package/tdf3/src/utils/keysplit.ts +63 -0
- package/tdf3/src/utils/zip-reader.ts +341 -0
- package/tdf3/src/utils/zip-writer.ts +375 -0
- package/tdf3/src/version.ts +2 -0
- package/tdf3/types.d.ts +14 -0
|
@@ -0,0 +1,637 @@
|
|
|
1
|
+
import { v4 } from 'uuid';
|
|
2
|
+
import axios from 'axios';
|
|
3
|
+
import {
|
|
4
|
+
ZipReader,
|
|
5
|
+
fromBuffer,
|
|
6
|
+
fromDataSource,
|
|
7
|
+
streamToBuffer,
|
|
8
|
+
isAppIdProviderCheck,
|
|
9
|
+
type Chunker,
|
|
10
|
+
keyMiddleware as defaultKeyMiddleware,
|
|
11
|
+
} from '../utils/index.js';
|
|
12
|
+
import { base64 } from '../../../src/encodings/index.js';
|
|
13
|
+
import {
|
|
14
|
+
buildKeyAccess,
|
|
15
|
+
EncryptConfiguration,
|
|
16
|
+
fetchKasPublicKey,
|
|
17
|
+
loadTDFStream,
|
|
18
|
+
unwrapHtml,
|
|
19
|
+
validatePolicyObject,
|
|
20
|
+
readStream,
|
|
21
|
+
wrapHtml,
|
|
22
|
+
writeStream,
|
|
23
|
+
} from '../tdf.js';
|
|
24
|
+
import { OIDCRefreshTokenProvider } from '../../../src/auth/oidc-refreshtoken-provider.js';
|
|
25
|
+
import { OIDCExternalJwtProvider } from '../../../src/auth/oidc-externaljwt-provider.js';
|
|
26
|
+
import { CryptoService } from '../crypto/declarations.js';
|
|
27
|
+
import {
|
|
28
|
+
type AuthProvider,
|
|
29
|
+
AppIdAuthProvider,
|
|
30
|
+
HttpRequest,
|
|
31
|
+
withHeaders,
|
|
32
|
+
} from '../../../src/auth/auth.js';
|
|
33
|
+
import EAS from '../../../src/auth/Eas.js';
|
|
34
|
+
import {
|
|
35
|
+
cryptoPublicToPem,
|
|
36
|
+
pemToCryptoPublicKey,
|
|
37
|
+
rstrip,
|
|
38
|
+
validateSecureUrl,
|
|
39
|
+
} from '../../../src/utils.js';
|
|
40
|
+
|
|
41
|
+
import {
|
|
42
|
+
EncryptParams,
|
|
43
|
+
DecryptParams,
|
|
44
|
+
type Scope,
|
|
45
|
+
DecryptStreamMiddleware,
|
|
46
|
+
EncryptKeyMiddleware,
|
|
47
|
+
EncryptStreamMiddleware,
|
|
48
|
+
SplitStep,
|
|
49
|
+
} from './builders.js';
|
|
50
|
+
import { DecoratedReadableStream } from './DecoratedReadableStream.js';
|
|
51
|
+
|
|
52
|
+
import {
|
|
53
|
+
DEFAULT_SEGMENT_SIZE,
|
|
54
|
+
DecryptParamsBuilder,
|
|
55
|
+
type DecryptSource,
|
|
56
|
+
EncryptParamsBuilder,
|
|
57
|
+
} from './builders.js';
|
|
58
|
+
import { KasPublicKeyInfo, OriginAllowList } from '../../../src/access.js';
|
|
59
|
+
import { ConfigurationError } from '../../../src/errors.js';
|
|
60
|
+
import { EntityObject } from '../../../src/tdf/EntityObject.js';
|
|
61
|
+
import { Binary } from '../binary.js';
|
|
62
|
+
import { AesGcmCipher } from '../ciphers/aes-gcm-cipher.js';
|
|
63
|
+
import { toCryptoKeyPair } from '../crypto/crypto-utils.js';
|
|
64
|
+
import * as defaultCryptoService from '../crypto/index.js';
|
|
65
|
+
import { type AttributeObject, AttributeSet, type Policy, SplitKey } from '../models/index.js';
|
|
66
|
+
import { plan } from '../../../src/policy/granter.js';
|
|
67
|
+
import { attributeFQNsAsValues } from '../../../src/policy/api.js';
|
|
68
|
+
import { type Value } from '../../../src/policy/attributes.js';
|
|
69
|
+
|
|
70
|
+
const GLOBAL_BYTE_LIMIT = 64 * 1000 * 1000 * 1000; // 64 GB, see WS-9363.
|
|
71
|
+
const HTML_BYTE_LIMIT = 100 * 1000 * 1000; // 100 MB, see WS-9476.
|
|
72
|
+
|
|
73
|
+
// No default config for now. Delegate to Virtru wrapper for endpoints.
|
|
74
|
+
const defaultClientConfig = { oidcOrigin: '', cryptoService: defaultCryptoService };
|
|
75
|
+
|
|
76
|
+
export const uploadBinaryToS3 = async function (
|
|
77
|
+
stream: ReadableStream<Uint8Array>,
|
|
78
|
+
uploadUrl: string,
|
|
79
|
+
fileSize: number
|
|
80
|
+
) {
|
|
81
|
+
try {
|
|
82
|
+
const body: Uint8Array = await streamToBuffer(stream);
|
|
83
|
+
|
|
84
|
+
await axios.put(uploadUrl, body, {
|
|
85
|
+
headers: {
|
|
86
|
+
'Content-Length': fileSize,
|
|
87
|
+
'content-type': 'application/zip',
|
|
88
|
+
'cache-control': 'no-store',
|
|
89
|
+
},
|
|
90
|
+
maxContentLength: Infinity,
|
|
91
|
+
maxBodyLength: Infinity,
|
|
92
|
+
});
|
|
93
|
+
} catch (e) {
|
|
94
|
+
console.error(e);
|
|
95
|
+
throw e;
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
const getFirstTwoBytes = async (chunker: Chunker) => new TextDecoder().decode(await chunker(0, 2));
|
|
99
|
+
|
|
100
|
+
const makeChunkable = async (source: DecryptSource) => {
|
|
101
|
+
if (!source) {
|
|
102
|
+
throw new ConfigurationError('invalid source');
|
|
103
|
+
}
|
|
104
|
+
// dump stream to buffer
|
|
105
|
+
// we don't support streams anyways (see zipreader.js)
|
|
106
|
+
let initialChunker: Chunker;
|
|
107
|
+
let buf = null;
|
|
108
|
+
switch (source.type) {
|
|
109
|
+
case 'stream':
|
|
110
|
+
buf = await streamToBuffer(source.location);
|
|
111
|
+
initialChunker = fromBuffer(buf);
|
|
112
|
+
break;
|
|
113
|
+
case 'buffer':
|
|
114
|
+
buf = source.location;
|
|
115
|
+
initialChunker = fromBuffer(buf);
|
|
116
|
+
break;
|
|
117
|
+
case 'chunker':
|
|
118
|
+
initialChunker = source.location;
|
|
119
|
+
break;
|
|
120
|
+
default:
|
|
121
|
+
initialChunker = await fromDataSource(source);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
const magic: string = await getFirstTwoBytes(initialChunker);
|
|
125
|
+
// Pull first two bytes from source.
|
|
126
|
+
if (magic === 'PK') {
|
|
127
|
+
return initialChunker;
|
|
128
|
+
}
|
|
129
|
+
// Unwrap if it's html.
|
|
130
|
+
// If NOT zip (html), convert/dump to buffer, unwrap, and continue.
|
|
131
|
+
const htmlBuf = buf ?? (await initialChunker());
|
|
132
|
+
const zipBuf = unwrapHtml(htmlBuf);
|
|
133
|
+
return fromBuffer(zipBuf);
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
export interface ClientConfig {
|
|
137
|
+
cryptoService?: CryptoService;
|
|
138
|
+
organizationName?: string;
|
|
139
|
+
clientId?: string;
|
|
140
|
+
dpopEnabled?: boolean;
|
|
141
|
+
dpopKeys?: Promise<CryptoKeyPair>;
|
|
142
|
+
kasEndpoint?: string;
|
|
143
|
+
/**
|
|
144
|
+
* Service to use to look up ABAC. Used during autoconfigure. Defaults to
|
|
145
|
+
* kasEndpoint without the trailing `/kas` path segment, if present.
|
|
146
|
+
*/
|
|
147
|
+
policyEndpoint?: string;
|
|
148
|
+
/**
|
|
149
|
+
* List of allowed KASes to connect to for rewrap requests.
|
|
150
|
+
* Defaults to `[kasEndpoint]`.
|
|
151
|
+
*/
|
|
152
|
+
allowedKases?: string[];
|
|
153
|
+
ignoreAllowList?: boolean;
|
|
154
|
+
easEndpoint?: string;
|
|
155
|
+
// DEPRECATED Ignored
|
|
156
|
+
keyRewrapEndpoint?: string;
|
|
157
|
+
// DEPRECATED Ignored
|
|
158
|
+
keyUpsertEndpoint?: string;
|
|
159
|
+
refreshToken?: string;
|
|
160
|
+
kasPublicKey?: string;
|
|
161
|
+
oidcOrigin?: string;
|
|
162
|
+
externalJwt?: string;
|
|
163
|
+
authProvider?: AuthProvider | AppIdAuthProvider;
|
|
164
|
+
readerUrl?: string;
|
|
165
|
+
entityObjectEndpoint?: string;
|
|
166
|
+
fileStreamServiceWorker?: string;
|
|
167
|
+
progressHandler?: (bytesProcessed: number) => void;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/*
|
|
171
|
+
* Extract a keypair provided as part of the options dict.
|
|
172
|
+
* Default to using the clientwide keypair, generating one if necessary.
|
|
173
|
+
*
|
|
174
|
+
* Additionally, update the auth injector with the (potentially new) pubkey
|
|
175
|
+
*/
|
|
176
|
+
export async function createSessionKeys({
|
|
177
|
+
authProvider,
|
|
178
|
+
// FIXME use cryptoservice to generate keys again
|
|
179
|
+
cryptoService,
|
|
180
|
+
dpopKeys,
|
|
181
|
+
}: {
|
|
182
|
+
authProvider?: AuthProvider | AppIdAuthProvider;
|
|
183
|
+
cryptoService: CryptoService;
|
|
184
|
+
dpopKeys?: Promise<CryptoKeyPair>;
|
|
185
|
+
}): Promise<CryptoKeyPair> {
|
|
186
|
+
let signingKeys: CryptoKeyPair;
|
|
187
|
+
if (dpopKeys) {
|
|
188
|
+
signingKeys = await dpopKeys;
|
|
189
|
+
} else {
|
|
190
|
+
const keys = await cryptoService.generateSigningKeyPair();
|
|
191
|
+
// signingKeys = await crypto.subtle.generateKey(rsaPkcs1Sha256(), true, ['sign']);
|
|
192
|
+
signingKeys = await toCryptoKeyPair(keys);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// This will contact the auth server and forcibly refresh the auth token claims,
|
|
196
|
+
// binding the token and the (new) pubkey together.
|
|
197
|
+
// Note that we base64 encode the PEM string here as a quick workaround, simply because
|
|
198
|
+
// a formatted raw PEM string isn't a valid header value and sending it raw makes keycloak's
|
|
199
|
+
// header parser barf. There are more subtle ways to solve this, but this works for now.
|
|
200
|
+
if (authProvider && !isAppIdProviderCheck(authProvider)) {
|
|
201
|
+
await authProvider?.updateClientPublicKey(signingKeys);
|
|
202
|
+
}
|
|
203
|
+
return signingKeys;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/*
|
|
207
|
+
* Create a policy object for an encrypt operation.
|
|
208
|
+
*/
|
|
209
|
+
function asPolicy(scope: Scope): Policy {
|
|
210
|
+
if (scope.policyObject) {
|
|
211
|
+
// use the client override if provided
|
|
212
|
+
return scope.policyObject;
|
|
213
|
+
}
|
|
214
|
+
const policyId = scope.policyId ?? v4();
|
|
215
|
+
let dataAttributes: AttributeObject[];
|
|
216
|
+
if (scope.attributeValues) {
|
|
217
|
+
dataAttributes = scope.attributeValues
|
|
218
|
+
.filter(({ fqn }) => !!fqn)
|
|
219
|
+
.map(({ fqn }): AttributeObject => {
|
|
220
|
+
return { attribute: fqn! };
|
|
221
|
+
});
|
|
222
|
+
} else {
|
|
223
|
+
dataAttributes = (scope.attributes ?? []).map((attribute) =>
|
|
224
|
+
typeof attribute === 'string' ? { attribute } : attribute
|
|
225
|
+
);
|
|
226
|
+
}
|
|
227
|
+
return {
|
|
228
|
+
uuid: policyId,
|
|
229
|
+
body: {
|
|
230
|
+
dataAttributes,
|
|
231
|
+
dissem: scope.dissem ?? [],
|
|
232
|
+
},
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
export class Client {
|
|
237
|
+
readonly cryptoService: CryptoService;
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Default kas endpoint, if present. Required for encrypt.
|
|
241
|
+
*/
|
|
242
|
+
readonly kasEndpoint: string;
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Policy service endpoint, if present.
|
|
246
|
+
* Required for autoconfiguration with ABAC.
|
|
247
|
+
*/
|
|
248
|
+
readonly policyEndpoint: string;
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* List of allowed KASes to connect to for rewrap requests.
|
|
252
|
+
* Defaults to `[this.kasEndpoint]`.
|
|
253
|
+
*/
|
|
254
|
+
readonly allowedKases: OriginAllowList;
|
|
255
|
+
|
|
256
|
+
readonly kasKeys: Record<string, Promise<KasPublicKeyInfo>> = {};
|
|
257
|
+
|
|
258
|
+
readonly easEndpoint?: string;
|
|
259
|
+
|
|
260
|
+
readonly clientId?: string;
|
|
261
|
+
|
|
262
|
+
readonly authProvider?: AuthProvider | AppIdAuthProvider;
|
|
263
|
+
|
|
264
|
+
readonly readerUrl?: string;
|
|
265
|
+
|
|
266
|
+
readonly fileStreamServiceWorker?: string;
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* Session binding keys. Used for DPoP and signed request bodies.
|
|
270
|
+
*/
|
|
271
|
+
readonly dpopKeys: Promise<CryptoKeyPair>;
|
|
272
|
+
|
|
273
|
+
readonly eas?: EAS;
|
|
274
|
+
|
|
275
|
+
readonly dpopEnabled: boolean;
|
|
276
|
+
|
|
277
|
+
readonly clientConfig: ClientConfig;
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* An abstraction for protecting and accessing data using TDF3 services.
|
|
281
|
+
* @param {Object} [config.keypair] - keypair generated for signing. Optional, will be generated by sdk if not passed
|
|
282
|
+
* @param {String} [config.clientId]
|
|
283
|
+
* @param {String} [config.kasEndpoint] - Key Access Server url
|
|
284
|
+
* @param {String} [config.refreshToken] - After logging in to browser OIDC interface user
|
|
285
|
+
* receives fresh token that needed by SDK for auth needs
|
|
286
|
+
* @param {String} [config.externalJwt] - JWT from external authority (eg Google)
|
|
287
|
+
* @param {String} [config.oidcOrigin] - Endpoint of authentication service
|
|
288
|
+
*/
|
|
289
|
+
constructor(config: ClientConfig) {
|
|
290
|
+
const clientConfig = { ...defaultClientConfig, ...config };
|
|
291
|
+
this.cryptoService = clientConfig.cryptoService;
|
|
292
|
+
this.dpopEnabled = !!(clientConfig.dpopEnabled || clientConfig.dpopKeys);
|
|
293
|
+
|
|
294
|
+
clientConfig.readerUrl && (this.readerUrl = clientConfig.readerUrl);
|
|
295
|
+
|
|
296
|
+
if (clientConfig.kasEndpoint) {
|
|
297
|
+
this.kasEndpoint = clientConfig.kasEndpoint;
|
|
298
|
+
} else {
|
|
299
|
+
// handle Deprecated `kasRewrapEndpoint` parameter
|
|
300
|
+
if (!clientConfig.keyRewrapEndpoint) {
|
|
301
|
+
throw new ConfigurationError('KAS definition not found');
|
|
302
|
+
}
|
|
303
|
+
this.kasEndpoint = clientConfig.keyRewrapEndpoint.replace(/\/rewrap$/, '');
|
|
304
|
+
}
|
|
305
|
+
this.kasEndpoint = rstrip(this.kasEndpoint, '/');
|
|
306
|
+
if (clientConfig.policyEndpoint) {
|
|
307
|
+
this.policyEndpoint = rstrip(clientConfig.policyEndpoint, '/');
|
|
308
|
+
} else if (this.kasEndpoint.endsWith('/kas')) {
|
|
309
|
+
this.policyEndpoint = this.kasEndpoint.slice(0, -4);
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
const kasOrigin = new URL(this.kasEndpoint).origin;
|
|
313
|
+
if (clientConfig.allowedKases) {
|
|
314
|
+
this.allowedKases = new OriginAllowList(
|
|
315
|
+
clientConfig.allowedKases,
|
|
316
|
+
!!clientConfig.ignoreAllowList
|
|
317
|
+
);
|
|
318
|
+
if (!validateSecureUrl(this.kasEndpoint) && !this.allowedKases.allows(kasOrigin)) {
|
|
319
|
+
throw new ConfigurationError(`Invalid KAS endpoint [${this.kasEndpoint}]`);
|
|
320
|
+
}
|
|
321
|
+
} else {
|
|
322
|
+
if (!validateSecureUrl(this.kasEndpoint)) {
|
|
323
|
+
throw new ConfigurationError(
|
|
324
|
+
`Invalid KAS endpoint [${this.kasEndpoint}]; to force, please list it among allowedKases`
|
|
325
|
+
);
|
|
326
|
+
}
|
|
327
|
+
this.allowedKases = new OriginAllowList([kasOrigin], !!clientConfig.ignoreAllowList);
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
this.authProvider = config.authProvider;
|
|
331
|
+
this.clientConfig = clientConfig;
|
|
332
|
+
|
|
333
|
+
if (this.authProvider && isAppIdProviderCheck(this.authProvider)) {
|
|
334
|
+
this.eas = new EAS({
|
|
335
|
+
authProvider: this.authProvider,
|
|
336
|
+
endpoint:
|
|
337
|
+
clientConfig.entityObjectEndpoint ?? `${clientConfig.easEndpoint}/api/entityobject`,
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
this.clientId = clientConfig.clientId;
|
|
342
|
+
if (!this.authProvider) {
|
|
343
|
+
if (!clientConfig.clientId) {
|
|
344
|
+
throw new ConfigurationError('Client ID or custom AuthProvider must be defined');
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
//Are we exchanging a refreshToken for a bearer token (normal AuthCode browser auth flow)?
|
|
348
|
+
//If this is a browser context, we expect the caller to handle the initial
|
|
349
|
+
//browser-based OIDC login and authentication process against the OIDC endpoint using their chosen method,
|
|
350
|
+
//and provide us with a valid refresh token/clientId obtained from that process.
|
|
351
|
+
if (clientConfig.refreshToken) {
|
|
352
|
+
this.authProvider = new OIDCRefreshTokenProvider({
|
|
353
|
+
clientId: clientConfig.clientId,
|
|
354
|
+
refreshToken: clientConfig.refreshToken,
|
|
355
|
+
oidcOrigin: clientConfig.oidcOrigin,
|
|
356
|
+
});
|
|
357
|
+
} else if (clientConfig.externalJwt) {
|
|
358
|
+
//Are we exchanging a JWT previously issued by a trusted external entity (e.g. Google) for a bearer token?
|
|
359
|
+
this.authProvider = new OIDCExternalJwtProvider({
|
|
360
|
+
clientId: clientConfig.clientId,
|
|
361
|
+
externalJwt: clientConfig.externalJwt,
|
|
362
|
+
oidcOrigin: clientConfig.oidcOrigin,
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
this.dpopKeys = createSessionKeys({
|
|
367
|
+
authProvider: this.authProvider,
|
|
368
|
+
cryptoService: this.cryptoService,
|
|
369
|
+
dpopKeys: clientConfig.dpopKeys,
|
|
370
|
+
});
|
|
371
|
+
if (clientConfig.kasPublicKey) {
|
|
372
|
+
this.kasKeys[this.kasEndpoint] = Promise.resolve({
|
|
373
|
+
url: this.kasEndpoint,
|
|
374
|
+
algorithm: 'rsa:2048',
|
|
375
|
+
key: pemToCryptoPublicKey(clientConfig.kasPublicKey),
|
|
376
|
+
publicKey: clientConfig.kasPublicKey,
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* Encrypt plaintext into TDF ciphertext. One of the core operations of the Virtru SDK.
|
|
383
|
+
*
|
|
384
|
+
* @param scope dissem and attributes for constructing the policy
|
|
385
|
+
* @param source source object of unencrypted data
|
|
386
|
+
* @param [asHtml] If we should wrap the TDF data in a self-opening HTML wrapper. Defaults to false
|
|
387
|
+
* @param [autoconfigure] If we should use scope.attributes to configure KAOs
|
|
388
|
+
* @param [metadata] Additional non-secret data to store with the TDF
|
|
389
|
+
* @param [opts] Test only
|
|
390
|
+
* @param [mimeType] mime type of source. defaults to `unknown`
|
|
391
|
+
* @param [offline] Where to store the policy. Defaults to `false` - which results in `upsert` events to store/update a policy
|
|
392
|
+
* @param [windowSize] - segment size in bytes. Defaults to a a million bytes.
|
|
393
|
+
* @param [keyMiddleware] - function that handle keys
|
|
394
|
+
* @param [streamMiddleware] - function that handle stream
|
|
395
|
+
* @param [eo] - (deprecated) entity object
|
|
396
|
+
* @return a {@link https://nodejs.org/api/stream.html#stream_class_stream_readable|Readable} a new stream containing the TDF ciphertext
|
|
397
|
+
*/
|
|
398
|
+
async encrypt({
|
|
399
|
+
scope = { attributes: [], dissem: [] },
|
|
400
|
+
autoconfigure,
|
|
401
|
+
source,
|
|
402
|
+
asHtml = false,
|
|
403
|
+
metadata,
|
|
404
|
+
mimeType,
|
|
405
|
+
offline = false,
|
|
406
|
+
windowSize = DEFAULT_SEGMENT_SIZE,
|
|
407
|
+
eo,
|
|
408
|
+
keyMiddleware = defaultKeyMiddleware,
|
|
409
|
+
streamMiddleware = async (stream: DecoratedReadableStream) => stream,
|
|
410
|
+
splitPlan,
|
|
411
|
+
assertionConfigs = [],
|
|
412
|
+
}: EncryptParams): Promise<DecoratedReadableStream> {
|
|
413
|
+
const dpopKeys = await this.dpopKeys;
|
|
414
|
+
|
|
415
|
+
const policyObject = asPolicy(scope);
|
|
416
|
+
validatePolicyObject(policyObject);
|
|
417
|
+
|
|
418
|
+
if (!splitPlan && autoconfigure) {
|
|
419
|
+
let avs: Value[] = scope.attributeValues ?? [];
|
|
420
|
+
const fqns: string[] = scope.attributes
|
|
421
|
+
? scope.attributes.map((attribute) =>
|
|
422
|
+
typeof attribute === 'string' ? attribute : attribute.attribute
|
|
423
|
+
)
|
|
424
|
+
: [];
|
|
425
|
+
|
|
426
|
+
if (!avs.length && fqns.length) {
|
|
427
|
+
// Hydrate avs from policy endpoint givnen the fqns
|
|
428
|
+
if (!this.policyEndpoint) {
|
|
429
|
+
throw new ConfigurationError('policyEndpoint not set in TDF3 Client constructor');
|
|
430
|
+
}
|
|
431
|
+
avs = await attributeFQNsAsValues(
|
|
432
|
+
this.policyEndpoint,
|
|
433
|
+
this.authProvider as AuthProvider,
|
|
434
|
+
...fqns
|
|
435
|
+
);
|
|
436
|
+
} else if (scope.attributeValues) {
|
|
437
|
+
avs = scope.attributeValues;
|
|
438
|
+
if (!scope.attributes) {
|
|
439
|
+
scope.attributes = avs.map(({ fqn }) => fqn);
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
if (
|
|
443
|
+
avs.length != scope.attributes?.length ||
|
|
444
|
+
!avs.map(({ fqn }) => fqn).every((a) => fqns.indexOf(a) >= 0)
|
|
445
|
+
) {
|
|
446
|
+
throw new ConfigurationError(
|
|
447
|
+
`Attribute mismatch between [${fqns}] and explicit values ${JSON.stringify(
|
|
448
|
+
avs.map(({ fqn }) => fqn)
|
|
449
|
+
)}`
|
|
450
|
+
);
|
|
451
|
+
}
|
|
452
|
+
const detailedPlan = plan(avs);
|
|
453
|
+
splitPlan = detailedPlan.map((kat) => {
|
|
454
|
+
const { kas, sid } = kat;
|
|
455
|
+
if (kas?.publicKey?.cached?.keys && !(kas.uri in this.kasKeys)) {
|
|
456
|
+
const keys = kas.publicKey.cached.keys.filter(
|
|
457
|
+
({ alg }) => alg == 'KAS_PUBLIC_KEY_ALG_ENUM_RSA_2048'
|
|
458
|
+
);
|
|
459
|
+
if (keys?.length) {
|
|
460
|
+
const key = keys[0];
|
|
461
|
+
this.kasKeys[kas.uri] = Promise.resolve({
|
|
462
|
+
key: pemToCryptoPublicKey(key.pem),
|
|
463
|
+
publicKey: key.pem,
|
|
464
|
+
url: kas.uri,
|
|
465
|
+
algorithm: 'rsa:2048',
|
|
466
|
+
kid: key.kid,
|
|
467
|
+
});
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
return { kas: kas.uri, sid };
|
|
471
|
+
});
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
// TODO: Refactor underlying builder to remove some of this unnecessary config.
|
|
475
|
+
|
|
476
|
+
const byteLimit = asHtml ? HTML_BYTE_LIMIT : GLOBAL_BYTE_LIMIT;
|
|
477
|
+
const encryptionInformation = new SplitKey(new AesGcmCipher(this.cryptoService));
|
|
478
|
+
let attributeSet: undefined | AttributeSet;
|
|
479
|
+
let entity: undefined | EntityObject;
|
|
480
|
+
if (eo) {
|
|
481
|
+
entity = eo;
|
|
482
|
+
const s = new AttributeSet();
|
|
483
|
+
eo.attributes.forEach((attr) => s.addJwtAttribute(attr));
|
|
484
|
+
attributeSet = s;
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
const splits: SplitStep[] = splitPlan?.length ? splitPlan : [{ kas: this.kasEndpoint }];
|
|
488
|
+
encryptionInformation.keyAccess = await Promise.all(
|
|
489
|
+
splits.map(async ({ kas, sid }) => {
|
|
490
|
+
if (!(kas in this.kasKeys)) {
|
|
491
|
+
this.kasKeys[kas] = fetchKasPublicKey(kas);
|
|
492
|
+
}
|
|
493
|
+
const kasPublicKey = await this.kasKeys[kas];
|
|
494
|
+
return buildKeyAccess({
|
|
495
|
+
attributeSet,
|
|
496
|
+
type: offline ? 'wrapped' : 'remote',
|
|
497
|
+
url: kasPublicKey.url,
|
|
498
|
+
kid: kasPublicKey.kid,
|
|
499
|
+
publicKey: kasPublicKey.publicKey,
|
|
500
|
+
metadata,
|
|
501
|
+
sid,
|
|
502
|
+
});
|
|
503
|
+
})
|
|
504
|
+
);
|
|
505
|
+
const { keyForEncryption, keyForManifest } = await (keyMiddleware as EncryptKeyMiddleware)();
|
|
506
|
+
const ecfg: EncryptConfiguration = {
|
|
507
|
+
allowList: this.allowedKases,
|
|
508
|
+
attributeSet,
|
|
509
|
+
byteLimit,
|
|
510
|
+
cryptoService: this.cryptoService,
|
|
511
|
+
dpopKeys,
|
|
512
|
+
encryptionInformation,
|
|
513
|
+
entity,
|
|
514
|
+
segmentSizeDefault: windowSize,
|
|
515
|
+
integrityAlgorithm: 'HS256',
|
|
516
|
+
segmentIntegrityAlgorithm: 'GMAC',
|
|
517
|
+
contentStream: source,
|
|
518
|
+
mimeType,
|
|
519
|
+
policy: policyObject,
|
|
520
|
+
authProvider: this.authProvider,
|
|
521
|
+
progressHandler: this.clientConfig.progressHandler,
|
|
522
|
+
keyForEncryption,
|
|
523
|
+
keyForManifest,
|
|
524
|
+
assertionConfigs,
|
|
525
|
+
};
|
|
526
|
+
|
|
527
|
+
const stream = await (streamMiddleware as EncryptStreamMiddleware)(await writeStream(ecfg));
|
|
528
|
+
|
|
529
|
+
if (!asHtml) {
|
|
530
|
+
return stream;
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
// Wrap if it's html.
|
|
534
|
+
if (!stream.manifest) {
|
|
535
|
+
throw new Error('internal: missing manifest in encrypt function');
|
|
536
|
+
}
|
|
537
|
+
const htmlBuf = wrapHtml(await stream.toBuffer(), stream.manifest, this.readerUrl ?? '');
|
|
538
|
+
|
|
539
|
+
return new DecoratedReadableStream({
|
|
540
|
+
pull(controller: ReadableStreamDefaultController) {
|
|
541
|
+
controller.enqueue(htmlBuf);
|
|
542
|
+
controller.close();
|
|
543
|
+
},
|
|
544
|
+
});
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
/**
|
|
548
|
+
* Decrypt TDF ciphertext into plaintext. One of the core operations of the Virtru SDK.
|
|
549
|
+
*
|
|
550
|
+
* @param params keyMiddleware fucntion to process key
|
|
551
|
+
* @param params streamMiddleware fucntion to process streamMiddleware
|
|
552
|
+
* @param params.source A data stream object, one of remote, stream, buffer, etc. types.
|
|
553
|
+
* @param params.eo Optional entity object (legacy AuthZ)
|
|
554
|
+
* @param params.assertionVerificationKeys Optional verification keys for assertions.
|
|
555
|
+
* @return a {@link https://nodejs.org/api/stream.html#stream_class_stream_readable|Readable} stream containing the decrypted plaintext.
|
|
556
|
+
* @see DecryptParamsBuilder
|
|
557
|
+
*/
|
|
558
|
+
async decrypt({
|
|
559
|
+
eo,
|
|
560
|
+
source,
|
|
561
|
+
keyMiddleware = async (key: Binary) => key,
|
|
562
|
+
streamMiddleware = async (stream: DecoratedReadableStream) => stream,
|
|
563
|
+
assertionVerificationKeys,
|
|
564
|
+
noVerifyAssertions,
|
|
565
|
+
}: DecryptParams): Promise<DecoratedReadableStream> {
|
|
566
|
+
const dpopKeys = await this.dpopKeys;
|
|
567
|
+
let entityObject;
|
|
568
|
+
if (this.eas || eo) {
|
|
569
|
+
const sessionPublicKey = await cryptoPublicToPem(dpopKeys.publicKey);
|
|
570
|
+
if (eo && eo.publicKey == sessionPublicKey) {
|
|
571
|
+
entityObject = eo;
|
|
572
|
+
} else if (this.eas) {
|
|
573
|
+
entityObject = await this.eas.fetchEntityObject({
|
|
574
|
+
publicKey: sessionPublicKey,
|
|
575
|
+
});
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
if (!this.authProvider) {
|
|
579
|
+
throw new ConfigurationError('AuthProvider missing');
|
|
580
|
+
}
|
|
581
|
+
const chunker = await makeChunkable(source);
|
|
582
|
+
|
|
583
|
+
// Await in order to catch any errors from this call.
|
|
584
|
+
// TODO: Write error event to stream and don't await.
|
|
585
|
+
return await (streamMiddleware as DecryptStreamMiddleware)(
|
|
586
|
+
await readStream({
|
|
587
|
+
allowList: this.allowedKases,
|
|
588
|
+
authProvider: this.authProvider,
|
|
589
|
+
chunker,
|
|
590
|
+
cryptoService: this.cryptoService,
|
|
591
|
+
dpopKeys,
|
|
592
|
+
entity: entityObject,
|
|
593
|
+
fileStreamServiceWorker: this.clientConfig.fileStreamServiceWorker,
|
|
594
|
+
keyMiddleware,
|
|
595
|
+
progressHandler: this.clientConfig.progressHandler,
|
|
596
|
+
assertionVerificationKeys,
|
|
597
|
+
noVerifyAssertions,
|
|
598
|
+
})
|
|
599
|
+
);
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
/**
|
|
603
|
+
* Get the unique policyId associated with TDF ciphertext. Useful for managing authorization policies of encrypted data.
|
|
604
|
+
* <br/><br/>
|
|
605
|
+
* The policyId is embedded in the ciphertext so this is a local operation.
|
|
606
|
+
*
|
|
607
|
+
* @param {object} source - Required. TDF data stream,
|
|
608
|
+
* generated using {@link DecryptParamsBuilder#build|DecryptParamsBuilder's build()}.
|
|
609
|
+
* @return {string} - the unique policyId, which can be used for tracking purposes or policy management operations.
|
|
610
|
+
* @see DecryptParamsBuilder
|
|
611
|
+
*/
|
|
612
|
+
async getPolicyId({ source }: { source: DecryptSource }) {
|
|
613
|
+
const chunker = await makeChunkable(source);
|
|
614
|
+
const zipHelper = new ZipReader(chunker);
|
|
615
|
+
const centralDirectory = await zipHelper.getCentralDirectory();
|
|
616
|
+
const manifest = await zipHelper.getManifest(centralDirectory, '0.manifest.json');
|
|
617
|
+
const policyJson = base64.decode(manifest.encryptionInformation.policy);
|
|
618
|
+
return JSON.parse(policyJson).uuid;
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
async loadTDFStream({ source }: { source: DecryptSource }) {
|
|
622
|
+
const chunker = await makeChunkable(source);
|
|
623
|
+
return loadTDFStream(chunker);
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
export type { AuthProvider };
|
|
628
|
+
|
|
629
|
+
export {
|
|
630
|
+
AppIdAuthProvider,
|
|
631
|
+
DecryptParamsBuilder,
|
|
632
|
+
DecryptSource,
|
|
633
|
+
EncryptParamsBuilder,
|
|
634
|
+
HttpRequest,
|
|
635
|
+
fromDataSource,
|
|
636
|
+
withHeaders,
|
|
637
|
+
};
|