@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,341 @@
|
|
|
1
|
+
import { InvalidFileError } from '../../../src/errors.js';
|
|
2
|
+
import { Manifest } from '../models/index.js';
|
|
3
|
+
import { Chunker } from './chunkers.js';
|
|
4
|
+
import { readUInt32LE, readUInt16LE, copyUint8Arr, buffToString } from './index.js';
|
|
5
|
+
|
|
6
|
+
// TODO: Better document what these constants are
|
|
7
|
+
// TODO: Document each function please
|
|
8
|
+
const CD_SIGNATURE = 0x02014b50;
|
|
9
|
+
const CENTRAL_DIRECTORY_RECORD_FIXED_SIZE = 46;
|
|
10
|
+
const LOCAL_FILE_HEADER_FIXED_SIZE = 30;
|
|
11
|
+
const VERSION_NEEDED_TO_EXTRACT_ZIP64 = 45;
|
|
12
|
+
const manifestMaxSize = 1024 * 1024 * 10; // 10 MB
|
|
13
|
+
|
|
14
|
+
const cp437 =
|
|
15
|
+
'\u0000☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ';
|
|
16
|
+
|
|
17
|
+
export type CentralDirectory = CentralDirectoryFixedLengthPrefix &
|
|
18
|
+
CentralDirectoryVariableLengthItems;
|
|
19
|
+
export type CentralDirectoryFixedLengthPrefix = {
|
|
20
|
+
// Version set at creation time
|
|
21
|
+
versionMadeBy: number;
|
|
22
|
+
// Version needed to extract (minimum)
|
|
23
|
+
versionNeededToExtract: number;
|
|
24
|
+
// General purpose bit flag
|
|
25
|
+
generalPurposeBitFlag: number;
|
|
26
|
+
// Compression method
|
|
27
|
+
compressionMethod: number;
|
|
28
|
+
// File last modification time
|
|
29
|
+
lastModFileTime: number;
|
|
30
|
+
// File last modification date
|
|
31
|
+
lastModFileDate: number;
|
|
32
|
+
// CRC-32
|
|
33
|
+
crc32: number;
|
|
34
|
+
// Compressed size
|
|
35
|
+
compressedSize: number;
|
|
36
|
+
// Uncompressed size
|
|
37
|
+
uncompressedSize: number;
|
|
38
|
+
// File name length (n)
|
|
39
|
+
fileNameLength: number;
|
|
40
|
+
// Extra field length (m)
|
|
41
|
+
extraFieldLength: number;
|
|
42
|
+
// File comment length (k)
|
|
43
|
+
fileCommentLength: number;
|
|
44
|
+
// Internal file attributes
|
|
45
|
+
internalFileAttributes: number;
|
|
46
|
+
// External file attributes
|
|
47
|
+
externalFileAttributes: number;
|
|
48
|
+
// Relative offset of local file header
|
|
49
|
+
relativeOffsetOfLocalHeader: number;
|
|
50
|
+
};
|
|
51
|
+
export type CentralDirectoryVariableLengthItems = {
|
|
52
|
+
fileName: string;
|
|
53
|
+
headerLength: number;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
*
|
|
58
|
+
* ZipReader -
|
|
59
|
+
*
|
|
60
|
+
* This class is used to extract parts of a TDF. You may pull bytes of a given range from a
|
|
61
|
+
* or request specific important chunks like the 'manifest', or 'payload'.
|
|
62
|
+
*/
|
|
63
|
+
export class ZipReader {
|
|
64
|
+
getChunk: Chunker;
|
|
65
|
+
|
|
66
|
+
constructor(getChunk: Chunker) {
|
|
67
|
+
this.getChunk = getChunk;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Utility function to get the centralDirectory for the zip file.
|
|
72
|
+
* It reads the end of the file to find it.
|
|
73
|
+
* @return The central directory represented as an object
|
|
74
|
+
*/
|
|
75
|
+
async getCentralDirectory(): Promise<CentralDirectory[]> {
|
|
76
|
+
const chunk = await this.getChunk(-1000);
|
|
77
|
+
// TODO: Does this need to be tuned??!?
|
|
78
|
+
// Slice off the EOCDR (End of Central Directory Record) part of the buffer so we can figure out the CD size
|
|
79
|
+
const cdBuffers = this.getCDBuffers(chunk);
|
|
80
|
+
|
|
81
|
+
const cdParsedBuffers = cdBuffers.map(parseCDBuffer);
|
|
82
|
+
for (const buffer of cdParsedBuffers) {
|
|
83
|
+
await this.adjustHeaders(buffer);
|
|
84
|
+
}
|
|
85
|
+
return cdParsedBuffers;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Gets the manifest
|
|
90
|
+
* @returns The manifest as a buffer represented as JSON
|
|
91
|
+
*/
|
|
92
|
+
async getManifest(cdBuffers: CentralDirectory[], manifestFileName: string): Promise<Manifest> {
|
|
93
|
+
const cdObj = cdBuffers.find(({ fileName }) => fileName === manifestFileName);
|
|
94
|
+
if (!cdObj) {
|
|
95
|
+
throw new InvalidFileError('Unable to retrieve CD manifest');
|
|
96
|
+
}
|
|
97
|
+
const byteStart = cdObj.relativeOffsetOfLocalHeader + cdObj.headerLength;
|
|
98
|
+
if (cdObj.uncompressedSize > manifestMaxSize) {
|
|
99
|
+
throw new InvalidFileError(
|
|
100
|
+
`manifest file too large: ${(cdObj.uncompressedSize >> 10).toLocaleString()} KiB`
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
const byteEnd = byteStart + cdObj.uncompressedSize;
|
|
104
|
+
const manifest = await this.getChunk(byteStart, byteEnd);
|
|
105
|
+
|
|
106
|
+
return JSON.parse(new TextDecoder().decode(manifest));
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
async adjustHeaders(cdObj: CentralDirectory): Promise<void> {
|
|
110
|
+
if (!cdObj) {
|
|
111
|
+
throw new InvalidFileError('Unable to retrieve CD adjust');
|
|
112
|
+
}
|
|
113
|
+
// Calculate header length -- tdf3-js writes 0 in all the header fields
|
|
114
|
+
// and does not include extra field for zip64
|
|
115
|
+
const headerChunk = await this.getChunk(
|
|
116
|
+
cdObj.relativeOffsetOfLocalHeader,
|
|
117
|
+
cdObj.relativeOffsetOfLocalHeader + cdObj.headerLength
|
|
118
|
+
);
|
|
119
|
+
cdObj.headerLength = recalculateHeaderLength(headerChunk);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
async getPayloadSegment(
|
|
123
|
+
cdBuffers: CentralDirectory[],
|
|
124
|
+
payloadName: string,
|
|
125
|
+
encrpytedSegmentOffset: number,
|
|
126
|
+
encryptedSegmentSize: number
|
|
127
|
+
): Promise<Uint8Array> {
|
|
128
|
+
const cdObj = cdBuffers.find(({ fileName }) => payloadName === fileName);
|
|
129
|
+
if (!cdObj) {
|
|
130
|
+
throw new InvalidFileError('Unable to retrieve CD');
|
|
131
|
+
}
|
|
132
|
+
const byteStart =
|
|
133
|
+
cdObj.relativeOffsetOfLocalHeader + cdObj.headerLength + encrpytedSegmentOffset;
|
|
134
|
+
// TODO: what's the exact byte start?
|
|
135
|
+
const byteEnd = byteStart + encryptedSegmentSize;
|
|
136
|
+
|
|
137
|
+
return await this.getChunk(byteStart, byteEnd);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* extracts the CD buffer entries from the end of a zip file.
|
|
142
|
+
* @param chunkBuffer The last portion of a zip file
|
|
143
|
+
* @returns an array of typed arrays, each element corresponding to a central directory record
|
|
144
|
+
*/
|
|
145
|
+
getCDBuffers(chunkBuffer: Uint8Array): Uint8Array[] {
|
|
146
|
+
const cdBuffers = [];
|
|
147
|
+
let lastBufferOffset = chunkBuffer.length;
|
|
148
|
+
for (let i = chunkBuffer.length - 22; i >= 0; i -= 1) {
|
|
149
|
+
// If what we're locking at isn't the start of a central directory, skip it..
|
|
150
|
+
if (readUInt32LE(chunkBuffer, i) !== CD_SIGNATURE) {
|
|
151
|
+
// eslint-disable-next-line no-continue
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
// Slice off that CD from it's start until the end of either the buffer, or whatever the start of the previously
|
|
155
|
+
// found CD was
|
|
156
|
+
cdBuffers.push(chunkBuffer.slice(i, lastBufferOffset));
|
|
157
|
+
// Store the last offset location so we know how to slice off hte next CD.
|
|
158
|
+
lastBufferOffset = i;
|
|
159
|
+
// We can skip over 22 iterations since we know the minimum size of a CD is 22.
|
|
160
|
+
i -= 22;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// They should be in the correct order. Since we iterate backwards, it's built backwards.
|
|
164
|
+
return cdBuffers.reverse();
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
function parseCentralDirectoryWithNoExtras(cdBuffer: Uint8Array): CentralDirectory {
|
|
169
|
+
const cd: Partial<CentralDirectory> = {};
|
|
170
|
+
// 4 - Version made by
|
|
171
|
+
cd.versionMadeBy = readUInt16LE(cdBuffer, 4);
|
|
172
|
+
// 6 - Version needed to extract (minimum)
|
|
173
|
+
cd.versionNeededToExtract = readUInt16LE(cdBuffer, 6);
|
|
174
|
+
// 8 - General purpose bit flag
|
|
175
|
+
cd.generalPurposeBitFlag = readUInt16LE(cdBuffer, 8);
|
|
176
|
+
// 10 - Compression method
|
|
177
|
+
cd.compressionMethod = readUInt16LE(cdBuffer, 10);
|
|
178
|
+
// 12 - File last modification time
|
|
179
|
+
cd.lastModFileTime = readUInt16LE(cdBuffer, 12);
|
|
180
|
+
// 14 - File last modification date
|
|
181
|
+
cd.lastModFileDate = readUInt16LE(cdBuffer, 14);
|
|
182
|
+
// 16 - CRC-32
|
|
183
|
+
cd.crc32 = readUInt32LE(cdBuffer, 16);
|
|
184
|
+
// 20 - Compressed size
|
|
185
|
+
cd.compressedSize = readUInt32LE(cdBuffer, 20);
|
|
186
|
+
// 24 - Uncompressed size
|
|
187
|
+
cd.uncompressedSize = readUInt32LE(cdBuffer, 24);
|
|
188
|
+
// 28 - File name length (n)
|
|
189
|
+
cd.fileNameLength = readUInt16LE(cdBuffer, 28);
|
|
190
|
+
// 30 - Extra field length (m)
|
|
191
|
+
cd.extraFieldLength = readUInt16LE(cdBuffer, 30);
|
|
192
|
+
// 32 - File comment length (k)
|
|
193
|
+
cd.fileCommentLength = readUInt16LE(cdBuffer, 32);
|
|
194
|
+
// 34 - Disk number where file starts
|
|
195
|
+
// 36 - Internal file attributes
|
|
196
|
+
cd.internalFileAttributes = readUInt16LE(cdBuffer, 36);
|
|
197
|
+
// 38 - External file attributes
|
|
198
|
+
cd.externalFileAttributes = readUInt32LE(cdBuffer, 38);
|
|
199
|
+
// 42 - Relative offset of local file header
|
|
200
|
+
cd.relativeOffsetOfLocalHeader = readUInt32LE(cdBuffer, 42);
|
|
201
|
+
const fileNameBuffer = cdBuffer.slice(
|
|
202
|
+
CENTRAL_DIRECTORY_RECORD_FIXED_SIZE,
|
|
203
|
+
CENTRAL_DIRECTORY_RECORD_FIXED_SIZE + cd.fileNameLength
|
|
204
|
+
);
|
|
205
|
+
// eslint-disable-next-line no-bitwise
|
|
206
|
+
const isUtf8 = !!(cd.generalPurposeBitFlag & 0x800);
|
|
207
|
+
cd.fileName = bufferToString(fileNameBuffer, 0, cd.fileNameLength, isUtf8);
|
|
208
|
+
cd.headerLength = LOCAL_FILE_HEADER_FIXED_SIZE + cd.fileNameLength + cd.extraFieldLength;
|
|
209
|
+
return cd as CentralDirectory;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Takes a central directory buffer and turns it into a manageable object
|
|
214
|
+
* that represents the CD
|
|
215
|
+
* @param cdBuffer The central directory buffer to parse
|
|
216
|
+
* @return The CD object
|
|
217
|
+
*/
|
|
218
|
+
export function parseCDBuffer(cdBuffer: Uint8Array): CentralDirectory {
|
|
219
|
+
if (readUInt32LE(cdBuffer, 0) !== CD_SIGNATURE) {
|
|
220
|
+
throw new InvalidFileError('Invalid central directory file header signature');
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
const cd = parseCentralDirectoryWithNoExtras(cdBuffer);
|
|
224
|
+
|
|
225
|
+
if (cd.versionNeededToExtract < VERSION_NEEDED_TO_EXTRACT_ZIP64 || !cd.extraFieldLength) {
|
|
226
|
+
// NOTE(PLAT-1134) Zip64 was added in pkzip 4.5
|
|
227
|
+
return cd;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// Zip-64 information
|
|
231
|
+
const extraFieldBuffer = cdBuffer.slice(
|
|
232
|
+
CENTRAL_DIRECTORY_RECORD_FIXED_SIZE + cd.fileNameLength,
|
|
233
|
+
CENTRAL_DIRECTORY_RECORD_FIXED_SIZE + cd.fileNameLength + cd.extraFieldLength
|
|
234
|
+
);
|
|
235
|
+
|
|
236
|
+
const extraFields = sliceExtraFields(extraFieldBuffer, cd);
|
|
237
|
+
const zip64EiefBuffer = extraFields[1];
|
|
238
|
+
if (zip64EiefBuffer) {
|
|
239
|
+
let index = 0;
|
|
240
|
+
// 0 - Original Size 8 bytes
|
|
241
|
+
if (cd.uncompressedSize === 0xffffffff) {
|
|
242
|
+
if (index + 8 > zip64EiefBuffer.length) {
|
|
243
|
+
throw new InvalidFileError(
|
|
244
|
+
'zip64 extended information extra field does not include uncompressed size'
|
|
245
|
+
);
|
|
246
|
+
}
|
|
247
|
+
cd.uncompressedSize = readUInt64LE(zip64EiefBuffer, index);
|
|
248
|
+
index += 8;
|
|
249
|
+
}
|
|
250
|
+
// 8 - Compressed Size 8 bytes
|
|
251
|
+
if (cd.compressedSize === 0xffffffff) {
|
|
252
|
+
if (index + 8 > zip64EiefBuffer.length) {
|
|
253
|
+
throw new InvalidFileError(
|
|
254
|
+
'zip64 extended information extra field does not include compressed size'
|
|
255
|
+
);
|
|
256
|
+
}
|
|
257
|
+
cd.compressedSize = readUInt64LE(zip64EiefBuffer, index);
|
|
258
|
+
index += 8;
|
|
259
|
+
}
|
|
260
|
+
// 16 - Relative Header Offset 8 bytes
|
|
261
|
+
if (cd.relativeOffsetOfLocalHeader === 0xffffffff) {
|
|
262
|
+
if (index + 8 > zip64EiefBuffer.length) {
|
|
263
|
+
throw new InvalidFileError(
|
|
264
|
+
'zip64 extended information extra field does not include relative header offset'
|
|
265
|
+
);
|
|
266
|
+
}
|
|
267
|
+
cd.relativeOffsetOfLocalHeader = readUInt64LE(zip64EiefBuffer, index);
|
|
268
|
+
}
|
|
269
|
+
// 24 - Disk Start Number 4 bytes
|
|
270
|
+
// not needed
|
|
271
|
+
}
|
|
272
|
+
return cd;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* Takes a buffer, and turns it into a string
|
|
277
|
+
* @param buffer The buffer to convert
|
|
278
|
+
* @param start The start location of the part of the buffer to convert
|
|
279
|
+
* @param end The end location of the part of the buffer to convert
|
|
280
|
+
* @param isUtf8 Is it utf8? Otherwise, assumed to be CP-437
|
|
281
|
+
* @return The converted string
|
|
282
|
+
*/
|
|
283
|
+
function bufferToString(buffer: Uint8Array, start: number, end: number, isUtf8: boolean): string {
|
|
284
|
+
if (isUtf8) {
|
|
285
|
+
return buffToString(buffer, 'utf-8', start, end);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
let result = '';
|
|
289
|
+
for (let i = start; i < end; i++) {
|
|
290
|
+
if (cp437[buffer[i]]) {
|
|
291
|
+
result += cp437[buffer[i]];
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
return result;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
function recalculateHeaderLength(tempHeaderBuffer: Uint8Array): number {
|
|
298
|
+
const fileNameLength = readUInt16LE(tempHeaderBuffer, 26);
|
|
299
|
+
const extraFieldLength = readUInt16LE(tempHeaderBuffer, 28);
|
|
300
|
+
return LOCAL_FILE_HEADER_FIXED_SIZE + fileNameLength + extraFieldLength;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
export function readUInt64LE(buffer: Uint8Array, offset: number): number {
|
|
304
|
+
const lower32 = readUInt32LE(buffer, offset);
|
|
305
|
+
const upper32 = readUInt32LE(buffer, offset + 4);
|
|
306
|
+
const combined = upper32 * 0x100000000 + lower32;
|
|
307
|
+
if (!Number.isSafeInteger(combined)) {
|
|
308
|
+
throw Error(`Value exceeds MAX_SAFE_INTEGER: ${combined}`);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
return combined;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* Breaks extra field buffer into slices by field identifier.
|
|
316
|
+
*/
|
|
317
|
+
function sliceExtraFields(
|
|
318
|
+
extraFieldBuffer: Uint8Array,
|
|
319
|
+
cd: CentralDirectory
|
|
320
|
+
): Record<number, Uint8Array> {
|
|
321
|
+
const extraFields: Record<number, Uint8Array> = {};
|
|
322
|
+
|
|
323
|
+
let i = 0;
|
|
324
|
+
while (i < extraFieldBuffer.length - 3) {
|
|
325
|
+
const headerId = readUInt16LE(extraFieldBuffer, i + 0);
|
|
326
|
+
const dataSize = readUInt16LE(extraFieldBuffer, i + 2);
|
|
327
|
+
const dataStart = i + 4;
|
|
328
|
+
const dataEnd = dataStart + dataSize;
|
|
329
|
+
if (dataEnd > extraFieldBuffer.length) {
|
|
330
|
+
throw new InvalidFileError('extra field length exceeds extra field buffer size');
|
|
331
|
+
}
|
|
332
|
+
const dataBuffer = new Uint8Array(dataSize);
|
|
333
|
+
copyUint8Arr(extraFieldBuffer, dataBuffer, 0, dataStart, dataEnd);
|
|
334
|
+
if (extraFields[headerId]) {
|
|
335
|
+
throw new InvalidFileError(`Conflicting extra field #${headerId} for entry [${cd.fileName}]`);
|
|
336
|
+
}
|
|
337
|
+
extraFields[headerId] = dataBuffer;
|
|
338
|
+
i = dataEnd;
|
|
339
|
+
}
|
|
340
|
+
return extraFields;
|
|
341
|
+
}
|