tor257 0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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