slosilo 1.0.0 → 2.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: d243023c094f7eaec65752017e2550d57030d13a
4
- data.tar.gz: f99b144884f5f3bf351fe4190e06c99f076b961f
2
+ SHA256:
3
+ metadata.gz: 8723a6eff81a1e81b1e8f8a3b4998c202b4a36b042d2c3b33d830232f800e45e
4
+ data.tar.gz: 22abadf8b5edca4b2ad971be894e54a906e9b84f166098a95fbfa8cf8401a046
5
5
  SHA512:
6
- metadata.gz: 3b2b0a71040bedaf6e15da8c6fdf6bca34fec490fe41f8834c72ba170ab22cbe7bd8d1d1b93dcfd24855acbf4ad634aa342cdb0374d562277ac9d4df493c6e7a
7
- data.tar.gz: 8f4741e1f0f4a00cb0b466e6776445830efc11f66947cac7533fc2d65d0060a0116f7b0239c130ff3866e24e628323170bf684ee2285dc1020e21e2a36106663
6
+ metadata.gz: 937190eaf606924682f14850313aeedf6b852f7cc0e88669451d6b0d147fcd61a485d4089ccdce35bb188fc057a750c82f01bd43118da104735efc264386caa7
7
+ data.tar.gz: 6e3b22a70e85c036932bb15b309e45d28d4b9f2eeaa59cdd2aa9f3db5b580b9d23e3844eaf71a59667acc99706b55e2100d1e4a1f6f0b70bafae117459babff3
@@ -0,0 +1,2 @@
1
+ /Gemfile.lock
2
+ /spec/reports
@@ -0,0 +1,221 @@
1
+ title = "Secretless Broker gitleaks config"
2
+
3
+ # This is the config file for gitleaks. You can configure gitleaks what to search for and what to whitelist.
4
+ # If GITLEAKS_CONFIG environment variable
5
+ # is set, gitleaks will load configurations from that path. If option --config-path is set, gitleaks will load
6
+ # configurations from that path. Gitleaks does not whitelist anything by default.
7
+ # - https://www.ndss-symposium.org/wp-content/uploads/2019/02/ndss2019_04B-3_Meli_paper.pdf
8
+ # - https://github.com/dxa4481/truffleHogRegexes/blob/master/truffleHogRegexes/regexes.json
9
+ [[rules]]
10
+ description = "AWS Client ID"
11
+ regex = '''(A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}'''
12
+ tags = ["key", "AWS"]
13
+
14
+ [[rules]]
15
+ description = "AWS Secret Key"
16
+ regex = '''(?i)aws(.{0,20})?(?-i)['\"][0-9a-zA-Z\/+]{40}['\"]'''
17
+ tags = ["key", "AWS"]
18
+
19
+ [[rules]]
20
+ description = "AWS MWS key"
21
+ regex = '''amzn\.mws\.[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'''
22
+ tags = ["key", "AWS", "MWS"]
23
+
24
+ [[rules]]
25
+ description = "PKCS8"
26
+ regex = '''-----BEGIN PRIVATE KEY-----'''
27
+ tags = ["key", "PKCS8"]
28
+
29
+ [[rules]]
30
+ description = "RSA"
31
+ regex = '''-----BEGIN RSA PRIVATE KEY-----'''
32
+ tags = ["key", "RSA"]
33
+
34
+ [[rules]]
35
+ description = "SSH"
36
+ regex = '''-----BEGIN OPENSSH PRIVATE KEY-----'''
37
+ tags = ["key", "SSH"]
38
+
39
+ [[rules]]
40
+ description = "PGP"
41
+ regex = '''-----BEGIN PGP PRIVATE KEY BLOCK-----'''
42
+ tags = ["key", "PGP"]
43
+
44
+ [[rules]]
45
+ description = "Facebook Secret Key"
46
+ regex = '''(?i)(facebook|fb)(.{0,20})?(?-i)['\"][0-9a-f]{32}['\"]'''
47
+ tags = ["key", "Facebook"]
48
+
49
+ [[rules]]
50
+ description = "Facebook Client ID"
51
+ regex = '''(?i)(facebook|fb)(.{0,20})?['\"][0-9]{13,17}['\"]'''
52
+ tags = ["key", "Facebook"]
53
+
54
+ [[rules]]
55
+ description = "Facebook access token"
56
+ regex = '''EAACEdEose0cBA[0-9A-Za-z]+'''
57
+ tags = ["key", "Facebook"]
58
+
59
+ [[rules]]
60
+ description = "Twitter Secret Key"
61
+ regex = '''(?i)twitter(.{0,20})?['\"][0-9a-z]{35,44}['\"]'''
62
+ tags = ["key", "Twitter"]
63
+
64
+ [[rules]]
65
+ description = "Twitter Client ID"
66
+ regex = '''(?i)twitter(.{0,20})?['\"][0-9a-z]{18,25}['\"]'''
67
+ tags = ["client", "Twitter"]
68
+
69
+ [[rules]]
70
+ description = "Github"
71
+ regex = '''(?i)github(.{0,20})?(?-i)['\"][0-9a-zA-Z]{35,40}['\"]'''
72
+ tags = ["key", "Github"]
73
+
74
+ [[rules]]
75
+ description = "LinkedIn Client ID"
76
+ regex = '''(?i)linkedin(.{0,20})?(?-i)['\"][0-9a-z]{12}['\"]'''
77
+ tags = ["client", "Twitter"]
78
+
79
+ [[rules]]
80
+ description = "LinkedIn Secret Key"
81
+ regex = '''(?i)linkedin(.{0,20})?['\"][0-9a-z]{16}['\"]'''
82
+ tags = ["secret", "Twitter"]
83
+
84
+ [[rules]]
85
+ description = "Slack"
86
+ regex = '''xox[baprs]-([0-9a-zA-Z]{10,48})?'''
87
+ tags = ["key", "Slack"]
88
+
89
+ [[rules]]
90
+ description = "EC"
91
+ regex = '''-----BEGIN EC PRIVATE KEY-----'''
92
+ tags = ["key", "EC"]
93
+
94
+ [[rules]]
95
+ description = "Generic API key"
96
+ regex = '''(?i)(api_key|apikey)(.{0,20})?['|"][0-9a-zA-Z]{32,45}['|"]'''
97
+ tags = ["key", "API", "generic"]
98
+
99
+ [[rules]]
100
+ description = "Generic Secret"
101
+ regex = '''(?i)secret(.{0,20})?['|"][0-9a-zA-Z]{32,45}['|"]'''
102
+ tags = ["key", "Secret", "generic"]
103
+
104
+ [[rules]]
105
+ description = "Google API key"
106
+ regex = '''AIza[0-9A-Za-z\\-_]{35}'''
107
+ tags = ["key", "Google"]
108
+
109
+ [[rules]]
110
+ description = "Google Cloud Platform API key"
111
+ regex = '''(?i)(google|gcp|youtube|drive|yt)(.{0,20})?['\"][AIza[0-9a-z\\-_]{35}]['\"]'''
112
+ tags = ["key", "Google", "GCP"]
113
+
114
+ [[rules]]
115
+ description = "Google OAuth"
116
+ regex = '''(?i)(google|gcp|auth)(.{0,20})?['"][0-9]+-[0-9a-z_]{32}\.apps\.googleusercontent\.com['"]'''
117
+ tags = ["key", "Google", "OAuth"]
118
+
119
+ [[rules]]
120
+ description = "Google OAuth access token"
121
+ regex = '''ya29\.[0-9A-Za-z\-_]+'''
122
+ tags = ["key", "Google", "OAuth"]
123
+
124
+ [[rules]]
125
+ description = "Heroku API key"
126
+ regex = '''(?i)heroku(.{0,20})?['"][0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}['"]'''
127
+ tags = ["key", "Heroku"]
128
+
129
+ [[rules]]
130
+ description = "MailChimp API key"
131
+ regex = '''(?i)(mailchimp|mc)(.{0,20})?['"][0-9a-f]{32}-us[0-9]{1,2}['"]'''
132
+ tags = ["key", "Mailchimp"]
133
+
134
+ [[rules]]
135
+ description = "Mailgun API key"
136
+ regex = '''(?i)(mailgun|mg)(.{0,20})?['"][0-9a-z]{32}['"]'''
137
+ tags = ["key", "Mailgun"]
138
+
139
+ [[rules]]
140
+ description = "Password in URL"
141
+ regex = '''[a-zA-Z]{3,10}:\/\/[^\/\s:@]{3,20}:[^\/\s:@]{3,20}@.{1,100}\/?.?'''
142
+ tags = ["key", "URL", "generic"]
143
+
144
+ [[rules]]
145
+ description = "PayPal Braintree access token"
146
+ regex = '''access_token\$production\$[0-9a-z]{16}\$[0-9a-f]{32}'''
147
+ tags = ["key", "Paypal"]
148
+
149
+ [[rules]]
150
+ description = "Picatic API key"
151
+ regex = '''sk_live_[0-9a-z]{32}'''
152
+ tags = ["key", "Picatic"]
153
+
154
+ [[rules]]
155
+ description = "Slack Webhook"
156
+ regex = '''https://hooks.slack.com/services/T[a-zA-Z0-9_]{8}/B[a-zA-Z0-9_]{8}/[a-zA-Z0-9_]{24}'''
157
+ tags = ["key", "slack"]
158
+
159
+ [[rules]]
160
+ description = "Stripe API key"
161
+ regex = '''(?i)stripe(.{0,20})?['\"][sk|rk]_live_[0-9a-zA-Z]{24}'''
162
+ tags = ["key", "Stripe"]
163
+
164
+ [[rules]]
165
+ description = "Square access token"
166
+ regex = '''sq0atp-[0-9A-Za-z\-_]{22}'''
167
+ tags = ["key", "square"]
168
+
169
+ [[rules]]
170
+ description = "Square OAuth secret"
171
+ regex = '''sq0csp-[0-9A-Za-z\\-_]{43}'''
172
+ tags = ["key", "square"]
173
+
174
+ [[rules]]
175
+ description = "Twilio API key"
176
+ regex = '''(?i)twilio(.{0,20})?['\"][0-9a-f]{32}['\"]'''
177
+ tags = ["key", "twilio"]
178
+
179
+ [whitelist]
180
+ files = [
181
+ "(.*?)(jpg|gif|doc|pdf|bin)$",
182
+ ".gitleaks.toml"
183
+ ]
184
+ regexes = [
185
+ ]
186
+ commits = [
187
+ "3a496cef2d737f69038630f3c884a159f783bd06", # old commit to add test data
188
+ "047e58e40c87f9d19d68c21a533b706616ab1ef2", # old commit to add test data
189
+ "5345e49e7d63589fc637c2b0c7156bf97e9c72b8", # old commit to add test data
190
+ "9c31229cedceedd75e06c381fe7218571a03c26d" # old commit to add test data
191
+ ]
192
+
193
+ # Additional Examples
194
+
195
+ # [[rules]]
196
+ # description = "Generic Key"
197
+ # regex = '''(?i)key(.{0,6})?(:|=|=>|:=)'''
198
+ # entropies = [
199
+ # "4.1-4.3",
200
+ # "5.5-6.3",
201
+ # ]
202
+ # entropyROI = "line"
203
+ # filetypes = [".go", ".py", ".c"]
204
+ # tags = ["key"]
205
+ # severity = "8"
206
+ #
207
+ #
208
+ # [[rules]]
209
+ # description = "Generic Key"
210
+ # regex = '''(?i)key(.{0,6})?(:|=|=>|:=)'''
211
+ # entropies = ["4.1-4.3"]
212
+ # filetypes = [".gee"]
213
+ # entropyROI = "line"
214
+ # tags = ["key"]
215
+ # severity = "medium"
216
+
217
+ # [[rules]]
218
+ # description = "Any pem file"
219
+ # filetypes = [".key"]
220
+ # tags = ["pem"]
221
+ # severity = "high"
@@ -0,0 +1,11 @@
1
+ # v2.2.1
2
+
3
+ * Use SHA256 algorithm instead of MD5 for public key fingerprints.
4
+
5
+ # v2.1.1
6
+
7
+ * Add support for JWT-formatted tokens, with arbitrary expiration.
8
+
9
+ # v2.0.1
10
+
11
+ * Fixes a bug that occurs when signing tokens containing Unicode data
@@ -0,0 +1,16 @@
1
+ # Contributing
2
+
3
+ For general contribution and community guidelines, please see the [community repo](https://github.com/cyberark/community).
4
+
5
+ ## Contributing Workflow
6
+
7
+ 1. [Fork the project](https://help.github.com/en/github/getting-started-with-github/fork-a-repo)
8
+ 2. [Clone your fork](https://help.github.com/en/github/creating-cloning-and-archiving-repositories/cloning-a-repository)
9
+ 3. Make local changes to your fork by editing files
10
+ 3. [Commit your changes](https://help.github.com/en/github/managing-files-in-a-repository/adding-a-file-to-a-repository-using-the-command-line)
11
+ 4. [Push your local changes to the remote server](https://help.github.com/en/github/using-git/pushing-commits-to-a-remote-repository)
12
+ 5. [Create new Pull Request](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request-from-a-fork)
13
+
14
+ From here your pull request will be reviewed and once you've responded to all
15
+ feedback it will be merged into the project. Congratulations, you're a
16
+ contributor!
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env groovy
2
+
3
+ pipeline {
4
+ agent { label 'executor-v2' }
5
+
6
+ options {
7
+ timestamps()
8
+ buildDiscarder(logRotator(daysToKeepStr: '30'))
9
+ }
10
+
11
+ stages {
12
+ stage('Test') {
13
+ steps {
14
+ sh './test.sh'
15
+
16
+ junit 'spec/reports/*.xml'
17
+ }
18
+ }
19
+
20
+ stage('Publish to RubyGems') {
21
+ agent { label 'releaser-v2' }
22
+ when {
23
+ allOf {
24
+ branch 'master'
25
+ expression {
26
+ boolean publish = false
27
+
28
+ try {
29
+ timeout(time: 5, unit: 'MINUTES') {
30
+ input(message: 'Publish to RubyGems?')
31
+ publish = true
32
+ }
33
+ } catch (final ignore) {
34
+ publish = false
35
+ }
36
+
37
+ return publish
38
+ }
39
+ }
40
+ }
41
+
42
+ steps {
43
+ checkout scm
44
+ sh './publish-rubygem.sh'
45
+ deleteDir()
46
+ }
47
+ }
48
+ }
49
+
50
+ post {
51
+ always {
52
+ cleanupAndNotify(currentBuild.currentResult)
53
+ }
54
+ }
55
+ }
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2012 Conjur Inc
1
+ Copyright (c) 2020 CyberArk Software Ltd. All rights reserved.
2
2
 
3
3
  MIT License
4
4
 
@@ -19,4 +19,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
19
  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
20
  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
21
  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -1,7 +1,11 @@
1
1
  # Slosilo
2
2
 
3
- Slosilo is a keystore in the database. (Currently only works with postgres.)
4
- It allows easy storage and retrieval of keys.
3
+ Slosilo is providing a ruby interface to some cryptographic primitives:
4
+ - symmetric encryption,
5
+ - a mixin for easy encryption of object attributes,
6
+ - asymmetric encryption and signing,
7
+ - a keystore in a postgres sequel db -- it allows easy storage and retrieval of keys,
8
+ - a keystore in files.
5
9
 
6
10
  ## Installation
7
11
 
@@ -13,6 +17,118 @@ And then execute:
13
17
 
14
18
  $ bundle
15
19
 
20
+ ## Compatibility
21
+
22
+ Version 2.0 introduced new symmetric encryption scheme using AES-256-GCM
23
+ for authenticated encryption. It allows you to provide AAD on all symmetric
24
+ encryption primitives. It's also **NOT COMPATIBLE** with CBC used in version <2.
25
+
26
+ This means you'll have to migrate all your existing data. There's no easy way to
27
+ do this currently provided; it's recommended to create a database migration and
28
+ put relevant code fragments in it directly. (This will also have the benefit of making
29
+ the migration self-contained.)
30
+
31
+ Since symmetric encryption is used in processing asymetrically encrypted messages,
32
+ this incompatibility extends to those too.
33
+
34
+ ## Usage
35
+
36
+ ### Symmetric encryption
37
+
38
+ ```ruby
39
+ sym = Slosilo::Symmetric.new
40
+ key = sym.random_key
41
+ # additional authenticated data
42
+ message_id = "message 001"
43
+ ciphertext = sym.encrypt "secret message", key: key, aad: message_id
44
+ ```
45
+
46
+ ```ruby
47
+ sym = Slosilo::Symmetric.new
48
+ message = sym.decrypt ciphertext, key: key, aad: message_id
49
+ ```
50
+
51
+ ### Encryption mixin
52
+
53
+ ```ruby
54
+ require 'slosilo'
55
+
56
+ class Foo
57
+ attr_accessor :foo
58
+ attr_encrypted :foo, aad: :id
59
+
60
+ def raw_foo
61
+ @foo
62
+ end
63
+
64
+ def id
65
+ "unique record id"
66
+ end
67
+ end
68
+
69
+ Slosilo::encryption_key = Slosilo::Symmetric.new.random_key
70
+
71
+ obj = Foo.new
72
+ obj.foo = "bar"
73
+ obj.raw_foo # => "\xC4\xEF\x87\xD3b\xEA\x12\xDF\xD0\xD4hk\xEDJ\v\x1Cr\xF2#\xA3\x11\xA4*k\xB7\x8F\x8F\xC2\xBD\xBB\xFF\xE3"
74
+ obj.foo # => "bar"
75
+ ```
76
+
77
+ You can safely use it in ie. ActiveRecord::Base or Sequel::Model subclasses.
78
+
79
+ ### Asymmetric encryption and signing
80
+
81
+ ```ruby
82
+ private_key = Slosilo::Key.new
83
+ public_key = private_key.public
84
+ ```
85
+
86
+ #### Key dumping
87
+ ```ruby
88
+ k = public_key.to_s # => "-----BEGIN PUBLIC KEY----- ...
89
+ (Slosilo::Key.new k) == public_key # => true
90
+ ```
91
+
92
+ #### Encryption
93
+
94
+ ```ruby
95
+ encrypted = public_key.encrypt_message "eagle one sees many clouds"
96
+ # => "\xA3\x1A\xD2\xFC\xB0 ...
97
+
98
+ public_key.decrypt_message encrypted
99
+ # => OpenSSL::PKey::RSAError: private key needed.
100
+
101
+ private_key.decrypt_message encrypted
102
+ # => "eagle one sees many clouds"
103
+ ```
104
+
105
+ #### Signing
106
+
107
+ ```ruby
108
+ token = private_key.signed_token "missile launch not authorized"
109
+ # => {"data"=>"missile launch not authorized", "timestamp"=>"2014-10-13 12:41:25 UTC", "signature"=>"bSImk...DzV3o", "key"=>"455f7ac42d2d483f750b4c380761821d"}
110
+
111
+ public_key.token_valid? token # => true
112
+
113
+ token["data"] = "missile launch authorized"
114
+ public_key.token_valid? token # => false
115
+ ```
116
+
117
+ ### Keystore
118
+
119
+ ```ruby
120
+ Slosilo::encryption_key = ENV['SLOSILO_KEY']
121
+ Slosilo.adapter = Slosilo::Adapters::FileAdapter.new "~/.keys"
122
+
123
+ Slosilo[:own] = Slosilo::Key.new
124
+ Slosilo[:their] = Slosilo::Key.new File.read("foo.pem")
125
+
126
+ msg = Slosilo[:their].encrypt_message 'bar'
127
+ p Slosilo[:own].signed_token msg
128
+ ```
129
+
130
+ ### Keystore in database
131
+
16
132
  Add a migration to create the necessary table:
17
133
 
18
134
  require 'slosilo/adapters/sequel_adapter/migration'
@@ -21,12 +137,13 @@ Remember to migrate your database
21
137
 
22
138
  $ rake db:migrate
23
139
 
24
- ## Usage
140
+ Then
141
+ ```ruby
142
+ Slosilo.adapter = Slosilo::Adapters::SequelAdapter.new
143
+ ```
25
144
 
26
145
  ## Contributing
27
146
 
28
- 1. Fork it
29
- 2. Create your feature branch (`git checkout -b my-new-feature`)
30
- 3. Commit your changes (`git commit -am 'Added some feature'`)
31
- 4. Push to the branch (`git push origin my-new-feature`)
32
- 5. Create new Pull Request
147
+ We welcome contributions of all kinds to this repository. For instructions on
148
+ how to get started and descriptions of our development workflows, please see our
149
+ [contributing guide](CONTRIBUTING.md).