@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,105 @@
|
|
|
1
|
+
import { escHtml, escJavaScript } from './escaper.js';
|
|
2
|
+
export default ({
|
|
3
|
+
manifest,
|
|
4
|
+
payload,
|
|
5
|
+
transferUrl,
|
|
6
|
+
transferBaseUrl,
|
|
7
|
+
}: {
|
|
8
|
+
manifest: string;
|
|
9
|
+
payload: string;
|
|
10
|
+
transferUrl: string;
|
|
11
|
+
transferBaseUrl: string;
|
|
12
|
+
}) => `<html>
|
|
13
|
+
<head>
|
|
14
|
+
<meta charset="UTF-8">
|
|
15
|
+
</head>
|
|
16
|
+
<body style="font-family: Arial; color: #2D323B; overflow: hidden; margin: 0; height: 100%; background-color: white;">
|
|
17
|
+
<input id="data-input" type="hidden" value="${escHtml(payload)}">
|
|
18
|
+
<input id="data-manifest" type="hidden" value="${escHtml(manifest)}">
|
|
19
|
+
<iframe style="width:0;height:0;border:0; border:none;" src="${escHtml(transferUrl)}"></iframe>
|
|
20
|
+
<div role="banner" style="background-color: #092356; color: white; height: 55px;">
|
|
21
|
+
<img src="https://cdn.virtru.com/assets/virtru-logo-white-rgb.png"
|
|
22
|
+
style="display: inline-block; padding: 18px 0 0 24px;"
|
|
23
|
+
width="62px" height="19px" alt="Virtru logo" title="Virtru"/>
|
|
24
|
+
</div>
|
|
25
|
+
<div role="main" class="wrapper" style="padding-top: 107px; display: flex; flex-direction: row; max-width: 1200px;
|
|
26
|
+
min-width: 800px; margin: 0 auto; min-height: calc(100vh - 230px); border-bottom: 1px solid #F3F5F7;">
|
|
27
|
+
<div role="region">
|
|
28
|
+
<img src="https://cdn.virtru.com/assets/request-access.png" style="display: inline-block;"
|
|
29
|
+
width="387px" height="310px" alt="Request access image" title="Request access"/>
|
|
30
|
+
</div>
|
|
31
|
+
<div role="complementary" style="word-break: break-all; padding-right: 12px;">
|
|
32
|
+
<h1 style="font-size: 1.5em;">Virtru Secure File</h1>
|
|
33
|
+
<noscript style="font-weight: 100;">
|
|
34
|
+
<span>
|
|
35
|
+
To view this file, download and access it from your computer:
|
|
36
|
+
<br />
|
|
37
|
+
<br />
|
|
38
|
+
</span>
|
|
39
|
+
<div>
|
|
40
|
+
1. <b>Go Back</b> to the file directory and <b>Right-click</b> on the file
|
|
41
|
+
</div>
|
|
42
|
+
<div>
|
|
43
|
+
2. Select <b>Download</b>
|
|
44
|
+
</div>
|
|
45
|
+
<div>
|
|
46
|
+
3. Once download is complete, <b>double-click</b> on the local file to open
|
|
47
|
+
</div>
|
|
48
|
+
</noscript>
|
|
49
|
+
<div id="js-enabled-message" style="display: none;">
|
|
50
|
+
<span>We are trying to send you to Secure Reader. If this does not work, please click the button below</span>
|
|
51
|
+
<br />
|
|
52
|
+
<button
|
|
53
|
+
id="viewbutton"
|
|
54
|
+
style="color: #fff!important; background: gray; padding: 10px 40px; border-radius: 25px; display: inline-block; border: none; font-size: 15px; width: 300px; margin-block-start: 1.1em;
|
|
55
|
+
margin-block-end: 1.1em;"
|
|
56
|
+
class="viewbutton"
|
|
57
|
+
type="button"
|
|
58
|
+
>
|
|
59
|
+
View File in Secure Reader
|
|
60
|
+
</button>
|
|
61
|
+
</div>
|
|
62
|
+
</div>
|
|
63
|
+
</div>
|
|
64
|
+
<div role="contentinfo" style="color: grey; text-align: center; padding-top: 25px; font-family: Arial;">
|
|
65
|
+
<span style="padding: 25px; font-size: 13px;">© Copyright 2019 Virtru Corporation</span>
|
|
66
|
+
<span style="padding: 25px; font-size: 13px;">Learn more at www.virtru.com</span>
|
|
67
|
+
</div>
|
|
68
|
+
<script type="text/javascript">
|
|
69
|
+
var transferComplete = false;
|
|
70
|
+
var data = document.getElementById('data-input').value;
|
|
71
|
+
var manifest = JSON.parse(atob(document.getElementById('data-manifest').value));
|
|
72
|
+
var redirectButton = document.getElementById('viewbutton');
|
|
73
|
+
var ifr = document.querySelector('iframe');
|
|
74
|
+
var otherWindow = ifr.contentWindow;
|
|
75
|
+
|
|
76
|
+
document.getElementById('js-enabled-message').style.display = 'block';
|
|
77
|
+
ifr.addEventListener("load", iframeLoaded, false);
|
|
78
|
+
|
|
79
|
+
function iframeLoaded() {
|
|
80
|
+
var channel = new MessageChannel();
|
|
81
|
+
otherWindow.postMessage({
|
|
82
|
+
type: 'tdf.html',
|
|
83
|
+
data: data,
|
|
84
|
+
policy: manifest.encryptionInformation.policy
|
|
85
|
+
}, '${escJavaScript(transferBaseUrl)}', [channel.port2]);
|
|
86
|
+
|
|
87
|
+
channel.port1.onmessage = handleMessage;
|
|
88
|
+
|
|
89
|
+
function handleMessage(e) {
|
|
90
|
+
let msg = e.data;
|
|
91
|
+
if (msg.status === 'success') {
|
|
92
|
+
transferComplete = true;
|
|
93
|
+
redirectButton.style.background = '#4585ff';
|
|
94
|
+
window.location.href = "${escJavaScript(transferUrl)}";
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
redirectButton.onclick = function(){
|
|
99
|
+
if (transferComplete) {
|
|
100
|
+
window.location.href = "${escJavaScript(transferUrl)}";
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
</script>
|
|
104
|
+
</body>
|
|
105
|
+
</html>`;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Javascript escape attribute strings. How is this not part of the lib?.
|
|
2
|
+
* https://stackoverflow.com/a/30970751
|
|
3
|
+
*/
|
|
4
|
+
export function escHtml(plainString = '') {
|
|
5
|
+
return plainString.replace(/["'&<]/g, (c) => `&#${c.charCodeAt(0)};`);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function escJavaScript(plainString = '') {
|
|
9
|
+
return plainString.replace(/["'\\<]/g, (c) => `\\${c === '<' ? '074' : c}`);
|
|
10
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// implementation of https://github.com/brianloveswords/buffer-crc32/blob/master/index.js with arrayBuffers and ts
|
|
2
|
+
|
|
3
|
+
const CRC_TABLE = new Int32Array([
|
|
4
|
+
0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
|
|
5
|
+
0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
|
|
6
|
+
0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
|
|
7
|
+
0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
|
|
8
|
+
0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
|
|
9
|
+
0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
|
|
10
|
+
0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
|
|
11
|
+
0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
|
|
12
|
+
0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
|
|
13
|
+
0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
|
|
14
|
+
0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
|
|
15
|
+
0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
|
|
16
|
+
0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
|
|
17
|
+
0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
|
|
18
|
+
0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
|
|
19
|
+
0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
|
|
20
|
+
0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
|
|
21
|
+
0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
|
|
22
|
+
0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
|
|
23
|
+
0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
|
|
24
|
+
0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
|
|
25
|
+
0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
|
|
26
|
+
0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
|
|
27
|
+
0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
|
|
28
|
+
0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
|
|
29
|
+
0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
|
|
30
|
+
0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
|
|
31
|
+
0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
|
|
32
|
+
0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
|
|
33
|
+
0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
|
|
34
|
+
0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
|
|
35
|
+
0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
|
|
36
|
+
]);
|
|
37
|
+
|
|
38
|
+
export function unsigned(buf: Uint8Array, previous: number) {
|
|
39
|
+
let crc = ~~previous ^ -1;
|
|
40
|
+
for (let n = 0; n < buf.length; n++) {
|
|
41
|
+
crc = CRC_TABLE[(crc ^ buf[n]) & 0xff] ^ (crc >>> 8);
|
|
42
|
+
}
|
|
43
|
+
const result = crc ^ -1;
|
|
44
|
+
|
|
45
|
+
return result >>> 0;
|
|
46
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import axios, { AxiosInstance, AxiosResponse } from 'axios';
|
|
2
|
+
import {
|
|
3
|
+
type DecoratedReadableStream,
|
|
4
|
+
isDecoratedReadableStream,
|
|
5
|
+
} from '../client/DecoratedReadableStream.js';
|
|
6
|
+
import axiosRetry from 'axios-retry';
|
|
7
|
+
import { ConfigurationError, NetworkError } from '../../../src/errors.js';
|
|
8
|
+
|
|
9
|
+
let axiosRemoteChunk: AxiosInstance | null = null;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Read data from a seekable stream.
|
|
13
|
+
* @param byteStart First byte to read. If negative, reads from the end. If absent, reads everything
|
|
14
|
+
* @param byteEnd Index after last byte to read (exclusive)
|
|
15
|
+
*/
|
|
16
|
+
export type Chunker = (byteStart?: number, byteEnd?: number) => Promise<Uint8Array>;
|
|
17
|
+
|
|
18
|
+
export const fromBrowserFile = (fileRef: Blob): Chunker => {
|
|
19
|
+
return async (byteStart?: number, byteEnd?: number): Promise<Uint8Array> => {
|
|
20
|
+
const chunkBlob = fileRef.slice(byteStart, byteEnd);
|
|
21
|
+
const arrayBuffer = await new Response(chunkBlob).arrayBuffer();
|
|
22
|
+
return new Uint8Array(arrayBuffer);
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export const fromBuffer = (source: Uint8Array | Buffer): Chunker => {
|
|
27
|
+
return (byteStart?: number, byteEnd?: number) => {
|
|
28
|
+
return Promise.resolve(source.slice(byteStart, byteEnd));
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
async function getRemoteChunk(url: string, range?: string): Promise<Uint8Array> {
|
|
33
|
+
if (!axiosRemoteChunk) {
|
|
34
|
+
axiosRemoteChunk = axios.create();
|
|
35
|
+
// @ts-ignore: axiosRetry not typed
|
|
36
|
+
axiosRetry(axiosRemoteChunk, {
|
|
37
|
+
retries: 3,
|
|
38
|
+
retryDelay: axiosRetry.exponentialDelay,
|
|
39
|
+
retryCondition: () => true,
|
|
40
|
+
}); // Retries all idempotent requests (GET, HEAD, OPTIONS, PUT, DELETE)
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
const res: AxiosResponse<ArrayBuffer> = await axiosRemoteChunk.get(url, {
|
|
44
|
+
...(range && {
|
|
45
|
+
headers: {
|
|
46
|
+
Range: `bytes=${range}`,
|
|
47
|
+
},
|
|
48
|
+
}),
|
|
49
|
+
responseType: 'arraybuffer',
|
|
50
|
+
});
|
|
51
|
+
if (!res.data) {
|
|
52
|
+
throw new NetworkError(
|
|
53
|
+
'Unexpected response type: Server should have responded with an ArrayBuffer.'
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
return new Uint8Array(res.data);
|
|
57
|
+
} catch (e) {
|
|
58
|
+
if (e && e.response && e.response.status === 416) {
|
|
59
|
+
console.log('Warning: Range not satisfiable');
|
|
60
|
+
}
|
|
61
|
+
throw e;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export const fromUrl = async (location: string): Promise<Chunker> => {
|
|
66
|
+
return async (byteStart?: number, byteEnd?: number): Promise<Uint8Array> => {
|
|
67
|
+
if (byteStart === undefined) {
|
|
68
|
+
return getRemoteChunk(location);
|
|
69
|
+
}
|
|
70
|
+
let rangeHeader = `${byteStart}`;
|
|
71
|
+
if (byteEnd && byteEnd < 0) {
|
|
72
|
+
// NOTE: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Range
|
|
73
|
+
throw Error('negative end unsupported');
|
|
74
|
+
} else if (byteEnd) {
|
|
75
|
+
rangeHeader += `-${byteEnd - 1}`;
|
|
76
|
+
}
|
|
77
|
+
return await getRemoteChunk(location, rangeHeader);
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
export type DataSource =
|
|
82
|
+
| { type: 'buffer'; location: Uint8Array }
|
|
83
|
+
| { type: 'chunker'; location: Chunker }
|
|
84
|
+
| { type: 'file-browser'; location: Blob }
|
|
85
|
+
| { type: 'remote'; location: string }
|
|
86
|
+
| { type: 'stream'; location: DecoratedReadableStream };
|
|
87
|
+
|
|
88
|
+
export const fromDataSource = async ({ type, location }: DataSource) => {
|
|
89
|
+
switch (type) {
|
|
90
|
+
case 'buffer':
|
|
91
|
+
if (!(location instanceof Uint8Array)) {
|
|
92
|
+
throw new ConfigurationError('Invalid data source; must be uint8 array');
|
|
93
|
+
}
|
|
94
|
+
return fromBuffer(location);
|
|
95
|
+
case 'chunker':
|
|
96
|
+
if (!(location instanceof Function)) {
|
|
97
|
+
throw new ConfigurationError('Invalid data source; must be uint8 array');
|
|
98
|
+
}
|
|
99
|
+
return location;
|
|
100
|
+
case 'file-browser':
|
|
101
|
+
if (!(location instanceof Blob)) {
|
|
102
|
+
throw new ConfigurationError('Invalid data source; must be at least a Blob');
|
|
103
|
+
}
|
|
104
|
+
return fromBrowserFile(location);
|
|
105
|
+
case 'remote':
|
|
106
|
+
if (typeof location !== 'string') {
|
|
107
|
+
throw new ConfigurationError('Invalid data source; url not provided');
|
|
108
|
+
}
|
|
109
|
+
return fromUrl(location);
|
|
110
|
+
case 'stream':
|
|
111
|
+
if (!isDecoratedReadableStream(location)) {
|
|
112
|
+
throw new ConfigurationError('Invalid data source; must be DecoratedTdfStream');
|
|
113
|
+
}
|
|
114
|
+
return fromBuffer(await location.toBuffer());
|
|
115
|
+
default:
|
|
116
|
+
throw new ConfigurationError(`Data source type not defined, or not supported: ${type}}`);
|
|
117
|
+
}
|
|
118
|
+
};
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
import { toByteArray, fromByteArray } from 'base64-js';
|
|
2
|
+
import { AppIdAuthProvider, type AuthProvider } from '../../../src/auth/auth.js';
|
|
3
|
+
import * as WebCryptoService from '../crypto/index.js';
|
|
4
|
+
import { KeyInfo, SplitKey } from '../models/index.js';
|
|
5
|
+
|
|
6
|
+
import { AesGcmCipher } from '../ciphers/aes-gcm-cipher.js';
|
|
7
|
+
import { ConfigurationError } from '../../../src/errors.js';
|
|
8
|
+
|
|
9
|
+
export { ZipReader, readUInt64LE } from './zip-reader.js';
|
|
10
|
+
export { ZipWriter } from './zip-writer.js';
|
|
11
|
+
export { keySplit, keyMerge } from './keysplit.js';
|
|
12
|
+
export { streamToBuffer } from '../client/DecoratedReadableStream.js';
|
|
13
|
+
export * from './chunkers.js';
|
|
14
|
+
|
|
15
|
+
export type SupportedEncoding = 'hex' | 'utf8' | 'utf-8' | 'binary' | 'latin1' | 'base64';
|
|
16
|
+
|
|
17
|
+
const hexSliceLookupTable = (() => {
|
|
18
|
+
const alphabet = '0123456789abcdef';
|
|
19
|
+
const table = new Array(256);
|
|
20
|
+
for (let i = 0; i < 16; ++i) {
|
|
21
|
+
const i16 = i * 16;
|
|
22
|
+
for (let j = 0; j < 16; ++j) {
|
|
23
|
+
table[i16 + j] = alphabet[i] + alphabet[j];
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return table;
|
|
27
|
+
})();
|
|
28
|
+
|
|
29
|
+
export function base64ToBuffer(b64: string): Uint8Array {
|
|
30
|
+
return Uint8Array.from(atob(b64).split(''), (c) => c.charCodeAt(0));
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function isAppIdProviderCheck(
|
|
34
|
+
provider: AuthProvider | AppIdAuthProvider
|
|
35
|
+
): provider is AppIdAuthProvider {
|
|
36
|
+
return (provider as AppIdAuthProvider)._getName !== undefined;
|
|
37
|
+
}
|
|
38
|
+
export function concatUint8(uint8Arrays: Uint8Array[]): Uint8Array {
|
|
39
|
+
const newLength = uint8Arrays.reduce(
|
|
40
|
+
(accumulator, currentValue) => accumulator + currentValue.length,
|
|
41
|
+
0
|
|
42
|
+
);
|
|
43
|
+
const combinedUint8Array = new Uint8Array(newLength);
|
|
44
|
+
|
|
45
|
+
let offset = 0;
|
|
46
|
+
for (const uint8Array of uint8Arrays) {
|
|
47
|
+
combinedUint8Array.set(uint8Array, offset);
|
|
48
|
+
offset += uint8Array.length;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return combinedUint8Array;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export function readUInt32LE(uint8Array: Uint8Array, offset: number): number {
|
|
55
|
+
return (
|
|
56
|
+
(uint8Array[offset] |
|
|
57
|
+
(uint8Array[offset + 1] << 8) |
|
|
58
|
+
(uint8Array[offset + 2] << 16) |
|
|
59
|
+
(uint8Array[offset + 3] << 24)) >>>
|
|
60
|
+
0
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export function readUInt16LE(uint8Array: Uint8Array, offset: number): number {
|
|
65
|
+
return uint8Array[offset] | (uint8Array[offset + 1] << 8);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export function readUInt32BE(arrayBuffer: ArrayBuffer, offset: number): number {
|
|
69
|
+
const view = new DataView(arrayBuffer, offset, 4);
|
|
70
|
+
return view.getUint32(0, false);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export function writeUInt16LE(uint8Array: Uint8Array, value: number, offset: number): void {
|
|
74
|
+
uint8Array[offset] = value & 0xff;
|
|
75
|
+
uint8Array[offset + 1] = (value >> 8) & 0xff;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export function writeUInt32LE(uint8Array: Uint8Array, value: number, offset: number): void {
|
|
79
|
+
uint8Array[offset] = value & 0xff;
|
|
80
|
+
uint8Array[offset + 1] = (value >> 8) & 0xff;
|
|
81
|
+
uint8Array[offset + 2] = (value >> 16) & 0xff;
|
|
82
|
+
uint8Array[offset + 3] = (value >> 24) & 0xff;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export function copyUint8Arr(
|
|
86
|
+
source: Uint8Array,
|
|
87
|
+
target: Uint8Array,
|
|
88
|
+
targetStart: number = 0,
|
|
89
|
+
sourceStart: number = 0,
|
|
90
|
+
sourceEnd: number = source.length
|
|
91
|
+
): number {
|
|
92
|
+
const length = Math.min(sourceEnd - sourceStart, target.length - targetStart);
|
|
93
|
+
target.set(source.subarray(sourceStart, sourceStart + length), targetStart);
|
|
94
|
+
return length;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// https://github.com/feross/buffer/blob/master/index.js#L1073
|
|
98
|
+
function hexSlice(buf: Uint8Array, start: number = 0, end: number = buf.length): string {
|
|
99
|
+
const len = buf.length;
|
|
100
|
+
|
|
101
|
+
if (!start || start < 0) start = 0;
|
|
102
|
+
if (!end || end < 0 || end > len) end = len;
|
|
103
|
+
|
|
104
|
+
let out = '';
|
|
105
|
+
for (let i = start; i < end; ++i) {
|
|
106
|
+
out += hexSliceLookupTable[buf[i]];
|
|
107
|
+
}
|
|
108
|
+
return out;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// https://github.com/feross/buffer/blob/master/index.js#L1053
|
|
112
|
+
function latin1Slice(buf: Uint8Array, start: number, end: number): string {
|
|
113
|
+
let result = '';
|
|
114
|
+
end = Math.min(buf.length, end);
|
|
115
|
+
|
|
116
|
+
for (let i = start; i < end; ++i) {
|
|
117
|
+
result += String.fromCharCode(buf[i]);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return result;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function base64Slice(buf: Uint8Array, start: number, end: number): string {
|
|
124
|
+
if (start === 0 && end === buf.length) {
|
|
125
|
+
return fromByteArray(buf);
|
|
126
|
+
} else {
|
|
127
|
+
return fromByteArray(buf.slice(start, end));
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// https://github.com/feross/buffer/blob/master/index.js#L483
|
|
132
|
+
export function buffToString(
|
|
133
|
+
source: Uint8Array,
|
|
134
|
+
encoding: SupportedEncoding = 'utf8',
|
|
135
|
+
start = 0,
|
|
136
|
+
end = source.length
|
|
137
|
+
) {
|
|
138
|
+
if (start < 0) {
|
|
139
|
+
start = 0;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if (end > source.length) {
|
|
143
|
+
end = source.length;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Return early if start > buffer.length. Done here to prevent potential uint32
|
|
147
|
+
// coercion fail below.
|
|
148
|
+
if (start > source.length || end <= 0 || end <= start) {
|
|
149
|
+
return '';
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
switch (encoding) {
|
|
153
|
+
case 'hex':
|
|
154
|
+
return hexSlice(source, start, end);
|
|
155
|
+
|
|
156
|
+
case 'utf8':
|
|
157
|
+
case 'utf-8':
|
|
158
|
+
return utf8Slice(source, start, end);
|
|
159
|
+
|
|
160
|
+
case 'latin1':
|
|
161
|
+
case 'binary':
|
|
162
|
+
return latin1Slice(source, start, end);
|
|
163
|
+
|
|
164
|
+
case 'base64':
|
|
165
|
+
return base64Slice(source, start, end);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// https://github.com/feross/buffer/blob/master/index.js#L954
|
|
170
|
+
export function utf8Slice(buf: Uint8Array, start: number, end: number): string {
|
|
171
|
+
end = Math.min(buf.length, end);
|
|
172
|
+
const res: number[] = [];
|
|
173
|
+
|
|
174
|
+
let i = start;
|
|
175
|
+
while (i < end) {
|
|
176
|
+
const firstByte = buf[i];
|
|
177
|
+
let codePoint: number | null = null;
|
|
178
|
+
let bytesPerSequence = firstByte > 0xef ? 4 : firstByte > 0xdf ? 3 : firstByte > 0xbf ? 2 : 1;
|
|
179
|
+
|
|
180
|
+
if (i + bytesPerSequence <= end) {
|
|
181
|
+
let secondByte, thirdByte, fourthByte, tempCodePoint;
|
|
182
|
+
|
|
183
|
+
switch (bytesPerSequence) {
|
|
184
|
+
case 1:
|
|
185
|
+
if (firstByte < 0x80) {
|
|
186
|
+
codePoint = firstByte;
|
|
187
|
+
}
|
|
188
|
+
break;
|
|
189
|
+
case 2:
|
|
190
|
+
secondByte = buf[i + 1];
|
|
191
|
+
if ((secondByte & 0xc0) === 0x80) {
|
|
192
|
+
tempCodePoint = ((firstByte & 0x1f) << 0x6) | (secondByte & 0x3f);
|
|
193
|
+
if (tempCodePoint > 0x7f) {
|
|
194
|
+
codePoint = tempCodePoint;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
break;
|
|
198
|
+
case 3:
|
|
199
|
+
secondByte = buf[i + 1];
|
|
200
|
+
thirdByte = buf[i + 2];
|
|
201
|
+
if ((secondByte & 0xc0) === 0x80 && (thirdByte & 0xc0) === 0x80) {
|
|
202
|
+
tempCodePoint =
|
|
203
|
+
((firstByte & 0xf) << 0xc) | ((secondByte & 0x3f) << 0x6) | (thirdByte & 0x3f);
|
|
204
|
+
if (tempCodePoint > 0x7ff && (tempCodePoint < 0xd800 || tempCodePoint > 0xdfff)) {
|
|
205
|
+
codePoint = tempCodePoint;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
break;
|
|
209
|
+
case 4:
|
|
210
|
+
secondByte = buf[i + 1];
|
|
211
|
+
thirdByte = buf[i + 2];
|
|
212
|
+
fourthByte = buf[i + 3];
|
|
213
|
+
if (
|
|
214
|
+
(secondByte & 0xc0) === 0x80 &&
|
|
215
|
+
(thirdByte & 0xc0) === 0x80 &&
|
|
216
|
+
(fourthByte & 0xc0) === 0x80
|
|
217
|
+
) {
|
|
218
|
+
tempCodePoint =
|
|
219
|
+
((firstByte & 0xf) << 0x12) |
|
|
220
|
+
((secondByte & 0x3f) << 0xc) |
|
|
221
|
+
((thirdByte & 0x3f) << 0x6) |
|
|
222
|
+
(fourthByte & 0x3f);
|
|
223
|
+
if (tempCodePoint > 0xffff && tempCodePoint < 0x110000) {
|
|
224
|
+
codePoint = tempCodePoint;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
if (codePoint === null) {
|
|
231
|
+
// we did not generate a valid codePoint so insert a
|
|
232
|
+
// replacement char (U+FFFD) and advance only 1 byte
|
|
233
|
+
codePoint = 0xfffd;
|
|
234
|
+
bytesPerSequence = 1;
|
|
235
|
+
} else if (codePoint > 0xffff) {
|
|
236
|
+
// encode to utf16 (surrogate pair dance)
|
|
237
|
+
codePoint -= 0x10000;
|
|
238
|
+
res.push(((codePoint >>> 10) & 0x3ff) | 0xd800);
|
|
239
|
+
codePoint = 0xdc00 | (codePoint & 0x3ff);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
res.push(codePoint);
|
|
243
|
+
i += bytesPerSequence;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
return decodeCodePointsArray(res);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
const MAX_ARGUMENTS_LENGTH = 0x1000;
|
|
250
|
+
|
|
251
|
+
// https://github.com/feross/buffer/blob/master/index.js#L1035
|
|
252
|
+
function decodeCodePointsArray(codePoints: number[]): string {
|
|
253
|
+
const len = codePoints.length;
|
|
254
|
+
if (len <= MAX_ARGUMENTS_LENGTH) {
|
|
255
|
+
return String.fromCharCode.apply(String, codePoints); // avoid extra slice()
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
// Decode in chunks to avoid "call stack size exceeded".
|
|
259
|
+
let res = '';
|
|
260
|
+
let i = 0;
|
|
261
|
+
while (i < len) {
|
|
262
|
+
res += String.fromCharCode.apply(String, codePoints.slice(i, (i += MAX_ARGUMENTS_LENGTH)));
|
|
263
|
+
}
|
|
264
|
+
return res;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
const INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g;
|
|
268
|
+
|
|
269
|
+
function base64clean(str: string) {
|
|
270
|
+
// Node takes equal signs as end of the Base64 encoding
|
|
271
|
+
str = str.split('=')[0];
|
|
272
|
+
// Node strips out invalid characters like \n and \t from the string, base64-js does not
|
|
273
|
+
str = str.trim().replace(INVALID_BASE64_RE, '');
|
|
274
|
+
// Node converts strings with length < 2 to ''
|
|
275
|
+
if (str.length < 2) return '';
|
|
276
|
+
// Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
|
|
277
|
+
while (str.length % 4 !== 0) {
|
|
278
|
+
str = str + '=';
|
|
279
|
+
}
|
|
280
|
+
return str;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
export function base64ToBytes(str: string) {
|
|
284
|
+
return toByteArray(base64clean(str));
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
*
|
|
289
|
+
* Function generates key, it returned both KeyForEncryption and KeyForManifest.
|
|
290
|
+
* `KeyForEncryption === KeyForManifest` produces true;
|
|
291
|
+
*
|
|
292
|
+
* @returns {Object}:
|
|
293
|
+
* {
|
|
294
|
+
* keyForEncryption: Binary;
|
|
295
|
+
* keyForManifest: Binary;
|
|
296
|
+
* }
|
|
297
|
+
*/
|
|
298
|
+
export async function keyMiddleware(): Promise<{
|
|
299
|
+
keyForEncryption: KeyInfo;
|
|
300
|
+
keyForManifest: KeyInfo;
|
|
301
|
+
}> {
|
|
302
|
+
const cipher = new AesGcmCipher(WebCryptoService);
|
|
303
|
+
const encryptionInformation = new SplitKey(cipher);
|
|
304
|
+
if (!encryptionInformation?.generateKey) {
|
|
305
|
+
throw new ConfigurationError('Crypto service not initialised');
|
|
306
|
+
}
|
|
307
|
+
const key = await encryptionInformation.generateKey();
|
|
308
|
+
return { keyForEncryption: key, keyForManifest: key };
|
|
309
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { type CryptoService } from '../crypto/declarations.js';
|
|
2
|
+
|
|
3
|
+
export function bxor(b1: Uint8Array, b2: Uint8Array): Uint8Array {
|
|
4
|
+
const result = new Uint8Array(b1.length);
|
|
5
|
+
for (let i = 0; i <= b1.length; i++) {
|
|
6
|
+
result[i] = b1[i] ^ b2[i];
|
|
7
|
+
}
|
|
8
|
+
return result;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Spreads the data in `key` across `n` shares of the same size, using
|
|
13
|
+
* secure random noise so that any n-1 subset of the keys contains no
|
|
14
|
+
* information. This allows a user to store a key across multiple KAS servers.
|
|
15
|
+
* @param key The data to split
|
|
16
|
+
* @param n The number of entries to split across
|
|
17
|
+
* @returns `n` entries of `length(key)` size
|
|
18
|
+
*/
|
|
19
|
+
export async function keySplit(
|
|
20
|
+
key: Uint8Array,
|
|
21
|
+
n: number,
|
|
22
|
+
cryptoService: CryptoService
|
|
23
|
+
): Promise<Uint8Array[]> {
|
|
24
|
+
if (!(key instanceof Uint8Array)) {
|
|
25
|
+
throw Error('ERROR in keySplit - key is not an unsigned byte array');
|
|
26
|
+
}
|
|
27
|
+
if (n <= 0) {
|
|
28
|
+
throw Error('ERROR in keySplit - n is not a positive integer');
|
|
29
|
+
}
|
|
30
|
+
if (n == 1) {
|
|
31
|
+
return [key];
|
|
32
|
+
}
|
|
33
|
+
const keyLength = key.length;
|
|
34
|
+
const splits = [];
|
|
35
|
+
let currKey = key;
|
|
36
|
+
const nonces = await Promise.all(
|
|
37
|
+
Array.from(new Array(n - 1), () => cryptoService.randomBytes(keyLength))
|
|
38
|
+
);
|
|
39
|
+
// https://en.wikipedia.org/wiki/Secret_sharing#t_=_n
|
|
40
|
+
for (const nonce of nonces) {
|
|
41
|
+
currKey = bxor(nonce, currKey);
|
|
42
|
+
splits.push(nonce);
|
|
43
|
+
}
|
|
44
|
+
splits.push(currKey);
|
|
45
|
+
return splits;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Combines K secret shares, as generated from `keySplit`, into a single value.
|
|
50
|
+
* Note this does no verfication!
|
|
51
|
+
* @param splits the split values, aggregated from KASen
|
|
52
|
+
* @returns the merged value.
|
|
53
|
+
*/
|
|
54
|
+
export function keyMerge(splits: Uint8Array[]): Uint8Array {
|
|
55
|
+
if (!Array.isArray(splits)) throw Error('ERROR in keyMerge - splits is not an array');
|
|
56
|
+
if (splits.length < 1) throw Error('ERROR in keyMerge - splits must have at least one element');
|
|
57
|
+
|
|
58
|
+
let currKey = splits[0];
|
|
59
|
+
for (let i = 1; i < splits.length; i++) {
|
|
60
|
+
currKey = bxor(currKey, splits[i]);
|
|
61
|
+
}
|
|
62
|
+
return currKey;
|
|
63
|
+
}
|