tor257 0.1 → 0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1cc6459576a0d752b91848a555a9983ce97e75e0
4
- data.tar.gz: dd188829c42d946c92c79abd27831bce0a2e830a
3
+ metadata.gz: f89549934fb8710f963e0edacdb82adbd64d16eb
4
+ data.tar.gz: 872fa3a68230a6e00305340571e510d9b6eb8e01
5
5
  SHA512:
6
- metadata.gz: 9fa19dd857c52a21eb240739a81a3baeeac58b69e06456ec3d7e4c9232373554b8fae5d970300f23fa4c7120eeb325b6d66f032a73c812ebacd47c3761ca5503
7
- data.tar.gz: 65c788e83eeefbcbf6efc2de10b8c778b1251164d632bd3f1d4c5eb98ed721f30f74a8939f23a8364c747b466133176c81d2fcaa2876fd44ba4bbc5788f92094
6
+ metadata.gz: 3e1af237dd5dc985851ed96e031187cfc74648de9abe8249caff132b47db6637c9cea1773b6c8bd92c313ad887d2f06c8fbe73bb9656ed3184f07a68c56cca26
7
+ data.tar.gz: 747c227f786581177c1c59c8bd970963fd5e060d726b1871640fd2dc505f116fadee1217cfc47e19fb85c40bc719f341308530dd026cbed902a23c330458456d
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
Binary file
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ v0.2
2
+ - Improve usability
3
+ - Improve algorithm with bloc rotations
4
+
1
5
  v0.1
2
6
  - Initialize the project
3
7
  - Implement algorithm
data/bin/tor257 CHANGED
@@ -10,10 +10,14 @@ module Argument
10
10
  @@opt ||= OptionParser.new do |opts|
11
11
  opts.banner = "Usage: tor257 -p=keyphrase | -f=keyfile [-b=fd] [-v]"
12
12
 
13
- opts.on("--verbose", "Developper mode (on STDERR)") do
13
+ opts.on("--verbose", "More verbose") do
14
14
  $verbose = true
15
15
  end
16
16
 
17
+ opts.on("--debug", "Developper mode (on STDERR)") do
18
+ $debug = true
19
+ end
20
+
17
21
  opts.on("--passphrase=pass", "Key (Passphrase)") do |key|
18
22
  $key = key
19
23
  end
@@ -39,29 +43,37 @@ module Argument
39
43
 
40
44
  end
41
45
 
42
- require 'tor257'
43
-
44
46
  begin
45
47
  Argument.parse
48
+
49
+ if $debug # to load local env
50
+ load Dir.pwd + '/lib/tor257.rb'
51
+ else
52
+ require 'tor257'
53
+ end
54
+
46
55
  include Tor257
47
56
 
48
57
  trap("SIGINT") do
49
58
  exit 0
50
59
  end
60
+
51
61
  key = Key.new($key)
62
+ i = 0
52
63
  loop do
53
- str = STDIN.gets
64
+ str = STDIN.read 4096
54
65
  if str.nil?
55
66
  exit 0
56
67
  end
57
- str.chomp!
58
68
  str = $fi64 ? Base64.decode64(str) : str
69
+ STDERR.puts "Bloc ##{i} [#{str}] with [#{key}]" if $verbose
59
70
  # STDERR.puts "\"#{str}\""
60
71
  m = Message.new str
61
72
  out = m.encrypt(key)
62
- STDOUT.puts $fo64 ? Base64.encode64(out) : out
73
+ STDOUT.write $fo64 ? Base64.encode64(out) : out
74
+ i += 1
63
75
  end
64
76
  rescue => err
65
- puts "Error: #{err.message}"
66
- puts err.backtrace.join("\n") if $verbose
77
+ STDERR.puts "Error: #{err.message}"
78
+ STDERR.puts err.backtrace.join("\n") if $verbose
67
79
  end
data/lib/tor257.rb CHANGED
@@ -1 +1 @@
1
- require_relative 'tor257/core.rb'
1
+ require_relative 'tor257/core'
@@ -0,0 +1,8 @@
1
+ class Integer
2
+
3
+ def ror count, size=32
4
+ count = count % size
5
+ ((self >> count) | (self << (size - count))) & (2**size-1)
6
+ end
7
+
8
+ end
data/lib/tor257/core.rb CHANGED
@@ -1,28 +1,35 @@
1
1
  # coding: utf-8
2
2
 
3
- def TOR257_KEYS(k)
3
+ require_relative 'Integer'
4
+
5
+ def TOR257_KEYS(k, offsets)
4
6
  [
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)
7
+ k.ror(0 - offsets[0], 8),
8
+ k.ror(-2 - offsets[1], 8),
9
+ k.ror(-5 - offsets[2], 8),
10
+ k.ror(-7 - offsets[3], 8),
9
11
  ]
