Code Monkey home page Code Monkey logo

rbnacl-libsodium's Introduction

RbNaCl::Libsodium

Gem Version Build Status MIT licensed Gitter Chat Maintained: no

DISCONTINUED

THIS GEM HAS OFFICIALLY BEEN DISCONTINUED.

Please use your operating system's package manager to install libsodium when using RbNaCl. For more information, see:

https://github.com/crypto-rb/rbnacl/wiki/Installing-libsodium

About

RbNaCl is a Ruby wrapper for libsodium, a portable version of the Networking and Cryptography library (NaCl) created by Daniel J. Bernstein.

tl;dr: it's one of the best crypto libraries around.

rbnacl-libsodium packages the libsodium library as a Ruby Gem so you don't have to worry about installing it through system packages. It builds just like a native extension, but since RbNaCl is implemented with FFI, works on JRuby too!

Help and Discussion

Have questions? Want to suggest a feature or change? Join a discussion group:

Installation

Add this line to your application's Gemfile:

gem 'rbnacl-libsodium'

And then execute:

$ bundle

Or install it yourself as:

$ gem install rbnacl-libsodium

Usage

require 'rbnacl/libsodium'

will tweak search path allowing rbnacl to find bundled libsodium

License

Copyright (c) 2012-2018 Tony Arcieri, Distributed under the MIT License. See LICENSE for further details.

rbnacl-libsodium's People

Contributors

frenkel avatar keruspe avatar kron4eg avatar mjio avatar nijikon avatar shirosaki avatar tarcieri avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

rbnacl-libsodium's Issues

prebuilt binaries for windows

We'd plan to use rbnacl in next version of net-ssh, to support some of the new features of openssh like ed25519 keys.

Since the user base of tools using of net-ssh is so big (capistrano, chef), i expect that compiling libsodium from source will be an issue on the windows platform. I've just tried to run windows-based ci, and they were failing the build:
https://ci.appveyor.com/project/mfazekas/net-ssh/build/job/9tcu1ye38e77416f

Would you consider precompiling windows binaries? For bcrypt_pbkdf-ruby i'm using rake compiler dock to cross build the binaries. Is this something you'd consider doing?

Bundler fails to find load libsodium.so in Docker

My GitLab CI constantly fails on the rspec stage. GitLab CI uses Docker on each stage of the build process.

