Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pull sloislo library to conjur #2832

Merged
merged 2 commits into from
Jun 21, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,14 @@ coverage
demo
dev
docker
gems/slosilo/Gemfile.lock
gems/slosilo/spec/reports
log
package
run
spec/reports
spec/reports-audit

tmp

# Ignore directories that are only relevant in gh
Expand Down
20 changes: 20 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -73,4 +73,24 @@ conjur_git_commit
# AuthnOIDC V2 w/ Identity setup
dev/policies/authenticators/authn-oidc/identity-users.yml

gem/slosilo/*.gem
gem/slosilo/*.rbc
gem/slosilo/.bundle
gem/slosilo/.yardoc
gem/slosilo/InstalledFiles
gem/slosilo/_yardoc
gem/slosilo/coverage
gem/slosilo/doc/
gem/slosilo/lib/bundler/man
gem/slosilo/pkg
gem/slosilo/rdoc
gem/slosilo/spec/reports
gem/slosilo/test/tmp
gem/slosilo/test/version_tmp
gem/slosilo/tmp
gem/slosilo/.rvmrc
gem/slosilo/.project
gem/slosilo/.kateproject.d
gem/slosilo/.idea

VERSION
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
- Nothing should go in this section, please add to the latest unreleased version
(and update the corresponding date), or add a new version.

## [1.0.1-cloud] - 2023-06-08
## [1.0.1-cloud] - 2023-06-21
### Changed
- Improve DB connection usage https://ca-il-jira.il.cyber-ark.com:8443/browse/ONYX-34591
- Pull Slosilo library to Conjur

## [1.0.0-cloud] - 2023-06-07
### Changed
Expand Down
2 changes: 1 addition & 1 deletion Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ gem 'bcrypt'
gem 'gli', require: false
gem 'listen'
gem 'rexml', '~> 3.2'
gem 'slosilo', '~> 3.0'
gem 'slosilo', path: 'gems/slosilo'

# Explicitly required as there are vulnerabilities in older versions
gem "ffi", ">= 1.9.24"
Expand Down
8 changes: 6 additions & 2 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@ PATH
activesupport (>= 4.2)
safe_yaml

PATH
remote: gems/slosilo
specs:
slosilo (3.0.1)

GEM
remote: https://rubygems.org/
specs:
Expand Down Expand Up @@ -440,7 +445,6 @@ GEM
simplecov_json_formatter (~> 0.1)
simplecov-html (0.12.3)
simplecov_json_formatter (0.1.4)
slosilo (3.0.1)
spring (2.1.0)
spring-commands-cucumber (1.0.1)
spring (>= 0.9.1)
Expand Down Expand Up @@ -561,7 +565,7 @@ DEPENDENCIES
sequel-postgres-schemata
sequel-rails
simplecov
slosilo (~> 3.0)
slosilo!
spring
spring-commands-cucumber
spring-commands-rspec
Expand Down
8 changes: 8 additions & 0 deletions Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,7 @@ pipeline {
spec/reports/*.xml,
spec/reports-audit/*.xml,
gems/conjur-rack/spec/reports/*.xml,
gems/slosilo/spec/reports/*.xml,
cucumber/*/features/reports/**/*.xml
'''
)
Expand Down Expand Up @@ -578,10 +579,12 @@ pipeline {
spec/reports/*.xml,
spec/reports-audit/*.xml,
gems/conjur-rack/spec/reports/*.xml,
gems/slosilo/spec/reports/*.xml
cucumber/*/features/reports/**/*.xml,
ee-test/spec/reports/*.xml,
ee-test/spec/reports-audit/*.xml,
ee-test/gems/conjur-rack/spec/reports/*.xml,
ee-test/gems/slosilo/spec/reports/*.xml,
ee-test/cucumber/*/features/reports/**/*.xml
'''
)
Expand Down Expand Up @@ -702,6 +705,11 @@ def runConjurTests(run_only_str) {
"Rack - ${env.STAGE_NAME}": {
sh 'cd gems/conjur-rack && ./test.sh'
}
],
"slosilo": [
"Slosilo - ${env.STAGE_NAME}": {
sh 'cd gems/slosilo && ./test.sh'
}
]
]

Expand Down
4 changes: 4 additions & 0 deletions gems/slosilo/.kateproject
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"name": "Slosilo"
, "files": [ { "git": 1 } ]
}
25 changes: 25 additions & 0 deletions gems/slosilo/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# v3.0.1