10
12
  end
11
13
 
12
- def TOR257_KEY(k)
13
- TOR257_KEYS(k).inject(&:^)
14
+ def TOR257_KEY(k, offsets)
15
+ TOR257_KEYS(k, offsets).inject(&:^)
14
16
  end
15
17
 
16
18
  # @param b [Integer 8b]
17
19
  # @param k [Integer 8b]
18
- def TOR257(b, k)
19
- return b ^ TOR257_KEY(k)
20
+ def TOR257(b, k, offsets)
21
+ return b ^ TOR257_KEY(k, offsets)
20
22
  end
21
23
 
22
24
  module Tor257
23
25
 
24
26
  class Key < String
25
27
 
28
+ def initialize s
29
+ super(s)
30
+ raise ArgumentError, "Key must be at least 32 bits strong" if size() < 4
31
+ end
32
+
26
33
  def subkey(i)
27
34
  # return self[i % self.size].bytes
28
35
  @koff = nil
@@ -55,17 +62,25 @@ module Tor257
55
62
 
56
63
  end
57
64
 
65
+ # The message can be cut in 32 bits blocs
58
66
  class Message < String
59
67
 
60
68
  def encrypt(key)
61
69
  raise ArgumentError unless key.is_a? Key
62
70
  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)
71
+ rotate_matrix = [1, 2, 4, 8]
72
+ out = self.bytes.map do |b|
73
+ skey = key.subkey(i)
74
+ STDERR.write "[#{b}]\t+ [#{skey}\t>> #{rotate_matrix}]\t-> " if $verbose
75
+ skey.each_with_index do |k|
76
+ b = TOR257(b, k, rotate_matrix)
77
+ end
78
+ STDERR.write " [#{b}]\n" if $verbose
79
+ i += 1
80
+ rotate_matrix.rotate! 1 if i % 4 == 0 # bloc of 32
81
+ b.chr
82
+ end.join
83
+ out = Message.new(out)
69
84
  out
70
85
  end
71
86
 
data/tor257.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'tor257'
3
- s.version = '0.1'
3
+ s.version = '0.2'
4
4
  s.date = Time.now.getgm.to_s.split.first
5
5
  s.summary = File.read("CHANGELOG").match(/^v[^\n]+\n((\t[^\n]+\n)+)/m)[1].split("\t").join
6
6
  s.description = 'An experimental encryption algorithm'
@@ -8,6 +8,7 @@ Gem::Specification.new do |s|
8
8
  s.email = ['poulet_a@epitech.eu']
9
9
  s.files = %w(
10
10
  lib/tor257.rb
11
+ lib/tor257/Integer.rb
11
12
  lib/tor257/core.rb
12
13
 
13
14
  README.md
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tor257
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.1'
4
+ version: '0.2'
5
5
  platform: ruby
6
6
  authors:
7
7
  - poulet_a
@@ -59,6 +59,7 @@ files:
59
59
  - README.md
60
60
  - bin/tor257
61
61
  - lib/tor257.rb
62
+ - lib/tor257/Integer.rb
62
63
  - lib/tor257/core.rb
63
64
  - tor257.gemspec
64
65
  homepage: https://github.com/pouleta/tor257
@@ -84,6 +85,6 @@ rubyforge_project:
84
85
  rubygems_version: 2.4.8
85
86
  signing_key:
86
87
  specification_version: 4
87
- summary: "- Initialize the project - Implement algorithm"
88
+ summary: "- Improve usability - Improve algorithm with bloc rotations"
88
89
  test_files: []
89
90
  has_rdoc:
metadata.gz.sig CHANGED
@@ -1,2 +1,3 @@
1
- ���ߢ�Ty�-W�pz���\3*Wg�|?�/� 81�#��g|y���ԂV���׎I [��\9��`� �Y���Aˀ���x�%�+��\bxZ ���b���/q"N��m!S@��.����
2
- a:wG���;����^_���Ư�~�Qd�+IAG�ݫe��)AxX5�2>ln�����ќ�� ���-{WWu.R��X??�@
1
+ �w����QZp������8dY��y������4j�W�Ju1��L�A�ƥ��)_��([�
2
+ �I��L67.���c����ξ"�`�me��ӕs��f�����0��zn�)����&�"o~@TT
3
+ �q��6fW1D�db�'U�k��u�B5�/��WV�>MkT������<�u��֏��Z�u���" p�ɉµ�%���|}1B�oo9��Q`�)