$ bundle exec rake db:create
rake aborted!
LoadError: Could not open library 'sodium': sodium: cannot open shared object file: No such file or directory.
Could not open library 'libsodium.so': libsodium.so: cannot open shared object file: No such file or directory
/usr/local/bundle/gems/ffi-1.9.18/lib/ffi/library.rb:147:in `block in ffi_lib'
/usr/local/bundle/gems/ffi-1.9.18/lib/ffi/library.rb:100:in `map'
/usr/local/bundle/gems/ffi-1.9.18/lib/ffi/library.rb:100:in `ffi_lib'
/usr/local/bundle/gems/rbnacl-4.0.2/lib/rbnacl/sodium.rb:14:in `extended'
/usr/local/bundle/gems/rbnacl-4.0.2/lib/rbnacl/sodium/version.rb:13:in `extend'
/usr/local/bundle/gems/rbnacl-4.0.2/lib/rbnacl/sodium/version.rb:13:in `<module:Version>'
/usr/local/bundle/gems/rbnacl-4.0.2/lib/rbnacl/sodium/version.rb:9:in `<module:Sodium>'
/usr/local/bundle/gems/rbnacl-4.0.2/lib/rbnacl/sodium/version.rb:7:in `<module:RbNaCl>'
/usr/local/bundle/gems/rbnacl-4.0.2/lib/rbnacl/sodium/version.rb:6:in `<top (required)>'
/usr/local/bundle/gems/rbnacl-4.0.2/lib/rbnacl.rb:6:in `require'
/usr/local/bundle/gems/rbnacl-4.0.2/lib/rbnacl.rb:6:in `<top (required)>'
/builds/project-0/config/application.rb:9:in `<top (required)>'
/builds/project-0/Rakefile:6:in `require_relative'
/builds/project-0/Rakefile:6:in `<top (required)>'
/usr/local/bundle/gems/rake-12.0.0/exe/rake:27:in `<top (required)>'
/usr/local/bundle/bin/bundle:22:in `load'
/usr/local/bundle/bin/bundle:22:in `<main>'
(See full trace by running task with --trace)

My .gitlab-ci.yml

image: "ruby:2.3"

services:
  - postgres:9.6-alpine

variables:
  POSTGRES_USER: mobill
  POSTGRES_PASSWORD: mobill

before_script:
  - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client libsodium18 -y )'
  - eval $(ssh-agent -s)
  - echo "${SSH_PRIVATE_KEY_BASE64}" |  tr -d ' ' | base64 --decode | ssh-add -
  - mkdir -p ~/.ssh
  - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
  - gem install --no-document bundler
  - bundle install

rubocop:
  stage: test
  script:
    - bundle exec rubocop

rspec:
  stage: test
  script:
    - bundle exec rake db:create
    - bundle exec rake db:migrate
    - bundle exec rake spec

staging:
  stage: deploy
  environment: staging
  only:
    - master
  script:
    - bundle exec cap production deploy

Gemfile

# frozen_string_literal: true

source 'https://rubygems.org'

gem 'rails'
gem 'puma'
gem 'multi_json'
gem 'pg'
gem 'hamlit-rails'
gem 'turbolinks', '~> 5'
gem 'decent_exposure', '3.0.0'
gem 'jquery-rails'
gem 'uglifier'
gem 'therubyracer'
gem 'sidekiq'
group :development do
  gem "rbnacl"
  gem "rbnacl-libsodium"
  gem "bcrypt_pbkdf"
  gem 'capistrano', '~> 3.7', require: false
  gem 'capistrano-rails', '~> 1.2', require: false
  gem 'capistrano-rbenv', '~> 2.1'
  gem 'capistrano-bundler', require: false
  gem 'capistrano3-puma', require: false
  gem 'web-console', '~> 2.0'
  gem 'better_errors'
  gem 'binding_of_caller'
  gem 'letter_opener'
  gem 'bundler-audit'
end

group :development, :test do
  gem 'pry'
  gem 'byebug'
  gem 'pry-byebug'
  gem 'pry-rails'
  gem 'factory_girl_rails'
  gem 'rubocop', require: false
  gem 'spring'
  gem 'spring-watcher-listen'
  gem 'rails-controller-testing'
  gem 'rspec-rails'
  gem 'shoulda-matchers'
  gem 'listen'
  gem 'bullet'
end

What am I doing wrong?

Deprecate this gem?

When I originally created RbNaCl back in 2012, it was hard to find native OS packages for libsodium, and so the "rbnacl-libsodium" gem was created as a convenience.

Unfortunately, it has grown into something of a maintenance nightmare for me. It's the equivalent work of trying to package libsodium for every OS, duplicating the efforts of the native OS packages, and becoming something of a jenga tower where fixing an issue for e.g. Windows breaks installation on certain Linux distros.

The way the gem works is something of an abuse of Ruby's native extension mechanism: it builds a fake extension using extconf.rb, but doesn't actually build it (so it can work on JRuby).

In the 6 years that have passed since I created RbNaCl, the OS packaging situation has changed: packages for libsodium are now readily available for all major operating systems.

Given how much of my time rbnacl-libsodium has taken up, how frustrating it's been (especially when I don't even personally use it anymore), and how much it duplicates OS packaging efforts, I'd really like to wash my hands of the entire thing. I am very, very tired of trying to maintain this thing and really just want it out of my life.

My deprecation plan would look something like:

  • Release RbNaCl 6.0 which only works with libsodium installed as an OS package
  • Attempting to use rbnacl-libsodium with RbNaCl 6.0+ would raise an exception
  • Previous releases of RbNaCl and rbnacl-libsodium would continue to work, but print a deprecation warning

If someone is extremely committed to maintaining this gem, you can try to convince me to take over ownership. That said, I don't want to hand it over as-is to someone who wants to be a mere maintainer: if you want the rbnacl-libsodium name and upstream support in RbNaCl, the first thing you'd need to do to convince me you're serious is do the rewrite of this gem I have neither time nor interest to do. If I find it acceptable, I might consider transferring ownership of the gem name and continue upstream support in RbNaCl (some work would be needed there too).

Barring that, I plan on moving forward with the deprecation plan.

update libsodium 1.0.11 -> 1.0.13

libsodium 1.0.11 does not compile on Uberspace servers (CentOS 6, gcc 5), going to libsodium 1.0.13 (current release) does compile (I tested it with toast).

Is it possible to upgrade the libsodium backend to 1.0.13?

The gem fails

In one of out PRs we've bumped the gem from version 1.0.11 to 1.0.13 and all our CIs failed with this trace:

LoadError: Could not open library 'sodium': sodium: cannot open shared object file: No such file or directory.
Could not open library 'libsodium.so': libsodium.so: cannot open shared object file: No such file or directory
/home/travis/build/heroku/api/vendor/bundle/ruby/2.4.0/gems/ffi-1.9.18/lib/ffi/library.rb:147:in `block in ffi_lib'
/home/travis/build/heroku/api/vendor/bundle/ruby/2.4.0/gems/ffi-1.9.18/lib/ffi/library.rb:100:in `map'
/home/travis/build/heroku/api/vendor/bundle/ruby/2.4.0/gems/ffi-1.9.18/lib/ffi/library.rb:100:in `ffi_lib'
/home/travis/build/heroku/api/vendor/bundle/ruby/2.4.0/gems/rbnacl-3.4.0/lib/rbnacl/sodium.rb:12:in `extended'
/home/travis/build/heroku/api/vendor/bundle/ruby/2.4.0/gems/rbnacl-3.4.0/lib/rbnacl/sodium/version.rb:9:in `extend'
/home/travis/build/heroku/api/vendor/bundle/ruby/2.4.0/gems/rbnacl-3.4.0/lib/rbnacl/sodium/version.rb:9:in `<module:Version>'
/home/travis/build/heroku/api/vendor/bundle/ruby/2.4.0/gems/rbnacl-3.4.0/lib/rbnacl/sodium/version.rb:6:in `<module:Sodium>'
/home/travis/build/heroku/api/vendor/bundle/ruby/2.4.0/gems/rbnacl-3.4.0/lib/rbnacl/sodium/version.rb:4:in `<module:RbNaCl>'
/home/travis/build/heroku/api/vendor/bundle/ruby/2.4.0/gems/rbnacl-3.4.0/lib/rbnacl/sodium/version.rb:3:in `<top (required)>'
/home/travis/build/heroku/api/vendor/bundle/ruby/2.4.0/gems/backports-3.8.0/lib/backports/std_lib.rb:9:in `require'
/home/travis/build/heroku/api/vendor/bundle/ruby/2.4.0/gems/backports-3.8.0/lib/backports/std_lib.rb:9:in `require_with_backports'
/home/travis/build/heroku/api/vendor/bundle/ruby/2.4.0/gems/rbnacl-3.4.0/lib/rbnacl.rb:4:in `<top (required)>'

Let me know if there's anything else I can provide to help debugging this.

master branch cannot build

v1.0.16 works correctly; but the output target doesn't match any vendor folders

System
ruby 2.3.3 rvm on OSX 10.13

Using rbnacl-libsodium 1.0.16 from ssh://[email protected]/crypto-rb/rbnacl-libsodium.git (at master@c1ee4d6)
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /Users/myusername/.rvm/gems/ruby-2.3.3@my-project/bundler/gems/rbnacl-libsodium-c1ee4d621b2e/ext/rbnacl
/Users/myusername/.rvm/rubies/ruby-2.3.3/bin/ruby -r ./siteconf20181102-67077-1gap4st.rb extconf.rb
 -- sh -c "./configure --prefix=/Users/myusername/.rvm/gems/ruby-2.3.3@my-project/bundler/gems/rbnacl-libsodium-c1ee4d621b2e/vendor/libsodium/dist "
sh: ./configure: No such file or directory
extconf.rb:8:in `sys': ERROR: 'sh -c "./configure --prefix=/Users/myusername/.rvm/gems/ruby-2.3.3@my-project/bundler/gems/rbnacl-libsodium-c1ee4d621b2e/vendor/libsodium/dist "' failed (RuntimeError)
	from extconf.rb:36:in `block in <main>'
	from extconf.rb:34:in `chdir'
	from extconf.rb:34:in `<main>'

extconf failed, exit code 1

Gem files will remain installed in /Users/myusername/.rvm/gems/ruby-2.3.3@my-project/bundler/gems/rbnacl-libsodium-c1ee4d621b2e for inspection.
Results logged to /Users/myusername/.rvm/gems/ruby-2.3.3@my-project/bundler/gems/extensions/x86_64-darwin-16/2.3.0/rbnacl-libsodium-c1ee4d621b2e/gem_make.out

An error occurred while installing rbnacl-libsodium (1.0.16), and Bundler cannot continue.

In Gemfile:
  rbnacl-libsodium

segfault on Linux Mint

Hi, I am getting a segfault upon start of a Rails app:

$ rake -T
/home/jablan/.rvm/gems/ruby-2.4.2/gems/rbnacl-4.0.2/lib/rbnacl/sodium.rb:42: [BUG] Segmentation fault at 0x0000000000000000
ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-linux]

-- Control frame information -----------------------------------------------
c:0041 p:---- s:0208 e:000207 CFUNC  :crypto_box_curve25519xsalsa20poly1305_beforenm
c:0040 p:0012 s:0201 e:000200 METHOD /home/jablan/.rvm/gems/ruby-2.4.2/gems/rbnacl-4.0.2/lib/rbnacl/sodium.rb:42
c:0039 p:0062 s:0195 e:000194 METHOD /home/jablan/.rvm/gems/ruby-2.4.2/gems/rbnacl-4.0.2/lib/rbnacl/boxes/curve25519xsalsa20poly1305.rb:185
c:0038 p:0086 s:0189 e:000183 METHOD /home/jablan/.rvm/gems/ruby-2.4.2/gems/rbnacl-4.0.2/lib/rbnacl/boxes/curve25519xsalsa20poly1305.rb:126
c:0037 p:0043 s:0175 e:000174 METHOD /home/jablan/.rvm/gems/ruby-2.4.2/gems/rbnacl-4.0.2/lib/rbnacl/self_test.rb:36
c:0036 p:0074 s:0165 e:000164 METHOD /home/jablan/.rvm/gems/ruby-2.4.2/gems/rbnacl-4.0.2/lib/rbnacl/self_test.rb:23
c:0035 p:0042 s:0158 e:000157 TOP    /home/jablan/.rvm/gems/ruby-2.4.2/gems/rbnacl-4.0.2/lib/rbnacl/self_test.rb:114 [FINISH]
c:0034 p:---- s:0154 e:000153 CFUNC  :require
c:0033 p:0012 s:0149 e:000148 BLOCK  /home/jablan/.rvm/gems/ruby-2.4.2/gems/activesupport-5.1.3/lib/active_support/dependencies.rb:292
c:0032 p:0057 s:0146 e:000145 METHOD /home/jablan/.rvm/gems/ruby-2.4.2/gems/activesupport-5.1.3/lib/active_support/dependencies.rb:258
c:0031 p:0017 s:0140 e:000139 METHOD /home/jablan/.rvm/gems/ruby-2.4.2/gems/activesupport-5.1.3/lib/active_support/dependencies.rb:292
c:0030 p:0162 s:0134 e:000133 TOP    /home/jablan/.rvm/gems/ruby-2.4.2/gems/rbnacl-4.0.2/lib/rbnacl.rb:102 [FINISH]
c:0029 p:---- s:0131 e:000130 CFUNC  :require
c:0028 p:0012 s:0126 e:000125 BLOCK  /home/jablan/.rvm/gems/ruby-2.4.2/gems/activesupport-5.1.3/lib/active_support/dependencies.rb:292
c:0027 p:0057 s:0123 e:000122 METHOD /home/jablan/.rvm/gems/ruby-2.4.2/gems/activesupport-5.1.3/lib/active_support/dependencies.rb:258
c:0026 p:0017 s:0117 e:000116 METHOD /home/jablan/.rvm/gems/ruby-2.4.2/gems/activesupport-5.1.3/lib/active_support/dependencies.rb:292
c:0025 p:0027 s:0111 e:000110 TOP    /home/jablan/.rvm/gems/ruby-2.4.2/gems/rbnacl-libsodium-1.0.15.1/lib/rbnacl/libsodium.rb:18 [FINISH]
c:0024 p:---- s:0108 e:000107 CFUNC  :require
c:0023 p:0113 s:0103 e:000102 RESCUE /home/jablan/.rvm/rubies/ruby-2.4.2/lib/ruby/site_ruby/2.4.0/bundler/runtime.rb:95
c:0022 p:0063 s:0099 e:000098 BLOCK  /home/jablan/.rvm/rubies/ruby-2.4.2/lib/ruby/site_ruby/2.4.0/bundler/runtime.rb:72 [FINISH]
c:0021 p:---- s:0092 e:000091 CFUNC  :each
c:0020 p:0038 s:0088 e:000087 METHOD /home/jablan/.rvm/rubies/ruby-2.4.2/lib/ruby/site_ruby/2.4.0/bundler/runtime.rb:65
c:0019 p:0019 s:0083 e:000082 METHOD /home/jablan/.rvm/rubies/ruby-2.4.2/lib/ruby/site_ruby/2.4.0/bundler.rb:114
c:0018 p:0124 s:0078 e:000077 TOP    /home/jablan/git/login-app/config/application.rb:14 [FINISH]
c:0017 p:---- s:0075 e:000074 CFUNC  :require
c:0016 p:0047 s:0070 e:000069 TOP    /home/jablan/git/login-app/Rakefile:12 [FINISH]
c:0015 p:---- s:0067 e:000066 CFUNC  :load
c:0014 p:0010 s:0062 e:000061 METHOD /home/jablan/.rvm/gems/ruby-2.4.2/gems/rake-10.5.0/lib/rake/rake_module.rb:28
c:0013 p:0197 s:0057 e:000056 METHOD /home/jablan/.rvm/gems/ruby-2.4.2/gems/rake-10.5.0/lib/rake/application.rb:689
c:0012 p:0008 s:0051 e:000050 BLOCK  /home/jablan/.rvm/gems/ruby-2.4.2/gems/rake-10.5.0/lib/rake/application.rb:94
c:0011 p:0006 s:0048 e:000047 METHOD /home/jablan/.rvm/gems/ruby-2.4.2/gems/rake-10.5.0/lib/rake/application.rb:176
c:0010 p:0009 s:0043 e:000042 METHOD /home/jablan/.rvm/gems/ruby-2.4.2/gems/rake-10.5.0/lib/rake/application.rb:93
c:0009 p:0015 s:0039 e:000038 BLOCK  /home/jablan/.rvm/gems/ruby-2.4.2/gems/rake-10.5.0/lib/rake/application.rb:77
c:0008 p:0006 s:0036 e:000035 METHOD /home/jablan/.rvm/gems/ruby-2.4.2/gems/rake-10.5.0/lib/rake/application.rb:176
c:0007 p:0009 s:0031 e:000030 METHOD /home/jablan/.rvm/gems/ruby-2.4.2/gems/rake-10.5.0/lib/rake/application.rb:75
c:0006 p:0045 s:0027 e:000026 TOP    /home/jablan/.rvm/gems/ruby-2.4.2/gems/rake-10.5.0/bin/rake:33 [FINISH]
c:0005 p:---- s:0024 e:000023 CFUNC  :load
c:0004 p:0152 s:0019 E:0001e0 EVAL   /home/jablan/.rvm/gems/ruby-2.4.2/bin/rake:23 [FINISH]
c:0003 p:---- s:0014 e:000013 CFUNC  :eval
c:0002 p:0129 s:0007 E:000138 EVAL   /home/jablan/.rvm/gems/ruby-2.4.2/bin/ruby_executable_hooks:15 [FINISH]
c:0001 p:0000 s:0003 E:0003f0 (none) [FINISH]

-- Ruby level backtrace information ----------------------------------------
/home/jablan/.rvm/gems/ruby-2.4.2/bin/ruby_executable_hooks:15:in `<main>'
/home/jablan/.rvm/gems/ruby-2.4.2/bin/ruby_executable_hooks:15:in `eval'
/home/jablan/.rvm/gems/ruby-2.4.2/bin/rake:23:in `<main>'
/home/jablan/.rvm/gems/ruby-2.4.2/bin/rake:23:in `load'
/home/jablan/.rvm/gems/ruby-2.4.2/gems/rake-10.5.0/bin/rake:33:in `<top (required)>'
/home/jablan/.rvm/gems/ruby-2.4.2/gems/rake-10.5.0/lib/rake/application.rb:75:in `run'
/home/jablan/.rvm/gems/ruby-2.4.2/gems/rake-10.5.0/lib/rake/application.rb:176:in `standard_exception_handling'
/home/jablan/.rvm/gems/ruby-2.4.2/gems/rake-10.5.0/lib/rake/application.rb:77:in `block in run'
/home/jablan/.rvm/gems/ruby-2.4.2/gems/rake-10.5.0/lib/rake/application.rb:93:in `load_rakefile'
/home/jablan/.rvm/gems/ruby-2.4.2/gems/rake-10.5.0/lib/rake/application.rb:176:in `standard_exception_handling'
/home/jablan/.rvm/gems/ruby-2.4.2/gems/rake-10.5.0/lib/rake/application.rb:94:in `block in load_rakefile'
/home/jablan/.rvm/gems/ruby-2.4.2/gems/rake-10.5.0/lib/rake/application.rb:689:in `raw_load_rakefile'
/home/jablan/.rvm/gems/ruby-2.4.2/gems/rake-10.5.0/lib/rake/rake_module.rb:28:in `load_rakefile'
/home/jablan/.rvm/gems/ruby-2.4.2/gems/rake-10.5.0/lib/rake/rake_module.rb:28:in `load'
/home/jablan/git/login-app/Rakefile:12:in `<top (required)>'
/home/jablan/git/login-app/Rakefile:12:in `require'
/home/jablan/git/login-app/config/application.rb:14:in `<top (required)>'
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/ruby/site_ruby/2.4.0/bundler.rb:114:in `require'
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/ruby/site_ruby/2.4.0/bundler/runtime.rb:65:in `require'
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/ruby/site_ruby/2.4.0/bundler/runtime.rb:65:in `each'
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/ruby/site_ruby/2.4.0/bundler/runtime.rb:72:in `block in require'
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/ruby/site_ruby/2.4.0/bundler/runtime.rb:95:in `rescue in block in require'
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/ruby/site_ruby/2.4.0/bundler/runtime.rb:95:in `require'
/home/jablan/.rvm/gems/ruby-2.4.2/gems/rbnacl-libsodium-1.0.15.1/lib/rbnacl/libsodium.rb:18:in `<top (required)>'
/home/jablan/.rvm/gems/ruby-2.4.2/gems/activesupport-5.1.3/lib/active_support/dependencies.rb:292:in `require'
/home/jablan/.rvm/gems/ruby-2.4.2/gems/activesupport-5.1.3/lib/active_support/dependencies.rb:258:in `load_dependency'
/home/jablan/.rvm/gems/ruby-2.4.2/gems/activesupport-5.1.3/lib/active_support/dependencies.rb:292:in `block in require'
/home/jablan/.rvm/gems/ruby-2.4.2/gems/activesupport-5.1.3/lib/active_support/dependencies.rb:292:in `require'
/home/jablan/.rvm/gems/ruby-2.4.2/gems/rbnacl-4.0.2/lib/rbnacl.rb:102:in `<top (required)>'
/home/jablan/.rvm/gems/ruby-2.4.2/gems/activesupport-5.1.3/lib/active_support/dependencies.rb:292:in `require'
/home/jablan/.rvm/gems/ruby-2.4.2/gems/activesupport-5.1.3/lib/active_support/dependencies.rb:258:in `load_dependency'
/home/jablan/.rvm/gems/ruby-2.4.2/gems/activesupport-5.1.3/lib/active_support/dependencies.rb:292:in `block in require'
/home/jablan/.rvm/gems/ruby-2.4.2/gems/activesupport-5.1.3/lib/active_support/dependencies.rb:292:in `require'
/home/jablan/.rvm/gems/ruby-2.4.2/gems/rbnacl-4.0.2/lib/rbnacl/self_test.rb:114:in `<top (required)>'
/home/jablan/.rvm/gems/ruby-2.4.2/gems/rbnacl-4.0.2/lib/rbnacl/self_test.rb:23:in `box_test'
/home/jablan/.rvm/gems/ruby-2.4.2/gems/rbnacl-4.0.2/lib/rbnacl/self_test.rb:36:in `box_common_test'
/home/jablan/.rvm/gems/ruby-2.4.2/gems/rbnacl-4.0.2/lib/rbnacl/boxes/curve25519xsalsa20poly1305.rb:126:in `box'
/home/jablan/.rvm/gems/ruby-2.4.2/gems/rbnacl-4.0.2/lib/rbnacl/boxes/curve25519xsalsa20poly1305.rb:185:in `beforenm'
/home/jablan/.rvm/gems/ruby-2.4.2/gems/rbnacl-4.0.2/lib/rbnacl/sodium.rb:42:in `box_curve25519xsalsa20poly1305_beforenm'
/home/jablan/.rvm/gems/ruby-2.4.2/gems/rbnacl-4.0.2/lib/rbnacl/sodium.rb:42:in `crypto_box_curve25519xsalsa20poly1305_beforenm'

-- Machine register context ------------------------------------------------
 RIP: 0x00007f9e83d1468f RBP: 0x0000000004442b20 RSP: 0x00007fff79159468
 RAX: 0x00007f9e826d9000 RBX: 0x0000000000000000 RCX: 0x0000000000000000
 RDX: 0x00007fff791594a0 RDI: 0x0000000004442b20 RSI: 0x00007f9e826d9000
  R8: 0x00007fff791594a0  R9: 0x4217161e3c9bf076 R10: 0x0000000000000000
 R11: 0x339ed147c9217ee0 R12: 0x000000005b9d5d4a R13: 0x00007fff79159638
 R14: 0x00007fff79159580 R15: 0x00000000c9217ee0 EFL: 0x0000000000010246

-- C level backtrace information -------------------------------------------
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(rb_vm_bugreport+0x4f3) [0x7f9e8f835a43]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(rb_bug_context+0xd4) [0x7f9e8f6bf824]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(sigsegv+0x3e) [0x7f9e8f7ad3fe]
[0x7f9e8f2894b0]
[0x7f9e83d1468f]
[0x7f9e826a34b9]
[0x7f9e855bfe40]
[0x7f9e855bf8ab]
[0x7f9e841dac50]
[0x7f9e841de670]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_call_cfunc+0xea) [0x7f9e8f819b4a]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_call_method+0xe3) [0x7f9e8f829513]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_exec_core+0x1580) [0x7f9e8f822960]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_exec+0x91) [0x7f9e8f827a91]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(rb_load_internal0+0xaf) [0x7f9e8f70a21f]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(rb_require_internal+0x660) [0x7f9e8f70bd50]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(rb_require_safe+0x9) [0x7f9e8f70c079]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_call_cfunc+0xea) [0x7f9e8f819b4a]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_call_method+0xe3) [0x7f9e8f829513]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_exec_core+0x1722) [0x7f9e8f822b02]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_exec+0x91) [0x7f9e8f827a91]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(rb_load_internal0+0xaf) [0x7f9e8f70a21f]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(rb_require_internal+0x660) [0x7f9e8f70bd50]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(rb_require_safe+0x9) [0x7f9e8f70c079]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_call_cfunc+0xea) [0x7f9e8f819b4a]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_call_method+0xe3) [0x7f9e8f829513]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_exec_core+0x1722) [0x7f9e8f822b02]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_exec+0x91) [0x7f9e8f827a91]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(rb_load_internal0+0xaf) [0x7f9e8f70a21f]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(rb_require_internal+0x660) [0x7f9e8f70bd50]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(rb_require_safe+0x9) [0x7f9e8f70c079]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_call_cfunc+0xea) [0x7f9e8f819b4a]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_exec_core+0x1580) [0x7f9e8f822960]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_exec+0x91) [0x7f9e8f827a91]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(invoke_iseq_block_from_c+0x37a) [0x7f9e8f82886a]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(rb_yield+0xdd) [0x7f9e8f829e1d]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(rb_ary_each+0x3d) [0x7f9e8f64ec9d]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_call_cfunc+0xea) [0x7f9e8f819b4a]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_call_method+0xe3) [0x7f9e8f829513]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_exec_core+0x114a) [0x7f9e8f82252a]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_exec+0x91) [0x7f9e8f827a91]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(rb_load_internal0+0xaf) [0x7f9e8f70a21f]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(rb_require_internal+0x660) [0x7f9e8f70bd50]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(rb_require_safe+0x9) [0x7f9e8f70c079]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_call_cfunc+0xea) [0x7f9e8f819b4a]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_call_method+0xe3) [0x7f9e8f829513]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_exec_core+0x1580) [0x7f9e8f822960]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_exec+0x91) [0x7f9e8f827a91]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(rb_load_internal0+0xaf) [0x7f9e8f70a21f]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(rb_f_load+0x8b) [0x7f9e8f70a8bb]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_call_cfunc+0xea) [0x7f9e8f819b4a]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_call_method+0xe3) [0x7f9e8f829513]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_exec_core+0x1580) [0x7f9e8f822960]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_exec+0x91) [0x7f9e8f827a91]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(rb_load_internal0+0xaf) [0x7f9e8f70a21f]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(rb_f_load+0x8b) [0x7f9e8f70a8bb]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_call_cfunc+0xea) [0x7f9e8f819b4a]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_call_method+0xe3) [0x7f9e8f829513]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_exec_core+0x1580) [0x7f9e8f822960]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_exec+0x91) [0x7f9e8f827a91]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(eval_string_with_cref+0x174) [0x7f9e8f82b614]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(rb_f_eval+0xbc) [0x7f9e8f82babc]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_call_cfunc+0xea) [0x7f9e8f819b4a]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_call_method+0xe3) [0x7f9e8f829513]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_exec_core+0x1580) [0x7f9e8f822960]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(vm_exec+0x91) [0x7f9e8f827a91]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(ruby_exec_internal+0xb0) [0x7f9e8f6c5570]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(ruby_exec_node+0x1d) [0x7f9e8f6c727d]
/home/jablan/.rvm/rubies/ruby-2.4.2/lib/libruby.so.2.4(ruby_run_node+0x1e) [0x7f9e8f6ca19e]
/home/jablan/.rvm/rubies/ruby-2.4.2/bin/ruby(main+0x4b) [0x40087b] main.c:36

-- Other runtime information -----------------------------------------------
$ uname -a
Linux jablan-x230 4.10.0-38-generic #42~16.04.1-Ubuntu SMP Tue Oct 10 16:32:20 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

Please ask if you need some additional data.

Fails to build with ruby 2.5?

Hi,

Not sure if it's strictly ruby 2.5 related but I started experiencing issues at the time I updated it.

TypeError: no implicit conversion of nil into String
.bundle/gems/rbnacl-libsodium-1.0.16/lib/rbnacl/libsodium.rb:23:in `join'
.bundle/gems/rbnacl-libsodium-1.0.16/lib/rbnacl/libsodium.rb:23:in `<module:Libsodium>'
.bundle/gems/rbnacl-libsodium-1.0.16/lib/rbnacl/libsodium.rb:4:in `<module:RbNaCl>'
.bundle/gems/rbnacl-libsodium-1.0.16/lib/rbnacl/libsodium.rb:3:in `<top (required)>'
.bundle/gems/macaroons-1.0.0/lib/macaroons/raw_macaroon.rb:3:in `require'
.bundle/gems/macaroons-1.0.0/lib/macaroons/raw_macaroon.rb:3:in `<top (required)>'
.bundle/gems/macaroons-1.0.0/lib/macaroons/macaroons.rb:3:in `require'
.bundle/gems/macaroons-1.0.0/lib/macaroons/macaroons.rb:3:in `<top (required)>'
.bundle/gems/macaroons-1.0.0/lib/macaroons.rb:1:in `require'
.bundle/gems/macaroons-1.0.0/lib/macaroons.rb:1:in `<top (required)>'

Broken in latest release

15:01:52 web.1  | ! Unable to load application: LoadError: Could not open library 'sodium': dlopen(sodium, 5): image not found.
15:01:52 web.1  | Could not open library 'libsodium.dylib': dlopen(libsodium.dylib, 5): image not found
15:01:52 web.1  | bundler: failed to load command: puma (/Users/anders/.rbenv/versions/2.4.1/bin/puma)
15:01:52 web.1  | LoadError: Could not open library 'sodium': dlopen(sodium, 5): image not found.
15:01:52 web.1  | Could not open library 'libsodium.dylib': dlopen(libsodium.dylib, 5): image not found
15:01:52 web.1  |   /Users/anders/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/ffi-1.9.18/lib/ffi/library.rb:147:in `block in ffi_lib'```

