@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,181 @@
|
|
|
1
|
+
import { ConfigurationError } from '../errors.js';
|
|
2
|
+
import { Attribute, AttributeRuleType, KeyAccessServer, Value } from './attributes.js';
|
|
3
|
+
|
|
4
|
+
export type KeySplitStep = {
|
|
5
|
+
kas: KeyAccessServer;
|
|
6
|
+
sid?: string;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
type AttributeClause = {
|
|
10
|
+
def: Attribute;
|
|
11
|
+
values: string[];
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
type AndClause = {
|
|
15
|
+
op: 'allOf';
|
|
16
|
+
kases: string[];
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
type HeirarchyClause = {
|
|
20
|
+
op: 'hierarchy';
|
|
21
|
+
kases: string[];
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
type OrClause = {
|
|
25
|
+
op: 'anyOf';
|
|
26
|
+
kases: string[];
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
type BooleanClause = AndClause | OrClause | HeirarchyClause;
|
|
30
|
+
|
|
31
|
+
type BooleanOperator = BooleanClause['op'];
|
|
32
|
+
|
|
33
|
+
type ComplexBooleanClause = {
|
|
34
|
+
op: BooleanOperator;
|
|
35
|
+
children: BooleanClause[];
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export function booleanOperatorFor(rule?: AttributeRuleType): BooleanOperator {
|
|
39
|
+
if (!rule) {
|
|
40
|
+
return 'allOf';
|
|
41
|
+
}
|
|
42
|
+
switch (rule) {
|
|
43
|
+
case 'ATTRIBUTE_RULE_TYPE_ENUM_UNSPECIFIED':
|
|
44
|
+
case 'ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF':
|
|
45
|
+
return 'allOf';
|
|
46
|
+
case 'ATTRIBUTE_RULE_TYPE_ENUM_ANY_OF':
|
|
47
|
+
return 'anyOf';
|
|
48
|
+
case 'ATTRIBUTE_RULE_TYPE_ENUM_HIERARCHY':
|
|
49
|
+
return 'hierarchy';
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function plan(dataAttrs: Value[]): KeySplitStep[] {
|
|
54
|
+
// KASes by value
|
|
55
|
+
const grants: Record<string, Set<string>> = {};
|
|
56
|
+
// KAS detail by KAS url
|
|
57
|
+
const kasInfo: Record<string, KeyAccessServer> = {};
|
|
58
|
+
// Attribute definitions in use
|
|
59
|
+
const prefixes: Set<string> = new Set();
|
|
60
|
+
// Values grouped by normalized attribute prefix
|
|
61
|
+
const allClauses: Record<string, AttributeClause> = {};
|
|
62
|
+
// Values by normalized FQN
|
|
63
|
+
const allValues: Record<string, Value> = {};
|
|
64
|
+
|
|
65
|
+
const addGrants = (val: string, gs?: KeyAccessServer[]): boolean => {
|
|
66
|
+
if (!gs?.length) {
|
|
67
|
+
if (!(val in grants)) {
|
|
68
|
+
grants[val] = new Set();
|
|
69
|
+
}
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
for (const g of gs) {
|
|
73
|
+
if (val in grants) {
|
|
74
|
+
grants[val].add(g.uri);
|
|
75
|
+
} else {
|
|
76
|
+
grants[val] = new Set([g.uri]);
|
|
77
|
+
}
|
|
78
|
+
kasInfo[g.uri] = g;
|
|
79
|
+
}
|
|
80
|
+
return true;
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
for (const v of dataAttrs) {
|
|
84
|
+
const { attribute, fqn } = v;
|
|
85
|
+
if (!attribute) {
|
|
86
|
+
throw new ConfigurationError(`attribute not defined for [${fqn}]`);
|
|
87
|
+
}
|
|
88
|
+
const valFqn = fqn.toLowerCase();
|
|
89
|
+
const attrFqn = attribute.fqn.toLowerCase();
|
|
90
|
+
if (!prefixes.has(attrFqn)) {
|
|
91
|
+
prefixes.add(attrFqn);
|
|
92
|
+
allClauses[attrFqn] = {
|
|
93
|
+
def: attribute,
|
|
94
|
+
values: [],
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
allClauses[attrFqn].values.push(valFqn);
|
|
98
|
+
allValues[valFqn] = v;
|
|
99
|
+
if (!addGrants(valFqn, v.grants)) {
|
|
100
|
+
if (!addGrants(valFqn, attribute.grants)) {
|
|
101
|
+
addGrants(valFqn, attribute.namespace?.grants);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
const kcs: ComplexBooleanClause[] = [];
|
|
106
|
+
for (const attrClause of Object.values(allClauses)) {
|
|
107
|
+
const ccv: BooleanClause[] = [];
|
|
108
|
+
for (const term of attrClause.values) {
|
|
109
|
+
const grantsForTerm = Array.from(grants[term] || []);
|
|
110
|
+
if (grantsForTerm?.length) {
|
|
111
|
+
ccv.push({
|
|
112
|
+
op: 'anyOf',
|
|
113
|
+
kases: grantsForTerm,
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
const op = booleanOperatorFor(attrClause.def.rule);
|
|
118
|
+
kcs.push({
|
|
119
|
+
op,
|
|
120
|
+
children: ccv,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
return simplify(kcs, kasInfo);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
function simplify(
|
|
127
|
+
clauses: ComplexBooleanClause[],
|
|
128
|
+
kasInfo: Record<string, KeyAccessServer>
|
|
129
|
+
): KeySplitStep[] {
|
|
130
|
+
const conjunction: Record<string, string[]> = {};
|
|
131
|
+
function keyFor(kases: string[]): string {
|
|
132
|
+
const k = Array.from(new Set([kases])).sort();
|
|
133
|
+
return k.join('|');
|
|
134
|
+
}
|
|
135
|
+
for (const { op, children } of clauses) {
|
|
136
|
+
if (!children) {
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
if (op === 'anyOf') {
|
|
140
|
+
const anyKids = [];
|
|
141
|
+
for (const bc of children) {
|
|
142
|
+
if (bc.op != 'anyOf') {
|
|
143
|
+
throw new Error('internal: autoconfigure inversion in disjunction');
|
|
144
|
+
}
|
|
145
|
+
if (!bc.kases?.length) {
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
anyKids.push(...bc.kases);
|
|
149
|
+
}
|
|
150
|
+
if (!anyKids?.length) {
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
const k = keyFor(anyKids);
|
|
154
|
+
conjunction[k] = anyKids;
|
|
155
|
+
} else {
|
|
156
|
+
for (const bc of children) {
|
|
157
|
+
if (bc.op != 'anyOf') {
|
|
158
|
+
throw new Error('insternal: autoconfigure inversion in conjunction');
|
|
159
|
+
}
|
|
160
|
+
if (!bc.kases?.length) {
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
const k = keyFor(bc.kases);
|
|
164
|
+
conjunction[k] = bc.kases;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
const t: KeySplitStep[] = [];
|
|
169
|
+
let i = 0;
|
|
170
|
+
for (const k of Object.keys(conjunction).sort()) {
|
|
171
|
+
if (!conjunction[k]) {
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
i += 1;
|
|
175
|
+
const sid = '' + i;
|
|
176
|
+
for (const kas of conjunction[k]) {
|
|
177
|
+
t.push({ sid, kas: kasInfo[kas] });
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return t;
|
|
181
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type KasPublicKeyInfo } from '../access.js';
|
|
2
|
+
|
|
3
|
+
export interface AttributeObject {
|
|
4
|
+
readonly attribute: string;
|
|
5
|
+
readonly isDefault?: boolean;
|
|
6
|
+
readonly displayName?: string;
|
|
7
|
+
/** PEM encoded public key */
|
|
8
|
+
readonly pubKey: string;
|
|
9
|
+
readonly kasUrl: string;
|
|
10
|
+
/** The most recent version 1.1.0. */
|
|
11
|
+
readonly schemaVersion?: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export async function createAttribute(
|
|
15
|
+
attribute: string,
|
|
16
|
+
pubKey: KasPublicKeyInfo,
|
|
17
|
+
kasUrl: string
|
|
18
|
+
): Promise<AttributeObject> {
|
|
19
|
+
return {
|
|
20
|
+
attribute,
|
|
21
|
+
isDefault: false,
|
|
22
|
+
displayName: '',
|
|
23
|
+
pubKey: pubKey.publicKey,
|
|
24
|
+
kasUrl,
|
|
25
|
+
schemaVersion: '1.1.0',
|
|
26
|
+
};
|
|
27
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export enum AlgorithmName {
|
|
2
|
+
ECDH = 'ECDH',
|
|
3
|
+
ECDSA = 'ECDSA',
|
|
4
|
+
ES256 = 'ES256',
|
|
5
|
+
HKDF = 'HKDF',
|
|
6
|
+
RSA_OAEP = 'RSA-OAEP',
|
|
7
|
+
RSA_PSS = 'RSA-PSS',
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export enum NamedCurve {
|
|
11
|
+
P256 = 'P-256',
|
|
12
|
+
P384 = 'P-384',
|
|
13
|
+
P512 = 'P-512',
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export enum CipherType {
|
|
17
|
+
AesGcm = 'AES-GCM',
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export enum HashType {
|
|
21
|
+
Sha256 = 'SHA-256',
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export enum KeyFormat {
|
|
25
|
+
Raw = 'raw',
|
|
26
|
+
Pkcs8 = 'pkcs8',
|
|
27
|
+
Spki = 'spki',
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export enum KeyType {
|
|
31
|
+
Private = 'private',
|
|
32
|
+
Public = 'public',
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export enum KeyUsageType {
|
|
36
|
+
Encrypt = 'encrypt',
|
|
37
|
+
Decrypt = 'decrypt',
|
|
38
|
+
Verify = 'verify',
|
|
39
|
+
Sign = 'sign',
|
|
40
|
+
UnwrapKey = 'unwrapKey',
|
|
41
|
+
WrapKey = 'wrapKey',
|
|
42
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type AttributeObjectJwt from './AttributeObjectJwt.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Defined by the TDF3 spec and generated by an Entity Attribute Service,
|
|
5
|
+
* this object (when accompanied by a valid cert) defines what attributes
|
|
6
|
+
* a client has access to.
|
|
7
|
+
*/
|
|
8
|
+
export interface EntityObject {
|
|
9
|
+
readonly aliases: string[];
|
|
10
|
+
readonly attributes: AttributeObjectJwt[];
|
|
11
|
+
/** This should be present on validated EOs only - it is written by an EAS */
|
|
12
|
+
readonly cert?: string;
|
|
13
|
+
readonly exp?: number;
|
|
14
|
+
readonly publicKey: string;
|
|
15
|
+
readonly userId: string;
|
|
16
|
+
/** The most recent version 1.1.0. */
|
|
17
|
+
readonly schemaVersion?: string;
|
|
18
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
enum CipherType {
|
|
2
|
+
Aes256Gcm64, // Default cipher
|
|
3
|
+
Aes256Gcm96,
|
|
4
|
+
Aes256Gcm104,
|
|
5
|
+
Aes256Gcm112,
|
|
6
|
+
Aes256Gcm120,
|
|
7
|
+
Aes256Gcm128,
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* The Signature ECC Mode is used to determine the length of the signature at the end of a nanotdf. This, in
|
|
12
|
+
* combination with the previous HAS_SIGNATURE section, describe the signature of the nanotdf. The following table
|
|
13
|
+
* describes the valid values and the associated ECC Params.
|
|
14
|
+
*/
|
|
15
|
+
enum CurveName {
|
|
16
|
+
Secp256R1,
|
|
17
|
+
Secp384R1,
|
|
18
|
+
Secp521R1,
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export enum ResourceLocatorProtocol {
|
|
22
|
+
Http,
|
|
23
|
+
Https,
|
|
24
|
+
Unreserverd,
|
|
25
|
+
SharedResourceDirectory = 0xff,
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export enum PolicyType {
|
|
29
|
+
Remote,
|
|
30
|
+
EmbeddedText,
|
|
31
|
+
EmbeddedEncrypted, // Default policy
|
|
32
|
+
EmbeddedEncryptedPKA, // Todo: Not implemented
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Resource Locator interface
|
|
37
|
+
*/
|
|
38
|
+
export interface ResourceLocator {
|
|
39
|
+
protocol: ResourceLocatorProtocol;
|
|
40
|
+
length: number;
|
|
41
|
+
body: string;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Policy interface
|
|
46
|
+
*/
|
|
47
|
+
export interface Policy {
|
|
48
|
+
type: PolicyType;
|
|
49
|
+
binding: Uint8Array;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Remote policy interface
|
|
54
|
+
*/
|
|
55
|
+
export interface RemotePolicy extends Policy {
|
|
56
|
+
protocol: ResourceLocatorProtocol;
|
|
57
|
+
urn: string;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Embedded policy interface
|
|
62
|
+
*/
|
|
63
|
+
export interface EmbeddedPolicy extends Policy {
|
|
64
|
+
content: Uint8Array;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Header interface
|
|
69
|
+
*/
|
|
70
|
+
export interface Header {
|
|
71
|
+
// Magic Number & Version
|
|
72
|
+
magicNumberVersion: Uint8Array;
|
|
73
|
+
|
|
74
|
+
// KAS Resource Locator
|
|
75
|
+
kas: ResourceLocator;
|
|
76
|
+
|
|
77
|
+
// ECC & Binding Mode
|
|
78
|
+
useECDSABinding: boolean;
|
|
79
|
+
ephemeralCurveName: CurveName;
|
|
80
|
+
|
|
81
|
+
// Symmetric & Payload Config
|
|
82
|
+
hasSignature: boolean;
|
|
83
|
+
signatureCurveName: CurveName;
|
|
84
|
+
symmetricCipher: CipherType;
|
|
85
|
+
// Auth tag length is not part of the spec, but is needed for decrypt
|
|
86
|
+
authTagLength: number;
|
|
87
|
+
|
|
88
|
+
// Policy
|
|
89
|
+
policy: RemotePolicy | EmbeddedPolicy;
|
|
90
|
+
|
|
91
|
+
// Ephemeral Public Key
|
|
92
|
+
ephemeralPublicKey: Uint8Array;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Payload interface
|
|
97
|
+
*/
|
|
98
|
+
export interface Payload {
|
|
99
|
+
iv: Uint8Array;
|
|
100
|
+
ciphertext: Uint8Array;
|
|
101
|
+
authTag: Uint8Array;
|
|
102
|
+
ciphertextAuthTag: Uint8Array;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Signature interface
|
|
107
|
+
*/
|
|
108
|
+
export interface Signature {
|
|
109
|
+
publicKey: Uint8Array;
|
|
110
|
+
signature: Uint8Array;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* NanoTDF interface
|
|
115
|
+
*/
|
|
116
|
+
export interface NanoTDF {
|
|
117
|
+
header: Header;
|
|
118
|
+
payload: Payload;
|
|
119
|
+
signature: Signature;
|
|
120
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { type AttributeObject } from './AttributeObject.js';
|
|
2
|
+
import { v4 as uuid } from 'uuid';
|
|
3
|
+
|
|
4
|
+
export default class Policy {
|
|
5
|
+
static CURRENT_VERSION = '1.1.0';
|
|
6
|
+
|
|
7
|
+
private uuidStr = uuid();
|
|
8
|
+
private dataAttributesList: AttributeObject[] = [];
|
|
9
|
+
private dissemList: string[] = [];
|
|
10
|
+
// private schemaVersionStr = Policy.CURRENT_VERSION;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Adds a group of entities, to the Policy's dissem list
|
|
14
|
+
*
|
|
15
|
+
* @param entities The entities will be added to the policy and
|
|
16
|
+
* they will have access to the TDF
|
|
17
|
+
*/
|
|
18
|
+
addEntities(entities: string[]): void {
|
|
19
|
+
this.dissemList.push(...entities);
|
|
20
|
+
|
|
21
|
+
// Remove any duplicates
|
|
22
|
+
this.dissemList = this.dissemList.filter((elem, index, self) => {
|
|
23
|
+
return index === self.indexOf(elem);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
*
|
|
29
|
+
* Adds an Attribute object to the policy
|
|
30
|
+
*
|
|
31
|
+
* @param attribute will be added to the policy
|
|
32
|
+
*/
|
|
33
|
+
addAttribute(attribute: AttributeObject): void {
|
|
34
|
+
this.dataAttributesList.push(attribute);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Returns the JSON string of Policy object
|
|
39
|
+
*
|
|
40
|
+
* @return {string} [The constructed Policy object as JSON string]
|
|
41
|
+
*/
|
|
42
|
+
toJSON(): string {
|
|
43
|
+
return JSON.stringify({
|
|
44
|
+
uuid: this.uuidStr,
|
|
45
|
+
body: {
|
|
46
|
+
dataAttributes: this.dataAttributesList,
|
|
47
|
+
dissem: this.dissemList,
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type AttributeObject } from './AttributeObject.js';
|
|
2
|
+
|
|
3
|
+
export interface PolicyObjectBody {
|
|
4
|
+
readonly dataAttributes: AttributeObject[];
|
|
5
|
+
readonly dissem: string[];
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export default interface PolicyObject {
|
|
9
|
+
readonly uuid: string;
|
|
10
|
+
readonly body: PolicyObjectBody;
|
|
11
|
+
readonly schemaVersion?: string;
|
|
12
|
+
}
|
package/src/tdf/index.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { type AttributeObject, createAttribute } from './AttributeObject.js';
|
|
2
|
+
export { type EntityObject } from './EntityObject.js';
|
|
3
|
+
export { type default as PolicyObject } from './PolicyObject.js';
|
|
4
|
+
export { type default as TypedArray } from './TypedArray.js';
|
|
5
|
+
export { default as Policy } from './Policy.js';
|
|
6
|
+
export * as Crypto from './Crypto.js';
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import PolicyTypeEnum from '../nanotdf/enum/PolicyTypeEnum.js';
|
|
2
|
+
|
|
3
|
+
export type InputSource =
|
|
4
|
+
| ReadableStream<Uint8Array>
|
|
5
|
+
| Uint8Array
|
|
6
|
+
| string
|
|
7
|
+
| ArrayBuffer
|
|
8
|
+
| Promise<ReadableStream<Uint8Array>>;
|
|
9
|
+
|
|
10
|
+
type Header = {
|
|
11
|
+
magicNumberVersion: string[];
|
|
12
|
+
kas: {
|
|
13
|
+
protocol: number;
|
|
14
|
+
length: number;
|
|
15
|
+
body: string;
|
|
16
|
+
};
|
|
17
|
+
eccBindingMode: {
|
|
18
|
+
useECDSABinding: boolean;
|
|
19
|
+
ephemeralCurveName: number;
|
|
20
|
+
};
|
|
21
|
+
symmetricPayloadConfig: {
|
|
22
|
+
hasSignature: boolean;
|
|
23
|
+
signatureCurveName: number;
|
|
24
|
+
symmetricCipher: number;
|
|
25
|
+
};
|
|
26
|
+
ephemeralPublicKey: string[];
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
type HeaderPolicy = {
|
|
30
|
+
type: PolicyTypeEnum;
|
|
31
|
+
content: string[];
|
|
32
|
+
binding: string[];
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
type RemotePolicy = {
|
|
36
|
+
protocol: number;
|
|
37
|
+
length: number;
|
|
38
|
+
body: string;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export type PlainEmbeddedHeader = Header & {
|
|
42
|
+
policy: HeaderPolicy;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export type EmbeddedHeader = Header & {
|
|
46
|
+
policy: HeaderPolicy;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export type RemoteHeader = Header & {
|
|
50
|
+
policy: {
|
|
51
|
+
type: PolicyTypeEnum;
|
|
52
|
+
remotePolicy: RemotePolicy;
|
|
53
|
+
binding: string[];
|
|
54
|
+
};
|
|
55
|
+
};
|
package/src/utils.ts
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { type AxiosResponseHeaders, type RawAxiosResponseHeaders } from 'axios';
|
|
2
|
+
import { exportSPKI, importX509 } from 'jose';
|
|
3
|
+
|
|
4
|
+
import { base64 } from './encodings/index.js';
|
|
5
|
+
import { pemCertToCrypto, pemPublicToCrypto } from './nanotdf-crypto/index.js';
|
|
6
|
+
import { ConfigurationError } from './errors.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Check to see if the given URL is 'secure'. This assumes:
|
|
10
|
+
*
|
|
11
|
+
* - `https` URLs are always secure
|
|
12
|
+
* - `http` URLS are allowed for localhost
|
|
13
|
+
* - And also for '`svc.cluster.local` and `.internal` URLs
|
|
14
|
+
*
|
|
15
|
+
* Note that this does not resolve the URL, so it is possible this could
|
|
16
|
+
* resolve to some other internal URL, and may return `false` on non-fully
|
|
17
|
+
* qualified internal URLs.
|
|
18
|
+
*
|
|
19
|
+
* @param url remote service to validate
|
|
20
|
+
* @returns the url is local or `https`
|
|
21
|
+
*/
|
|
22
|
+
export function validateSecureUrl(url: string): boolean {
|
|
23
|
+
const httpsRegex = /^https:/;
|
|
24
|
+
if (/^http:\/\/(localhost|127\.0\.0\.1)(:[0-9]{1,5})?($|\/)/.test(url)) {
|
|
25
|
+
console.warn(`Development URL detected: [${url}]`);
|
|
26
|
+
} else if (
|
|
27
|
+
/^http:\/\/([a-zA-Z.-]*[.])?svc\.cluster\.local($|\/)/.test(url) ||
|
|
28
|
+
/^http:\/\/([a-zA-Z.-]*[.])?internal(:[0-9]{1,5})?($|\/)/.test(url)
|
|
29
|
+
) {
|
|
30
|
+
console.info(`Internal URL detected: [${url}]`);
|
|
31
|
+
} else if (!httpsRegex.test(url)) {
|
|
32
|
+
console.error(`Insecure KAS URL loaded. Are you running in a secure environment? [${url}]`);
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function padSlashToUrl(u: string): string {
|
|
39
|
+
if (u.endsWith('/')) {
|
|
40
|
+
return u;
|
|
41
|
+
}
|
|
42
|
+
return `${u}/`;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function isBrowser() {
|
|
46
|
+
return typeof window !== 'undefined'; // eslint-disable-line
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export const isFirefox = (): boolean => isBrowser() && 'InstallTrigger' in window;
|
|
50
|
+
|
|
51
|
+
export const rstrip = (str: string, suffix = ' '): string => {
|
|
52
|
+
while (str && suffix && str.endsWith(suffix)) {
|
|
53
|
+
str = str.slice(0, -suffix.length);
|
|
54
|
+
}
|
|
55
|
+
return str;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Rough estimate of number of seconds to add to the current system clock time
|
|
60
|
+
* to get the clock time on the given server, or origin if not specified
|
|
61
|
+
* @param server a server to compute skew with
|
|
62
|
+
* @returns the number of seconds to add to the current local system clock time
|
|
63
|
+
* to get an rough guess of the time on the given server
|
|
64
|
+
*/
|
|
65
|
+
export const estimateSkew = async (serverEndpoint = window.origin): Promise<number> => {
|
|
66
|
+
const localUnixTimeBefore = Date.now();
|
|
67
|
+
const response = await fetch(serverEndpoint);
|
|
68
|
+
return estimateSkewFromHeaders(response.headers, localUnixTimeBefore);
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
export type AnyHeaders = AxiosResponseHeaders | RawAxiosResponseHeaders | Headers;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Rough estimate of number of seconds to add to the curren time to get
|
|
75
|
+
* the clock time on the server that responded with the headers object.
|
|
76
|
+
* @param headers A set of headers, which must include the `date` header
|
|
77
|
+
* @param dateNowBefore time before initiating the request, usually by calling
|
|
78
|
+
* `Date.now()`. Note this is in milliseconds since the epoch, while the
|
|
79
|
+
* estimate is given in seconds.
|
|
80
|
+
* @returns the number of seconds to add to the current local system clock time
|
|
81
|
+
* to get an rough guess of the time on the server that was used
|
|
82
|
+
*/
|
|
83
|
+
export const estimateSkewFromHeaders = (headers: AnyHeaders, dateNowBefore?: number): number => {
|
|
84
|
+
const localUnixTimeBefore = (dateNowBefore || Date.now()) / 1000;
|
|
85
|
+
let serverDateString;
|
|
86
|
+
if (headers.get) {
|
|
87
|
+
serverDateString = (headers as Headers).get('Date');
|
|
88
|
+
} else {
|
|
89
|
+
serverDateString = (headers as AxiosResponseHeaders | RawAxiosResponseHeaders).date;
|
|
90
|
+
}
|
|
91
|
+
if (serverDateString === null) {
|
|
92
|
+
throw Error('Cannot get access to Date header!');
|
|
93
|
+
}
|
|
94
|
+
const serverUnixTime = Date.parse(serverDateString) / 1000;
|
|
95
|
+
const localUnixTimeAfter = Date.now() / 1000;
|
|
96
|
+
const deltaBefore = serverUnixTime - localUnixTimeBefore;
|
|
97
|
+
const deltaAfter = serverUnixTime - localUnixTimeAfter;
|
|
98
|
+
|
|
99
|
+
return Math.round((deltaBefore + deltaAfter) / 2);
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
export function addNewLines(str: string): string {
|
|
103
|
+
if (!str) {
|
|
104
|
+
return str;
|
|
105
|
+
}
|
|
106
|
+
let inputString = str;
|
|
107
|
+
let finalString = '';
|
|
108
|
+
while (inputString.length > 0) {
|
|
109
|
+
finalString += inputString.substring(0, 64) + '\r\n';
|
|
110
|
+
inputString = inputString.substring(64);
|
|
111
|
+
}
|
|
112
|
+
return finalString;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export async function cryptoPublicToPem(publicKey: CryptoKey): Promise<string> {
|
|
116
|
+
if (publicKey.type !== 'public') {
|
|
117
|
+
throw new ConfigurationError('incorrect key type');
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const exportedPublicKey = await crypto.subtle.exportKey('spki', publicKey);
|
|
121
|
+
const b64 = base64.encodeArrayBuffer(exportedPublicKey);
|
|
122
|
+
const pem = addNewLines(b64);
|
|
123
|
+
return `-----BEGIN PUBLIC KEY-----\r\n${pem}-----END PUBLIC KEY-----`;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export async function pemToCryptoPublicKey(pem: string): Promise<CryptoKey> {
|
|
127
|
+
if (/-----BEGIN PUBLIC KEY-----/.test(pem)) {
|
|
128
|
+
return pemPublicToCrypto(pem);
|
|
129
|
+
} else if (/-----BEGIN CERTIFICATE-----/.test(pem)) {
|
|
130
|
+
return pemCertToCrypto(pem);
|
|
131
|
+
}
|
|
132
|
+
// This can happen in several circumstances:
|
|
133
|
+
// - When parsing a PEM key from a KAS server
|
|
134
|
+
// - When converting between PEM and CryptoKey formats for user provided session keys (e.g. for DPoP)
|
|
135
|
+
throw new TypeError(`unsupported pem type [${pem}]`);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export async function extractPemFromKeyString(keyString: string): Promise<string> {
|
|
139
|
+
let pem: string = keyString;
|
|
140
|
+
|
|
141
|
+
// Skip the public key extraction if we find that the KAS url provides a
|
|
142
|
+
// PEM-encoded key instead of certificate
|
|
143
|
+
if (keyString.includes('CERTIFICATE')) {
|
|
144
|
+
const cert = await importX509(keyString, 'RS256', { extractable: true });
|
|
145
|
+
pem = await exportSPKI(cert);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
return pem;
|
|
149
|
+
}
|
package/src/version.ts
ADDED