* The symmetric cipher class now encrypts and decrypts in a thread-safe manner.
[cyberark/slosilo#31](https://github.com/cyberark/slosilo/pull/31)

# v3.0.0

* Transition to Ruby 3. Consuming projects based on Ruby 2 shall use slosilo V2.X.X.

# v2.2.2

* Add rake task `slosilo:recalculate_fingerprints` which rehashes the fingerprints in the keystore.
**Note**: After migrating the slosilo keystore, run the above rake task to ensure the fingerprints are correctly hashed.

# v2.2.1

* Use SHA256 algorithm instead of MD5 for public key fingerprints.

# v2.1.1

* Add support for JWT-formatted tokens, with arbitrary expiration.

# v2.0.1

* Fixes a bug that occurs when signing tokens containing Unicode data
16 changes: 16 additions & 0 deletions gems/slosilo/CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Contributing

For general contribution and community guidelines, please see the [community repo](https://github.com/cyberark/community).

## Contributing Workflow

1. [Fork the project](https://help.github.com/en/github/getting-started-with-github/fork-a-repo)
2. [Clone your fork](https://help.github.com/en/github/creating-cloning-and-archiving-repositories/cloning-a-repository)
3. Make local changes to your fork by editing files
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)
4. [Push your local changes to the remote server](https://help.github.com/en/github/using-git/pushing-commits-to-a-remote-repository)
5. [Create new Pull Request](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request-from-a-fork)

From here your pull request will be reviewed and once you've responded to all
feedback it will be merged into the project. Congratulations, you're a
contributor!
4 changes: 4 additions & 0 deletions gems/slosilo/Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
source 'https://rubygems.org'

# Specify your gem's dependencies in slosilo.gemspec
gemspec
22 changes: 22 additions & 0 deletions gems/slosilo/LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
Copyright (c) 2020 CyberArk Software Ltd. All rights reserved.

MIT License

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
152 changes: 152 additions & 0 deletions gems/slosilo/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
# Slosilo

Slosilo is providing a ruby interface to some cryptographic primitives:
- symmetric encryption,
- a mixin for easy encryption of object attributes,
- asymmetric encryption and signing,
- a keystore in a postgres sequel db -- it allows easy storage and retrieval of keys,
- a keystore in files.

## Installation

Add this line to your application's Gemfile:

gem 'slosilo'

And then execute:

$ bundle

## Compatibility

Version 3.0 introduced full transition to Ruby 3.
Consumers who use slosilo in Ruby 2 projects, shall use slosilo V2.X.X.

Version 2.0 introduced new symmetric encryption scheme using AES-256-GCM
for authenticated encryption. It allows you to provide AAD on all symmetric
encryption primitives. It's also **NOT COMPATIBLE** with CBC used in version <2.

This means you'll have to migrate all your existing data. There's no easy way to
do this currently provided; it's recommended to create a database migration and
put relevant code fragments in it directly. (This will also have the benefit of making
the migration self-contained.)

Since symmetric encryption is used in processing asymetrically encrypted messages,
this incompatibility extends to those too.

## Usage

### Symmetric encryption

```ruby
sym = Slosilo::Symmetric.new
key = sym.random_key
# additional authenticated data
message_id = "message 001"
ciphertext = sym.encrypt "secret message", key: key, aad: message_id
```

```ruby
sym = Slosilo::Symmetric.new
message = sym.decrypt ciphertext, key: key, aad: message_id
```

### Encryption mixin

```ruby
require 'slosilo'

class Foo
attr_accessor :foo
attr_encrypted :foo, aad: :id

def raw_foo
@foo
end

def id
"unique record id"
end
end

Slosilo::encryption_key = Slosilo::Symmetric.new.random_key

obj = Foo.new
obj.foo = "bar"
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"
obj.foo # => "bar"
```

You can safely use it in ie. ActiveRecord::Base or Sequel::Model subclasses.

### Asymmetric encryption and signing

```ruby
private_key = Slosilo::Key.new
public_key = private_key.public
```

#### Key dumping
```ruby
k = public_key.to_s # => "-----BEGIN PUBLIC KEY----- ...
(Slosilo::Key.new k) == public_key # => true
```

#### Encryption

```ruby
encrypted = public_key.encrypt_message "eagle one sees many clouds"
# => "\xA3\x1A\xD2\xFC\xB0 ...

public_key.decrypt_message encrypted
# => OpenSSL::PKey::RSAError: private key needed.

private_key.decrypt_message encrypted
# => "eagle one sees many clouds"
```

#### Signing

```ruby
token = private_key.signed_token "missile launch not authorized"
# => {"data"=>"missile launch not authorized", "timestamp"=>"2014-10-13 12:41:25 UTC", "signature"=>"bSImk...DzV3o", "key"=>"455f7ac42d2d483f750b4c380761821d"}

public_key.token_valid? token # => true

token["data"] = "missile launch authorized"
public_key.token_valid? token # => false
```

### Keystore

```ruby
Slosilo::encryption_key = ENV['SLOSILO_KEY']
Slosilo.adapter = Slosilo::Adapters::FileAdapter.new "~/.keys"

Slosilo[:own] = Slosilo::Key.new
Slosilo[:their] = Slosilo::Key.new File.read("foo.pem")

msg = Slosilo[:their].encrypt_message 'bar'
p Slosilo[:own].signed_token msg
```

### Keystore in database

Add a migration to create the necessary table:

require 'slosilo/adapters/sequel_adapter/migration'

Remember to migrate your database

$ rake db:migrate

Then
```ruby
Slosilo.adapter = Slosilo::Adapters::SequelAdapter.new
```

## Contributing

We welcome contributions of all kinds to this repository. For instructions on
how to get started and descriptions of our development workflows, please see our
[contributing guide](CONTRIBUTING.md).
17 changes: 17 additions & 0 deletions gems/slosilo/Rakefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/usr/bin/env rake
require "bundler/gem_tasks"

begin
require 'rspec/core/rake_task'
RSpec::Core::RakeTask.new(:spec)
rescue LoadError
$stderr.puts "RSpec Rake tasks not available in environment #{ENV['RACK_ENV']}"
end

task :jenkins do
require 'ci/reporter/rake/rspec'
Rake::Task["ci:setup:rspec"].invoke
Rake::Task["spec"].invoke
end

task :default => :spec
Loading