Gemfile.lock
...
 akami (1.3.1)
      gyoku (>= 0.4.0)
      nokogiri
    amq-protocol (2.2.0)
    backports (3.10.3)
    base64url (1.0.1)
    builder (3.2.3)
    bunny (2.7.2)
      amq-protocol (>= 2.2.0)
    excon (0.59.0)
    faraday (0.13.1)
      multipart-post (>= 1.2, < 3)
    ffi (1.9.18)
    gyoku (1.3.1)
      builder (>= 2.1.2)
    haml (5.0.4)
      temple (>= 0.8.0)
      tilt
    httpauth (0.2.1)
    httpi (2.4.2)
      rack
      socksify
    influxdb (0.5.1)
    json (2.1.0)
    jwt (2.1.0)
    mail (2.7.0)
      mini_mime (>= 0.1.1)
    manifoldco_signature (0.1.4)
      base64url (~> 1.0.1)
      rbnacl (~> 3.4.0)
      rbnacl-libsodium (~> 1.0.11)
    mini_mime (1.0.0)
    mini_portile2 (2.3.0)
    multi_json (1.12.2)
    multipart-post (2.0.0)
    mustermann (1.0.1)
    nokogiri (1.8.1)
      mini_portile2 (~> 2.3.0)
    nori (2.6.0)
    oauth2 (0.6.1)
      faraday (~> 0.7)
      httpauth (~> 0.1)
      multi_json (~> 1.3)
    oj (3.3.9)
    pg (0.21.0)
    puma (3.10.0)
    rack (2.0.3)
    rack-contrib (1.2.0)
      rack (>= 0.9.1)
    rack-protection (2.0.0)
      rack
    rack-ssl-enforcer (0.2.9)
    rbnacl (3.4.0)
      ffi
    rbnacl-libsodium (1.0.15.1)
      rbnacl (>= 3.0.1)
    savon (2.11.2)
      akami (~> 1.2)
      builder (>= 2.1.2)
      gyoku (~> 1.2)
      httpi (~> 2.3)
      nokogiri (>= 1.4.0)
      nori (~> 2.4)
      wasabi (~> 3.4)
    sequel (5.2.0)
    sequel_pg (1.8.0)
      pg (>= 0.18.0)
      sequel (>= 4.34.0)
    sinatra (2.0.0)
      mustermann (~> 1.0)
      rack (~> 2.0)
      rack-protection (= 2.0.0)
      tilt (~> 2.0)
    sinatra-contrib (2.0.0)
      backports (>= 2.0)
      multi_json
      mustermann (~> 1.0)
      rack-protection (= 2.0.0)
      sinatra (= 2.0.0)
      tilt (>= 1.3, < 3)
    sinatra-flash (0.3.0)
      sinatra (>= 1.0.0)
    socksify (1.7.1)
    temple (0.8.0)
    terminal-table (1.8.0)
      unicode-display_width (~> 1.1, >= 1.1.1)
    thor (0.20.0)
    tilt (2.0.8)
    unicode-display_width (1.3.0)
    wasabi (3.5.0)
      httpi (~> 2.0)
      nokogiri (>= 1.4.2)
