tor257 0.1 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
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`�)