@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,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const Ciphers_js_1 = require("./Ciphers.js");
|
|
4
|
+
const errors_js_1 = require("../../errors.js");
|
|
5
|
+
/**
|
|
6
|
+
* Payload
|
|
7
|
+
*
|
|
8
|
+
* The payload section of the nanotdf contains the ciphertext that is protected by the policy defined in the Header.
|
|
9
|
+
* The structure of the Payload is as follows:
|
|
10
|
+
*
|
|
11
|
+
* | Section | Minimum Length (B) | Maximum Length (B) |
|
|
12
|
+
* |-----------------------|--------------------|--------------------|
|
|
13
|
+
* | Length | 3 | 3 |
|
|
14
|
+
* | IV | 3 | 3 |
|
|
15
|
+
* | Ciphertext | 0 | 16777204 |
|
|
16
|
+
* | Payload MAC (AuthTag) | 8 | 32 |
|
|
17
|
+
*/
|
|
18
|
+
class Payload {
|
|
19
|
+
/**
|
|
20
|
+
* Parse the payload
|
|
21
|
+
*
|
|
22
|
+
* Returns a new Payload object and the next offset
|
|
23
|
+
*
|
|
24
|
+
* @param buff Uint8Array
|
|
25
|
+
*/
|
|
26
|
+
static parse(header, buff, legacyTDF = false) {
|
|
27
|
+
let offset = 0;
|
|
28
|
+
const authTagByteLength = (0, Ciphers_js_1.getBitLength)(header.symmetricCipher) / 8;
|
|
29
|
+
/**
|
|
30
|
+
* Length
|
|
31
|
+
*
|
|
32
|
+
* This 3 byte unsigned integer dictates the length of the subsequent ciphertext section.
|
|
33
|
+
*
|
|
34
|
+
* NOTE: it includes the IV + Ciphertext + Auth Tag. To get the Auth Tag length you have to subtract the other
|
|
35
|
+
* lengths
|
|
36
|
+
*/
|
|
37
|
+
// TODO: This will not work in Big Endian host environments
|
|
38
|
+
const length = (buff[offset] << 16) + (buff[offset + 1] << 8) + buff[offset + 2];
|
|
39
|
+
const ciphertextLength = length - Payload.IV_LEN - authTagByteLength;
|
|
40
|
+
offset += Payload.LENGTH_LEN;
|
|
41
|
+
const inRange = length >= this.MIN_LENGTH && length <= this.MAX_NANO_TDF_ENCRYPT_PAYLOAD_SIZE;
|
|
42
|
+
if (!inRange) {
|
|
43
|
+
throw new errors_js_1.InvalidFileError('nanotdf parse failure: Payload Length Out Of Range');
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Parse IV
|
|
47
|
+
*
|
|
48
|
+
* The IV used for encryption. This value is a byte array containing the IV. This IV must never be reused with the
|
|
49
|
+
* same symmetric key. Also, to support an extremely compacted version of the nanotdf the IV value 00 00 00 is
|
|
50
|
+
* reserved for use with an encrypted policy.
|
|
51
|
+
*/
|
|
52
|
+
let iv = buff.subarray(offset, offset + Payload.IV_LEN);
|
|
53
|
+
offset += Payload.IV_LEN;
|
|
54
|
+
if (iv.byteLength != 3) {
|
|
55
|
+
throw new errors_js_1.InvalidFileError('nanotdf parse failure: Invalid Payload Length');
|
|
56
|
+
}
|
|
57
|
+
if (!legacyTDF) {
|
|
58
|
+
const actuallIV = new Uint8Array(12).fill(0);
|
|
59
|
+
// The the iv from payload to lower-order bits
|
|
60
|
+
actuallIV.set(iv, 9);
|
|
61
|
+
// update the iv
|
|
62
|
+
iv = actuallIV;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Parse Ciphertext w/ Auth Tag
|
|
66
|
+
*/
|
|
67
|
+
const ciphertextWithAuthTag = buff.subarray(offset, offset + ciphertextLength + authTagByteLength);
|
|
68
|
+
if (ciphertextWithAuthTag.byteLength + Payload.LENGTH_LEN !== length) {
|
|
69
|
+
throw new errors_js_1.InvalidFileError('nanotdf parse failure: Invalid Payload Length');
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Parse Ciphertext
|
|
73
|
+
*
|
|
74
|
+
* The byte array of the ciphertext that is protected in the nanotdf. The encryption method used to create or decrypt
|
|
75
|
+
* the ciphertext is defined in the Key Access object in the header.
|
|
76
|
+
*/
|
|
77
|
+
const ciphertext = buff.subarray(offset, offset + ciphertextLength);
|
|
78
|
+
offset += ciphertextLength;
|
|
79
|
+
/**
|
|
80
|
+
* Auth Tag
|
|
81
|
+
*
|
|
82
|
+
* GMAC = 8 byte
|
|
83
|
+
* ECDSA = size of curve
|
|
84
|
+
*
|
|
85
|
+
* The MAC of the payload. The Size of this MAC is determined by the Encryption Method Enum used in the Symmetric and
|
|
86
|
+
* Payload Config object in the header.
|
|
87
|
+
*
|
|
88
|
+
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3314-symmetric-and-payload-config
|
|
89
|
+
*/
|
|
90
|
+
const authTag = buff.subarray(offset, offset + authTagByteLength);
|
|
91
|
+
offset += authTagByteLength;
|
|
92
|
+
return {
|
|
93
|
+
payload: new Payload(iv, ciphertext, authTag, ciphertextWithAuthTag),
|
|
94
|
+
offset,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
constructor(iv, ciphertext, authTag, ciphertextWithAuthTag) {
|
|
98
|
+
this.iv = iv;
|
|
99
|
+
this.ciphertext = ciphertext;
|
|
100
|
+
this.authTag = authTag;
|
|
101
|
+
// If ciphertextWithAuthTag is not set then combine it
|
|
102
|
+
// Ideally it is set so an additional buffer is not needed
|
|
103
|
+
if (ciphertextWithAuthTag === undefined) {
|
|
104
|
+
this.ciphertextWithAuthTag = new Uint8Array(ciphertext.length + authTag.length);
|
|
105
|
+
this.ciphertextWithAuthTag.set(ciphertext);
|
|
106
|
+
this.ciphertextWithAuthTag.set(authTag, ciphertext.length);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
this.ciphertextWithAuthTag = ciphertextWithAuthTag;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Length
|
|
114
|
+
*
|
|
115
|
+
* @returns { number } Length of signature
|
|
116
|
+
*/
|
|
117
|
+
get length() {
|
|
118
|
+
return (
|
|
119
|
+
// Bytes(3) to hold the length of the payload
|
|
120
|
+
3 +
|
|
121
|
+
// Length of the IV
|
|
122
|
+
this.iv.length +
|
|
123
|
+
// Length of the ciphertext
|
|
124
|
+
this.ciphertext.length +
|
|
125
|
+
// Length of the auth tag
|
|
126
|
+
this.authTag.length);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Copy the contents of the signature to buffer
|
|
130
|
+
*/
|
|
131
|
+
copyToBuffer(target) {
|
|
132
|
+
if (this.length > target.length) {
|
|
133
|
+
throw new Error('internal: invalid buffer size to copy payload');
|
|
134
|
+
}
|
|
135
|
+
const lengthOfEncryptedPayload = this.iv.length + this.ciphertext.length + this.authTag.length;
|
|
136
|
+
if (lengthOfEncryptedPayload > Payload.MAX_NANO_TDF_ENCRYPT_PAYLOAD_SIZE) {
|
|
137
|
+
throw new errors_js_1.ConfigurationError("TDF encrypted payload can't be more that 2^24");
|
|
138
|
+
}
|
|
139
|
+
const lengthAsUint32 = new Uint32Array(1);
|
|
140
|
+
lengthAsUint32[0] = lengthOfEncryptedPayload;
|
|
141
|
+
const lengthAsUint24 = new Uint8Array(lengthAsUint32.buffer);
|
|
142
|
+
// NOTE: We are only interested in only first 3 bytes.
|
|
143
|
+
const payloadSizeAsBg = new Uint8Array(3);
|
|
144
|
+
payloadSizeAsBg[0] = lengthAsUint24[2];
|
|
145
|
+
payloadSizeAsBg[1] = lengthAsUint24[1];
|
|
146
|
+
payloadSizeAsBg[2] = lengthAsUint24[0];
|
|
147
|
+
target.set(payloadSizeAsBg, 0);
|
|
148
|
+
target.set(this.iv, payloadSizeAsBg.length);
|
|
149
|
+
target.set(this.ciphertext, payloadSizeAsBg.length + this.iv.length);
|
|
150
|
+
target.set(this.authTag, payloadSizeAsBg.length + this.iv.length + this.ciphertext.length);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
Payload.LENGTH_LEN = 3;
|
|
154
|
+
Payload.IV_LEN = 3;
|
|
155
|
+
Payload.MIN_LENGTH = 11;
|
|
156
|
+
Payload.MAX_NANO_TDF_ENCRYPT_PAYLOAD_SIZE = 16777216; // 3 bytes unsigned int.
|
|
157
|
+
exports.default = Payload;
|
|
158
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGF5bG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW5vdGRmL21vZGVscy9QYXlsb2FkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0EsNkNBQTRDO0FBQzVDLCtDQUF1RTtBQUV2RTs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFxQixPQUFPO0lBVzFCOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQ1YsTUFBYyxFQUNkLElBQWdCLEVBQ2hCLFNBQVMsR0FBRyxLQUFLO1FBRWpCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNmLE1BQU0saUJBQWlCLEdBQUcsSUFBQSx5QkFBWSxFQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFbkU7Ozs7Ozs7V0FPRztRQUNILDJEQUEyRDtRQUMzRCxNQUFNLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqRixNQUFNLGdCQUFnQixHQUFHLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLGlCQUFpQixDQUFDO1FBQ3JFLE1BQU0sSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDO1FBRTdCLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsaUNBQWlDLENBQUM7UUFFOUYsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLE1BQU0sSUFBSSw0QkFBZ0IsQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1NBQ2xGO1FBRUQ7Ozs7OztXQU1HO1FBQ0gsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE9B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
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const errors_js_1 = require("../../../errors.js");
|
|
4
|
+
class AbstractPolicy {
|
|
5
|
+
// Static methods can't be defined in an interface
|
|
6
|
+
static parse(
|
|
7
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
8
|
+
buff,
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
10
|
+
useECDSABinding,
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
12
|
+
type) {
|
|
13
|
+
throw new errors_js_1.ConfigurationError('parsePolicy was not implemented');
|
|
14
|
+
}
|
|
15
|
+
constructor(type, binding) {
|
|
16
|
+
this.type = type;
|
|
17
|
+
this.binding = binding;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Length of policy
|
|
21
|
+
*/
|
|
22
|
+
getLength() {
|
|
23
|
+
throw new errors_js_1.ConfigurationError('length was not implemented');
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Return the content of the policy
|
|
27
|
+
*/
|
|
28
|
+
toBuffer() {
|
|
29
|
+
throw new errors_js_1.ConfigurationError('toBuffer() was not implemented');
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Parses an ECDSA binding from a given buffer.
|
|
33
|
+
*
|
|
34
|
+
* @param {Uint8Array} buff - The buffer containing the ECDSA binding.
|
|
35
|
+
* @returns {{ bindingLength: number; binding: Uint8Array }} - An object containing the binding length and the binding subarray.
|
|
36
|
+
*/
|
|
37
|
+
static parseECDSABinding(buff) {
|
|
38
|
+
const lengthOfR = buff[0];
|
|
39
|
+
const lengthOfS = buff[this.SIZE_OF_LENGTH_FIELD + lengthOfR];
|
|
40
|
+
const bindingLength = this.SIZE_OF_LENGTH_FIELD + lengthOfR + this.SIZE_OF_LENGTH_FIELD + lengthOfS;
|
|
41
|
+
const binding = buff.subarray(0, bindingLength);
|
|
42
|
+
return { bindingLength, binding };
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Parses a binding from a given buffer based on the specified binding type.
|
|
46
|
+
*
|
|
47
|
+
* @param {Uint8Array} buff - The buffer containing the binding.
|
|
48
|
+
* @param {boolean} useEcdsaBinding - Flag indicating whether to use ECDSA binding.
|
|
49
|
+
* @param {number} offset - The starting offset in the buffer.
|
|
50
|
+
* @returns {{ binding: Uint8Array; newOffset: number }} - An object containing the binding and the new offset.
|
|
51
|
+
*/
|
|
52
|
+
static parseBinding(buff, useEcdsaBinding, offset) {
|
|
53
|
+
if (useEcdsaBinding) {
|
|
54
|
+
const ecdsaBinding = this.parseECDSABinding(buff.subarray(offset));
|
|
55
|
+
return { binding: ecdsaBinding.binding, newOffset: offset + ecdsaBinding.bindingLength };
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
const binding = buff.subarray(offset, offset + this.GMAC_BINDING_LEN);
|
|
59
|
+
return { binding, newOffset: offset + this.GMAC_BINDING_LEN };
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
AbstractPolicy.TYPE_BYTE_OFF = 0;
|
|
64
|
+
AbstractPolicy.TYPE_BYTE_LEN = 1;
|
|
65
|
+
AbstractPolicy.BODY_BYTE_OFF = 1;
|
|
66
|
+
AbstractPolicy.BODY_BYTE_MIN_LEN = 3;
|
|
67
|
+
AbstractPolicy.BODY_BYTE_MAX_LEN = 257;
|
|
68
|
+
AbstractPolicy.BINDING_BYTE_MIN_LEN = 8;
|
|
69
|
+
AbstractPolicy.BINDING_BYTE_MAX_LEN = 132;
|
|
70
|
+
AbstractPolicy.SIZE_OF_LENGTH_FIELD = 1; // 1 byte for each length field (R and S)
|
|
71
|
+
AbstractPolicy.GMAC_BINDING_LEN = 8;
|
|
72
|
+
exports.default = AbstractPolicy;
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RQb2xpY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbmFub3RkZi9tb2RlbHMvUG9saWN5L0Fic3RyYWN0UG9saWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsa0RBQXdEO0FBRXhELE1BQWUsY0FBYztJQWMzQixrREFBa0Q7SUFDbEQsTUFBTSxDQUFDLEtBQUs7SUFDViw2REFBNkQ7SUFDN0QsSUFBZ0I7SUFDaEIsNkRBQTZEO0lBQzdELGVBQXdCO0lBQ3hCLDZEQUE2RDtJQUM3RCxJQUFpQjtRQUVqQixNQUFNLElBQUksOEJBQWtCLENBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsWUFBWSxJQUFnQixFQUFFLE9BQW1CO1FBQy9DLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVM7UUFDUCxNQUFNLElBQUksOEJBQWtCLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRO1FBQ04sTUFBTSxJQUFJLDhCQUFrQixDQUFDLGdDQUFnQyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQWdCO1FBQ3ZDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFNBQVMsQ0FBQyxDQUFDO1FBRTlELE1BQU0sYUFBYSxHQUNqQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxTQUFTLENBQUM7UUFDaEYsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxZQUFZLENBQ2pCLElBQWdCLEVBQ2hCLGVBQXdCLEVBQ3hCLE1BQWM7UUFFZCxJQUFJLGVBQWUsRUFBRTtZQUNuQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ25FLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxHQUFHLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUMxRjthQUFNO1lBQ0wsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3RFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUMvRDtJQUNILENBQUM7O0FBakZlLDRCQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLDRCQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLDRCQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLGdDQUFpQixHQUFHLENBQUMsQ0FBQztBQUN0QixnQ0FBaUIsR0FBRyxHQUFHLENBQUM7QUFDeEIsbUNBQW9CLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLG1DQUFvQixHQUFHLEdBQUcsQ0FBQztBQUMzQixtQ0FBb0IsR0FBRyxDQUFDLENBQUMsQ0FBQyx5Q0FBeUM7QUFDbkUsK0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBNEV2QyxrQkFBZSxjQUFjLENBQUMifQ==
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const AbstractPolicy_js_1 = __importDefault(require("./AbstractPolicy.js"));
|
|
7
|
+
const errors_js_1 = require("../../../errors.js");
|
|
8
|
+
/**
|
|
9
|
+
* Embedded Policy
|
|
10
|
+
*
|
|
11
|
+
* These policy types allow for creation and binding of arbitrary policies.
|
|
12
|
+
*
|
|
13
|
+
* | Section | Minimum Length (B) | Maximum Length (B) |
|
|
14
|
+
* |------------------------------|--------------------|--------------------|
|
|
15
|
+
* | Content Length | 2 | 2 |
|
|
16
|
+
* | Plaintext/Ciphertext | 1 | 255 |
|
|
17
|
+
* | (Optional) Policy Key Access | 36 | 136 |
|
|
18
|
+
*/
|
|
19
|
+
class EmbeddedPolicy extends AbstractPolicy_js_1.default {
|
|
20
|
+
static parse(buff, useEcdsaBinding, type) {
|
|
21
|
+
let offset = 0;
|
|
22
|
+
// TODO: May not work on Big Endian systems. See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getUint16
|
|
23
|
+
// Also http://calculist.org/blog/2012/04/24/the-little-endian-web/
|
|
24
|
+
const length = new DataView(buff.slice(offset, 2).buffer).getUint16(0);
|
|
25
|
+
offset += 2;
|
|
26
|
+
const content = buff.subarray(offset, offset + length);
|
|
27
|
+
offset += length;
|
|
28
|
+
const { binding, newOffset: bindingOffset } = this.parseBinding(buff, useEcdsaBinding, offset);
|
|
29
|
+
offset = bindingOffset;
|
|
30
|
+
return {
|
|
31
|
+
policy: new EmbeddedPolicy(type, binding, content),
|
|
32
|
+
offset,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
constructor(type, binding, content) {
|
|
36
|
+
super(type, binding);
|
|
37
|
+
this.content = content;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Length of policy
|
|
41
|
+
*
|
|
42
|
+
* @returns { number } length
|
|
43
|
+
*/
|
|
44
|
+
getLength() {
|
|
45
|
+
return (
|
|
46
|
+
// Type length
|
|
47
|
+
1 +
|
|
48
|
+
// Policy length
|
|
49
|
+
2 +
|
|
50
|
+
// Content length
|
|
51
|
+
this.content.length +
|
|
52
|
+
// Binding length
|
|
53
|
+
this.binding.length);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Return the content of the policy
|
|
57
|
+
*/
|
|
58
|
+
toBuffer() {
|
|
59
|
+
const target = new Uint8Array(this.getLength());
|
|
60
|
+
if (this.content.length > EmbeddedPolicy.MAX_POLICY_SIZE) {
|
|
61
|
+
throw new errors_js_1.ConfigurationError("TDF Policy can't be more that 2^16");
|
|
62
|
+
}
|
|
63
|
+
target.set([this.type], 0);
|
|
64
|
+
// Write the policy length, assuming the host system is little endian
|
|
65
|
+
// TODO: There should be better way to convert to big endian
|
|
66
|
+
const lengthAsUint16 = new Uint16Array(1);
|
|
67
|
+
lengthAsUint16[0] = this.content.length;
|
|
68
|
+
const temp = new Uint8Array(lengthAsUint16.buffer);
|
|
69
|
+
const policyContentSizeAsBg = new Uint8Array(2);
|
|
70
|
+
policyContentSizeAsBg[0] = temp[1];
|
|
71
|
+
policyContentSizeAsBg[1] = temp[0];
|
|
72
|
+
target.set(policyContentSizeAsBg, 1);
|
|
73
|
+
// Write the policy content
|
|
74
|
+
target.set(this.content, policyContentSizeAsBg.length + 1);
|
|
75
|
+
// Write the binding.
|
|
76
|
+
target.set(this.binding, this.content.length + policyContentSizeAsBg.length + 1);
|
|
77
|
+
return target;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
EmbeddedPolicy.MAX_POLICY_SIZE = 65535; // 2 bytes unsigned int.
|
|
81
|
+
exports.default = EmbeddedPolicy;
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW1iZWRkZWRQb2xpY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbmFub3RkZi9tb2RlbHMvUG9saWN5L0VtYmVkZGVkUG9saWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNEVBQWlEO0FBR2pELGtEQUF3RDtBQUV4RDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxjQUFlLFNBQVEsMkJBQWM7SUFJekMsTUFBTSxDQUFVLEtBQUssQ0FDbkIsSUFBZ0IsRUFDaEIsZUFBd0IsRUFDeEIsSUFBaUI7UUFFakIsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRWYsb0pBQW9KO1FBQ3BKLG1FQUFtRTtRQUNuRSxNQUFNLE1BQU0sR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkUsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUVaLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksTUFBTSxDQUFDO1FBRWpCLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMvRixNQUFNLEdBQUcsYUFBYSxDQUFDO1FBRXZCLE9BQU87WUFDTCxNQUFNLEVBQUUsSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUM7WUFDbEQsTUFBTTtTQUNQLENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWSxJQUFpQixFQUFFLE9BQW1CLEVBQUUsT0FBbUI7UUFDckUsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNNLFNBQVM7UUFDaEIsT0FBTztRQUNMLGNBQWM7UUFDZCxDQUFDO1lBQ0QsZ0JBQWdCO1lBQ2hCLENBQUM7WUFDRCxpQkFBaUI7WUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNO1lBQ25CLGlCQUFpQjtZQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDcEIsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNNLFFBQVE7UUFDZixNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUVoRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQyxlQUFlLEVBQUU7WUFDeEQsTUFBTSxJQUFJLDhCQUFrQixDQUFDLG9DQUFvQyxDQUFDLENBQUM7U0FDcEU7UUFFRCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTNCLHFFQUFxRTtRQUNyRSw0REFBNEQ7UUFDNUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBRXhDLE1BQU0sSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRCxNQUFNLHFCQUFxQixHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hELHFCQUFxQixDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVyQywyQkFBMkI7UUFDM0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLHFCQUFxQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUUzRCxxQkFBcUI7UUFDckIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLHFCQUFxQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVqRixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOztBQWhGTSw4QkFBZSxHQUFHLEtBQUssQ0FBQyxDQUFDLHdCQUF3QjtBQW1GMUQsa0JBQWUsY0FBYyxDQUFDIn0=
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const AbstractPolicy_js_1 = __importDefault(require("./AbstractPolicy.js"));
|
|
7
|
+
const EmbeddedPolicy_js_1 = __importDefault(require("./EmbeddedPolicy.js"));
|
|
8
|
+
const RemotePolicy_js_1 = __importDefault(require("./RemotePolicy.js"));
|
|
9
|
+
const PolicyTypeEnum_js_1 = __importDefault(require("../../enum/PolicyTypeEnum.js"));
|
|
10
|
+
const errors_js_1 = require("../../../errors.js");
|
|
11
|
+
function parse(buff, useEcdsaBinding, curve) {
|
|
12
|
+
const type = buff[AbstractPolicy_js_1.default.TYPE_BYTE_OFF];
|
|
13
|
+
let policy;
|
|
14
|
+
let offset;
|
|
15
|
+
// Check if remote policy
|
|
16
|
+
if (type === PolicyTypeEnum_js_1.default.Remote) {
|
|
17
|
+
({ policy, offset } = RemotePolicy_js_1.default.parse(buff.subarray(AbstractPolicy_js_1.default.TYPE_BYTE_LEN), useEcdsaBinding));
|
|
18
|
+
}
|
|
19
|
+
else if ([
|
|
20
|
+
// Check if is an embedded policy
|
|
21
|
+
PolicyTypeEnum_js_1.default.EmbeddedEncrypted,
|
|
22
|
+
PolicyTypeEnum_js_1.default.EmbeddedEncryptedPKA,
|
|
23
|
+
PolicyTypeEnum_js_1.default.EmbeddedText,
|
|
24
|
+
].includes(type)) {
|
|
25
|
+
({ policy, offset } = EmbeddedPolicy_js_1.default.parse(buff.subarray(AbstractPolicy_js_1.default.TYPE_BYTE_LEN), useEcdsaBinding, type));
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
throw new errors_js_1.UnsupportedFeatureError(`unsupported policy type: ${type}`);
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
policy,
|
|
32
|
+
offset: offset + AbstractPolicy_js_1.default.TYPE_BYTE_LEN,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
exports.default = {
|
|
36
|
+
parse,
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9saWN5RmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9uYW5vdGRmL21vZGVscy9Qb2xpY3kvUG9saWN5RmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDRFQUFpRDtBQUNqRCw0RUFBaUQ7QUFDakQsd0VBQTZDO0FBQzdDLHFGQUEwRDtBQUMxRCxrREFBNkQ7QUFHN0QsU0FBUyxLQUFLLENBQ1osSUFBZ0IsRUFDaEIsZUFBd0IsRUFDeEIsS0FBb0I7SUFFcEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLDJCQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDaEQsSUFBSSxNQUFzQixDQUFDO0lBQzNCLElBQUksTUFBYyxDQUFDO0lBRW5CLHlCQUF5QjtJQUN6QixJQUFJLElBQUksS0FBSywyQkFBYyxDQUFDLE1BQU0sRUFBRTtRQUNsQyxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLHlCQUFZLENBQUMsS0FBSyxDQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLDJCQUFjLENBQUMsYUFBYSxDQUFDLEVBQzNDLGVBQWUsQ0FDaEIsQ0FBQyxDQUFDO0tBQ0o7U0FBTSxJQUNMO1FBQ0Usa0NBQWtDO1FBQ2xDLDJCQUFjLENBQUMsaUJBQWlCO1FBQ2hDLDJCQUFjLENBQUMsb0JBQW9CO1FBQ25DLDJCQUFjLENBQUMsWUFBWTtLQUM1QixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFDaEI7UUFDQSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLDJCQUFjLENBQUMsS0FBSyxDQUN4QyxJQUFJLENBQUMsUUFBUSxDQUFDLDJCQUFjLENBQUMsYUFBYSxDQUFDLEVBQzNDLGVBQWUsRUFDZixJQUFJLENBQ0wsQ0FBQyxDQUFDO0tBQ0o7U0FBTTtRQUNMLE1BQU0sSUFBSSxtQ0FBdUIsQ0FBQyw0QkFBNEIsSUFBSSxFQUFFLENBQUMsQ0FBQztLQUN2RTtJQUVELE9BQU87UUFDTCxNQUFNO1FBQ04sTUFBTSxFQUFFLE1BQU0sR0FBRywyQkFBYyxDQUFDLGFBQWE7S0FDOUMsQ0FBQztBQUNKLENBQUM7QUFFRCxrQkFBZTtJQUNiLEtBQUs7Q0FDTixDQUFDIn0=
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const AbstractPolicy_js_1 = __importDefault(require("./AbstractPolicy.js"));
|
|
7
|
+
const ResourceLocator_js_1 = __importDefault(require("../ResourceLocator.js"));
|
|
8
|
+
const PolicyTypeEnum_js_1 = __importDefault(require("../../enum/PolicyTypeEnum.js"));
|
|
9
|
+
/**
|
|
10
|
+
* Set remote policy body
|
|
11
|
+
*
|
|
12
|
+
* If the policy type is set to use a Remote Policy, then the Resource Locator object described in Section 3.4.1 is
|
|
13
|
+
* used to describe the remote policy.
|
|
14
|
+
*/
|
|
15
|
+
class RemotePolicy extends AbstractPolicy_js_1.default {
|
|
16
|
+
static parse(buff, useEcdsaBinding) {
|
|
17
|
+
let offset = 0;
|
|
18
|
+
const resource = ResourceLocator_js_1.default.parse(buff);
|
|
19
|
+
offset += resource.offset;
|
|
20
|
+
const { binding, newOffset: bindingOffset } = this.parseBinding(buff, useEcdsaBinding, offset);
|
|
21
|
+
offset = bindingOffset;
|
|
22
|
+
return {
|
|
23
|
+
policy: new RemotePolicy(PolicyTypeEnum_js_1.default.Remote, binding, resource),
|
|
24
|
+
offset,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
constructor(type, binding, resource) {
|
|
28
|
+
super(type, binding);
|
|
29
|
+
this.type = PolicyTypeEnum_js_1.default.Remote;
|
|
30
|
+
this.type = PolicyTypeEnum_js_1.default.Remote;
|
|
31
|
+
this.remotePolicy = resource;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Length of policy
|
|
35
|
+
*
|
|
36
|
+
* @returns { number } length
|
|
37
|
+
*/
|
|
38
|
+
getLength() {
|
|
39
|
+
return (
|
|
40
|
+
// Type length
|
|
41
|
+
1 +
|
|
42
|
+
// Resource locator length
|
|
43
|
+
this.remotePolicy.length +
|
|
44
|
+
// Binding length
|
|
45
|
+
this.binding.length);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Return the content of the policy
|
|
49
|
+
*/
|
|
50
|
+
toBuffer() {
|
|
51
|
+
const target = new Uint8Array(this.getLength());
|
|
52
|
+
target.set([PolicyTypeEnum_js_1.default.Remote], 0);
|
|
53
|
+
// Write the remote policy location
|
|
54
|
+
const resourceLocatorAsBuf = this.remotePolicy.toBuffer();
|
|
55
|
+
target.set(resourceLocatorAsBuf, 1);
|
|
56
|
+
// Write the binding.
|
|
57
|
+
target.set(this.binding, resourceLocatorAsBuf.length + 1);
|
|
58
|
+
return target;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
exports.default = RemotePolicy;
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVtb3RlUG9saWN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL25hbm90ZGYvbW9kZWxzL1BvbGljeS9SZW1vdGVQb2xpY3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw0RUFBaUQ7QUFDakQsK0VBQW9EO0FBRXBELHFGQUEwRDtBQUUxRDs7Ozs7R0FLRztBQUNILE1BQU0sWUFBYSxTQUFRLDJCQUFjO0lBSXZDLE1BQU0sQ0FBVSxLQUFLLENBQ25CLElBQWdCLEVBQ2hCLGVBQXdCO1FBRXhCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNmLE1BQU0sUUFBUSxHQUFHLDRCQUFlLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLE1BQU0sSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDO1FBRTFCLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMvRixNQUFNLEdBQUcsYUFBYSxDQUFDO1FBRXZCLE9BQU87WUFDTCxNQUFNLEVBQUUsSUFBSSxZQUFZLENBQUMsMkJBQWMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQztZQUNsRSxNQUFNO1NBQ1AsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZLElBQW9CLEVBQUUsT0FBbUIsRUFBRSxRQUF5QjtRQUM5RSxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBckJMLFNBQUksR0FBbUIsMkJBQWMsQ0FBQyxNQUFNLENBQUM7UUFzQjdELElBQUksQ0FBQyxJQUFJLEdBQUcsMkJBQWMsQ0FBQyxNQUFNLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDTSxTQUFTO1FBQ2hCLE9BQU87UUFDTCxjQUFjO1FBQ2QsQ0FBQztZQUNELDBCQUEwQjtZQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU07WUFDeEIsaUJBQWlCO1lBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUNwQixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ00sUUFBUTtRQUNmLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRWhELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQywyQkFBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXZDLG1DQUFtQztRQUNuQyxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVwQyxxQkFBcUI7UUFDckIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUUxRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0NBQ0Y7QUFFRCxrQkFBZSxZQUFZLENBQUMifQ==
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const errors_js_1 = require("../../errors.js");
|
|
7
|
+
const ProtocolEnum_js_1 = __importDefault(require("../enum/ProtocolEnum.js"));
|
|
8
|
+
const ResourceLocatorIdentifierEnum_js_1 = __importDefault(require("../enum/ResourceLocatorIdentifierEnum.js"));
|
|
9
|
+
/**
|
|
10
|
+
*
|
|
11
|
+
* The Resource Locator is a way for the nanotdf to represent references to external resources in as succinct a format
|
|
12
|
+
* as possible.
|
|
13
|
+
*
|
|
14
|
+
* | Section | Minimum Length (B) | Maximum Length (B) |
|
|
15
|
+
* |---------------|--------------------|--------------------|
|
|
16
|
+
* | Protocol Enum | 1 | 1 |
|
|
17
|
+
* | Body Length | 1 | 1 |
|
|
18
|
+
* | Body | 1 | 255 |
|
|
19
|
+
* | Identifier | 0 | n |
|
|
20
|
+
*
|
|
21
|
+
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3312-kas
|
|
22
|
+
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#341-resource-locator
|
|
23
|
+
*/
|
|
24
|
+
class ResourceLocator {
|
|
25
|
+
constructor(protocol, lengthOfBody, body, offset, id, idType = ResourceLocatorIdentifierEnum_js_1.default.None) {
|
|
26
|
+
this.protocol = protocol;
|
|
27
|
+
this.lengthOfBody = lengthOfBody;
|
|
28
|
+
this.body = body;
|
|
29
|
+
this.offset = offset;
|
|
30
|
+
this.id = id;
|
|
31
|
+
this.idType = idType;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Construct a new URL or URL + identifier pair, for use with NanoTDF envelopes.
|
|
35
|
+
* @param url The URL to encrypt; `http` and `https` schemes are supported
|
|
36
|
+
* @param identifier An optional identifier.
|
|
37
|
+
* For KAS URLs, this is usually a public key identifier (kid). Limit 32 characters
|
|
38
|
+
* @returns a value representing the URL and identifier, if present.
|
|
39
|
+
* This method throws an Error if the URL is invalid or of the wrong schema,
|
|
40
|
+
* or if the identifier is an unsupported value.
|
|
41
|
+
*/
|
|
42
|
+
static fromURL(url, identifier) {
|
|
43
|
+
const [protocolStr, body] = url.split('://');
|
|
44
|
+
let protocol;
|
|
45
|
+
// Validate and set protocol identifier byte
|
|
46
|
+
switch (protocolStr.toLowerCase()) {
|
|
47
|
+
case 'http':
|
|
48
|
+
protocol = ProtocolEnum_js_1.default.Http;
|
|
49
|
+
break;
|
|
50
|
+
case 'https':
|
|
51
|
+
protocol = ProtocolEnum_js_1.default.Https;
|
|
52
|
+
break;
|
|
53
|
+
default:
|
|
54
|
+
throw new errors_js_1.ConfigurationError(`resource locator protocol [${protocolStr}] unsupported`);
|
|
55
|
+
}
|
|
56
|
+
// Set identifier padded length and protocol identifier byte
|
|
57
|
+
const identifierType = (() => {
|
|
58
|
+
if (!identifier) {
|
|
59
|
+
return ResourceLocatorIdentifierEnum_js_1.default.None;
|
|
60
|
+
}
|
|
61
|
+
const identifierLength = new TextEncoder().encode(identifier).length;
|
|
62
|
+
if (identifierLength <= 2) {
|
|
63
|
+
return ResourceLocatorIdentifierEnum_js_1.default.TwoBytes;
|
|
64
|
+
}
|
|
65
|
+
else if (identifierLength <= 8) {
|
|
66
|
+
return ResourceLocatorIdentifierEnum_js_1.default.EightBytes;
|
|
67
|
+
}
|
|
68
|
+
else if (identifierLength <= 32) {
|
|
69
|
+
return ResourceLocatorIdentifierEnum_js_1.default.ThirtyTwoBytes;
|
|
70
|
+
}
|
|
71
|
+
throw new errors_js_1.ConfigurationError(`unsupported identifier length: ${identifier.length}`);
|
|
72
|
+
})();
|
|
73
|
+
// Create buffer to hold protocol, body length, body, and identifier
|
|
74
|
+
const lengthOfBody = new TextEncoder().encode(body).length;
|
|
75
|
+
if (lengthOfBody == 0) {
|
|
76
|
+
throw new errors_js_1.ConfigurationError('url body empty');
|
|
77
|
+
}
|
|
78
|
+
const identifierLength = identifierType.valueOf();
|
|
79
|
+
const offset = ResourceLocator.BODY_OFFSET + lengthOfBody + identifierLength;
|
|
80
|
+
return new ResourceLocator(protocol, lengthOfBody, body, offset, identifier, identifierType);
|
|
81
|
+
}
|
|
82
|
+
static parse(buff) {
|
|
83
|
+
// Protocol
|
|
84
|
+
const protocolAndIdentifierType = buff[ResourceLocator.PROTOCOL_OFFSET];
|
|
85
|
+
// Length of body
|
|
86
|
+
const lengthOfBody = buff[ResourceLocator.LENGTH_OFFSET];
|
|
87
|
+
if (lengthOfBody == 0) {
|
|
88
|
+
throw new errors_js_1.InvalidFileError('url body empty');
|
|
89
|
+
}
|
|
90
|
+
// Body as utf8 string
|
|
91
|
+
const decoder = new TextDecoder();
|
|
92
|
+
let offset = ResourceLocator.BODY_OFFSET + lengthOfBody;
|
|
93
|
+
if (offset > buff.length) {
|
|
94
|
+
throw new errors_js_1.InvalidFileError('url parser: out of bounds error');
|
|
95
|
+
}
|
|
96
|
+
const body = decoder.decode(buff.subarray(ResourceLocator.BODY_OFFSET, offset));
|
|
97
|
+
const protocol = protocolAndIdentifierType & 0xf;
|
|
98
|
+
switch (protocol) {
|
|
99
|
+
case ProtocolEnum_js_1.default.Http:
|
|
100
|
+
case ProtocolEnum_js_1.default.Https:
|
|
101
|
+
break;
|
|
102
|
+
default:
|
|
103
|
+
throw new errors_js_1.InvalidFileError(`url parser: unsupported protocol type [${protocol}]`);
|
|
104
|
+
}
|
|
105
|
+
// identifier
|
|
106
|
+
const identifierTypeNibble = protocolAndIdentifierType & 0xf0;
|
|
107
|
+
let identifierType = ResourceLocatorIdentifierEnum_js_1.default.None;
|
|
108
|
+
if (identifierTypeNibble === ResourceLocator.IDENTIFIER_2_BYTE) {
|
|
109
|
+
identifierType = ResourceLocatorIdentifierEnum_js_1.default.TwoBytes;
|
|
110
|
+
}
|
|
111
|
+
else if (identifierTypeNibble === ResourceLocator.IDENTIFIER_8_BYTE) {
|
|
112
|
+
identifierType = ResourceLocatorIdentifierEnum_js_1.default.EightBytes;
|
|
113
|
+
}
|
|
114
|
+
else if (identifierTypeNibble === ResourceLocator.IDENTIFIER_32_BYTE) {
|
|
115
|
+
identifierType = ResourceLocatorIdentifierEnum_js_1.default.ThirtyTwoBytes;
|
|
116
|
+
}
|
|
117
|
+
else if (identifierTypeNibble !== ResourceLocator.IDENTIFIER_0_BYTE) {
|
|
118
|
+
throw new errors_js_1.InvalidFileError(`url parser: unsupported fragment type [${identifierTypeNibble}]`);
|
|
119
|
+
}
|
|
120
|
+
let identifier = undefined;
|
|
121
|
+
switch (identifierType) {
|
|
122
|
+
case ResourceLocatorIdentifierEnum_js_1.default.None:
|
|
123
|
+
// noop
|
|
124
|
+
break;
|
|
125
|
+
case ResourceLocatorIdentifierEnum_js_1.default.TwoBytes:
|
|
126
|
+
case ResourceLocatorIdentifierEnum_js_1.default.EightBytes:
|
|
127
|
+
case ResourceLocatorIdentifierEnum_js_1.default.ThirtyTwoBytes: {
|
|
128
|
+
const kidStart = offset;
|
|
129
|
+
offset = kidStart + identifierType.valueOf();
|
|
130
|
+
if (offset > buff.length) {
|
|
131
|
+
throw new errors_js_1.InvalidFileError('url parser: out of bounds error');
|
|
132
|
+
}
|
|
133
|
+
const kidSubarray = buff.subarray(kidStart, offset);
|
|
134
|
+
// Remove padding (assuming the padding is null bytes, 0x00)
|
|
135
|
+
const zeroIndex = kidSubarray.indexOf(0);
|
|
136
|
+
if (zeroIndex >= 0) {
|
|
137
|
+
const trimmedSubarray = kidSubarray.subarray(0, zeroIndex);
|
|
138
|
+
identifier = decoder.decode(trimmedSubarray);
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
identifier = decoder.decode(kidSubarray);
|
|
142
|
+
}
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return new ResourceLocator(protocol, lengthOfBody, body, offset, identifier, identifierType);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Length
|
|
150
|
+
*
|
|
151
|
+
* @returns { number } Length of resource locator
|
|
152
|
+
*/
|
|
153
|
+
get length() {
|
|
154
|
+
return this.offset;
|
|
155
|
+
}
|
|
156
|
+
get url() {
|
|
157
|
+
switch (this.protocol) {
|
|
158
|
+
case ProtocolEnum_js_1.default.Http:
|
|
159
|
+
return 'http://' + this.body;
|
|
160
|
+
case ProtocolEnum_js_1.default.Https:
|
|
161
|
+
return 'https://' + this.body;
|
|
162
|
+
default:
|
|
163
|
+
throw new errors_js_1.ConfigurationError(`resource locator protocol unsupported [${this.protocol}]`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Return the contents of the Resource Locator in buffer
|
|
168
|
+
*/
|
|
169
|
+
toBuffer() {
|
|
170
|
+
const target = new Uint8Array(ResourceLocator.BODY_OFFSET + this.body.length + this.idType);
|
|
171
|
+
let idTypeNibble = 0;
|
|
172
|
+
switch (this.idType) {
|
|
173
|
+
case ResourceLocatorIdentifierEnum_js_1.default.TwoBytes:
|
|
174
|
+
idTypeNibble = ResourceLocator.IDENTIFIER_2_BYTE;
|
|
175
|
+
break;
|
|
176
|
+
case ResourceLocatorIdentifierEnum_js_1.default.EightBytes:
|
|
177
|
+
idTypeNibble = ResourceLocator.IDENTIFIER_8_BYTE;
|
|
178
|
+
break;
|
|
179
|
+
case ResourceLocatorIdentifierEnum_js_1.default.ThirtyTwoBytes:
|
|
180
|
+
idTypeNibble = ResourceLocator.IDENTIFIER_32_BYTE;
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
target.set([this.protocol | idTypeNibble], ResourceLocator.PROTOCOL_OFFSET);
|
|
184
|
+
target.set([this.lengthOfBody], ResourceLocator.LENGTH_OFFSET);
|
|
185
|
+
target.set(new TextEncoder().encode(this.body), ResourceLocator.BODY_OFFSET);
|
|
186
|
+
if (this.id) {
|
|
187
|
+
target.set(new TextEncoder().encode(this.id), ResourceLocator.BODY_OFFSET + this.body.length);
|
|
188
|
+
}
|
|
189
|
+
return target;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Get Identifier
|
|
193
|
+
*
|
|
194
|
+
* Returns the identifier of the ResourceLocator or an empty string if no identifier is present.
|
|
195
|
+
* @returns { string } Identifier of the resource locator.
|
|
196
|
+
*/
|
|
197
|
+
get identifier() {
|
|
198
|
+
return this.id ?? '';
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
ResourceLocator.PROTOCOL_OFFSET = 0;
|
|
202
|
+
ResourceLocator.PROTOCOL_LENGTH = 1;
|
|
203
|
+
ResourceLocator.LENGTH_OFFSET = 1;
|
|
204
|
+
ResourceLocator.LENGTH_LENGTH = 1;
|
|
205
|
+
ResourceLocator.BODY_OFFSET = 2;
|
|
206
|
+
ResourceLocator.IDENTIFIER_0_BYTE = 0 << 4; // 0
|
|
207
|
+
ResourceLocator.IDENTIFIER_2_BYTE = 1 << 4; // 16
|
|
208
|
+
ResourceLocator.IDENTIFIER_8_BYTE = 2 << 4; // 32
|
|
209
|
+
ResourceLocator.IDENTIFIER_32_BYTE = 3 << 4; // 48
|
|
210
|
+
exports.default = ResourceLocator;
|
|
211
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzb3VyY2VMb2NhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL25hbm90ZGYvbW9kZWxzL1Jlc291cmNlTG9jYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLCtDQUF1RTtBQUN2RSw4RUFBbUQ7QUFDbkQsZ0hBQXFGO0FBRXJGOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBcUIsZUFBZTtJQVdsQyxZQUNXLFFBQXNCLEVBQ3RCLFlBQW9CLEVBQ3BCLElBQVksRUFDWixNQUFjLEVBQ2QsRUFBVyxFQUNYLFNBQXdDLDBDQUE2QixDQUFDLElBQUk7UUFMMUUsYUFBUSxHQUFSLFFBQVEsQ0FBYztRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUNwQixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ1osV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLE9BQUUsR0FBRixFQUFFLENBQVM7UUFDWCxXQUFNLEdBQU4sTUFBTSxDQUFvRTtJQUNsRixDQUFDO0lBRUo7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQVcsRUFBRSxVQUFtQjtRQUM3QyxNQUFNLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0MsSUFBSSxRQUFzQixDQUFDO1FBRTNCLDRDQUE0QztRQUM1QyxRQUFRLFdBQVcsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUNqQyxLQUFLLE1BQU07Z0JBQ1QsUUFBUSxHQUFHLHlCQUFZLENBQUMsSUFBSSxDQUFDO2dCQUM3QixNQUFNO1lBQ1IsS0FBSyxPQUFPO2dCQUNWLFFBQVEsR0FBRyx5QkFBWSxDQUFDLEtBQUssQ0FBQztnQkFDOUIsTUFBTTtZQUNSO2dCQUNFLE1BQU0sSUFBSSw4QkFBa0IsQ0FBQyw4QkFBOEIsV0FBVyxlQUFlLENBQUMsQ0FBQztTQUMxRjtRQUVELDREQUE0RDtRQUM1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
|