...

Installation fails on Windows specifically

Hello, I'm using this gem for a project and I've successfully installed it on Linux many times, but every time I try to install it on Windows, I get this error:

Temporarily enhancing PATH to include DevKit...
Building native extensions.  This could take a while...
ERROR:  Error installing rbnacl-libsodium:
        ERROR: Failed to build gem native extension.

    C:/Ruby22/bin/ruby.exe -r ./siteconf20160203-2572-1thjob5.rb extconf.rb
extconf.rb:4:in `sys': ERROR: './configure --prefix=C:/Ruby22/lib/ruby/gems/2.2.
0/gems/rbnacl-libsodium-1.0.8/vendor/libsodium/dist' failed (RuntimeError)
        from extconf.rb:22:in `block in <main>'
        from extconf.rb:21:in `chdir'
        from extconf.rb:21:in `<main>'
 -- ./configure --prefix=C:/Ruby22/lib/ruby/gems/2.2.0/gems/rbnacl-libsodium-1.0
.8/vendor/libsodium/dist

extconf failed, exit code 1

Gem files will remain installed in C:/Ruby22/lib/ruby/gems/2.2.0/gems/rbnacl-lib
sodium-1.0.8 for inspection.
Results logged to C:/Ruby22/lib/ruby/gems/2.2.0/extensions/x86-mingw32/2.2.0/rbn
acl-libsodium-1.0.8/gem_make.out

