├── .github
├── PULL_REQUEST_TEMPLATE.md
└── workflows
│ └── main.yml
├── .gitignore
├── CHANGELOG.md
├── HISTORY.md
├── LICENSE
├── LICENSE-APACHE2
├── LICENSE-MPL-RabbitMQ
├── README.md
├── doc
├── .build
├── 404.html
├── api-reference.html
├── credentials_obfuscation.epub
├── credentials_obfuscation.html
├── credentials_obfuscation_app.html
├── credentials_obfuscation_pbe.html
├── credentials_obfuscation_sup.html
├── credentials_obfuscation_svc.html
├── dist
│ ├── handlebars.runtime-NWIB6V2M.js
│ ├── handlebars.templates-IV5W3OL2.js
│ ├── html-XN2TSG4M.js
│ ├── html-erlang-6FXMBT73.css
│ ├── inconsolata-latin-400-normal-RGKDDNDD.woff2
│ ├── inconsolata-latin-700-normal-DTS2D7TO.woff2
│ ├── inconsolata-latin-ext-400-normal-K7HVGTP7.woff2
│ ├── inconsolata-latin-ext-700-normal-4MPBLFZC.woff2
│ ├── inconsolata-vietnamese-400-normal-IGQPHHJH.woff2
│ ├── inconsolata-vietnamese-700-normal-LHEGSN35.woff2
│ ├── lato-latin-300-normal-YUMVEFOL.woff2
│ ├── lato-latin-700-normal-2XVSBPG4.woff2
│ ├── lato-latin-ext-300-normal-VPGGJKJL.woff2
│ ├── lato-latin-ext-700-normal-Q2L5DVMW.woff2
│ ├── merriweather-cyrillic-300-italic-M6KMXZSZ.woff2
│ ├── merriweather-cyrillic-300-normal-7PAAHU3N.woff2
│ ├── merriweather-cyrillic-ext-300-italic-JP3ZEV2P.woff2
│ ├── merriweather-cyrillic-ext-300-normal-5LF5LCEK.woff2
│ ├── merriweather-latin-300-italic-353COS6Q.woff2
│ ├── merriweather-latin-300-normal-RWDJH4FN.woff2
│ ├── merriweather-latin-ext-300-italic-MWCA36KE.woff2
│ ├── merriweather-latin-ext-300-normal-K6L27CZ5.woff2
│ ├── merriweather-vietnamese-300-italic-EHHNZPUO.woff2
│ ├── merriweather-vietnamese-300-normal-U376L4Z4.woff2
│ ├── remixicon-NKANDIL5.woff2
│ ├── search_items-B61ACA4F.js
│ └── sidebar_items-2C2E7F21.js
├── index.html
└── search.html
├── include
├── credentials_obfuscation.hrl
└── otp_crypto.hrl
├── priv
└── schema
│ └── credentials_obfuscation.schema
├── rebar.config
├── rebar.lock
├── src
├── credentials_obfuscation.app.src
├── credentials_obfuscation.erl
├── credentials_obfuscation_app.erl
├── credentials_obfuscation_pbe.erl
├── credentials_obfuscation_sup.erl
└── credentials_obfuscation_svc.erl
└── test
├── credentials_obfuscation_SUITE.erl
└── credentials_obfuscation_pbe_SUITE.erl
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | ## Proposed Changes
2 |
3 | Please describe the big picture of your changes here to communicate to the
4 | RabbitMQ team why we should accept this pull request. If it fixes a bug or
5 | resolves a feature request, be sure to link to that issue.
6 |
7 | A pull request that doesn't explain **why** the change was made has a much
8 | lower chance of being accepted.
9 |
10 | If English isn't your first language, don't worry about it and try to
11 | communicate the problem you are trying to solve to the best of your abilities.
12 | As long as we can understand the intent, it's all good.
13 |
14 | ## Types of Changes
15 |
16 | What types of changes does your code introduce to this project?
17 | _Put an `x` in the boxes that apply_
18 |
19 | - [ ] Bug fix (non-breaking change which fixes issue #NNNN)
20 | - [ ] New feature (non-breaking change which adds functionality)
21 | - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
22 | - [ ] Documentation (correction or otherwise)
23 | - [ ] Cosmetics (whitespace, appearance)
24 |
25 | ## Checklist
26 |
27 | _Put an `x` in the boxes that apply. You can also fill these out after creating
28 | the PR. If you're unsure about any of them, don't hesitate to ask on the
29 | mailing list. We're here to help! This is simply a reminder of what we are
30 | going to look for before merging your code._
31 |
32 | - [ ] I have read the `CONTRIBUTING.md` document
33 | - [ ] I have signed the CA (see https://cla.pivotal.io/sign/rabbitmq)
34 | - [ ] All tests pass locally with my changes
35 | - [ ] I have added tests that prove my fix is effective or that my feature works
36 | - [ ] I have added necessary documentation (if appropriate)
37 | - [ ] Any dependent changes have been merged and published in related repositories
38 |
39 | ## Further Comments
40 |
41 | If this is a relatively large or complex change, kick off the discussion by
42 | explaining why you chose the solution you did and what alternatives you
43 | considered, etc.
44 |
--------------------------------------------------------------------------------
/.github/workflows/main.yml:
--------------------------------------------------------------------------------
1 | name: credentials-obfuscation
2 | on: push
3 | jobs:
4 | build:
5 | runs-on: ${{ matrix.os }}
6 | strategy:
7 | matrix:
8 | otp_version: [25, 26, 27]
9 | os: [ubuntu-latest, windows-latest]
10 | steps:
11 | - uses: actions/checkout@v4
12 | - uses: erlef/setup-beam@v1
13 | with:
14 | otp-version: ${{ matrix.otp_version }}
15 | rebar3-version: '3'
16 | - run: rebar3 compile
17 | - run: rebar3 dialyzer
18 | - run: rebar3 eunit
19 | - run: rebar3 ct --verbose --verbosity=3 --readable=true
20 | - uses: actions/upload-artifact@v4
21 | if: failure()
22 | with:
23 | name: ct-logs-${{matrix.os}}-${{matrix.otp_version}}
24 | path: _build/test/logs
25 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .rebar3
2 | rebar3.crashdump
3 | _*
4 | .eunit
5 | .tool-versions
6 | *.o
7 | *.beam
8 | *.plt
9 | *.swp
10 | *.swo
11 | .erlang.cookie
12 | erl_crash.dump
13 | .sw?
14 | .*.sw?
15 | *.beam
16 | /.erlang.mk/
17 | /cover/
18 | /deps/
19 | /ebin/
20 | /log/
21 | /logs/
22 | /plugins/
23 | /xrefr
24 | elvis
25 | callgrind*
26 | ct.coverdata
27 | test/ct.cover.spec
28 | _build
29 |
30 | credentials_obfuscation.d
31 | *.plt
32 | *.d
33 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 | ## [v3.5.0](https://github.com/rabbitmq/credentials-obfuscation/tree/v3.5.0) (2025-03-24)
4 |
5 | [Full Changelog](https://github.com/rabbitmq/credentials-obfuscation/compare/v3.4.0...v3.5.0)
6 |
7 | **Implemented enhancements:**
8 |
9 | - Add cuttlefish schema [\#28](https://github.com/rabbitmq/credentials-obfuscation/issues/28)
10 |
11 | **Merged pull requests:**
12 |
13 | - Prepare for v3.5.0 [\#34](https://github.com/rabbitmq/credentials-obfuscation/pull/34) ([lukebakken](https://github.com/lukebakken))
14 | - Remove defaults and unset if undefined [\#30](https://github.com/rabbitmq/credentials-obfuscation/pull/30) ([SimonUnge](https://github.com/SimonUnge))
15 | - Add schema file [\#29](https://github.com/rabbitmq/credentials-obfuscation/pull/29) ([SimonUnge](https://github.com/SimonUnge))
16 |
17 | ## [v3.4.0](https://github.com/rabbitmq/credentials-obfuscation/tree/v3.4.0) (2023-05-04)
18 |
19 | [Full Changelog](https://github.com/rabbitmq/credentials-obfuscation/compare/v3.3.0...v3.4.0)
20 |
21 | - Copy paste some crypto type definitions from OTP to make dialyzer happy
22 | - Exclude `shake128` and `shake256` (new hashing algorithms introduced in OTP26) from the tests as they don't support what we do
23 | - Add OTP26 to CI
24 | - Remove OTP23 from CI
25 |
26 | ## [v3.3.0](https://github.com/rabbitmq/credentials-obfuscation/tree/v3.3.0) (2023-03-04)
27 |
28 | [Full Changelog](https://github.com/rabbitmq/credentials-obfuscation/compare/v3.2.0...v3.3.0)
29 |
30 | **Closed issues:**
31 |
32 | - Remove rebar3\_hex plugin from rebar.config [\#22](https://github.com/rabbitmq/credentials-obfuscation/issues/22)
33 |
34 | **Merged pull requests:**
35 |
36 | - Update README.md [\#24](https://github.com/rabbitmq/credentials-obfuscation/pull/24) ([L1nY4n](https://github.com/L1nY4n))
37 | - Include rebar3\_hex in project\_plugins, not plugins [\#23](https://github.com/rabbitmq/credentials-obfuscation/pull/23) ([newmanjeff](https://github.com/newmanjeff))
38 |
39 | ## Changes between 3.1.0 and 3.2.0 (Nov 7, 2022)
40 |
41 | GitHub milestone: [link](https://github.com/rabbitmq/credentials-obfuscation/milestone/8closed=1)
42 |
43 | ## Changes Between 2.4.0 and 3.0.0 (May 2, 2022)
44 |
45 | ### Fallback Secret Support
46 |
47 | An alternative secret now can be provided to be used as fallback.
48 | This is useful for key migrations (rotations, upgrades, and so on)
49 | when some stored pieces of state can still use the old key.
50 |
51 | Contributed by @luos.
52 |
53 | GitHub issue: [rabbitmq/credentials-obfuscation#15](https://github.com/rabbitmq/credentials-obfuscation/pull/15)
54 |
55 | ### Support for Erlang/OTP 25
56 |
57 | The library supports Erlang 25 and drops support for Erlang versions < 22.3.
58 |
59 | ## Changes Between 2.3.0 and 2.4.0 (February 18, 2021)
60 |
61 | ### Support for Erlang/OTP 24 and the new Crypto API
62 |
63 | The library now supports Erlang 24 and drops support for Erlang versions < 22.1.
64 |
65 | Contributed by Dominic @dmorneau Morneau.
66 |
67 | GitHub issue: [#10](https://github.com/rabbitmq/credentials-obfuscation/pull/10).
68 |
69 |
70 | ## Changes Between 2.2.0 and 2.3.0 (December 18, 2020)
71 |
72 | ### Defaults for Better Efficiency
73 |
74 | The library now uses a weaker cipher suite by default for a significant
75 | gain in efficiency:
76 |
77 | * AES CBC with a 128-bit key
78 | * SHA-256 instead of SHA-512 for hashing
79 | * A single iteration instead of 1000
80 |
81 | AES CBC with a 128-bit key is a reasonable default
82 | for this library's use case, in-memory obfuscation of transient process state.
83 |
84 | Users who need to use a suite with stronger security
85 | guarantees, such as AES CBC with a 256-bit key,
86 | can override the default:
87 |
88 | ``` erl
89 | ok = application:set_env(credentials_obfuscation, cipher, aes_cbc256),
90 | ok = application:set_env(credentials_obfuscation, hash, sha512),
91 | ok = application:set_env(credentials_obfuscation, iterations, 300).
92 | ```
93 |
94 | Contributed by CloudAMQP.
95 |
96 | GitHub issue: [#9](https://github.com/rabbitmq/credentials-obfuscation/pull/9)
97 |
98 | ## Changes Between 2.1.0 and 2.2.0 (August 18, 2020)
99 |
100 | ### List Values are Coerced to Binaries
101 |
102 | This library works with binary inputs and outputs. Input list values will now be
103 | converted to binaries automatically for convenience. Decrypted values will always
104 | be returned as binaries.
105 |
106 | For the purpose of credentials, the two types are usually semantically equivalent.
107 | When that's not the case, we highly recommend using binaries exclusively instead
108 | of a mix of binaries and lists (Erlang strings).
109 |
110 |
111 | ## Changes Between 2.1.0 and 2.1.1 (July 29h, 2020)
112 |
113 | ### More Graceful Handling of Encryption Timeouts
114 |
115 | Should an encryption operation time out (can happen on nodes nearly maxing out their scheduler/CPU resources),
116 | a plain text value is returned to the caller. This is similar to how other
117 | "encrypting was not possible" scenarios are handled. The caller must
118 | decide whether using unencrypted values can be appropriate in such low probability scenarios
119 | or must be treated as an error.
120 |
121 | GitHub issue: [#7](https://github.com/rabbitmq/credentials-obfuscation/pull/7)
122 |
123 |
124 | ## Changes Between 2.0.0 and 2.1.0 (July 20th, 2020)
125 |
126 | ### License Change
127 |
128 | The library is now double-licensed under the Apache Software License 2.0
129 | and Mozilla Public License 2.0 (previously: under the ASL2 and Mozilla Public License 1.1).
130 |
131 | ### Minimum Supported Erlang Version Bump
132 |
133 | The library now requires OTP 21.3 or a later version.
134 |
135 |
136 | ## Changes Between 1.x and 2.0.0
137 |
138 | ### Secret Seeding
139 |
140 | The application now requires an explicitly provided secret for seeding
141 | of private key generation. This is done using the `credentials_obfuscation:set_secret/1` function
142 | after the application was started and before it is used.
143 |
144 |
145 | \* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*
146 |
--------------------------------------------------------------------------------
/HISTORY.md:
--------------------------------------------------------------------------------
1 | # Change Log
2 |
3 | ## Changes between 3.1.0 and 3.2.0 (Nov 7, 2022)
4 |
5 | GitHub milestone: [link](https://github.com/rabbitmq/credentials-obfuscation/milestone/8closed=1)
6 |
7 | ## Changes Between 2.4.0 and 3.0.0 (May 2, 2022)
8 |
9 | ### Fallback Secret Support
10 |
11 | An alternative secret now can be provided to be used as fallback.
12 | This is useful for key migrations (rotations, upgrades, and so on)
13 | when some stored pieces of state can still use the old key.
14 |
15 | Contributed by @luos.
16 |
17 | GitHub issue: [rabbitmq/credentials-obfuscation#15](https://github.com/rabbitmq/credentials-obfuscation/pull/15)
18 |
19 | ### Support for Erlang/OTP 25
20 |
21 | The library supports Erlang 25 and drops support for Erlang versions < 22.3.
22 |
23 | ## Changes Between 2.3.0 and 2.4.0 (February 18, 2021)
24 |
25 | ### Support for Erlang/OTP 24 and the new Crypto API
26 |
27 | The library now supports Erlang 24 and drops support for Erlang versions < 22.1.
28 |
29 | Contributed by Dominic @dmorneau Morneau.
30 |
31 | GitHub issue: [#10](https://github.com/rabbitmq/credentials-obfuscation/pull/10).
32 |
33 |
34 | ## Changes Between 2.2.0 and 2.3.0 (December 18, 2020)
35 |
36 | ### Defaults for Better Efficiency
37 |
38 | The library now uses a weaker cipher suite by default for a significant
39 | gain in efficiency:
40 |
41 | * AES CBC with a 128-bit key
42 | * SHA-256 instead of SHA-512 for hashing
43 | * A single iteration instead of 1000
44 |
45 | AES CBC with a 128-bit key is a reasonable default
46 | for this library's use case, in-memory obfuscation of transient process state.
47 |
48 | Users who need to use a suite with stronger security
49 | guarantees, such as AES CBC with a 256-bit key,
50 | can override the default:
51 |
52 | ``` erl
53 | ok = application:set_env(credentials_obfuscation, cipher, aes_cbc256),
54 | ok = application:set_env(credentials_obfuscation, hash, sha512),
55 | ok = application:set_env(credentials_obfuscation, iterations, 300).
56 | ```
57 |
58 | Contributed by CloudAMQP.
59 |
60 | GitHub issue: [#9](https://github.com/rabbitmq/credentials-obfuscation/pull/9)
61 |
62 | ## Changes Between 2.1.0 and 2.2.0 (August 18, 2020)
63 |
64 | ### List Values are Coerced to Binaries
65 |
66 | This library works with binary inputs and outputs. Input list values will now be
67 | converted to binaries automatically for convenience. Decrypted values will always
68 | be returned as binaries.
69 |
70 | For the purpose of credentials, the two types are usually semantically equivalent.
71 | When that's not the case, we highly recommend using binaries exclusively instead
72 | of a mix of binaries and lists (Erlang strings).
73 |
74 |
75 | ## Changes Between 2.1.0 and 2.1.1 (July 29h, 2020)
76 |
77 | ### More Graceful Handling of Encryption Timeouts
78 |
79 | Should an encryption operation time out (can happen on nodes nearly maxing out their scheduler/CPU resources),
80 | a plain text value is returned to the caller. This is similar to how other
81 | "encrypting was not possible" scenarios are handled. The caller must
82 | decide whether using unencrypted values can be appropriate in such low probability scenarios
83 | or must be treated as an error.
84 |
85 | GitHub issue: [#7](https://github.com/rabbitmq/credentials-obfuscation/pull/7)
86 |
87 |
88 | ## Changes Between 2.0.0 and 2.1.0 (July 20th, 2020)
89 |
90 | ### License Change
91 |
92 | The library is now double-licensed under the Apache Software License 2.0
93 | and Mozilla Public License 2.0 (previously: under the ASL2 and Mozilla Public License 1.1).
94 |
95 | ### Minimum Supported Erlang Version Bump
96 |
97 | The library now requires OTP 21.3 or a later version.
98 |
99 |
100 | ## Changes Between 1.x and 2.0.0
101 |
102 | ### Secret Seeding
103 |
104 | The application now requires an explicitly provided secret for seeding
105 | of private key generation. This is done using the `credentials_obfuscation:set_secret/1` function
106 | after the application was started and before it is used.
107 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | This package, the credential obfuscation library, is double-licensed under
2 | the Mozilla Public License 2.0 ("MPL") and the Apache License version 2 ("ASL"). For the MPL,
3 | please see LICENSE-MPL-RabbitMQ. For the ASL, please see LICENSE-APACHE2.
4 |
5 | If you have any questions regarding licensing, please contact us at
6 | info@rabbitmq.com.
7 |
--------------------------------------------------------------------------------
/LICENSE-APACHE2:
--------------------------------------------------------------------------------
1 |
2 | Apache License
3 | Version 2.0, January 2004
4 | https://www.apache.org/licenses/
5 |
6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7 |
8 | 1. Definitions.
9 |
10 | "License" shall mean the terms and conditions for use, reproduction,
11 | and distribution as defined by Sections 1 through 9 of this document.
12 |
13 | "Licensor" shall mean the copyright owner or entity authorized by
14 | the copyright owner that is granting the License.
15 |
16 | "Legal Entity" shall mean the union of the acting entity and all
17 | other entities that control, are controlled by, or are under common
18 | control with that entity. For the purposes of this definition,
19 | "control" means (i) the power, direct or indirect, to cause the
20 | direction or management of such entity, whether by contract or
21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
22 | outstanding shares, or (iii) beneficial ownership of such entity.
23 |
24 | "You" (or "Your") shall mean an individual or Legal Entity
25 | exercising permissions granted by this License.
26 |
27 | "Source" form shall mean the preferred form for making modifications,
28 | including but not limited to software source code, documentation
29 | source, and configuration files.
30 |
31 | "Object" form shall mean any form resulting from mechanical
32 | transformation or translation of a Source form, including but
33 | not limited to compiled object code, generated documentation,
34 | and conversions to other media types.
35 |
36 | "Work" shall mean the work of authorship, whether in Source or
37 | Object form, made available under the License, as indicated by a
38 | copyright notice that is included in or attached to the work
39 | (an example is provided in the Appendix below).
40 |
41 | "Derivative Works" shall mean any work, whether in Source or Object
42 | form, that is based on (or derived from) the Work and for which the
43 | editorial revisions, annotations, elaborations, or other modifications
44 | represent, as a whole, an original work of authorship. For the purposes
45 | of this License, Derivative Works shall not include works that remain
46 | separable from, or merely link (or bind by name) to the interfaces of,
47 | the Work and Derivative Works thereof.
48 |
49 | "Contribution" shall mean any work of authorship, including
50 | the original version of the Work and any modifications or additions
51 | to that Work or Derivative Works thereof, that is intentionally
52 | submitted to Licensor for inclusion in the Work by the copyright owner
53 | or by an individual or Legal Entity authorized to submit on behalf of
54 | the copyright owner. For the purposes of this definition, "submitted"
55 | means any form of electronic, verbal, or written communication sent
56 | to the Licensor or its representatives, including but not limited to
57 | communication on electronic mailing lists, source code control systems,
58 | and issue tracking systems that are managed by, or on behalf of, the
59 | Licensor for the purpose of discussing and improving the Work, but
60 | excluding communication that is conspicuously marked or otherwise
61 | designated in writing by the copyright owner as "Not a Contribution."
62 |
63 | "Contributor" shall mean Licensor and any individual or Legal Entity
64 | on behalf of whom a Contribution has been received by Licensor and
65 | subsequently incorporated within the Work.
66 |
67 | 2. Grant of Copyright License. Subject to the terms and conditions of
68 | this License, each Contributor hereby grants to You a perpetual,
69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70 | copyright license to reproduce, prepare Derivative Works of,
71 | publicly display, publicly perform, sublicense, and distribute the
72 | Work and such Derivative Works in Source or Object form.
73 |
74 | 3. Grant of Patent License. Subject to the terms and conditions of
75 | this License, each Contributor hereby grants to You a perpetual,
76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77 | (except as stated in this section) patent license to make, have made,
78 | use, offer to sell, sell, import, and otherwise transfer the Work,
79 | where such license applies only to those patent claims licensable
80 | by such Contributor that are necessarily infringed by their
81 | Contribution(s) alone or by combination of their Contribution(s)
82 | with the Work to which such Contribution(s) was submitted. If You
83 | institute patent litigation against any entity (including a
84 | cross-claim or counterclaim in a lawsuit) alleging that the Work
85 | or a Contribution incorporated within the Work constitutes direct
86 | or contributory patent infringement, then any patent licenses
87 | granted to You under this License for that Work shall terminate
88 | as of the date such litigation is filed.
89 |
90 | 4. Redistribution. You may reproduce and distribute copies of the
91 | Work or Derivative Works thereof in any medium, with or without
92 | modifications, and in Source or Object form, provided that You
93 | meet the following conditions:
94 |
95 | (a) You must give any other recipients of the Work or
96 | Derivative Works a copy of this License; and
97 |
98 | (b) You must cause any modified files to carry prominent notices
99 | stating that You changed the files; and
100 |
101 | (c) You must retain, in the Source form of any Derivative Works
102 | that You distribute, all copyright, patent, trademark, and
103 | attribution notices from the Source form of the Work,
104 | excluding those notices that do not pertain to any part of
105 | the Derivative Works; and
106 |
107 | (d) If the Work includes a "NOTICE" text file as part of its
108 | distribution, then any Derivative Works that You distribute must
109 | include a readable copy of the attribution notices contained
110 | within such NOTICE file, excluding those notices that do not
111 | pertain to any part of the Derivative Works, in at least one
112 | of the following places: within a NOTICE text file distributed
113 | as part of the Derivative Works; within the Source form or
114 | documentation, if provided along with the Derivative Works; or,
115 | within a display generated by the Derivative Works, if and
116 | wherever such third-party notices normally appear. The contents
117 | of the NOTICE file are for informational purposes only and
118 | do not modify the License. You may add Your own attribution
119 | notices within Derivative Works that You distribute, alongside
120 | or as an addendum to the NOTICE text from the Work, provided
121 | that such additional attribution notices cannot be construed
122 | as modifying the License.
123 |
124 | You may add Your own copyright statement to Your modifications and
125 | may provide additional or different license terms and conditions
126 | for use, reproduction, or distribution of Your modifications, or
127 | for any such Derivative Works as a whole, provided Your use,
128 | reproduction, and distribution of the Work otherwise complies with
129 | the conditions stated in this License.
130 |
131 | 5. Submission of Contributions. Unless You explicitly state otherwise,
132 | any Contribution intentionally submitted for inclusion in the Work
133 | by You to the Licensor shall be under the terms and conditions of
134 | this License, without any additional terms or conditions.
135 | Notwithstanding the above, nothing herein shall supersede or modify
136 | the terms of any separate license agreement you may have executed
137 | with Licensor regarding such Contributions.
138 |
139 | 6. Trademarks. This License does not grant permission to use the trade
140 | names, trademarks, service marks, or product names of the Licensor,
141 | except as required for reasonable and customary use in describing the
142 | origin of the Work and reproducing the content of the NOTICE file.
143 |
144 | 7. Disclaimer of Warranty. Unless required by applicable law or
145 | agreed to in writing, Licensor provides the Work (and each
146 | Contributor provides its Contributions) on an "AS IS" BASIS,
147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148 | implied, including, without limitation, any warranties or conditions
149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150 | PARTICULAR PURPOSE. You are solely responsible for determining the
151 | appropriateness of using or redistributing the Work and assume any
152 | risks associated with Your exercise of permissions under this License.
153 |
154 | 8. Limitation of Liability. In no event and under no legal theory,
155 | whether in tort (including negligence), contract, or otherwise,
156 | unless required by applicable law (such as deliberate and grossly
157 | negligent acts) or agreed to in writing, shall any Contributor be
158 | liable to You for damages, including any direct, indirect, special,
159 | incidental, or consequential damages of any character arising as a
160 | result of this License or out of the use or inability to use the
161 | Work (including but not limited to damages for loss of goodwill,
162 | work stoppage, computer failure or malfunction, or any and all
163 | other commercial damages or losses), even if such Contributor
164 | has been advised of the possibility of such damages.
165 |
166 | 9. Accepting Warranty or Additional Liability. While redistributing
167 | the Work or Derivative Works thereof, You may choose to offer,
168 | and charge a fee for, acceptance of support, warranty, indemnity,
169 | or other liability obligations and/or rights consistent with this
170 | License. However, in accepting such obligations, You may act only
171 | on Your own behalf and on Your sole responsibility, not on behalf
172 | of any other Contributor, and only if You agree to indemnify,
173 | defend, and hold each Contributor harmless for any liability
174 | incurred by, or claims asserted against, such Contributor by reason
175 | of your accepting any such warranty or additional liability.
176 |
177 | END OF TERMS AND CONDITIONS
178 |
179 | APPENDIX: How to apply the Apache License to your work.
180 |
181 | To apply the Apache License to your work, attach the following
182 | boilerplate notice, with the fields enclosed by brackets "[]"
183 | replaced with your own identifying information. (Don't include
184 | the brackets!) The text should be enclosed in the appropriate
185 | comment syntax for the file format. We also recommend that a
186 | file or class name and description of purpose be included on the
187 | same "printed page" as the copyright notice for easier
188 | identification within third-party archives.
189 |
190 | Copyright [yyyy] [name of copyright owner]
191 |
192 | Licensed under the Apache License, Version 2.0 (the "License");
193 | you may not use this file except in compliance with the License.
194 | You may obtain a copy of the License at
195 |
196 | https://www.apache.org/licenses/LICENSE-2.0
197 |
198 | Unless required by applicable law or agreed to in writing, software
199 | distributed under the License is distributed on an "AS IS" BASIS,
200 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201 | See the License for the specific language governing permissions and
202 | limitations under the License.
203 |
--------------------------------------------------------------------------------
/LICENSE-MPL-RabbitMQ:
--------------------------------------------------------------------------------
1 | Mozilla Public License Version 2.0
2 | ==================================
3 |
4 | 1. Definitions
5 | --------------
6 |
7 | 1.1. "Contributor"
8 | means each individual or legal entity that creates, contributes to
9 | the creation of, or owns Covered Software.
10 |
11 | 1.2. "Contributor Version"
12 | means the combination of the Contributions of others (if any) used
13 | by a Contributor and that particular Contributor's Contribution.
14 |
15 | 1.3. "Contribution"
16 | means Covered Software of a particular Contributor.
17 |
18 | 1.4. "Covered Software"
19 | means Source Code Form to which the initial Contributor has attached
20 | the notice in Exhibit A, the Executable Form of such Source Code
21 | Form, and Modifications of such Source Code Form, in each case
22 | including portions thereof.
23 |
24 | 1.5. "Incompatible With Secondary Licenses"
25 | means
26 |
27 | (a) that the initial Contributor has attached the notice described
28 | in Exhibit B to the Covered Software; or
29 |
30 | (b) that the Covered Software was made available under the terms of
31 | version 1.1 or earlier of the License, but not also under the
32 | terms of a Secondary License.
33 |
34 | 1.6. "Executable Form"
35 | means any form of the work other than Source Code Form.
36 |
37 | 1.7. "Larger Work"
38 | means a work that combines Covered Software with other material, in
39 | a separate file or files, that is not Covered Software.
40 |
41 | 1.8. "License"
42 | means this document.
43 |
44 | 1.9. "Licensable"
45 | means having the right to grant, to the maximum extent possible,
46 | whether at the time of the initial grant or subsequently, any and
47 | all of the rights conveyed by this License.
48 |
49 | 1.10. "Modifications"
50 | means any of the following:
51 |
52 | (a) any file in Source Code Form that results from an addition to,
53 | deletion from, or modification of the contents of Covered
54 | Software; or
55 |
56 | (b) any new file in Source Code Form that contains any Covered
57 | Software.
58 |
59 | 1.11. "Patent Claims" of a Contributor
60 | means any patent claim(s), including without limitation, method,
61 | process, and apparatus claims, in any patent Licensable by such
62 | Contributor that would be infringed, but for the grant of the
63 | License, by the making, using, selling, offering for sale, having
64 | made, import, or transfer of either its Contributions or its
65 | Contributor Version.
66 |
67 | 1.12. "Secondary License"
68 | means either the GNU General Public License, Version 2.0, the GNU
69 | Lesser General Public License, Version 2.1, the GNU Affero General
70 | Public License, Version 3.0, or any later versions of those
71 | licenses.
72 |
73 | 1.13. "Source Code Form"
74 | means the form of the work preferred for making modifications.
75 |
76 | 1.14. "You" (or "Your")
77 | means an individual or a legal entity exercising rights under this
78 | License. For legal entities, "You" includes any entity that
79 | controls, is controlled by, or is under common control with You. For
80 | purposes of this definition, "control" means (a) the power, direct
81 | or indirect, to cause the direction or management of such entity,
82 | whether by contract or otherwise, or (b) ownership of more than
83 | fifty percent (50%) of the outstanding shares or beneficial
84 | ownership of such entity.
85 |
86 | 2. License Grants and Conditions
87 | --------------------------------
88 |
89 | 2.1. Grants
90 |
91 | Each Contributor hereby grants You a world-wide, royalty-free,
92 | non-exclusive license:
93 |
94 | (a) under intellectual property rights (other than patent or trademark)
95 | Licensable by such Contributor to use, reproduce, make available,
96 | modify, display, perform, distribute, and otherwise exploit its
97 | Contributions, either on an unmodified basis, with Modifications, or
98 | as part of a Larger Work; and
99 |
100 | (b) under Patent Claims of such Contributor to make, use, sell, offer
101 | for sale, have made, import, and otherwise transfer either its
102 | Contributions or its Contributor Version.
103 |
104 | 2.2. Effective Date
105 |
106 | The licenses granted in Section 2.1 with respect to any Contribution
107 | become effective for each Contribution on the date the Contributor first
108 | distributes such Contribution.
109 |
110 | 2.3. Limitations on Grant Scope
111 |
112 | The licenses granted in this Section 2 are the only rights granted under
113 | this License. No additional rights or licenses will be implied from the
114 | distribution or licensing of Covered Software under this License.
115 | Notwithstanding Section 2.1(b) above, no patent license is granted by a
116 | Contributor:
117 |
118 | (a) for any code that a Contributor has removed from Covered Software;
119 | or
120 |
121 | (b) for infringements caused by: (i) Your and any other third party's
122 | modifications of Covered Software, or (ii) the combination of its
123 | Contributions with other software (except as part of its Contributor
124 | Version); or
125 |
126 | (c) under Patent Claims infringed by Covered Software in the absence of
127 | its Contributions.
128 |
129 | This License does not grant any rights in the trademarks, service marks,
130 | or logos of any Contributor (except as may be necessary to comply with
131 | the notice requirements in Section 3.4).
132 |
133 | 2.4. Subsequent Licenses
134 |
135 | No Contributor makes additional grants as a result of Your choice to
136 | distribute the Covered Software under a subsequent version of this
137 | License (see Section 10.2) or under the terms of a Secondary License (if
138 | permitted under the terms of Section 3.3).
139 |
140 | 2.5. Representation
141 |
142 | Each Contributor represents that the Contributor believes its
143 | Contributions are its original creation(s) or it has sufficient rights
144 | to grant the rights to its Contributions conveyed by this License.
145 |
146 | 2.6. Fair Use
147 |
148 | This License is not intended to limit any rights You have under
149 | applicable copyright doctrines of fair use, fair dealing, or other
150 | equivalents.
151 |
152 | 2.7. Conditions
153 |
154 | Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
155 | in Section 2.1.
156 |
157 | 3. Responsibilities
158 | -------------------
159 |
160 | 3.1. Distribution of Source Form
161 |
162 | All distribution of Covered Software in Source Code Form, including any
163 | Modifications that You create or to which You contribute, must be under
164 | the terms of this License. You must inform recipients that the Source
165 | Code Form of the Covered Software is governed by the terms of this
166 | License, and how they can obtain a copy of this License. You may not
167 | attempt to alter or restrict the recipients' rights in the Source Code
168 | Form.
169 |
170 | 3.2. Distribution of Executable Form
171 |
172 | If You distribute Covered Software in Executable Form then:
173 |
174 | (a) such Covered Software must also be made available in Source Code
175 | Form, as described in Section 3.1, and You must inform recipients of
176 | the Executable Form how they can obtain a copy of such Source Code
177 | Form by reasonable means in a timely manner, at a charge no more
178 | than the cost of distribution to the recipient; and
179 |
180 | (b) You may distribute such Executable Form under the terms of this
181 | License, or sublicense it under different terms, provided that the
182 | license for the Executable Form does not attempt to limit or alter
183 | the recipients' rights in the Source Code Form under this License.
184 |
185 | 3.3. Distribution of a Larger Work
186 |
187 | You may create and distribute a Larger Work under terms of Your choice,
188 | provided that You also comply with the requirements of this License for
189 | the Covered Software. If the Larger Work is a combination of Covered
190 | Software with a work governed by one or more Secondary Licenses, and the
191 | Covered Software is not Incompatible With Secondary Licenses, this
192 | License permits You to additionally distribute such Covered Software
193 | under the terms of such Secondary License(s), so that the recipient of
194 | the Larger Work may, at their option, further distribute the Covered
195 | Software under the terms of either this License or such Secondary
196 | License(s).
197 |
198 | 3.4. Notices
199 |
200 | You may not remove or alter the substance of any license notices
201 | (including copyright notices, patent notices, disclaimers of warranty,
202 | or limitations of liability) contained within the Source Code Form of
203 | the Covered Software, except that You may alter any license notices to
204 | the extent required to remedy known factual inaccuracies.
205 |
206 | 3.5. Application of Additional Terms
207 |
208 | You may choose to offer, and to charge a fee for, warranty, support,
209 | indemnity or liability obligations to one or more recipients of Covered
210 | Software. However, You may do so only on Your own behalf, and not on
211 | behalf of any Contributor. You must make it absolutely clear that any
212 | such warranty, support, indemnity, or liability obligation is offered by
213 | You alone, and You hereby agree to indemnify every Contributor for any
214 | liability incurred by such Contributor as a result of warranty, support,
215 | indemnity or liability terms You offer. You may include additional
216 | disclaimers of warranty and limitations of liability specific to any
217 | jurisdiction.
218 |
219 | 4. Inability to Comply Due to Statute or Regulation
220 | ---------------------------------------------------
221 |
222 | If it is impossible for You to comply with any of the terms of this
223 | License with respect to some or all of the Covered Software due to
224 | statute, judicial order, or regulation then You must: (a) comply with
225 | the terms of this License to the maximum extent possible; and (b)
226 | describe the limitations and the code they affect. Such description must
227 | be placed in a text file included with all distributions of the Covered
228 | Software under this License. Except to the extent prohibited by statute
229 | or regulation, such description must be sufficiently detailed for a
230 | recipient of ordinary skill to be able to understand it.
231 |
232 | 5. Termination
233 | --------------
234 |
235 | 5.1. The rights granted under this License will terminate automatically
236 | if You fail to comply with any of its terms. However, if You become
237 | compliant, then the rights granted under this License from a particular
238 | Contributor are reinstated (a) provisionally, unless and until such
239 | Contributor explicitly and finally terminates Your grants, and (b) on an
240 | ongoing basis, if such Contributor fails to notify You of the
241 | non-compliance by some reasonable means prior to 60 days after You have
242 | come back into compliance. Moreover, Your grants from a particular
243 | Contributor are reinstated on an ongoing basis if such Contributor
244 | notifies You of the non-compliance by some reasonable means, this is the
245 | first time You have received notice of non-compliance with this License
246 | from such Contributor, and You become compliant prior to 30 days after
247 | Your receipt of the notice.
248 |
249 | 5.2. If You initiate litigation against any entity by asserting a patent
250 | infringement claim (excluding declaratory judgment actions,
251 | counter-claims, and cross-claims) alleging that a Contributor Version
252 | directly or indirectly infringes any patent, then the rights granted to
253 | You by any and all Contributors for the Covered Software under Section
254 | 2.1 of this License shall terminate.
255 |
256 | 5.3. In the event of termination under Sections 5.1 or 5.2 above, all
257 | end user license agreements (excluding distributors and resellers) which
258 | have been validly granted by You or Your distributors under this License
259 | prior to termination shall survive termination.
260 |
261 | ************************************************************************
262 | * *
263 | * 6. Disclaimer of Warranty *
264 | * ------------------------- *
265 | * *
266 | * Covered Software is provided under this License on an "as is" *
267 | * basis, without warranty of any kind, either expressed, implied, or *
268 | * statutory, including, without limitation, warranties that the *
269 | * Covered Software is free of defects, merchantable, fit for a *
270 | * particular purpose or non-infringing. The entire risk as to the *
271 | * quality and performance of the Covered Software is with You. *
272 | * Should any Covered Software prove defective in any respect, You *
273 | * (not any Contributor) assume the cost of any necessary servicing, *
274 | * repair, or correction. This disclaimer of warranty constitutes an *
275 | * essential part of this License. No use of any Covered Software is *
276 | * authorized under this License except under this disclaimer. *
277 | * *
278 | ************************************************************************
279 |
280 | ************************************************************************
281 | * *
282 | * 7. Limitation of Liability *
283 | * -------------------------- *
284 | * *
285 | * Under no circumstances and under no legal theory, whether tort *
286 | * (including negligence), contract, or otherwise, shall any *
287 | * Contributor, or anyone who distributes Covered Software as *
288 | * permitted above, be liable to You for any direct, indirect, *
289 | * special, incidental, or consequential damages of any character *
290 | * including, without limitation, damages for lost profits, loss of *
291 | * goodwill, work stoppage, computer failure or malfunction, or any *
292 | * and all other commercial damages or losses, even if such party *
293 | * shall have been informed of the possibility of such damages. This *
294 | * limitation of liability shall not apply to liability for death or *
295 | * personal injury resulting from such party's negligence to the *
296 | * extent applicable law prohibits such limitation. Some *
297 | * jurisdictions do not allow the exclusion or limitation of *
298 | * incidental or consequential damages, so this exclusion and *
299 | * limitation may not apply to You. *
300 | * *
301 | ************************************************************************
302 |
303 | 8. Litigation
304 | -------------
305 |
306 | Any litigation relating to this License may be brought only in the
307 | courts of a jurisdiction where the defendant maintains its principal
308 | place of business and such litigation shall be governed by laws of that
309 | jurisdiction, without reference to its conflict-of-law provisions.
310 | Nothing in this Section shall prevent a party's ability to bring
311 | cross-claims or counter-claims.
312 |
313 | 9. Miscellaneous
314 | ----------------
315 |
316 | This License represents the complete agreement concerning the subject
317 | matter hereof. If any provision of this License is held to be
318 | unenforceable, such provision shall be reformed only to the extent
319 | necessary to make it enforceable. Any law or regulation which provides
320 | that the language of a contract shall be construed against the drafter
321 | shall not be used to construe this License against a Contributor.
322 |
323 | 10. Versions of the License
324 | ---------------------------
325 |
326 | 10.1. New Versions
327 |
328 | Mozilla Foundation is the license steward. Except as provided in Section
329 | 10.3, no one other than the license steward has the right to modify or
330 | publish new versions of this License. Each version will be given a
331 | distinguishing version number.
332 |
333 | 10.2. Effect of New Versions
334 |
335 | You may distribute the Covered Software under the terms of the version
336 | of the License under which You originally received the Covered Software,
337 | or under the terms of any subsequent version published by the license
338 | steward.
339 |
340 | 10.3. Modified Versions
341 |
342 | If you create software not governed by this License, and you want to
343 | create a new license for such software, you may create and use a
344 | modified version of this License if you rename the license and remove
345 | any references to the name of the license steward (except to note that
346 | such modified license differs from this License).
347 |
348 | 10.4. Distributing Source Code Form that is Incompatible With Secondary
349 | Licenses
350 |
351 | If You choose to distribute Source Code Form that is Incompatible With
352 | Secondary Licenses under the terms of this version of the License, the
353 | notice described in Exhibit B of this License must be attached.
354 |
355 | Exhibit A - Source Code Form License Notice
356 | -------------------------------------------
357 |
358 | This Source Code Form is subject to the terms of the Mozilla Public
359 | License, v. 2.0. If a copy of the MPL was not distributed with this
360 | file, You can obtain one at http://mozilla.org/MPL/2.0/.
361 |
362 | If it is not possible or desirable to put the notice in a particular
363 | file, then You may include the notice in a location (such as a LICENSE
364 | file in a relevant directory) where a recipient would be likely to look
365 | for such a notice.
366 |
367 | You may add additional accurate notices of copyright ownership.
368 |
369 | Exhibit B - "Incompatible With Secondary Licenses" Notice
370 | ---------------------------------------------------------
371 |
372 | This Source Code Form is "Incompatible With Secondary Licenses", as
373 | defined by the Mozilla Public License, v. 2.0.
374 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Credential Obfuscator
2 |
3 | This is a small library OTP application that acts as a helper. It encrypts and decrypts sensitive data
4 | typically stored in processes state with a one-off key (key material must be provided on node start).
5 | One example of such sensitive data is credentials used to access remote services.
6 |
7 | This is necessary to avoid the sensitive values logged when process state is dumped by
8 | the Erlang runtime (`error_logger`).
9 |
10 | Note that this application **cannot protect against heap dumping attacks** and only helps
11 | avoid sensitive data appearing in log files.
12 |
13 | ## Supported Erlang/OTP Versions
14 |
15 | This library uses the modern `crypto` API and **requires Erlang 23.2 or a later version**.
16 |
17 | ## Usage
18 |
19 | First, make the `credentials_obfuscation` application a dependency of your project.
20 |
21 | Then, during the start-up of your application, and after the `credentials_obfuscation` application starts,
22 | provide the secret value:
23 |
24 | ``` erl
25 | CookieBin = atom_to_binary(erlang:get_cookie(), latin1),
26 | credentials_obfuscation:set_secret(CookieBin)
27 | ```
28 |
29 | To use a random value, do the following:
30 |
31 | ``` erl
32 | Bytes = crypto:strong_rand_bytes(128),
33 | credentials_obfuscation:set_secret(Bytes)
34 | ```
35 |
36 | To encrypt and decrypt a binary or list value:
37 |
38 | ``` erl
39 | Encrypted = credentials_obfuscation:encrypt(<<"abc">>).
40 | % => {encrypted,<<"KdH0bP4CYasbA3X79nKShEJhajQ7D7wz1G4yqJmDS4d7zRuuUhAPuQKxdDVgxQtO">>}
41 |
42 | credentials_obfuscation:decrypt(Encrypted).
43 | % => <<"abc">>
44 | ```
45 |
46 | Lists (char lists in Elixir) will be converted to binaries before encryption.
47 | This means that decrypted values will alwyas be returned as binaries.
48 |
49 | Lists here mean "byte lists", that is Unicode characters are not
50 | supported. This should still be sufficient for encryption of
51 | URIs, generated credentials, and many kinds of sensitive identifiers.
52 |
53 | ## License and Copyright
54 |
55 | See [LICENSE](./LICENSE).
56 |
57 | (c) 2019-2023 VMware, Inc or its affiliates.
58 |
59 | (c) 2023-2024 Broadcom, Inc or its subsidiaries.
60 |
--------------------------------------------------------------------------------
/doc/.build:
--------------------------------------------------------------------------------
1 | 404.html
2 | api-reference.html
3 | credentials_obfuscation.html
4 | credentials_obfuscation_app.html
5 | credentials_obfuscation_pbe.html
6 | credentials_obfuscation_sup.html
7 | credentials_obfuscation_svc.html
8 | dist/handlebars.runtime-NWIB6V2M.js
9 | dist/handlebars.templates-IV5W3OL2.js
10 | dist/html-XN2TSG4M.js
11 | dist/html-erlang-6FXMBT73.css
12 | dist/inconsolata-latin-400-normal-RGKDDNDD.woff2
13 | dist/inconsolata-latin-700-normal-DTS2D7TO.woff2
14 | dist/inconsolata-latin-ext-400-normal-K7HVGTP7.woff2
15 | dist/inconsolata-latin-ext-700-normal-4MPBLFZC.woff2
16 | dist/inconsolata-vietnamese-400-normal-IGQPHHJH.woff2
17 | dist/inconsolata-vietnamese-700-normal-LHEGSN35.woff2
18 | dist/lato-latin-300-normal-YUMVEFOL.woff2
19 | dist/lato-latin-700-normal-2XVSBPG4.woff2
20 | dist/lato-latin-ext-300-normal-VPGGJKJL.woff2
21 | dist/lato-latin-ext-700-normal-Q2L5DVMW.woff2
22 | dist/merriweather-cyrillic-300-italic-M6KMXZSZ.woff2
23 | dist/merriweather-cyrillic-300-normal-7PAAHU3N.woff2
24 | dist/merriweather-cyrillic-ext-300-italic-JP3ZEV2P.woff2
25 | dist/merriweather-cyrillic-ext-300-normal-5LF5LCEK.woff2
26 | dist/merriweather-latin-300-italic-353COS6Q.woff2
27 | dist/merriweather-latin-300-normal-RWDJH4FN.woff2
28 | dist/merriweather-latin-ext-300-italic-MWCA36KE.woff2
29 | dist/merriweather-latin-ext-300-normal-K6L27CZ5.woff2
30 | dist/merriweather-vietnamese-300-italic-EHHNZPUO.woff2
31 | dist/merriweather-vietnamese-300-normal-U376L4Z4.woff2
32 | dist/remixicon-NKANDIL5.woff2
33 | dist/search_items-B61ACA4F.js
34 | dist/sidebar_items-2C2E7F21.js
35 | index.html
36 | search.html
37 |
--------------------------------------------------------------------------------
/doc/404.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
Sorry, but the page you were trying to get to, does not exist. You
102 | may want to try searching this site using the sidebar
103 |
104 | or using our API Reference page
105 |
106 | to find what you were looking for.
534 |
535 |
536 |
537 |
538 |
--------------------------------------------------------------------------------
/doc/dist/handlebars.runtime-NWIB6V2M.js:
--------------------------------------------------------------------------------
1 | /**!
2 |
3 | @license
4 | handlebars v4.7.7
5 |
6 | Copyright (C) 2011-2019 by Yehuda Katz
7 |
8 | Permission is hereby granted, free of charge, to any person obtaining a copy
9 | of this software and associated documentation files (the "Software"), to deal
10 | in the Software without restriction, including without limitation the rights
11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 | copies of the Software, and to permit persons to whom the Software is
13 | furnished to do so, subject to the following conditions:
14 |
15 | The above copyright notice and this permission notice shall be included in
16 | all copies or substantial portions of the Software.
17 |
18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 | THE SOFTWARE.
25 |
26 | */(function(r,e){typeof exports=="object"&&typeof module=="object"?module.exports=e():typeof define=="function"&&define.amd?define([],e):typeof exports=="object"?exports.Handlebars=e():r.Handlebars=e()})(this,function(){return function(u){var r={};function e(n){if(r[n])return r[n].exports;var t=r[n]={exports:{},id:n,loaded:!1};return u[n].call(t.exports,t,t.exports,e),t.loaded=!0,t.exports}return e.m=u,e.c=r,e.p="",e(0)}([function(u,r,e){"use strict";var n=e(1).default,t=e(2).default;r.__esModule=!0;var f=e(3),a=n(f),i=e(36),l=t(i),h=e(5),v=t(h),P=e(4),H=n(P),C=e(37),E=n(C),I=e(43),o=t(I);function g(){var y=new a.HandlebarsEnvironment;return H.extend(y,a),y.SafeString=l.default,y.Exception=v.default,y.Utils=H,y.escapeExpression=H.escapeExpression,y.VM=E,y.template=function(p){return E.template(p,y)},y}var w=g();w.create=g,o.default(w),w.default=w,r.default=w,u.exports=r.default},function(u,r){"use strict";r.default=function(e){if(e&&e.__esModule)return e;var n={};if(e!=null)for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&(n[t]=e[t]);return n.default=e,n},r.__esModule=!0},function(u,r){"use strict";r.default=function(e){return e&&e.__esModule?e:{default:e}},r.__esModule=!0},function(u,r,e){"use strict";var n=e(2).default;r.__esModule=!0,r.HandlebarsEnvironment=g;var t=e(4),f=e(5),a=n(f),i=e(9),l=e(29),h=e(31),v=n(h),P=e(32),H="4.7.7";r.VERSION=H;var C=8;r.COMPILER_REVISION=C;var E=7;r.LAST_COMPATIBLE_COMPILER_REVISION=E;var I={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0 <4.3.0",8:">= 4.3.0"};r.REVISION_CHANGES=I;var o="[object Object]";function g(y,p,R){this.helpers=y||{},this.partials=p||{},this.decorators=R||{},i.registerDefaultHelpers(this),l.registerDefaultDecorators(this)}g.prototype={constructor:g,logger:v.default,log:v.default.log,registerHelper:function(p,R){if(t.toString.call(p)===o){if(R)throw new a.default("Arg not supported with multiple helpers");t.extend(this.helpers,p)}else this.helpers[p]=R},unregisterHelper:function(p){delete this.helpers[p]},registerPartial:function(p,R){if(t.toString.call(p)===o)t.extend(this.partials,p);else{if(typeof R>"u")throw new a.default('Attempting to register a partial called "'+p+'" as undefined');this.partials[p]=R}},unregisterPartial:function(p){delete this.partials[p]},registerDecorator:function(p,R){if(t.toString.call(p)===o){if(R)throw new a.default("Arg not supported with multiple decorators");t.extend(this.decorators,p)}else this.decorators[p]=R},unregisterDecorator:function(p){delete this.decorators[p]},resetLoggedPropertyAccesses:function(){P.resetLoggedProperties()}};var w=v.default.log;r.log=w,r.createFrame=t.createFrame,r.logger=v.default},function(u,r){"use strict";r.__esModule=!0,r.extend=a,r.indexOf=v,r.escapeExpression=P,r.isEmpty=H,r.createFrame=C,r.blockParams=E,r.appendContextPath=I;var e={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`","=":"="},n=/[&<>"'`=]/g,t=/[&<>"'`=]/;function f(o){return e[o]}function a(o){for(var g=1;g0?(a.ids&&(a.ids=[a.name]),t.helpers.each(f,a)):i(this);if(a.data&&a.ids){var h=n.createFrame(a.data);h.contextPath=n.appendContextPath(a.data.contextPath,a.name),a={data:h}}return l(f,a)})},u.exports=r.default},function(u,r,e){(function(n){"use strict";var t=e(12).default,f=e(2).default;r.__esModule=!0;var a=e(4),i=e(5),l=f(i);r.default=function(h){h.registerHelper("each",function(v,P){if(!P)throw new l.default("Must pass iterator to #each");var H=P.fn,C=P.inverse,E=0,I="",o=void 0,g=void 0;P.data&&P.ids&&(g=a.appendContextPath(P.data.contextPath,P.ids[0])+"."),a.isFunction(v)&&(v=v.call(this)),P.data&&(o=a.createFrame(P.data));function w(b,F,c){o&&(o.key=b,o.index=F,o.first=F===0,o.last=!!c,g&&(o.contextPath=g+b)),I=I+H(v[b],{data:o,blockParams:a.blockParams([v[b],b],[g+b,null])})}if(v&&typeof v=="object")if(a.isArray(v))for(var y=v.length;E=0?a=i:a=parseInt(a,10)}return a},log:function(a){if(a=t.lookupLevel(a),typeof console<"u"&&t.lookupLevel(t.level)<=a){var i=t.methodMap[a];console[i]||(i="log");for(var l=arguments.length,h=Array(l>1?l-1:0),v=1;v=P.LAST_COMPATIBLE_COMPILER_REVISION&&O<=P.COMPILER_REVISION))if(O
2 |
3 |
4 |
5 | credentials_obfuscation v3.4.0 — Documentation
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/doc/search.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | Search — credentials_obfuscation v3.4.0
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
38 |
39 |