@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,71 @@
|
|
|
1
|
+
import { ConfigurationError } from '../../../errors.js';
|
|
2
|
+
class AbstractPolicy {
|
|
3
|
+
// Static methods can't be defined in an interface
|
|
4
|
+
static parse(
|
|
5
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
6
|
+
buff,
|
|
7
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
8
|
+
useECDSABinding,
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
10
|
+
type) {
|
|
11
|
+
throw new ConfigurationError('parsePolicy was not implemented');
|
|
12
|
+
}
|
|
13
|
+
constructor(type, binding) {
|
|
14
|
+
this.type = type;
|
|
15
|
+
this.binding = binding;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Length of policy
|
|
19
|
+
*/
|
|
20
|
+
getLength() {
|
|
21
|
+
throw new ConfigurationError('length was not implemented');
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Return the content of the policy
|
|
25
|
+
*/
|
|
26
|
+
toBuffer() {
|
|
27
|
+
throw new ConfigurationError('toBuffer() was not implemented');
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Parses an ECDSA binding from a given buffer.
|
|
31
|
+
*
|
|
32
|
+
* @param {Uint8Array} buff - The buffer containing the ECDSA binding.
|
|
33
|
+
* @returns {{ bindingLength: number; binding: Uint8Array }} - An object containing the binding length and the binding subarray.
|
|
34
|
+
*/
|
|
35
|
+
static parseECDSABinding(buff) {
|
|
36
|
+
const lengthOfR = buff[0];
|
|
37
|
+
const lengthOfS = buff[this.SIZE_OF_LENGTH_FIELD + lengthOfR];
|
|
38
|
+
const bindingLength = this.SIZE_OF_LENGTH_FIELD + lengthOfR + this.SIZE_OF_LENGTH_FIELD + lengthOfS;
|
|
39
|
+
const binding = buff.subarray(0, bindingLength);
|
|
40
|
+
return { bindingLength, binding };
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Parses a binding from a given buffer based on the specified binding type.
|
|
44
|
+
*
|
|
45
|
+
* @param {Uint8Array} buff - The buffer containing the binding.
|
|
46
|
+
* @param {boolean} useEcdsaBinding - Flag indicating whether to use ECDSA binding.
|
|
47
|
+
* @param {number} offset - The starting offset in the buffer.
|
|
48
|
+
* @returns {{ binding: Uint8Array; newOffset: number }} - An object containing the binding and the new offset.
|
|
49
|
+
*/
|
|
50
|
+
static parseBinding(buff, useEcdsaBinding, offset) {
|
|
51
|
+
if (useEcdsaBinding) {
|
|
52
|
+
const ecdsaBinding = this.parseECDSABinding(buff.subarray(offset));
|
|
53
|
+
return { binding: ecdsaBinding.binding, newOffset: offset + ecdsaBinding.bindingLength };
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
const binding = buff.subarray(offset, offset + this.GMAC_BINDING_LEN);
|
|
57
|
+
return { binding, newOffset: offset + this.GMAC_BINDING_LEN };
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
AbstractPolicy.TYPE_BYTE_OFF = 0;
|
|
62
|
+
AbstractPolicy.TYPE_BYTE_LEN = 1;
|
|
63
|
+
AbstractPolicy.BODY_BYTE_OFF = 1;
|
|
64
|
+
AbstractPolicy.BODY_BYTE_MIN_LEN = 3;
|
|
65
|
+
AbstractPolicy.BODY_BYTE_MAX_LEN = 257;
|
|
66
|
+
AbstractPolicy.BINDING_BYTE_MIN_LEN = 8;
|
|
67
|
+
AbstractPolicy.BINDING_BYTE_MAX_LEN = 132;
|
|
68
|
+
AbstractPolicy.SIZE_OF_LENGTH_FIELD = 1; // 1 byte for each length field (R and S)
|
|
69
|
+
AbstractPolicy.GMAC_BINDING_LEN = 8;
|
|
70
|
+
export default AbstractPolicy;
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RQb2xpY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbmFub3RkZi9tb2RlbHMvUG9saWN5L0Fic3RyYWN0UG9saWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXhELE1BQWUsY0FBYztJQWMzQixrREFBa0Q7SUFDbEQsTUFBTSxDQUFDLEtBQUs7SUFDViw2REFBNkQ7SUFDN0QsSUFBZ0I7SUFDaEIsNkRBQTZEO0lBQzdELGVBQXdCO0lBQ3hCLDZEQUE2RDtJQUM3RCxJQUFpQjtRQUVqQixNQUFNLElBQUksa0JBQWtCLENBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsWUFBWSxJQUFnQixFQUFFLE9BQW1CO1FBQy9DLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVM7UUFDUCxNQUFNLElBQUksa0JBQWtCLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRO1FBQ04sTUFBTSxJQUFJLGtCQUFrQixDQUFDLGdDQUFnQyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQWdCO1FBQ3ZDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFNBQVMsQ0FBQyxDQUFDO1FBRTlELE1BQU0sYUFBYSxHQUNqQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxTQUFTLENBQUM7UUFDaEYsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxZQUFZLENBQ2pCLElBQWdCLEVBQ2hCLGVBQXdCLEVBQ3hCLE1BQWM7UUFFZCxJQUFJLGVBQWUsRUFBRTtZQUNuQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ25FLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxHQUFHLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUMxRjthQUFNO1lBQ0wsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3RFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUMvRDtJQUNILENBQUM7O0FBakZlLDRCQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLDRCQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLDRCQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLGdDQUFpQixHQUFHLENBQUMsQ0FBQztBQUN0QixnQ0FBaUIsR0FBRyxHQUFHLENBQUM7QUFDeEIsbUNBQW9CLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLG1DQUFvQixHQUFHLEdBQUcsQ0FBQztBQUMzQixtQ0FBb0IsR0FBRyxDQUFDLENBQUMsQ0FBQyx5Q0FBeUM7QUFDbkUsK0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBNEV2QyxlQUFlLGNBQWMsQ0FBQyJ9
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import AbstractPolicy from './AbstractPolicy.js';
|
|
2
|
+
import { ConfigurationError } from '../../../errors.js';
|
|
3
|
+
/**
|
|
4
|
+
* Embedded Policy
|
|
5
|
+
*
|
|
6
|
+
* These policy types allow for creation and binding of arbitrary policies.
|
|
7
|
+
*
|
|
8
|
+
* | Section | Minimum Length (B) | Maximum Length (B) |
|
|
9
|
+
* |------------------------------|--------------------|--------------------|
|
|
10
|
+
* | Content Length | 2 | 2 |
|
|
11
|
+
* | Plaintext/Ciphertext | 1 | 255 |
|
|
12
|
+
* | (Optional) Policy Key Access | 36 | 136 |
|
|
13
|
+
*/
|
|
14
|
+
class EmbeddedPolicy extends AbstractPolicy {
|
|
15
|
+
static parse(buff, useEcdsaBinding, type) {
|
|
16
|
+
let offset = 0;
|
|
17
|
+
// TODO: May not work on Big Endian systems. See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getUint16
|
|
18
|
+
// Also http://calculist.org/blog/2012/04/24/the-little-endian-web/
|
|
19
|
+
const length = new DataView(buff.slice(offset, 2).buffer).getUint16(0);
|
|
20
|
+
offset += 2;
|
|
21
|
+
const content = buff.subarray(offset, offset + length);
|
|
22
|
+
offset += length;
|
|
23
|
+
const { binding, newOffset: bindingOffset } = this.parseBinding(buff, useEcdsaBinding, offset);
|
|
24
|
+
offset = bindingOffset;
|
|
25
|
+
return {
|
|
26
|
+
policy: new EmbeddedPolicy(type, binding, content),
|
|
27
|
+
offset,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
constructor(type, binding, content) {
|
|
31
|
+
super(type, binding);
|
|
32
|
+
this.content = content;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Length of policy
|
|
36
|
+
*
|
|
37
|
+
* @returns { number } length
|
|
38
|
+
*/
|
|
39
|
+
getLength() {
|
|
40
|
+
return (
|
|
41
|
+
// Type length
|
|
42
|
+
1 +
|
|
43
|
+
// Policy length
|
|
44
|
+
2 +
|
|
45
|
+
// Content length
|
|
46
|
+
this.content.length +
|
|
47
|
+
// Binding length
|
|
48
|
+
this.binding.length);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Return the content of the policy
|
|
52
|
+
*/
|
|
53
|
+
toBuffer() {
|
|
54
|
+
const target = new Uint8Array(this.getLength());
|
|
55
|
+
if (this.content.length > EmbeddedPolicy.MAX_POLICY_SIZE) {
|
|
56
|
+
throw new ConfigurationError("TDF Policy can't be more that 2^16");
|
|
57
|
+
}
|
|
58
|
+
target.set([this.type], 0);
|
|
59
|
+
// Write the policy length, assuming the host system is little endian
|
|
60
|
+
// TODO: There should be better way to convert to big endian
|
|
61
|
+
const lengthAsUint16 = new Uint16Array(1);
|
|
62
|
+
lengthAsUint16[0] = this.content.length;
|
|
63
|
+
const temp = new Uint8Array(lengthAsUint16.buffer);
|
|
64
|
+
const policyContentSizeAsBg = new Uint8Array(2);
|
|
65
|
+
policyContentSizeAsBg[0] = temp[1];
|
|
66
|
+
policyContentSizeAsBg[1] = temp[0];
|
|
67
|
+
target.set(policyContentSizeAsBg, 1);
|
|
68
|
+
// Write the policy content
|
|
69
|
+
target.set(this.content, policyContentSizeAsBg.length + 1);
|
|
70
|
+
// Write the binding.
|
|
71
|
+
target.set(this.binding, this.content.length + policyContentSizeAsBg.length + 1);
|
|
72
|
+
return target;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
EmbeddedPolicy.MAX_POLICY_SIZE = 65535; // 2 bytes unsigned int.
|
|
76
|
+
export default EmbeddedPolicy;
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW1iZWRkZWRQb2xpY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbmFub3RkZi9tb2RlbHMvUG9saWN5L0VtYmVkZGVkUG9saWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sY0FBYyxNQUFNLHFCQUFxQixDQUFDO0FBR2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXhEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLGNBQWUsU0FBUSxjQUFjO0lBSXpDLE1BQU0sQ0FBVSxLQUFLLENBQ25CLElBQWdCLEVBQ2hCLGVBQXdCLEVBQ3hCLElBQWlCO1FBRWpCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUVmLG9KQUFvSjtRQUNwSixtRUFBbUU7UUFDbkUsTUFBTSxNQUFNLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFFWixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDdkQsTUFBTSxJQUFJLE1BQU0sQ0FBQztRQUVqQixNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDL0YsTUFBTSxHQUFHLGFBQWEsQ0FBQztRQUV2QixPQUFPO1lBQ0wsTUFBTSxFQUFFLElBQUksY0FBYyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDO1lBQ2xELE1BQU07U0FDUCxDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksSUFBaUIsRUFBRSxPQUFtQixFQUFFLE9BQW1CO1FBQ3JFLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7O09BSUc7SUFDTSxTQUFTO1FBQ2hCLE9BQU87UUFDTCxjQUFjO1FBQ2QsQ0FBQztZQUNELGdCQUFnQjtZQUNoQixDQUFDO1lBQ0QsaUJBQWlCO1lBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTTtZQUNuQixpQkFBaUI7WUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQ3BCLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDTSxRQUFRO1FBQ2YsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFFaEQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUMsZUFBZSxFQUFFO1lBQ3hELE1BQU0sSUFBSSxrQkFBa0IsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1NBQ3BFO1FBRUQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUUzQixxRUFBcUU7UUFDckUsNERBQTREO1FBQzVELE1BQU0sY0FBYyxHQUFHLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUV4QyxNQUFNLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkQsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRCxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFckMsMkJBQTJCO1FBQzNCLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxxQkFBcUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFM0QscUJBQXFCO1FBQ3JCLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFakYsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs7QUFoRk0sOEJBQWUsR0FBRyxLQUFLLENBQUMsQ0FBQyx3QkFBd0I7QUFtRjFELGVBQWUsY0FBYyxDQUFDIn0=
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import AbstractPolicy from './AbstractPolicy.js';
|
|
2
|
+
import EmbeddedPolicy from './EmbeddedPolicy.js';
|
|
3
|
+
import RemotePolicy from './RemotePolicy.js';
|
|
4
|
+
import PolicyTypeEnum from '../../enum/PolicyTypeEnum.js';
|
|
5
|
+
import { UnsupportedFeatureError } from '../../../errors.js';
|
|
6
|
+
function parse(buff, useEcdsaBinding, curve) {
|
|
7
|
+
const type = buff[AbstractPolicy.TYPE_BYTE_OFF];
|
|
8
|
+
let policy;
|
|
9
|
+
let offset;
|
|
10
|
+
// Check if remote policy
|
|
11
|
+
if (type === PolicyTypeEnum.Remote) {
|
|
12
|
+
({ policy, offset } = RemotePolicy.parse(buff.subarray(AbstractPolicy.TYPE_BYTE_LEN), useEcdsaBinding));
|
|
13
|
+
}
|
|
14
|
+
else if ([
|
|
15
|
+
// Check if is an embedded policy
|
|
16
|
+
PolicyTypeEnum.EmbeddedEncrypted,
|
|
17
|
+
PolicyTypeEnum.EmbeddedEncryptedPKA,
|
|
18
|
+
PolicyTypeEnum.EmbeddedText,
|
|
19
|
+
].includes(type)) {
|
|
20
|
+
({ policy, offset } = EmbeddedPolicy.parse(buff.subarray(AbstractPolicy.TYPE_BYTE_LEN), useEcdsaBinding, type));
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
throw new UnsupportedFeatureError(`unsupported policy type: ${type}`);
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
policy,
|
|
27
|
+
offset: offset + AbstractPolicy.TYPE_BYTE_LEN,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export default {
|
|
31
|
+
parse,
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9saWN5RmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9uYW5vdGRmL21vZGVscy9Qb2xpY3kvUG9saWN5RmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLGNBQWMsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLGNBQWMsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLFlBQVksTUFBTSxtQkFBbUIsQ0FBQztBQUM3QyxPQUFPLGNBQWMsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUc3RCxTQUFTLEtBQUssQ0FDWixJQUFnQixFQUNoQixlQUF3QixFQUN4QixLQUFvQjtJQUVwQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2hELElBQUksTUFBc0IsQ0FBQztJQUMzQixJQUFJLE1BQWMsQ0FBQztJQUVuQix5QkFBeUI7SUFDekIsSUFBSSxJQUFJLEtBQUssY0FBYyxDQUFDLE1BQU0sRUFBRTtRQUNsQyxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQ3RDLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxFQUMzQyxlQUFlLENBQ2hCLENBQUMsQ0FBQztLQUNKO1NBQU0sSUFDTDtRQUNFLGtDQUFrQztRQUNsQyxjQUFjLENBQUMsaUJBQWlCO1FBQ2hDLGNBQWMsQ0FBQyxvQkFBb0I7UUFDbkMsY0FBYyxDQUFDLFlBQVk7S0FDNUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQ2hCO1FBQ0EsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUN4QyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsRUFDM0MsZUFBZSxFQUNmLElBQUksQ0FDTCxDQUFDLENBQUM7S0FDSjtTQUFNO1FBQ0wsTUFBTSxJQUFJLHVCQUF1QixDQUFDLDRCQUE0QixJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBQ3ZFO0lBRUQsT0FBTztRQUNMLE1BQU07UUFDTixNQUFNLEVBQUUsTUFBTSxHQUFHLGNBQWMsQ0FBQyxhQUFhO0tBQzlDLENBQUM7QUFDSixDQUFDO0FBRUQsZUFBZTtJQUNiLEtBQUs7Q0FDTixDQUFDIn0=
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import AbstractPolicy from './AbstractPolicy.js';
|
|
2
|
+
import ResourceLocator from '../ResourceLocator.js';
|
|
3
|
+
import PolicyTypeEnum from '../../enum/PolicyTypeEnum.js';
|
|
4
|
+
/**
|
|
5
|
+
* Set remote policy body
|
|
6
|
+
*
|
|
7
|
+
* If the policy type is set to use a Remote Policy, then the Resource Locator object described in Section 3.4.1 is
|
|
8
|
+
* used to describe the remote policy.
|
|
9
|
+
*/
|
|
10
|
+
class RemotePolicy extends AbstractPolicy {
|
|
11
|
+
static parse(buff, useEcdsaBinding) {
|
|
12
|
+
let offset = 0;
|
|
13
|
+
const resource = ResourceLocator.parse(buff);
|
|
14
|
+
offset += resource.offset;
|
|
15
|
+
const { binding, newOffset: bindingOffset } = this.parseBinding(buff, useEcdsaBinding, offset);
|
|
16
|
+
offset = bindingOffset;
|
|
17
|
+
return {
|
|
18
|
+
policy: new RemotePolicy(PolicyTypeEnum.Remote, binding, resource),
|
|
19
|
+
offset,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
constructor(type, binding, resource) {
|
|
23
|
+
super(type, binding);
|
|
24
|
+
this.type = PolicyTypeEnum.Remote;
|
|
25
|
+
this.type = PolicyTypeEnum.Remote;
|
|
26
|
+
this.remotePolicy = resource;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Length of policy
|
|
30
|
+
*
|
|
31
|
+
* @returns { number } length
|
|
32
|
+
*/
|
|
33
|
+
getLength() {
|
|
34
|
+
return (
|
|
35
|
+
// Type length
|
|
36
|
+
1 +
|
|
37
|
+
// Resource locator length
|
|
38
|
+
this.remotePolicy.length +
|
|
39
|
+
// Binding length
|
|
40
|
+
this.binding.length);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Return the content of the policy
|
|
44
|
+
*/
|
|
45
|
+
toBuffer() {
|
|
46
|
+
const target = new Uint8Array(this.getLength());
|
|
47
|
+
target.set([PolicyTypeEnum.Remote], 0);
|
|
48
|
+
// Write the remote policy location
|
|
49
|
+
const resourceLocatorAsBuf = this.remotePolicy.toBuffer();
|
|
50
|
+
target.set(resourceLocatorAsBuf, 1);
|
|
51
|
+
// Write the binding.
|
|
52
|
+
target.set(this.binding, resourceLocatorAsBuf.length + 1);
|
|
53
|
+
return target;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export default RemotePolicy;
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVtb3RlUG9saWN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL25hbm90ZGYvbW9kZWxzL1BvbGljeS9SZW1vdGVQb2xpY3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxjQUFjLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxlQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFFcEQsT0FBTyxjQUFjLE1BQU0sOEJBQThCLENBQUM7QUFFMUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFlBQWEsU0FBUSxjQUFjO0lBSXZDLE1BQU0sQ0FBVSxLQUFLLENBQ25CLElBQWdCLEVBQ2hCLGVBQXdCO1FBRXhCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNmLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFFMUIsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQy9GLE1BQU0sR0FBRyxhQUFhLENBQUM7UUFFdkIsT0FBTztZQUNMLE1BQU0sRUFBRSxJQUFJLFlBQVksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUM7WUFDbEUsTUFBTTtTQUNQLENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWSxJQUFvQixFQUFFLE9BQW1CLEVBQUUsUUFBeUI7UUFDOUUsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQXJCTCxTQUFJLEdBQW1CLGNBQWMsQ0FBQyxNQUFNLENBQUM7UUFzQjdELElBQUksQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQztRQUNsQyxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNNLFNBQVM7UUFDaEIsT0FBTztRQUNMLGNBQWM7UUFDZCxDQUFDO1lBQ0QsMEJBQTBCO1lBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTTtZQUN4QixpQkFBaUI7WUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQ3BCLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDTSxRQUFRO1FBQ2YsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFFaEQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV2QyxtQ0FBbUM7UUFDbkMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFELE1BQU0sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFcEMscUJBQXFCO1FBQ3JCLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFMUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGO0FBRUQsZUFBZSxZQUFZLENBQUMifQ==
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import { ConfigurationError, InvalidFileError } from '../../errors.js';
|
|
2
|
+
import ProtocolEnum from '../enum/ProtocolEnum.js';
|
|
3
|
+
import ResourceLocatorIdentifierEnum from '../enum/ResourceLocatorIdentifierEnum.js';
|
|
4
|
+
/**
|
|
5
|
+
*
|
|
6
|
+
* The Resource Locator is a way for the nanotdf to represent references to external resources in as succinct a format
|
|
7
|
+
* as possible.
|
|
8
|
+
*
|
|
9
|
+
* | Section | Minimum Length (B) | Maximum Length (B) |
|
|
10
|
+
* |---------------|--------------------|--------------------|
|
|
11
|
+
* | Protocol Enum | 1 | 1 |
|
|
12
|
+
* | Body Length | 1 | 1 |
|
|
13
|
+
* | Body | 1 | 255 |
|
|
14
|
+
* | Identifier | 0 | n |
|
|
15
|
+
*
|
|
16
|
+
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3312-kas
|
|
17
|
+
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#341-resource-locator
|
|
18
|
+
*/
|
|
19
|
+
class ResourceLocator {
|
|
20
|
+
constructor(protocol, lengthOfBody, body, offset, id, idType = ResourceLocatorIdentifierEnum.None) {
|
|
21
|
+
this.protocol = protocol;
|
|
22
|
+
this.lengthOfBody = lengthOfBody;
|
|
23
|
+
this.body = body;
|
|
24
|
+
this.offset = offset;
|
|
25
|
+
this.id = id;
|
|
26
|
+
this.idType = idType;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Construct a new URL or URL + identifier pair, for use with NanoTDF envelopes.
|
|
30
|
+
* @param url The URL to encrypt; `http` and `https` schemes are supported
|
|
31
|
+
* @param identifier An optional identifier.
|
|
32
|
+
* For KAS URLs, this is usually a public key identifier (kid). Limit 32 characters
|
|
33
|
+
* @returns a value representing the URL and identifier, if present.
|
|
34
|
+
* This method throws an Error if the URL is invalid or of the wrong schema,
|
|
35
|
+
* or if the identifier is an unsupported value.
|
|
36
|
+
*/
|
|
37
|
+
static fromURL(url, identifier) {
|
|
38
|
+
const [protocolStr, body] = url.split('://');
|
|
39
|
+
let protocol;
|
|
40
|
+
// Validate and set protocol identifier byte
|
|
41
|
+
switch (protocolStr.toLowerCase()) {
|
|
42
|
+
case 'http':
|
|
43
|
+
protocol = ProtocolEnum.Http;
|
|
44
|
+
break;
|
|
45
|
+
case 'https':
|
|
46
|
+
protocol = ProtocolEnum.Https;
|
|
47
|
+
break;
|
|
48
|
+
default:
|
|
49
|
+
throw new ConfigurationError(`resource locator protocol [${protocolStr}] unsupported`);
|
|
50
|
+
}
|
|
51
|
+
// Set identifier padded length and protocol identifier byte
|
|
52
|
+
const identifierType = (() => {
|
|
53
|
+
if (!identifier) {
|
|
54
|
+
return ResourceLocatorIdentifierEnum.None;
|
|
55
|
+
}
|
|
56
|
+
const identifierLength = new TextEncoder().encode(identifier).length;
|
|
57
|
+
if (identifierLength <= 2) {
|
|
58
|
+
return ResourceLocatorIdentifierEnum.TwoBytes;
|
|
59
|
+
}
|
|
60
|
+
else if (identifierLength <= 8) {
|
|
61
|
+
return ResourceLocatorIdentifierEnum.EightBytes;
|
|
62
|
+
}
|
|
63
|
+
else if (identifierLength <= 32) {
|
|
64
|
+
return ResourceLocatorIdentifierEnum.ThirtyTwoBytes;
|
|
65
|
+
}
|
|
66
|
+
throw new ConfigurationError(`unsupported identifier length: ${identifier.length}`);
|
|
67
|
+
})();
|
|
68
|
+
// Create buffer to hold protocol, body length, body, and identifier
|
|
69
|
+
const lengthOfBody = new TextEncoder().encode(body).length;
|
|
70
|
+
if (lengthOfBody == 0) {
|
|
71
|
+
throw new ConfigurationError('url body empty');
|
|
72
|
+
}
|
|
73
|
+
const identifierLength = identifierType.valueOf();
|
|
74
|
+
const offset = ResourceLocator.BODY_OFFSET + lengthOfBody + identifierLength;
|
|
75
|
+
return new ResourceLocator(protocol, lengthOfBody, body, offset, identifier, identifierType);
|
|
76
|
+
}
|
|
77
|
+
static parse(buff) {
|
|
78
|
+
// Protocol
|
|
79
|
+
const protocolAndIdentifierType = buff[ResourceLocator.PROTOCOL_OFFSET];
|
|
80
|
+
// Length of body
|
|
81
|
+
const lengthOfBody = buff[ResourceLocator.LENGTH_OFFSET];
|
|
82
|
+
if (lengthOfBody == 0) {
|
|
83
|
+
throw new InvalidFileError('url body empty');
|
|
84
|
+
}
|
|
85
|
+
// Body as utf8 string
|
|
86
|
+
const decoder = new TextDecoder();
|
|
87
|
+
let offset = ResourceLocator.BODY_OFFSET + lengthOfBody;
|
|
88
|
+
if (offset > buff.length) {
|
|
89
|
+
throw new InvalidFileError('url parser: out of bounds error');
|
|
90
|
+
}
|
|
91
|
+
const body = decoder.decode(buff.subarray(ResourceLocator.BODY_OFFSET, offset));
|
|
92
|
+
const protocol = protocolAndIdentifierType & 0xf;
|
|
93
|
+
switch (protocol) {
|
|
94
|
+
case ProtocolEnum.Http:
|
|
95
|
+
case ProtocolEnum.Https:
|
|
96
|
+
break;
|
|
97
|
+
default:
|
|
98
|
+
throw new InvalidFileError(`url parser: unsupported protocol type [${protocol}]`);
|
|
99
|
+
}
|
|
100
|
+
// identifier
|
|
101
|
+
const identifierTypeNibble = protocolAndIdentifierType & 0xf0;
|
|
102
|
+
let identifierType = ResourceLocatorIdentifierEnum.None;
|
|
103
|
+
if (identifierTypeNibble === ResourceLocator.IDENTIFIER_2_BYTE) {
|
|
104
|
+
identifierType = ResourceLocatorIdentifierEnum.TwoBytes;
|
|
105
|
+
}
|
|
106
|
+
else if (identifierTypeNibble === ResourceLocator.IDENTIFIER_8_BYTE) {
|
|
107
|
+
identifierType = ResourceLocatorIdentifierEnum.EightBytes;
|
|
108
|
+
}
|
|
109
|
+
else if (identifierTypeNibble === ResourceLocator.IDENTIFIER_32_BYTE) {
|
|
110
|
+
identifierType = ResourceLocatorIdentifierEnum.ThirtyTwoBytes;
|
|
111
|
+
}
|
|
112
|
+
else if (identifierTypeNibble !== ResourceLocator.IDENTIFIER_0_BYTE) {
|
|
113
|
+
throw new InvalidFileError(`url parser: unsupported fragment type [${identifierTypeNibble}]`);
|
|
114
|
+
}
|
|
115
|
+
let identifier = undefined;
|
|
116
|
+
switch (identifierType) {
|
|
117
|
+
case ResourceLocatorIdentifierEnum.None:
|
|
118
|
+
// noop
|
|
119
|
+
break;
|
|
120
|
+
case ResourceLocatorIdentifierEnum.TwoBytes:
|
|
121
|
+
case ResourceLocatorIdentifierEnum.EightBytes:
|
|
122
|
+
case ResourceLocatorIdentifierEnum.ThirtyTwoBytes: {
|
|
123
|
+
const kidStart = offset;
|
|
124
|
+
offset = kidStart + identifierType.valueOf();
|
|
125
|
+
if (offset > buff.length) {
|
|
126
|
+
throw new InvalidFileError('url parser: out of bounds error');
|
|
127
|
+
}
|
|
128
|
+
const kidSubarray = buff.subarray(kidStart, offset);
|
|
129
|
+
// Remove padding (assuming the padding is null bytes, 0x00)
|
|
130
|
+
const zeroIndex = kidSubarray.indexOf(0);
|
|
131
|
+
if (zeroIndex >= 0) {
|
|
132
|
+
const trimmedSubarray = kidSubarray.subarray(0, zeroIndex);
|
|
133
|
+
identifier = decoder.decode(trimmedSubarray);
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
identifier = decoder.decode(kidSubarray);
|
|
137
|
+
}
|
|
138
|
+
break;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return new ResourceLocator(protocol, lengthOfBody, body, offset, identifier, identifierType);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Length
|
|
145
|
+
*
|
|
146
|
+
* @returns { number } Length of resource locator
|
|
147
|
+
*/
|
|
148
|
+
get length() {
|
|
149
|
+
return this.offset;
|
|
150
|
+
}
|
|
151
|
+
get url() {
|
|
152
|
+
switch (this.protocol) {
|
|
153
|
+
case ProtocolEnum.Http:
|
|
154
|
+
return 'http://' + this.body;
|
|
155
|
+
case ProtocolEnum.Https:
|
|
156
|
+
return 'https://' + this.body;
|
|
157
|
+
default:
|
|
158
|
+
throw new ConfigurationError(`resource locator protocol unsupported [${this.protocol}]`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Return the contents of the Resource Locator in buffer
|
|
163
|
+
*/
|
|
164
|
+
toBuffer() {
|
|
165
|
+
const target = new Uint8Array(ResourceLocator.BODY_OFFSET + this.body.length + this.idType);
|
|
166
|
+
let idTypeNibble = 0;
|
|
167
|
+
switch (this.idType) {
|
|
168
|
+
case ResourceLocatorIdentifierEnum.TwoBytes:
|
|
169
|
+
idTypeNibble = ResourceLocator.IDENTIFIER_2_BYTE;
|
|
170
|
+
break;
|
|
171
|
+
case ResourceLocatorIdentifierEnum.EightBytes:
|
|
172
|
+
idTypeNibble = ResourceLocator.IDENTIFIER_8_BYTE;
|
|
173
|
+
break;
|
|
174
|
+
case ResourceLocatorIdentifierEnum.ThirtyTwoBytes:
|
|
175
|
+
idTypeNibble = ResourceLocator.IDENTIFIER_32_BYTE;
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
178
|
+
target.set([this.protocol | idTypeNibble], ResourceLocator.PROTOCOL_OFFSET);
|
|
179
|
+
target.set([this.lengthOfBody], ResourceLocator.LENGTH_OFFSET);
|
|
180
|
+
target.set(new TextEncoder().encode(this.body), ResourceLocator.BODY_OFFSET);
|
|
181
|
+
if (this.id) {
|
|
182
|
+
target.set(new TextEncoder().encode(this.id), ResourceLocator.BODY_OFFSET + this.body.length);
|
|
183
|
+
}
|
|
184
|
+
return target;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Get Identifier
|
|
188
|
+
*
|
|
189
|
+
* Returns the identifier of the ResourceLocator or an empty string if no identifier is present.
|
|
190
|
+
* @returns { string } Identifier of the resource locator.
|
|
191
|
+
*/
|
|
192
|
+
get identifier() {
|
|
193
|
+
return this.id ?? '';
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
ResourceLocator.PROTOCOL_OFFSET = 0;
|
|
197
|
+
ResourceLocator.PROTOCOL_LENGTH = 1;
|
|
198
|
+
ResourceLocator.LENGTH_OFFSET = 1;
|
|
199
|
+
ResourceLocator.LENGTH_LENGTH = 1;
|
|
200
|
+
ResourceLocator.BODY_OFFSET = 2;
|
|
201
|
+
ResourceLocator.IDENTIFIER_0_BYTE = 0 << 4; // 0
|
|
202
|
+
ResourceLocator.IDENTIFIER_2_BYTE = 1 << 4; // 16
|
|
203
|
+
ResourceLocator.IDENTIFIER_8_BYTE = 2 << 4; // 32
|
|
204
|
+
ResourceLocator.IDENTIFIER_32_BYTE = 3 << 4; // 48
|
|
205
|
+
export default ResourceLocator;
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzb3VyY2VMb2NhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL25hbm90ZGYvbW9kZWxzL1Jlc291cmNlTG9jYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLFlBQVksTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLDZCQUE2QixNQUFNLDBDQUEwQyxDQUFDO0FBRXJGOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBcUIsZUFBZTtJQVdsQyxZQUNXLFFBQXNCLEVBQ3RCLFlBQW9CLEVBQ3BCLElBQVksRUFDWixNQUFjLEVBQ2QsRUFBVyxFQUNYLFNBQXdDLDZCQUE2QixDQUFDLElBQUk7UUFMMUUsYUFBUSxHQUFSLFFBQVEsQ0FBYztRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUNwQixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ1osV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLE9BQUUsR0FBRixFQUFFLENBQVM7UUFDWCxXQUFNLEdBQU4sTUFBTSxDQUFvRTtJQUNsRixDQUFDO0lBRUo7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQVcsRUFBRSxVQUFtQjtRQUM3QyxNQUFNLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0MsSUFBSSxRQUFzQixDQUFDO1FBRTNCLDRDQUE0QztRQUM1QyxRQUFRLFdBQVcsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUNqQyxLQUFLLE1BQU07Z0JBQ1QsUUFBUSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQzdCLE1BQU07WUFDUixLQUFLLE9BQU87Z0JBQ1YsUUFBUSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7Z0JBQzlCLE1BQU07WUFD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
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { lengthOfPublicKey, lengthOfSignature } from '../helpers/calculateByCurve.js';
|
|
2
|
+
import { ConfigurationError } from '../../errors.js';
|
|
3
|
+
/**
|
|
4
|
+
* NanoTDF Signature
|
|
5
|
+
*
|
|
6
|
+
* The signature section is an optional section that contains an ECDSA signature used to cryptographically bind the Header and Payload to a creator of the nanotdf. The key used for signing is the private key of the creator of the nanotdf. The ECC Params used for the signature are described in Section 3.3.1.4.2. The private key used for this signature is distinctly different than the ephemeral private key. This is a persistent key belonging to an individual, entity, or device that creates nanotdfs. The signature is used to authenticate the entire nanotdf and contains both the public key related to the creators private key and the resulting signature. The structure of this section:
|
|
7
|
+
*
|
|
8
|
+
* | Section | Minimum Length (B) | Maximum Length (B) |
|
|
9
|
+
* |------------|--------------------|--------------------|
|
|
10
|
+
* | Public Key | 33 | 67 |
|
|
11
|
+
* | Signature | 64 | 132 |
|
|
12
|
+
*
|
|
13
|
+
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#333-signature
|
|
14
|
+
*/
|
|
15
|
+
export default class Signature {
|
|
16
|
+
static parse(header, buff) {
|
|
17
|
+
let offset = 0;
|
|
18
|
+
/**
|
|
19
|
+
* Parse the public key
|
|
20
|
+
*
|
|
21
|
+
* This section contains the compressed public key of the private key used to sign the message.
|
|
22
|
+
*/
|
|
23
|
+
// TODO: Resolve where offset is missing 1 byte
|
|
24
|
+
const publicKeyLength = lengthOfPublicKey(header.signatureCurveName) + 1;
|
|
25
|
+
const publicKey = buff.subarray(offset, offset + publicKeyLength);
|
|
26
|
+
offset += publicKeyLength;
|
|
27
|
+
/**
|
|
28
|
+
* Parse signature
|
|
29
|
+
*
|
|
30
|
+
* This section contains the encoded `r` and `s` values of the ECDSA signature.
|
|
31
|
+
*
|
|
32
|
+
* ECDSA signatures are big endian encodings of the `r` and `s` values of an ECDSA signature.The length of `r` and `s`
|
|
33
|
+
* values is determined by the ECC Mode used for the signature. The encoding for the signature is the big endian
|
|
34
|
+
* encodings of R and S concatenated to each other. For example, `r = 1` and `s = 2` for an ECDSA signature of a
|
|
35
|
+
* ecp256k1 key would be (line breaks and spaces are added for easier visualization):
|
|
36
|
+
*
|
|
37
|
+
* ```
|
|
38
|
+
* 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
|
39
|
+
* 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01
|
|
40
|
+
* 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
|
41
|
+
* 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02
|
|
42
|
+
* ```
|
|
43
|
+
*
|
|
44
|
+
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#52-ecdsa-signature-encoding
|
|
45
|
+
*/
|
|
46
|
+
const signatureLength = lengthOfSignature(header.signatureCurveName);
|
|
47
|
+
const signature = buff.subarray(offset, offset + signatureLength);
|
|
48
|
+
offset += signatureLength;
|
|
49
|
+
return { signature: new Signature(publicKey, signature), offset };
|
|
50
|
+
}
|
|
51
|
+
constructor(publicKey, signature) {
|
|
52
|
+
this.publicKey = publicKey;
|
|
53
|
+
this.signature = signature;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Length
|
|
57
|
+
*
|
|
58
|
+
* @returns { number } Length of signature
|
|
59
|
+
*/
|
|
60
|
+
get length() {
|
|
61
|
+
return this.publicKey.length + this.signature.length;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Copy the contents of the signature to buffer
|
|
65
|
+
*/
|
|
66
|
+
copyToBuffer(target) {
|
|
67
|
+
if (this.length > target.length) {
|
|
68
|
+
throw new ConfigurationError('Invalid buffer size to copy signature');
|
|
69
|
+
}
|
|
70
|
+
target.set(this.publicKey, 0);
|
|
71
|
+
target.set(this.signature, this.publicKey.length);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2lnbmF0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL25hbm90ZGYvbW9kZWxzL1NpZ25hdHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVyRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sU0FBUztJQUk1QixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQWMsRUFBRSxJQUFnQjtRQUMzQyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFFZjs7OztXQUlHO1FBQ0gsK0NBQStDO1FBQy9DLE1BQU0sZUFBZSxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6RSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsZUFBZSxDQUFDLENBQUM7UUFDbEUsTUFBTSxJQUFJLGVBQWUsQ0FBQztRQUUxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7O1dBa0JHO1FBQ0gsTUFBTSxlQUFlLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDckUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLGVBQWUsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sSUFBSSxlQUFlLENBQUM7UUFFMUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDcEUsQ0FBQztJQUVELFlBQVksU0FBcUIsRUFBRSxTQUFxQjtRQUN0RCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUM3QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7SUFDdkQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWSxDQUFDLE1BQWtCO1FBQzdCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQy9CLE1BQU0sSUFBSSxrQkFBa0IsQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1NBQ3ZFO1FBRUQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELENBQUM7Q0FDRiJ9
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export var Ciphers;
|
|
2
|
+
(function (Ciphers) {
|
|
3
|
+
Ciphers["AesGcm"] = "AES-GCM";
|
|
4
|
+
})(Ciphers || (Ciphers = {}));
|
|
5
|
+
export var CipherTagLengths;
|
|
6
|
+
(function (CipherTagLengths) {
|
|
7
|
+
CipherTagLengths[CipherTagLengths["AesGcm"] = 128] = "AesGcm";
|
|
8
|
+
})(CipherTagLengths || (CipherTagLengths = {}));
|
|
9
|
+
const cipherKeys = [];
|
|
10
|
+
for (const cipherKey in Ciphers) {
|
|
11
|
+
cipherKeys.push(cipherKey);
|
|
12
|
+
}
|
|
13
|
+
export const supportedCiphers = cipherKeys;
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2lwaGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uYW5vdGRmLWNyeXB0by9jaXBoZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBTixJQUFZLE9BRVg7QUFGRCxXQUFZLE9BQU87SUFDakIsNkJBQWtCLENBQUE7QUFDcEIsQ0FBQyxFQUZXLE9BQU8sS0FBUCxPQUFPLFFBRWxCO0FBRUQsTUFBTSxDQUFOLElBQVksZ0JBRVg7QUFGRCxXQUFZLGdCQUFnQjtJQUMxQiw2REFBWSxDQUFBO0FBQ2QsQ0FBQyxFQUZXLGdCQUFnQixLQUFoQixnQkFBZ0IsUUFFM0I7QUFFRCxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDdEIsS0FBSyxNQUFNLFNBQVMsSUFBSSxPQUFPLEVBQUU7SUFDL0IsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztDQUM1QjtBQUNELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyJ9
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Ciphers, CipherTagLengths } from './ciphers.js';
|
|
2
|
+
/**
|
|
3
|
+
* Decrypt plaintext buffer to plaintext buffer
|
|
4
|
+
*
|
|
5
|
+
* Only supports AES-GCM
|
|
6
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/encrypt
|
|
7
|
+
*
|
|
8
|
+
* @param key Encryption key
|
|
9
|
+
* @param ciphertext Encrypted buffer
|
|
10
|
+
* @param iv Initialization vector
|
|
11
|
+
* @param tagLength Size (bits) of authentication tag
|
|
12
|
+
* @returns Resolves plaintext buffer
|
|
13
|
+
*/
|
|
14
|
+
export default async function decrypt(key, ciphertext, iv, tagLength) {
|
|
15
|
+
return crypto.subtle.decrypt({
|
|
16
|
+
name: Ciphers.AesGcm,
|
|
17
|
+
iv,
|
|
18
|
+
tagLength: tagLength || CipherTagLengths.AesGcm,
|
|
19
|
+
}, key, ciphertext);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjcnlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uYW5vdGRmLWNyeXB0by9kZWNyeXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFekQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssVUFBVSxPQUFPLENBQ25DLEdBQWMsRUFDZCxVQUFzQixFQUN0QixFQUFjLEVBQ2QsU0FBa0I7SUFFbEIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FDMUI7UUFDRSxJQUFJLEVBQUUsT0FBTyxDQUFDLE1BQU07UUFDcEIsRUFBRTtRQUNGLFNBQVMsRUFBRSxTQUFTLElBQUksZ0JBQWdCLENBQUMsTUFBTTtLQUNoRCxFQUNELEdBQUcsRUFDSCxVQUFVLENBQ1gsQ0FBQztBQUNKLENBQUMifQ==
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export default function digest(hashType, data) {
|
|
2
|
+
return crypto.subtle.digest(hashType, data);
|
|
3
|
+
}
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlnZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25hbm90ZGYtY3J5cHRvL2RpZ2VzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsT0FBTyxVQUFVLE1BQU0sQ0FDNUIsUUFBNkIsRUFDN0IsSUFBOEI7SUFFOUIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDOUMsQ0FBQyJ9
|