The content of said gem_make.out:

C:/Ruby22/bin/ruby.exe -r ./siteconf20160203-2572-1thjob5.rb extconf.rb
extconf.rb:4:in `sys': ERROR: './configure --prefix=C:/Ruby22/lib/ruby/gems/2.2.0/gems/rbnacl-libsodium-1.0.8/vendor/libsodium/dist' failed (RuntimeError)
    from extconf.rb:22:in `block in <main>'
    from extconf.rb:21:in `chdir'
    from extconf.rb:21:in `<main>'
 -- ./configure --prefix=C:/Ruby22/lib/ruby/gems/2.2.0/gems/rbnacl-libsodium-1.0.8/vendor/libsodium/dist

extconf failed, exit code 1

I'm definitely doing something wrong here, but I have no idea what. I've verified the DevKit works by installing another gem with native extensions (json). I appreciate any help or guidance, thanks!

corrupted double linked list

When attempting to install rbnacl-libsodium I get the following.

daniel@daniel-Latitude-D630:~/src/libsodium-1.0.1$ gem install rbnacl-libsodium
Building native extensions. This could take a while...
*** Error in `/usr/bin/ld': corrupted double-linked list: 0x09abe5b0 ***

It then proceeds to behave as if the gem installed. However, when I "require 'rbnacl/libsodium'" I get a whole slew of problems:
daniel@daniel-Latitude-D630:~/Sandbox$ ruby Encrypt.rb
/home/daniel/.rubies/ruby-2.1.3/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in require': cannot load such file -- rbnacl/libsodium (LoadError) from /home/daniel/.rubies/ruby-2.1.3/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:inrequire'
from Encrypt.rb:4:in `

