@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,247 @@
|
|
|
1
|
+
import { InvalidFileError } from '../../../src/errors.js';
|
|
2
|
+
import { readUInt32LE, readUInt16LE, copyUint8Arr, buffToString } from './index.js';
|
|
3
|
+
// TODO: Better document what these constants are
|
|
4
|
+
// TODO: Document each function please
|
|
5
|
+
const CD_SIGNATURE = 0x02014b50;
|
|
6
|
+
const CENTRAL_DIRECTORY_RECORD_FIXED_SIZE = 46;
|
|
7
|
+
const LOCAL_FILE_HEADER_FIXED_SIZE = 30;
|
|
8
|
+
const VERSION_NEEDED_TO_EXTRACT_ZIP64 = 45;
|
|
9
|
+
const manifestMaxSize = 1024 * 1024 * 10; // 10 MB
|
|
10
|
+
const cp437 = '\u0000☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ';
|
|
11
|
+
/**
|
|
12
|
+
*
|
|
13
|
+
* ZipReader -
|
|
14
|
+
*
|
|
15
|
+
* This class is used to extract parts of a TDF. You may pull bytes of a given range from a
|
|
16
|
+
* or request specific important chunks like the 'manifest', or 'payload'.
|
|
17
|
+
*/
|
|
18
|
+
export class ZipReader {
|
|
19
|
+
constructor(getChunk) {
|
|
20
|
+
this.getChunk = getChunk;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Utility function to get the centralDirectory for the zip file.
|
|
24
|
+
* It reads the end of the file to find it.
|
|
25
|
+
* @return The central directory represented as an object
|
|
26
|
+
*/
|
|
27
|
+
async getCentralDirectory() {
|
|
28
|
+
const chunk = await this.getChunk(-1000);
|
|
29
|
+
// TODO: Does this need to be tuned??!?
|
|
30
|
+
// Slice off the EOCDR (End of Central Directory Record) part of the buffer so we can figure out the CD size
|
|
31
|
+
const cdBuffers = this.getCDBuffers(chunk);
|
|
32
|
+
const cdParsedBuffers = cdBuffers.map(parseCDBuffer);
|
|
33
|
+
for (const buffer of cdParsedBuffers) {
|
|
34
|
+
await this.adjustHeaders(buffer);
|
|
35
|
+
}
|
|
36
|
+
return cdParsedBuffers;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Gets the manifest
|
|
40
|
+
* @returns The manifest as a buffer represented as JSON
|
|
41
|
+
*/
|
|
42
|
+
async getManifest(cdBuffers, manifestFileName) {
|
|
43
|
+
const cdObj = cdBuffers.find(({ fileName }) => fileName === manifestFileName);
|
|
44
|
+
if (!cdObj) {
|
|
45
|
+
throw new InvalidFileError('Unable to retrieve CD manifest');
|
|
46
|
+
}
|
|
47
|
+
const byteStart = cdObj.relativeOffsetOfLocalHeader + cdObj.headerLength;
|
|
48
|
+
if (cdObj.uncompressedSize > manifestMaxSize) {
|
|
49
|
+
throw new InvalidFileError(`manifest file too large: ${(cdObj.uncompressedSize >> 10).toLocaleString()} KiB`);
|
|
50
|
+
}
|
|
51
|
+
const byteEnd = byteStart + cdObj.uncompressedSize;
|
|
52
|
+
const manifest = await this.getChunk(byteStart, byteEnd);
|
|
53
|
+
return JSON.parse(new TextDecoder().decode(manifest));
|
|
54
|
+
}
|
|
55
|
+
async adjustHeaders(cdObj) {
|
|
56
|
+
if (!cdObj) {
|
|
57
|
+
throw new InvalidFileError('Unable to retrieve CD adjust');
|
|
58
|
+
}
|
|
59
|
+
// Calculate header length -- tdf3-js writes 0 in all the header fields
|
|
60
|
+
// and does not include extra field for zip64
|
|
61
|
+
const headerChunk = await this.getChunk(cdObj.relativeOffsetOfLocalHeader, cdObj.relativeOffsetOfLocalHeader + cdObj.headerLength);
|
|
62
|
+
cdObj.headerLength = recalculateHeaderLength(headerChunk);
|
|
63
|
+
}
|
|
64
|
+
async getPayloadSegment(cdBuffers, payloadName, encrpytedSegmentOffset, encryptedSegmentSize) {
|
|
65
|
+
const cdObj = cdBuffers.find(({ fileName }) => payloadName === fileName);
|
|
66
|
+
if (!cdObj) {
|
|
67
|
+
throw new InvalidFileError('Unable to retrieve CD');
|
|
68
|
+
}
|
|
69
|
+
const byteStart = cdObj.relativeOffsetOfLocalHeader + cdObj.headerLength + encrpytedSegmentOffset;
|
|
70
|
+
// TODO: what's the exact byte start?
|
|
71
|
+
const byteEnd = byteStart + encryptedSegmentSize;
|
|
72
|
+
return await this.getChunk(byteStart, byteEnd);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* extracts the CD buffer entries from the end of a zip file.
|
|
76
|
+
* @param chunkBuffer The last portion of a zip file
|
|
77
|
+
* @returns an array of typed arrays, each element corresponding to a central directory record
|
|
78
|
+
*/
|
|
79
|
+
getCDBuffers(chunkBuffer) {
|
|
80
|
+
const cdBuffers = [];
|
|
81
|
+
let lastBufferOffset = chunkBuffer.length;
|
|
82
|
+
for (let i = chunkBuffer.length - 22; i >= 0; i -= 1) {
|
|
83
|
+
// If what we're locking at isn't the start of a central directory, skip it..
|
|
84
|
+
if (readUInt32LE(chunkBuffer, i) !== CD_SIGNATURE) {
|
|
85
|
+
// eslint-disable-next-line no-continue
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
// Slice off that CD from it's start until the end of either the buffer, or whatever the start of the previously
|
|
89
|
+
// found CD was
|
|
90
|
+
cdBuffers.push(chunkBuffer.slice(i, lastBufferOffset));
|
|
91
|
+
// Store the last offset location so we know how to slice off hte next CD.
|
|
92
|
+
lastBufferOffset = i;
|
|
93
|
+
// We can skip over 22 iterations since we know the minimum size of a CD is 22.
|
|
94
|
+
i -= 22;
|
|
95
|
+
}
|
|
96
|
+
// They should be in the correct order. Since we iterate backwards, it's built backwards.
|
|
97
|
+
return cdBuffers.reverse();
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
function parseCentralDirectoryWithNoExtras(cdBuffer) {
|
|
101
|
+
const cd = {};
|
|
102
|
+
// 4 - Version made by
|
|
103
|
+
cd.versionMadeBy = readUInt16LE(cdBuffer, 4);
|
|
104
|
+
// 6 - Version needed to extract (minimum)
|
|
105
|
+
cd.versionNeededToExtract = readUInt16LE(cdBuffer, 6);
|
|
106
|
+
// 8 - General purpose bit flag
|
|
107
|
+
cd.generalPurposeBitFlag = readUInt16LE(cdBuffer, 8);
|
|
108
|
+
// 10 - Compression method
|
|
109
|
+
cd.compressionMethod = readUInt16LE(cdBuffer, 10);
|
|
110
|
+
// 12 - File last modification time
|
|
111
|
+
cd.lastModFileTime = readUInt16LE(cdBuffer, 12);
|
|
112
|
+
// 14 - File last modification date
|
|
113
|
+
cd.lastModFileDate = readUInt16LE(cdBuffer, 14);
|
|
114
|
+
// 16 - CRC-32
|
|
115
|
+
cd.crc32 = readUInt32LE(cdBuffer, 16);
|
|
116
|
+
// 20 - Compressed size
|
|
117
|
+
cd.compressedSize = readUInt32LE(cdBuffer, 20);
|
|
118
|
+
// 24 - Uncompressed size
|
|
119
|
+
cd.uncompressedSize = readUInt32LE(cdBuffer, 24);
|
|
120
|
+
// 28 - File name length (n)
|
|
121
|
+
cd.fileNameLength = readUInt16LE(cdBuffer, 28);
|
|
122
|
+
// 30 - Extra field length (m)
|
|
123
|
+
cd.extraFieldLength = readUInt16LE(cdBuffer, 30);
|
|
124
|
+
// 32 - File comment length (k)
|
|
125
|
+
cd.fileCommentLength = readUInt16LE(cdBuffer, 32);
|
|
126
|
+
// 34 - Disk number where file starts
|
|
127
|
+
// 36 - Internal file attributes
|
|
128
|
+
cd.internalFileAttributes = readUInt16LE(cdBuffer, 36);
|
|
129
|
+
// 38 - External file attributes
|
|
130
|
+
cd.externalFileAttributes = readUInt32LE(cdBuffer, 38);
|
|
131
|
+
// 42 - Relative offset of local file header
|
|
132
|
+
cd.relativeOffsetOfLocalHeader = readUInt32LE(cdBuffer, 42);
|
|
133
|
+
const fileNameBuffer = cdBuffer.slice(CENTRAL_DIRECTORY_RECORD_FIXED_SIZE, CENTRAL_DIRECTORY_RECORD_FIXED_SIZE + cd.fileNameLength);
|
|
134
|
+
// eslint-disable-next-line no-bitwise
|
|
135
|
+
const isUtf8 = !!(cd.generalPurposeBitFlag & 0x800);
|
|
136
|
+
cd.fileName = bufferToString(fileNameBuffer, 0, cd.fileNameLength, isUtf8);
|
|
137
|
+
cd.headerLength = LOCAL_FILE_HEADER_FIXED_SIZE + cd.fileNameLength + cd.extraFieldLength;
|
|
138
|
+
return cd;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Takes a central directory buffer and turns it into a manageable object
|
|
142
|
+
* that represents the CD
|
|
143
|
+
* @param cdBuffer The central directory buffer to parse
|
|
144
|
+
* @return The CD object
|
|
145
|
+
*/
|
|
146
|
+
export function parseCDBuffer(cdBuffer) {
|
|
147
|
+
if (readUInt32LE(cdBuffer, 0) !== CD_SIGNATURE) {
|
|
148
|
+
throw new InvalidFileError('Invalid central directory file header signature');
|
|
149
|
+
}
|
|
150
|
+
const cd = parseCentralDirectoryWithNoExtras(cdBuffer);
|
|
151
|
+
if (cd.versionNeededToExtract < VERSION_NEEDED_TO_EXTRACT_ZIP64 || !cd.extraFieldLength) {
|
|
152
|
+
// NOTE(PLAT-1134) Zip64 was added in pkzip 4.5
|
|
153
|
+
return cd;
|
|
154
|
+
}
|
|
155
|
+
// Zip-64 information
|
|
156
|
+
const extraFieldBuffer = cdBuffer.slice(CENTRAL_DIRECTORY_RECORD_FIXED_SIZE + cd.fileNameLength, CENTRAL_DIRECTORY_RECORD_FIXED_SIZE + cd.fileNameLength + cd.extraFieldLength);
|
|
157
|
+
const extraFields = sliceExtraFields(extraFieldBuffer, cd);
|
|
158
|
+
const zip64EiefBuffer = extraFields[1];
|
|
159
|
+
if (zip64EiefBuffer) {
|
|
160
|
+
let index = 0;
|
|
161
|
+
// 0 - Original Size 8 bytes
|
|
162
|
+
if (cd.uncompressedSize === 0xffffffff) {
|
|
163
|
+
if (index + 8 > zip64EiefBuffer.length) {
|
|
164
|
+
throw new InvalidFileError('zip64 extended information extra field does not include uncompressed size');
|
|
165
|
+
}
|
|
166
|
+
cd.uncompressedSize = readUInt64LE(zip64EiefBuffer, index);
|
|
167
|
+
index += 8;
|
|
168
|
+
}
|
|
169
|
+
// 8 - Compressed Size 8 bytes
|
|
170
|
+
if (cd.compressedSize === 0xffffffff) {
|
|
171
|
+
if (index + 8 > zip64EiefBuffer.length) {
|
|
172
|
+
throw new InvalidFileError('zip64 extended information extra field does not include compressed size');
|
|
173
|
+
}
|
|
174
|
+
cd.compressedSize = readUInt64LE(zip64EiefBuffer, index);
|
|
175
|
+
index += 8;
|
|
176
|
+
}
|
|
177
|
+
// 16 - Relative Header Offset 8 bytes
|
|
178
|
+
if (cd.relativeOffsetOfLocalHeader === 0xffffffff) {
|
|
179
|
+
if (index + 8 > zip64EiefBuffer.length) {
|
|
180
|
+
throw new InvalidFileError('zip64 extended information extra field does not include relative header offset');
|
|
181
|
+
}
|
|
182
|
+
cd.relativeOffsetOfLocalHeader = readUInt64LE(zip64EiefBuffer, index);
|
|
183
|
+
}
|
|
184
|
+
// 24 - Disk Start Number 4 bytes
|
|
185
|
+
// not needed
|
|
186
|
+
}
|
|
187
|
+
return cd;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Takes a buffer, and turns it into a string
|
|
191
|
+
* @param buffer The buffer to convert
|
|
192
|
+
* @param start The start location of the part of the buffer to convert
|
|
193
|
+
* @param end The end location of the part of the buffer to convert
|
|
194
|
+
* @param isUtf8 Is it utf8? Otherwise, assumed to be CP-437
|
|
195
|
+
* @return The converted string
|
|
196
|
+
*/
|
|
197
|
+
function bufferToString(buffer, start, end, isUtf8) {
|
|
198
|
+
if (isUtf8) {
|
|
199
|
+
return buffToString(buffer, 'utf-8', start, end);
|
|
200
|
+
}
|
|
201
|
+
let result = '';
|
|
202
|
+
for (let i = start; i < end; i++) {
|
|
203
|
+
if (cp437[buffer[i]]) {
|
|
204
|
+
result += cp437[buffer[i]];
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return result;
|
|
208
|
+
}
|
|
209
|
+
function recalculateHeaderLength(tempHeaderBuffer) {
|
|
210
|
+
const fileNameLength = readUInt16LE(tempHeaderBuffer, 26);
|
|
211
|
+
const extraFieldLength = readUInt16LE(tempHeaderBuffer, 28);
|
|
212
|
+
return LOCAL_FILE_HEADER_FIXED_SIZE + fileNameLength + extraFieldLength;
|
|
213
|
+
}
|
|
214
|
+
export function readUInt64LE(buffer, offset) {
|
|
215
|
+
const lower32 = readUInt32LE(buffer, offset);
|
|
216
|
+
const upper32 = readUInt32LE(buffer, offset + 4);
|
|
217
|
+
const combined = upper32 * 0x100000000 + lower32;
|
|
218
|
+
if (!Number.isSafeInteger(combined)) {
|
|
219
|
+
throw Error(`Value exceeds MAX_SAFE_INTEGER: ${combined}`);
|
|
220
|
+
}
|
|
221
|
+
return combined;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Breaks extra field buffer into slices by field identifier.
|
|
225
|
+
*/
|
|
226
|
+
function sliceExtraFields(extraFieldBuffer, cd) {
|
|
227
|
+
const extraFields = {};
|
|
228
|
+
let i = 0;
|
|
229
|
+
while (i < extraFieldBuffer.length - 3) {
|
|
230
|
+
const headerId = readUInt16LE(extraFieldBuffer, i + 0);
|
|
231
|
+
const dataSize = readUInt16LE(extraFieldBuffer, i + 2);
|
|
232
|
+
const dataStart = i + 4;
|
|
233
|
+
const dataEnd = dataStart + dataSize;
|
|
234
|
+
if (dataEnd > extraFieldBuffer.length) {
|
|
235
|
+
throw new InvalidFileError('extra field length exceeds extra field buffer size');
|
|
236
|
+
}
|
|
237
|
+
const dataBuffer = new Uint8Array(dataSize);
|
|
238
|
+
copyUint8Arr(extraFieldBuffer, dataBuffer, 0, dataStart, dataEnd);
|
|
239
|
+
if (extraFields[headerId]) {
|
|
240
|
+
throw new InvalidFileError(`Conflicting extra field #${headerId} for entry [${cd.fileName}]`);
|
|
241
|
+
}
|
|
242
|
+
extraFields[headerId] = dataBuffer;
|
|
243
|
+
i = dataEnd;
|
|
244
|
+
}
|
|
245
|
+
return extraFields;
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemlwLXJlYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RkZjMvc3JjL3V0aWxzL3ppcC1yZWFkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVwRixpREFBaUQ7QUFDakQsc0NBQXNDO0FBQ3RDLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQztBQUNoQyxNQUFNLG1DQUFtQyxHQUFHLEVBQUUsQ0FBQztBQUMvQyxNQUFNLDRCQUE0QixHQUFHLEVBQUUsQ0FBQztBQUN4QyxNQUFNLCtCQUErQixHQUFHLEVBQUUsQ0FBQztBQUMzQyxNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLFFBQVE7QUFFbEQsTUFBTSxLQUFLLEdBQ1QseVFBQXlRLENBQUM7QUF5QzVROzs7Ozs7R0FNRztBQUNILE1BQU0sT0FBTyxTQUFTO0lBR3BCLFlBQVksUUFBaUI7UUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsbUJBQW1CO1FBQ3ZCLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLHVDQUF1QztRQUN2Qyw0R0FBNEc7UUFDNUcsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUzQyxNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JELEtBQUssTUFBTSxNQUFNLElBQUksZUFBZSxFQUFFO1lBQ3BDLE1BQU0sSUFBSSxDQUFDLGFBQWEs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
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import { writeUInt32LE, writeUInt16LE, concatUint8 } from './index.js';
|
|
2
|
+
const CD_SIGNATURE = 0x02014b50;
|
|
3
|
+
const LOCAL_FILE_HEADER_FIXED_SIZE = 30;
|
|
4
|
+
const VERSION_NEEDED_TO_EXTRACT_UTF8 = 20;
|
|
5
|
+
const VERSION_NEEDED_TO_EXTRACT_ZIP64 = 45;
|
|
6
|
+
const FILE_NAME_IS_UTF8 = 1 << 11;
|
|
7
|
+
const UNKNOWN_CRC32_AND_FILE_SIZES = 1 << 3;
|
|
8
|
+
/*
|
|
9
|
+
|
|
10
|
+
{ versionMadeBy: 831,
|
|
11
|
+
versionNeededToExtract: 20,
|
|
12
|
+
generalPurposeBitFlag: 2048,
|
|
13
|
+
compressionMethod: 0,
|
|
14
|
+
lastModFileTime: 29443,
|
|
15
|
+
lastModFileDate: 19762,
|
|
16
|
+
crc32: 3735382831,
|
|
17
|
+
compressedSize: 2583,
|
|
18
|
+
uncompressedSize: 2583,
|
|
19
|
+
fileNameLength: 15,
|
|
20
|
+
extraFieldLength: 0,
|
|
21
|
+
fileCommentLength: 0,
|
|
22
|
+
internalFileAttributes: 0,
|
|
23
|
+
externalFileAttributes: 2176057344,
|
|
24
|
+
relativeOffsetOfLocalHeader: 0,
|
|
25
|
+
fileName: '0.manifest.json',
|
|
26
|
+
headerLength: 45 }
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
*/
|
|
30
|
+
const CENTRAL_DIRECTORY_RECORD_FIXED_SIZE = 46;
|
|
31
|
+
const ZIP64_EXTENDED_INFORMATION_EXTRA_FIELD_SIZE = 28;
|
|
32
|
+
// 3 = unix. 63 = spec version 6.3
|
|
33
|
+
const VERSION_MADE_BY = (3 << 8) | 63;
|
|
34
|
+
const NO_COMPRESSION = 0;
|
|
35
|
+
const DATA_DESCRIPTOR_SIZE = 16;
|
|
36
|
+
const ZIP64_DATA_DESCRIPTOR_SIZE = 24;
|
|
37
|
+
const END_OF_CENTRAL_DIRECTORY_RECORD_SIZE = 22;
|
|
38
|
+
const ZIP64_END_OF_CENTRAL_DIRECTORY_RECORD_SIZE = 56;
|
|
39
|
+
const ZIP64_END_OF_CENTRAL_DIRECTORY_LOCATOR_SIZE = 20;
|
|
40
|
+
// write a 64bit integer by writing 2 32bit integers
|
|
41
|
+
export function writeUInt64LE(buffer, n, offset) {
|
|
42
|
+
if (!Number.isSafeInteger(n)) {
|
|
43
|
+
throw new Error(`internal: unsafe number [${n}]`);
|
|
44
|
+
}
|
|
45
|
+
const high = Math.floor(n / 0x100000000);
|
|
46
|
+
const low = n % 0x100000000;
|
|
47
|
+
writeUInt32LE(buffer, low, offset);
|
|
48
|
+
writeUInt32LE(buffer, high, offset + 4);
|
|
49
|
+
}
|
|
50
|
+
// MS-DOS 64 bit date/time fields, as described:
|
|
51
|
+
// https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-dosdatetimetofiletime
|
|
52
|
+
export function dateToDosDateTime(jsDate) {
|
|
53
|
+
let date = 0;
|
|
54
|
+
date |= jsDate.getDate() & 0x1f; // 1-31
|
|
55
|
+
date |= ((jsDate.getMonth() + 1) & 0xf) << 5; // 0-11, 1-12
|
|
56
|
+
date |= ((jsDate.getFullYear() - 1980) & 0x7f) << 9; // 0-128, 1980-2108
|
|
57
|
+
let time = 0;
|
|
58
|
+
time |= Math.floor(jsDate.getSeconds() / 2); // 0-59, 0-29 (lose odd numbers)
|
|
59
|
+
time |= (jsDate.getMinutes() & 0x3f) << 5; // 0-59
|
|
60
|
+
time |= (jsDate.getHours() & 0x1f) << 11; // 0-23
|
|
61
|
+
return { date, time };
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Utilities for writing zip file structures.
|
|
65
|
+
*/
|
|
66
|
+
export class ZipWriter {
|
|
67
|
+
constructor() {
|
|
68
|
+
// Enable zip64
|
|
69
|
+
this.zip64 = true;
|
|
70
|
+
}
|
|
71
|
+
getLocalFileHeader(utf8FileName, crc32, compressedSize, uncompressedSize, now = new Date()) {
|
|
72
|
+
const fixedSizeStuff = new Uint8Array(LOCAL_FILE_HEADER_FIXED_SIZE);
|
|
73
|
+
let generalPurposeBitFlag = FILE_NAME_IS_UTF8;
|
|
74
|
+
// we can't know the size in advance
|
|
75
|
+
// TODO: this means we need to add a data descriptor!
|
|
76
|
+
generalPurposeBitFlag |= UNKNOWN_CRC32_AND_FILE_SIZES;
|
|
77
|
+
const dateModified = dateToDosDateTime(now);
|
|
78
|
+
const filenameBuffer = new TextEncoder().encode(utf8FileName);
|
|
79
|
+
// local file header signature 4 bytes (0x04034b50)
|
|
80
|
+
writeUInt32LE(fixedSizeStuff, 0x04034b50, 0);
|
|
81
|
+
// version needed to extract 2 bytes
|
|
82
|
+
writeUInt16LE(fixedSizeStuff, VERSION_NEEDED_TO_EXTRACT_UTF8, 4);
|
|
83
|
+
// general purpose bit flag 2 bytes
|
|
84
|
+
writeUInt16LE(fixedSizeStuff, generalPurposeBitFlag, 6);
|
|
85
|
+
// compression method 2 bytes
|
|
86
|
+
writeUInt16LE(fixedSizeStuff, NO_COMPRESSION, 8);
|
|
87
|
+
// last mod file time 2 bytes
|
|
88
|
+
writeUInt16LE(fixedSizeStuff, dateModified.time, 10);
|
|
89
|
+
// last mod file date 2 bytes
|
|
90
|
+
writeUInt16LE(fixedSizeStuff, dateModified.date, 12);
|
|
91
|
+
// crc-32 4 bytes
|
|
92
|
+
writeUInt32LE(fixedSizeStuff, crc32, 14);
|
|
93
|
+
// compressed size 4 bytes
|
|
94
|
+
writeUInt32LE(fixedSizeStuff, this.zip64 ? 0xffffffff : compressedSize, 18);
|
|
95
|
+
// uncompressed size 4 bytes
|
|
96
|
+
writeUInt32LE(fixedSizeStuff, this.zip64 ? 0xffffffff : uncompressedSize, 22);
|
|
97
|
+
// file name length 2 bytes
|
|
98
|
+
writeUInt16LE(fixedSizeStuff, filenameBuffer.length, 26);
|
|
99
|
+
let zeiefBuffer = new Uint8Array(0);
|
|
100
|
+
if (this.zip64) {
|
|
101
|
+
// ZIP64 extended information extra field
|
|
102
|
+
zeiefBuffer = new Uint8Array(ZIP64_EXTENDED_INFORMATION_EXTRA_FIELD_SIZE);
|
|
103
|
+
// 0x0001 2 bytes Tag for this "extra" block type
|
|
104
|
+
writeUInt16LE(zeiefBuffer, 0x0001, 0);
|
|
105
|
+
// size 2 bytes Size of this "extra" block
|
|
106
|
+
writeUInt16LE(zeiefBuffer, ZIP64_EXTENDED_INFORMATION_EXTRA_FIELD_SIZE - 4, 2);
|
|
107
|
+
writeUInt64LE(zeiefBuffer, compressedSize, 4);
|
|
108
|
+
writeUInt64LE(zeiefBuffer, uncompressedSize, 12);
|
|
109
|
+
writeUInt64LE(zeiefBuffer, 0, 20);
|
|
110
|
+
}
|
|
111
|
+
// extra field length 2 bytes
|
|
112
|
+
writeUInt16LE(fixedSizeStuff, zeiefBuffer.length, 28);
|
|
113
|
+
return concatUint8([
|
|
114
|
+
fixedSizeStuff,
|
|
115
|
+
// file name (variable size)
|
|
116
|
+
filenameBuffer,
|
|
117
|
+
// extra field (variable size)
|
|
118
|
+
zeiefBuffer,
|
|
119
|
+
]);
|
|
120
|
+
}
|
|
121
|
+
writeDataDescriptor(crc32, uncompressedSize) {
|
|
122
|
+
// NOTE(PLAT-1134): optional signature (required according to Archive Utility)
|
|
123
|
+
// 4.3.9.3 Although not originally assigned a signature, the value
|
|
124
|
+
// 0x08074b50 has commonly been adopted as a signature value
|
|
125
|
+
// for the data descriptor record. Implementers should be
|
|
126
|
+
// aware that ZIP files may be encountered with or without this
|
|
127
|
+
// signature marking data descriptors and SHOULD account for
|
|
128
|
+
// either case when reading ZIP files to ensure compatibility.
|
|
129
|
+
const ddSig = 0x08074b50;
|
|
130
|
+
let buffer;
|
|
131
|
+
if (this.zip64) {
|
|
132
|
+
// 4.3.9.2 When compressing files, compressed and uncompressed sizes
|
|
133
|
+
// SHOULD be stored in ZIP64 format (as 8 byte values) when a
|
|
134
|
+
// file's size exceeds 0xFFFFFFFF. However ZIP64 format MAY be
|
|
135
|
+
// used regardless of the size of a file. When extracting, if
|
|
136
|
+
// the zip64 extended information extra field is present for
|
|
137
|
+
// the file the compressed and uncompressed sizes will be 8
|
|
138
|
+
// byte values.
|
|
139
|
+
buffer = new Uint8Array(ZIP64_DATA_DESCRIPTOR_SIZE);
|
|
140
|
+
writeUInt32LE(buffer, crc32, 4);
|
|
141
|
+
writeUInt32LE(buffer, ddSig, 0);
|
|
142
|
+
// We just use STORE, so compressed and uncompressed are the same.
|
|
143
|
+
writeUInt64LE(buffer, uncompressedSize, 8);
|
|
144
|
+
writeUInt64LE(buffer, uncompressedSize, 16);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
buffer = new Uint8Array(DATA_DESCRIPTOR_SIZE);
|
|
148
|
+
writeUInt32LE(buffer, ddSig, 0);
|
|
149
|
+
writeUInt32LE(buffer, crc32, 4);
|
|
150
|
+
writeUInt32LE(buffer, uncompressedSize, 8);
|
|
151
|
+
writeUInt32LE(buffer, uncompressedSize, 12);
|
|
152
|
+
}
|
|
153
|
+
return buffer;
|
|
154
|
+
}
|
|
155
|
+
writeCentralDirectoryRecord(uncompressedSize, utf8FileName, relativeOffsetOfLocalHeader, crc32, externalFileAttributes, now = new Date()) {
|
|
156
|
+
const fixedSizeStuff = new Uint8Array(CENTRAL_DIRECTORY_RECORD_FIXED_SIZE);
|
|
157
|
+
let generalPurposeBitFlag = FILE_NAME_IS_UTF8;
|
|
158
|
+
// we can't know the size in advance
|
|
159
|
+
// TODO: this means we need to add a data descriptor!
|
|
160
|
+
generalPurposeBitFlag |= UNKNOWN_CRC32_AND_FILE_SIZES;
|
|
161
|
+
let normalCompressedSize = uncompressedSize;
|
|
162
|
+
let normalUncompressedSize = uncompressedSize;
|
|
163
|
+
let normalRelativeOffsetOfLocalHeader = relativeOffsetOfLocalHeader;
|
|
164
|
+
let versionNeededToExtract = VERSION_NEEDED_TO_EXTRACT_UTF8;
|
|
165
|
+
let zeiefBuffer = new Uint8Array(0);
|
|
166
|
+
if (this.zip64) {
|
|
167
|
+
versionNeededToExtract = VERSION_NEEDED_TO_EXTRACT_ZIP64;
|
|
168
|
+
normalCompressedSize = 0xffffffff;
|
|
169
|
+
normalUncompressedSize = 0xffffffff;
|
|
170
|
+
normalRelativeOffsetOfLocalHeader = 0xffffffff;
|
|
171
|
+
// ZIP64 extended information extra field
|
|
172
|
+
zeiefBuffer = new Uint8Array(ZIP64_EXTENDED_INFORMATION_EXTRA_FIELD_SIZE);
|
|
173
|
+
// 0x0001 2 bytes Tag for this "extra" block type
|
|
174
|
+
writeUInt16LE(zeiefBuffer, 0x0001, 0);
|
|
175
|
+
// size 2 bytes Size of this "extra" block
|
|
176
|
+
writeUInt16LE(zeiefBuffer, ZIP64_EXTENDED_INFORMATION_EXTRA_FIELD_SIZE - 4, 2);
|
|
177
|
+
// uncompressed size 8 bytes Original uncompressed file size
|
|
178
|
+
writeUInt64LE(zeiefBuffer, uncompressedSize, 4);
|
|
179
|
+
// compressed Size 8 bytes Size of compressed data
|
|
180
|
+
writeUInt64LE(zeiefBuffer, uncompressedSize, 12);
|
|
181
|
+
// relative header offset 8 bytes Offset of local header record
|
|
182
|
+
writeUInt64LE(zeiefBuffer, relativeOffsetOfLocalHeader, 20);
|
|
183
|
+
// Disk Start Number 4 bytes Number of the disk on which this file starts
|
|
184
|
+
// (omit)
|
|
185
|
+
// console.log(`zeif Buffer ${utf8FileName}: ${zeiefBuffer.toString('hex')}`);
|
|
186
|
+
}
|
|
187
|
+
const dateModified = dateToDosDateTime(now);
|
|
188
|
+
const filenameBuffer = new TextEncoder().encode(utf8FileName);
|
|
189
|
+
// central file header signature 4 bytes (0x02014b50)
|
|
190
|
+
writeUInt32LE(fixedSizeStuff, CD_SIGNATURE, 0);
|
|
191
|
+
// version made by 2 bytes
|
|
192
|
+
writeUInt16LE(fixedSizeStuff, VERSION_MADE_BY, 4);
|
|
193
|
+
// version needed to extract 2 bytes
|
|
194
|
+
writeUInt16LE(fixedSizeStuff, versionNeededToExtract, 6);
|
|
195
|
+
// general purpose bit flag 2 bytes
|
|
196
|
+
writeUInt16LE(fixedSizeStuff, generalPurposeBitFlag, 8);
|
|
197
|
+
// compression method 2 bytes
|
|
198
|
+
writeUInt16LE(fixedSizeStuff, NO_COMPRESSION, 10);
|
|
199
|
+
// last mod file time 2 bytes
|
|
200
|
+
writeUInt16LE(fixedSizeStuff, dateModified.time, 12);
|
|
201
|
+
// last mod file date 2 bytes
|
|
202
|
+
writeUInt16LE(fixedSizeStuff, dateModified.date, 14);
|
|
203
|
+
// crc-32 4 bytes
|
|
204
|
+
writeUInt32LE(fixedSizeStuff, crc32, 16);
|
|
205
|
+
// compressed size 4 bytes
|
|
206
|
+
writeUInt32LE(fixedSizeStuff, normalCompressedSize, 20);
|
|
207
|
+
// uncompressed size 4 bytes
|
|
208
|
+
writeUInt32LE(fixedSizeStuff, normalUncompressedSize, 24);
|
|
209
|
+
// file name length 2 bytes
|
|
210
|
+
writeUInt16LE(fixedSizeStuff, filenameBuffer.length, 28);
|
|
211
|
+
// extra field length 2 bytes
|
|
212
|
+
writeUInt16LE(fixedSizeStuff, zeiefBuffer.length, 30);
|
|
213
|
+
// file comment length 2 bytes
|
|
214
|
+
writeUInt16LE(fixedSizeStuff, 0, 32);
|
|
215
|
+
// disk number start 2 bytes
|
|
216
|
+
writeUInt16LE(fixedSizeStuff, 0, 34);
|
|
217
|
+
// internal file attributes 2 bytes
|
|
218
|
+
writeUInt16LE(fixedSizeStuff, 0, 36);
|
|
219
|
+
// external file attributes 4 bytes
|
|
220
|
+
writeUInt32LE(fixedSizeStuff, externalFileAttributes, 38);
|
|
221
|
+
// relative offset of local header 4 bytes
|
|
222
|
+
writeUInt32LE(fixedSizeStuff, normalRelativeOffsetOfLocalHeader, 42);
|
|
223
|
+
return concatUint8([
|
|
224
|
+
fixedSizeStuff,
|
|
225
|
+
// file name (variable size)
|
|
226
|
+
filenameBuffer,
|
|
227
|
+
// extra field (variable size)
|
|
228
|
+
zeiefBuffer,
|
|
229
|
+
// file comment (variable size)
|
|
230
|
+
// empty comment
|
|
231
|
+
]);
|
|
232
|
+
}
|
|
233
|
+
writeEndOfCentralDirectoryRecord(entriesLength, sizeOfCentralDirectory, offsetOfStartOfCentralDirectory) {
|
|
234
|
+
let normalEntriesLength = entriesLength;
|
|
235
|
+
let normalSizeOfCentralDirectory = sizeOfCentralDirectory;
|
|
236
|
+
let normalOffsetOfStartOfCentralDirectory = offsetOfStartOfCentralDirectory;
|
|
237
|
+
if (this.zip64) {
|
|
238
|
+
normalEntriesLength = 0xffff;
|
|
239
|
+
normalSizeOfCentralDirectory = 0xffffffff;
|
|
240
|
+
normalOffsetOfStartOfCentralDirectory = 0xffffffff;
|
|
241
|
+
}
|
|
242
|
+
const eocdrBuffer = new Uint8Array(END_OF_CENTRAL_DIRECTORY_RECORD_SIZE);
|
|
243
|
+
// end of central dir signature 4 bytes (0x06054b50)
|
|
244
|
+
writeUInt32LE(eocdrBuffer, 0x06054b50, 0);
|
|
245
|
+
// number of this disk 2 bytes
|
|
246
|
+
writeUInt16LE(eocdrBuffer, 0, 4);
|
|
247
|
+
// number of the disk with the start of the central directory 2 bytes
|
|
248
|
+
writeUInt16LE(eocdrBuffer, 0, 6);
|
|
249
|
+
// total number of entries in the central directory on this disk 2 bytes
|
|
250
|
+
writeUInt16LE(eocdrBuffer, normalEntriesLength, 8);
|
|
251
|
+
// total number of entries in the central directory 2 bytes
|
|
252
|
+
writeUInt16LE(eocdrBuffer, normalEntriesLength, 10);
|
|
253
|
+
// size of the central directory 4 bytes
|
|
254
|
+
writeUInt32LE(eocdrBuffer, normalSizeOfCentralDirectory, 12);
|
|
255
|
+
// offset of start of central directory with respect to the starting disk number 4 bytes
|
|
256
|
+
writeUInt32LE(eocdrBuffer, normalOffsetOfStartOfCentralDirectory, 16);
|
|
257
|
+
// .ZIP file comment length 2 bytes
|
|
258
|
+
writeUInt16LE(eocdrBuffer, 0, 20);
|
|
259
|
+
// .ZIP file comment (variable size)
|
|
260
|
+
// no comment
|
|
261
|
+
if (!this.zip64) {
|
|
262
|
+
return eocdrBuffer;
|
|
263
|
+
}
|
|
264
|
+
// ZIP64 format
|
|
265
|
+
// ZIP64 End of Central Directory Record
|
|
266
|
+
const zip64EocdrBuffer = new Uint8Array(ZIP64_END_OF_CENTRAL_DIRECTORY_RECORD_SIZE);
|
|
267
|
+
// zip64 end of central dir signature 4 bytes (0x06064b50)
|
|
268
|
+
writeUInt32LE(zip64EocdrBuffer, 0x06064b50, 0);
|
|
269
|
+
// size of zip64 end of central directory record 8 bytes
|
|
270
|
+
writeUInt64LE(zip64EocdrBuffer, ZIP64_END_OF_CENTRAL_DIRECTORY_RECORD_SIZE - 12, 4);
|
|
271
|
+
// version made by 2 bytes
|
|
272
|
+
writeUInt16LE(zip64EocdrBuffer, VERSION_MADE_BY, 12);
|
|
273
|
+
// version needed to extract 2 bytes
|
|
274
|
+
writeUInt16LE(zip64EocdrBuffer, VERSION_NEEDED_TO_EXTRACT_ZIP64, 14);
|
|
275
|
+
// number of this disk 4 bytes
|
|
276
|
+
writeUInt32LE(zip64EocdrBuffer, 0, 16);
|
|
277
|
+
// number of the disk with the start of the central directory 4 bytes
|
|
278
|
+
writeUInt32LE(zip64EocdrBuffer, 0, 20);
|
|
279
|
+
// total number of entries in the central directory on this disk 8 bytes
|
|
280
|
+
writeUInt64LE(zip64EocdrBuffer, entriesLength, 24);
|
|
281
|
+
// total number of entries in the central directory 8 bytes
|
|
282
|
+
writeUInt64LE(zip64EocdrBuffer, entriesLength, 32);
|
|
283
|
+
// size of the central directory 8 bytes
|
|
284
|
+
writeUInt64LE(zip64EocdrBuffer, sizeOfCentralDirectory, 40);
|
|
285
|
+
// offset of start of central directory with respect to the starting disk number 8 bytes
|
|
286
|
+
writeUInt64LE(zip64EocdrBuffer, offsetOfStartOfCentralDirectory, 48);
|
|
287
|
+
// zip64 extensible data sector (variable size)
|
|
288
|
+
// nothing in the zip64 extensible data sector
|
|
289
|
+
// ZIP64 End of Central Directory Locator
|
|
290
|
+
const zip64EocdlBuffer = new Uint8Array(ZIP64_END_OF_CENTRAL_DIRECTORY_LOCATOR_SIZE);
|
|
291
|
+
// zip64 end of central dir locator signature 4 bytes (0x07064b50)
|
|
292
|
+
writeUInt32LE(zip64EocdlBuffer, 0x07064b50, 0);
|
|
293
|
+
// number of the disk with the start of the zip64 end of central directory 4 bytes
|
|
294
|
+
writeUInt32LE(zip64EocdlBuffer, 0, 4);
|
|
295
|
+
// relative offset of the zip64 end of central directory record 8 bytes
|
|
296
|
+
writeUInt64LE(zip64EocdlBuffer, offsetOfStartOfCentralDirectory + sizeOfCentralDirectory, 8);
|
|
297
|
+
// total number of disks 4 bytes
|
|
298
|
+
writeUInt32LE(zip64EocdlBuffer, 1, 16);
|
|
299
|
+
return concatUint8([zip64EocdrBuffer, zip64EocdlBuffer, eocdrBuffer]);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemlwLXdyaXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RkZjMvc3JjL3V0aWxzL3ppcC13cml0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXZFLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQztBQUNoQyxNQUFNLDRCQUE0QixHQUFHLEVBQUUsQ0FBQztBQUN4QyxNQUFNLDhCQUE4QixHQUFHLEVBQUUsQ0FBQztBQUMxQyxNQUFNLCtCQUErQixHQUFHLEVBQUUsQ0FBQztBQUMzQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbEMsTUFBTSw0QkFBNEIsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRTVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFxQkU7QUFFRixNQUFNLG1DQUFtQyxHQUFHLEVBQUUsQ0FBQztBQUMvQyxNQUFNLDJDQUEyQyxHQUFHLEVBQUUsQ0FBQztBQUV2RCxrQ0FBa0M7QUFDbEMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBRXRDLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQztBQUV6QixNQUFNLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztBQUNoQyxNQUFNLDBCQUEwQixHQUFHLEVBQUUsQ0FBQztBQUV0QyxNQUFNLG9DQUFvQyxHQUFHLEVBQUUsQ0FBQztBQUNoRCxNQUFNLDBDQUEwQyxHQUFHLEVBQUUsQ0FBQztBQUN0RCxNQUFNLDJDQUEyQyxHQUFHLEVBQUUsQ0FBQztBQUV2RCxvREFBb0Q7QUFDcEQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxNQUFrQixFQUFFLENBQVMsRUFBRSxNQUFjO0lBQ3pFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQzVCLE1B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
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export const version = '0.1.0';
|
|
2
|
+
export const clientType = 'tdf3-js-client';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RkZjMvc3JjL3ZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUMvQixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMifQ==
|