tor257 0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG +3 -0
- data/README.md +24 -0
- data/bin/tor257 +67 -0
- data/lib/tor257/core.rb +78 -0
- data/lib/tor257.rb +1 -0
- data/tor257.gemspec +31 -0
- data.tar.gz.sig +0 -0
- metadata +89 -0
- metadata.gz.sig +2 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 1cc6459576a0d752b91848a555a9983ce97e75e0
|
4
|
+
data.tar.gz: dd188829c42d946c92c79abd27831bce0a2e830a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9fa19dd857c52a21eb240739a81a3baeeac58b69e06456ec3d7e4c9232373554b8fae5d970300f23fa4c7120eeb325b6d66f032a73c812ebacd47c3761ca5503
|
7
|
+
data.tar.gz: 65c788e83eeefbcbf6efc2de10b8c778b1251164d632bd3f1d4c5eb98ed721f30f74a8939f23a8364c747b466133176c81d2fcaa2876fd44ba4bbc5788f92094
|
checksums.yaml.gz.sig
ADDED
Binary file
|
data/CHANGELOG
ADDED
data/README.md
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# Installation
|
2
|
+
|
3
|
+
```bash
|
4
|
+
gem install tor257
|
5
|
+
```
|
6
|
+
|
7
|
+
# Usage
|
8
|
+
|
9
|
+
```bash
|
10
|
+
$> tor257 --help
|
11
|
+
Usage: tor257 -p=keyphrase | -f=keyfile [-b=fd] [-v]
|
12
|
+
--verbose Developper mode (on STDERR)
|
13
|
+
--passphrase=pass Key (Passphrase)
|
14
|
+
--file=keyfile Key (File)
|
15
|
+
--base64=fd Output in ASCII Base64
|
16
|
+
```
|
17
|
+
|
18
|
+
Example:
|
19
|
+
```bash
|
20
|
+
$> echo "bonjour" | ./tor257 -p "ohk" -bout
|
21
|
+
BBeADBebFA==
|
22
|
+
$> echo "bonjour" | ./tor257 -p "ohk" -bout | ./tor257 -p "ohk" -bin
|
23
|
+
bonjour
|
24
|
+
```
|
data/bin/tor257
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# coding: utf-8
|
3
|
+
|
4
|
+
require 'optparse'
|
5
|
+
|
6
|
+
module Argument
|
7
|
+
|
8
|
+
@@opt = nil
|
9
|
+
def self.parse
|
10
|
+
@@opt ||= OptionParser.new do |opts|
|
11
|
+
opts.banner = "Usage: tor257 -p=keyphrase | -f=keyfile [-b=fd] [-v]"
|
12
|
+
|
13
|
+
opts.on("--verbose", "Developper mode (on STDERR)") do
|
14
|
+
$verbose = true
|
15
|
+
end
|
16
|
+
|
17
|
+
opts.on("--passphrase=pass", "Key (Passphrase)") do |key|
|
18
|
+
$key = key
|
19
|
+
end
|
20
|
+
|
21
|
+
opts.on("--file=keyfile", "Key (File)") do |key|
|
22
|
+
raise "File #{key} does'nt exists !" unless File.exists? key
|
23
|
+
$key = File.read(key)
|
24
|
+
raise "File #{key} is empty !" if $key.empty?
|
25
|
+
end
|
26
|
+
|
27
|
+
opts.on("--base64=fd", "Output in ASCII Base64") do |fd|
|
28
|
+
$fi64 ||= (fd == "in")
|
29
|
+
$fo64 ||= (fd == "out")
|
30
|
+
require 'base64'
|
31
|
+
end
|
32
|
+
|
33
|
+
end.parse!
|
34
|
+
|
35
|
+
raise ArgumentError, "Key is required" unless $key
|
36
|
+
return @@opt
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
require 'tor257'
|
43
|
+
|
44
|
+
begin
|
45
|
+
Argument.parse
|
46
|
+
include Tor257
|
47
|
+
|
48
|
+
trap("SIGINT") do
|
49
|
+
exit 0
|
50
|
+
end
|
51
|
+
key = Key.new($key)
|
52
|
+
loop do
|
53
|
+
str = STDIN.gets
|
54
|
+
if str.nil?
|
55
|
+
exit 0
|
56
|
+
end
|
57
|
+
str.chomp!
|
58
|
+
str = $fi64 ? Base64.decode64(str) : str
|
59
|
+
# STDERR.puts "\"#{str}\""
|
60
|
+
m = Message.new str
|
61
|
+
out = m.encrypt(key)
|
62
|
+
STDOUT.puts $fo64 ? Base64.encode64(out) : out
|
63
|
+
end
|
64
|
+
rescue => err
|
65
|
+
puts "Error: #{err.message}"
|
66
|
+
puts err.backtrace.join("\n") if $verbose
|
67
|
+
end
|
data/lib/tor257/core.rb
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
def TOR257_KEYS(k)
|
4
|
+
[
|
5
|
+
((k << 0) & 0xff) + ((k & 0b00000000) >> 8),
|
6
|
+
((k << 2) & 0xff) + ((k & 0b11000000) >> 6),
|
7
|
+
((k << 5) & 0xff) + ((k & 0b11111000) >> 3),
|
8
|
+
((k << 7) & 0xff) + ((k & 0b11111110) >> 1)
|
9
|
+
]
|
10
|
+
end
|
11
|
+
|
12
|
+
def TOR257_KEY(k)
|
13
|
+
TOR257_KEYS(k).inject(&:^)
|
14
|
+
end
|
15
|
+
|
16
|
+
# @param b [Integer 8b]
|
17
|
+
# @param k [Integer 8b]
|
18
|
+
def TOR257(b, k)
|
19
|
+
return b ^ TOR257_KEY(k)
|
20
|
+
end
|
21
|
+
|
22
|
+
module Tor257
|
23
|
+
|
24
|
+
class Key < String
|
25
|
+
|
26
|
+
def subkey(i)
|
27
|
+
# return self[i % self.size].bytes
|
28
|
+
@koff = nil
|
29
|
+
_subkey(i % self.size)
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
def _subkey(i)
|
34
|
+
raise ArgumentError unless i.is_a? Integer
|
35
|
+
koff_update
|
36
|
+
if i >= self.size
|
37
|
+
@koff = nil
|
38
|
+
return []
|
39
|
+
end
|
40
|
+
i += @koff
|
41
|
+
return [self.bytes[i % self.size]] + _subkey(i)
|
42
|
+
# return self.bytes[i % self.size]
|
43
|
+
end
|
44
|
+
|
45
|
+
def koff_update
|
46
|
+
case @koff
|
47
|
+
when nil
|
48
|
+
@koff = 0
|
49
|
+
when 0, 5
|
50
|
+
@koff = 2
|
51
|
+
when 2
|
52
|
+
@koff = 5
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
class Message < String
|
59
|
+
|
60
|
+
def encrypt(key)
|
61
|
+
raise ArgumentError unless key.is_a? Key
|
62
|
+
i = 0
|
63
|
+
out = Message.new(self.bytes.map do |b|
|
64
|
+
skey = key.subkey(i)
|
65
|
+
skey.each{|k| b = TOR257(b, k) }
|
66
|
+
i += 1
|
67
|
+
b.chr
|
68
|
+
end.join)
|
69
|
+
out
|
70
|
+
end
|
71
|
+
|
72
|
+
def decrypt(key)
|
73
|
+
self.encrypt(key)
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
data/lib/tor257.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require_relative 'tor257/core.rb'
|
data/tor257.gemspec
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = 'tor257'
|
3
|
+
s.version = '0.1'
|
4
|
+
s.date = Time.now.getgm.to_s.split.first
|
5
|
+
s.summary = File.read("CHANGELOG").match(/^v[^\n]+\n((\t[^\n]+\n)+)/m)[1].split("\t").join
|
6
|
+
s.description = 'An experimental encryption algorithm'
|
7
|
+
s.authors = ['poulet_a']
|
8
|
+
s.email = ['poulet_a@epitech.eu']
|
9
|
+
s.files = %w(
|
10
|
+
lib/tor257.rb
|
11
|
+
lib/tor257/core.rb
|
12
|
+
|
13
|
+
README.md
|
14
|
+
CHANGELOG
|
15
|
+
|
16
|
+
tor257.gemspec
|
17
|
+
|
18
|
+
bin/tor257
|
19
|
+
)
|
20
|
+
s.executables = %w(
|
21
|
+
tor257
|
22
|
+
)
|
23
|
+
s.homepage = 'https://github.com/pouleta/tor257'
|
24
|
+
s.license = 'GNU/GPLv3'
|
25
|
+
|
26
|
+
s.cert_chain = ['certs/nephos.pem']
|
27
|
+
s.signing_key = File.expand_path('~/.ssh/gem-private_key.pem') if $0 =~ /gem\z/
|
28
|
+
|
29
|
+
s.add_dependency 'nomorebeer', '~> 1.1'
|
30
|
+
|
31
|
+
end
|
data.tar.gz.sig
ADDED
Binary file
|
metadata
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: tor257
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.1'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- poulet_a
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain:
|
11
|
+
- |
|
12
|
+
-----BEGIN CERTIFICATE-----
|
13
|
+
MIIDljCCAn6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBIMRYwFAYDVQQDDA1hcnRo
|
14
|
+
dXIucG91bGV0MRkwFwYKCZImiZPyLGQBGRYJY3J5cHRvbGFiMRMwEQYKCZImiZPy
|
15
|
+
LGQBGRYDbmV0MB4XDTE1MTAwMzIxNTQyMFoXDTE2MTAwMjIxNTQyMFowSDEWMBQG
|
16
|
+
A1UEAwwNYXJ0aHVyLnBvdWxldDEZMBcGCgmSJomT8ixkARkWCWNyeXB0b2xhYjET
|
17
|
+
MBEGCgmSJomT8ixkARkWA25ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
18
|
+
ggEBANnLB9vH7/O0aUWi0f9VtC7F73zMC1OvxDaJq+qIcmGBFiKPOngDCRyKffWf
|
19
|
+
A6gyf7VsJAlDVFYoyNw7bzLFjBT9gkb5xmED3Uaxvt8Ax131YvKv0sTsQeiTVHHW
|
20
|
+
1crq7266hW1McrFU2A1uQRV8FHuruUJBuP7UUYK7fZi0barbkdAIb4VvQFZxXByI
|
21
|
+
lKdQSuhu8k0RcG1vTACEsQXJIUImc8CWMi8/TG3HidJdASMvIWtV2rNQXlQ+UgIc
|
22
|
+
UeHC0p+SNTrc09H6q+5eH8NRYhJ91xKuLXv7NNy8M3quAMHcQ1GM6DWljc+Jc4cm
|
23
|
+
uAPQMYJf7Vy6OzWLoEiv2QU6sE0CAwEAAaOBijCBhzAJBgNVHRMEAjAAMAsGA1Ud
|
24
|
+
DwQEAwIEsDAdBgNVHQ4EFgQU08cDEZOTZNjP/0+E2unJWyw4NzQwJgYDVR0RBB8w
|
25
|
+
HYEbYXJ0aHVyLnBvdWxldEBjcnlwdG9sYWIubmV0MCYGA1UdEgQfMB2BG2FydGh1
|
26
|
+
ci5wb3VsZXRAY3J5cHRvbGFiLm5ldDANBgkqhkiG9w0BAQUFAAOCAQEAo60BuRZM
|
27
|
+
5Vtn0H0kHHTPiXz09lwxx4cFpTqrTTM0T6qM3gKsR5eLyR1Rt5hGmYLPgY4ZW4zI
|
28
|
+
XcuDbgRJrczZs7AZNy5NXyVWpxCwkZzklpbGTuYQdFz7mKfVyALjLjrilOIktXcz
|
29
|
+
PvB7EoLlqYvq9cnwV3WE1MkRcBd07xpofcp0kxae2dCOZPUq24TcNaRe7Utw6jjA
|
30
|
+
iL0bcH7zZkzMsNoNpPAgsd3ovU4Mf9M+A3M8COmd7KzKyZ0k7P12u5InPWUsNQS2
|
31
|
+
tcYkgfqUJPitIJx1RvWZpIyH5uJhRUYK3+vU9nMOxez5WbIlC1TtpByKAPMX+sht
|
32
|
+
gib3AoIT8jh/2w==
|
33
|
+
-----END CERTIFICATE-----
|
34
|
+
date: 2015-10-20 00:00:00.000000000 Z
|
35
|
+
dependencies:
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: nomorebeer
|
38
|
+
requirement: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - "~>"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '1.1'
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '1.1'
|
50
|
+
description: An experimental encryption algorithm
|
51
|
+
email:
|
52
|
+
- poulet_a@epitech.eu
|
53
|
+
executables:
|
54
|
+
- tor257
|
55
|
+
extensions: []
|
56
|
+
extra_rdoc_files: []
|
57
|
+
files:
|
58
|
+
- CHANGELOG
|
59
|
+
- README.md
|
60
|
+
- bin/tor257
|
61
|
+
- lib/tor257.rb
|
62
|
+
- lib/tor257/core.rb
|
63
|
+
- tor257.gemspec
|
64
|
+
homepage: https://github.com/pouleta/tor257
|
65
|
+
licenses:
|
66
|
+
- GNU/GPLv3
|
67
|
+
metadata: {}
|
68
|
+
post_install_message:
|
69
|
+
rdoc_options: []
|
70
|
+
require_paths:
|
71
|
+
- lib
|
72
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
requirements: []
|
83
|
+
rubyforge_project:
|
84
|
+
rubygems_version: 2.4.8
|
85
|
+
signing_key:
|
86
|
+
specification_version: 4
|
87
|
+
summary: "- Initialize the project - Implement algorithm"
|
88
|
+
test_files: []
|
89
|
+
has_rdoc:
|
metadata.gz.sig
ADDED