'

If it's any help, I'm using Ruby version 2.1.3 and I'm attempting to get this to work on lubuntu 14.04

Error installing rbnacl-libsodium on ubuntu

Hello,

I cannot install rbnacl-libsodium on ubuntu 10.04. I get the following error:

Building native extensions.  This could take a while...
ERROR:  Error installing rbnacl-libsodium:
    ERROR: Failed to build gem native extension.

    /home/simao/.rbenv/versions/2.1.1/bin/ruby extconf.rb
 -- ./autogen.sh
autoreconf: Entering directory `.'
autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal --force -I m4
autoreconf: configure.ac: tracing
autoreconf: configure.ac: not using Libtool
autoreconf: running: /usr/bin/autoconf --force
configure.ac:401: error: possibly undefined macro: AC_LIBTOOL_WIN32_DLL
      If this token and others are legitimate, please use m4_pattern_allow.
      See the Autoconf documentation.
autoreconf: /usr/bin/autoconf failed with exit status: 1
extconf.rb:4:in `sys': ERROR: './autogen.sh' failed (RuntimeError)
    from extconf.rb:22:in `block in <main>'
    from extconf.rb:21:in `chdir'
    from extconf.rb:21:in `<main>'

extconf failed, exit code 1

Gem files will remain installed in /home/simao/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/rbnacl-libsodium-0.5.0 for inspection.
Results logged to /home/simao/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/extensions/x86_64-linux/2.1.0-static/rbnacl-libsodium-0.5.0/gem_make.out

Can't run on nanobox: can't modify frozen Array

Trying to run this on nanobox.io. At first I was getting the "TypeError: no implicit conversion of nil into String" error found on #25. I then updated the Gemfile to fetch the latest revision from github, and now I get this error:

Using rbnacl-libsodium 1.0.16 from https://github.com/crypto-rb/rbnacl-libsodium.git (at c1ee4d6@c1ee4d6)
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

current directory:
/app/vendor/bundle/ruby/2.3.0/bundler/gems/rbnacl-libsodium-c1ee4d621b2e/ext/rbnacl
/data/bin/ruby -r ./siteconf20180417-984-14el4ip.rb extconf.rb
extconf.rb:22:in `<main>': can't modify frozen Array (RuntimeError)

extconf failed, exit code 1

Isolated repo here: https://github.com/steveklebanoff/libsodium-nanobox-example/blob/master/README.md

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.