gost_magma 0.1.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.
@@ -0,0 +1,143 @@
1
+ module GostMagma
2
+ class MagmaOmac < Magma
3
+ def initialize(key, mac_size)
4
+ @key = key.dup.force_encoding('BINARY')
5
+ @keys = []
6
+ (0...8).each do |i|
7
+ @keys << self.class.uint8ToUint32(@key[i*4...(i+1)*4].reverse)
8
+ end
9
+
10
+ @mac_size = mac_size
11
+ @ctxR = self.class.zeroBlock
12
+ @ctxB = self.class.zeroBlock
13
+ @ctxB[-1] = 0x1b.chr
14
+ @ctxK1 = self.class.zeroBlock
15
+ @ctxK2 = self.class.zeroBlock
16
+ @ctxC = self.class.zeroBlock
17
+ @lastBlock = ''
18
+ @lastBlockSize = 0
19
+ @isFirstBlock = true
20
+ expandMacKey
21
+ @bytes_count = 0
22
+ end
23
+
24
+ def update(indata)
25
+ indata_length = indata.length
26
+ indata_index = 0
27
+ @bytes_count += indata_length
28
+ if @lastBlockSize > 0 then
29
+ # prev update data
30
+ if indata_length < BlockLengthInBytes - @lastBlockSize then
31
+ # No full block
32
+ @lastBlock += indata
33
+ @lastBlockSize += indata_length
34
+ @bytes_count += indata_length
35
+ return self
36
+ else
37
+ # Make full block
38
+ @lastBlock += indata[indata_index...indata_index + BlockLengthInBytes - @lastBlockSize]
39
+ if @isFirstBlock then
40
+ @isFirstBlock = false
41
+ indata_index += BlockLengthInBytes - @lastBlockSize
42
+ indata_length -= BlockLengthInBytes - @lastBlockSize
43
+ @lastBlockSize = BlockLengthInBytes
44
+ else
45
+ (0...BlockLengthInBytes).each do |j|
46
+ @lastBlock[j] = (@lastBlock[j].ord ^ @ctxC[j].ord).chr
47
+ end
48
+ @ctxC = self.class.encryptBlock(@lastBlock, @keys)
49
+ indata_index += BlockLengthInBytes - @lastBlockSize
50
+ indata_length -= BlockLengthInBytes - @lastBlockSize
51
+ if indata_length >= BlockLengthInBytes then
52
+ @LastBlock = indata[indata_index...(indata_index + LCC_KUZNYECHIK_BLOCK_LEN)].dup
53
+ indata_index += BlockLengthInBytes
54
+ @LastBlockSize = BlockLengthInBytes
55
+ indata_length -= BlockLengthInBytes
56
+ else
57
+ @lastBlock = indata[indata_index...(indata_index + indata_length)].dup
58
+ indata_index += indata_length
59
+ @LastBlockSize = indata_length
60
+ indata_length = 0
61
+ end
62
+ end
63
+ end
64
+ end
65
+
66
+ (0...indata_length/BlockLengthInBytes).each do |i|
67
+ if @isFirstBlock then
68
+ @lastBlock = indata[indata_index...(indata_index + BlockLengthInBytes)].dup
69
+ @lastBlockSize = BlockLengthInBytes
70
+ @isFirstBlock = false
71
+ indata_index += BlockLengthInBytes
72
+ next
73
+ end
74
+ (0...BlockLengthInBytes).each do |j|
75
+ @lastBlock[j] = (@lastBlock[j].ord ^ @ctxC[j].ord).chr
76
+ end
77
+ @ctxC = self.class.encryptBlock(@lastBlock, @keys)
78
+ @lastBlock = indata[indata_index...(indata_index + BlockLengthInBytes)].dup
79
+ indata_index += BlockLengthInBytes
80
+ end
81
+
82
+ if indata_length % BlockLengthInBytes > 0 then
83
+ if not @isFirstBlock then
84
+ (0...BlockLengthInBytes).each do |j|
85
+ @lastBlock[j] = (@lastBlock[j].ord ^ @ctxC[j].ord).chr
86
+ end
87
+ @ctxC = self.class.encryptBlock(@lastBlock, @keys)
88
+ end
89
+ @lastBlock = indata[indata_index...(indata_index + indata_length % BlockLengthInBytes)].dup
90
+ @lastBlockSize = indata_length % BlockLengthInBytes
91
+ end
92
+ return self
93
+ end
94
+
95
+ def final
96
+ if (@bytes_count == 0) || (@lastBlockSize > 0) then
97
+ tmp_block = @lastBlock.dup
98
+ if @lastBlockSize != BlockLengthInBytes then
99
+ tmp_block = self.class.padd(tmp_block)
100
+ end
101
+ else
102
+ tmp_block = self.class.zeroBlock
103
+ end
104
+ (0...BlockLengthInBytes).each do |i|
105
+ tmp_block[i] = (tmp_block[i].ord ^ @ctxC[i].ord).chr
106
+ end
107
+ kK = (@lastBlockSize != BlockLengthInBytes) ? @ctxK2 : @ctxK1
108
+ (0...BlockLengthInBytes).each do |i|
109
+ tmp_block[i] = (tmp_block[i].ord ^ kK[i].ord).chr
110
+ end
111
+ mac = self.class.encryptBlock(tmp_block, @keys)
112
+ result = mac[0...@mac_size]
113
+ end
114
+
115
+ private
116
+
117
+ def expandMacKey
118
+ tmp_block = self.class.zeroBytes(KeyLengthInBytes + BlockLengthInBytes)
119
+ @ctxR = self.class.encryptBlock(tmp_block, @keys)
120
+ r = ((@ctxR[0].ord & 0x80) == 0x80)
121
+ self.class.shiftLeftOne(@ctxR)
122
+ if r then
123
+ (0...BlockLengthInBytes).each do |i|
124
+ @ctxK1[i] = (@ctxR[i].ord ^ @ctxB[i].ord).chr
125
+ end
126
+ else
127
+ @ctxK1 = @ctxR.dup
128
+ end
129
+ tmp_block = @ctxK1.dup
130
+ self.class.shiftLeftOne(tmp_block)
131
+ r = ((@ctxK1[0].ord & 0x80) == 0x80)
132
+ if r then
133
+ (0...BlockLengthInBytes).each do |i|
134
+ @ctxK2[i] = (tmp_block[i].ord ^ @ctxB[i].ord).chr
135
+ end
136
+ else
137
+ @ctxK2 = tmp_block
138
+ end
139
+ end
140
+
141
+ end
142
+ end
143
+
@@ -0,0 +1,123 @@
1
+ module GostMagma
2
+
3
+ class MagmaOmacAcpkm < MagmaCtrAcpkm
4
+
5
+ def initialize(key, section_N, base_key_change_T, mac_size)
6
+ @mac_N = section_N
7
+ @mac_T = base_key_change_T
8
+ @mac_size = mac_size
9
+ super(key, ACPKM_CTR_IV, BlockLengthInBytes, @mac_T)
10
+ @ecb = MagmaEcb.new(key)
11
+ @mac_R = Magma::zeroBlock
12
+ @mac_B = Magma::zeroBlock
13
+ @mac_B[-1] = 0x1b.chr
14
+ @mac_K1 = Magma::zeroBlock
15
+ @mac_K2 = Magma::zeroBlock
16
+ @mac_C = Magma::zeroBlock
17
+ @mac_encrBlock = Magma::zeroBlock
18
+ @mac_lastBlock = ''
19
+ @mac_lastBlockSize = 0
20
+ @mac_lastBlockIndex = 0
21
+ @mac_isFirstBlock = true
22
+ @mac_byte_counter = 0
23
+ @mac_block_counter = 0
24
+ @mac_section_counter = 0
25
+ @mac_base_key_counter = 0
26
+ @mac_derived_key_counter = 0
27
+ deriveKeys
28
+ @mac_derived_key_counter += 1
29
+ end
30
+
31
+ def update(data)
32
+ data_len = data.length
33
+ (0...data_len).each do |k|
34
+ if @mac_lastBlockSize < BlockLengthInBytes then
35
+ @mac_byte_counter += 1
36
+ @mac_lastBlock[@mac_lastBlockIndex] = data[k]
37
+ @mac_lastBlockIndex += 1
38
+ @mac_lastBlockSize = @mac_lastBlockIndex
39
+ if k == data_len - 1 then
40
+ break
41
+ end
42
+ end
43
+ if @mac_lastBlockSize == BlockLengthInBytes then
44
+ @mac_block_counter += 1
45
+ (0...BlockLengthInBytes).each do |j|
46
+ @mac_encrBlock[j] = (@mac_lastBlock[j].ord ^ @mac_C[j].ord).chr
47
+ end
48
+ @mac_C = @ecb.encrypt(@mac_encrBlock)
49
+ if @mac_byte_counter % @mac_N == 0 then
50
+ if @mac_section_counter >= OMAC_ACPKM_MAX_N then
51
+ raise RangeError, 'Input message is too long for Magma OMAC-ACPKM'
52
+ return nil
53
+ end
54
+ @mac_section_counter += 1
55
+ @mac_byte_counter = 0
56
+ if (@mac_derived_key_counter * @mac_N) % @mac_T == 0 then
57
+ @mac_base_key_counter += 1
58
+ acpkmCtrKey
59
+ end
60
+ deriveKeys
61
+ @mac_derived_key_counter += 1
62
+ end
63
+ @mac_lastBlockIndex = 0
64
+ @mac_lastBlockSize = 0
65
+ end
66
+ end
67
+ return self
68
+ end
69
+
70
+ def final
71
+ @mac_lastBlock = @mac_lastBlock[0...@mac_lastBlockSize]
72
+ if (@mac_byte_counter == 0) || (@mac_lastBlockSize > 0) then
73
+ if @mac_lastBlockSize != BlockLengthInBytes then
74
+ @mac_lastBlock = Magma::padd(@mac_lastBlock)
75
+ end
76
+ end
77
+ (0...BlockLengthInBytes).each do |j|
78
+ @mac_encrBlock[j] = (@mac_lastBlock[j].ord ^ @mac_C[j].ord).chr
79
+ end
80
+ if @mac_lastBlockSize != BlockLengthInBytes then
81
+ deriveK2
82
+ kk = @mac_K2
83
+ else
84
+ kk = @mac_K1
85
+ end
86
+ (0...BlockLengthInBytes).each do |j|
87
+ @mac_encrBlock[j] = (@mac_encrBlock[j].ord ^ kk[j].ord).chr
88
+ end
89
+ mac = @ecb.encrypt(@mac_encrBlock)
90
+ result = mac[0...@mac_size].dup
91
+ end
92
+
93
+ private
94
+
95
+ ACPKM_CTR_IV = [
96
+ 0xFF, 0xFF, 0xFF, 0xFF
97
+ ].pack('C*').freeze
98
+
99
+ OMAC_ACPKM_MAX_N = 0x19999999 # 0x80000000/5
100
+
101
+ ACPKM_CTR_NULL = Magma::zeroBytes(KeyLengthInBytes+BlockLengthInBytes)
102
+
103
+ def deriveKeys
104
+ kk = encrypt(ACPKM_CTR_NULL)
105
+ # re-initialize ECB context
106
+ @ecb = MagmaEcb.new(kk[0...KeyLengthInBytes].dup)
107
+ @mac_K1 = kk[KeyLengthInBytes..-1].dup
108
+ end
109
+
110
+ def deriveK2
111
+ tmp_block = @mac_K1.dup
112
+ Magma::shiftLeftOne(tmp_block)
113
+ if (@mac_K1[0].ord & 0x80) == 0x80 then
114
+ (0...BlockLengthInBytes).each do |i|
115
+ @mac_K2[i] = (tmp_block[i].ord ^ @mac_B[i].ord).chr
116
+ end
117
+ else
118
+ @mac_K2 = tmp_block.dup
119
+ end
120
+ end
121
+
122
+ end
123
+ end
@@ -0,0 +1,142 @@
1
+ module GostMagma
2
+
3
+ TzTable = [
4
+ [
5
+ 0x00036000, 0x00032000, 0x00033000, 0x00031000, 0x00035000, 0x00032800, 0x00035800, 0x00034800,
6
+ 0x00037000, 0x00034000, 0x00036800, 0x00033800, 0x00030000, 0x00031800, 0x00037800, 0x00030800,
7
+ 0x00046000, 0x00042000, 0x00043000, 0x00041000, 0x00045000, 0x00042800, 0x00045800, 0x00044800,
8
+ 0x00047000, 0x00044000, 0x00046800, 0x00043800, 0x00040000, 0x00041800, 0x00047800, 0x00040800,
9
+ 0x00016000, 0x00012000, 0x00013000, 0x00011000, 0x00015000, 0x00012800, 0x00015800, 0x00014800,
10
+ 0x00017000, 0x00014000, 0x00016800, 0x00013800, 0x00010000, 0x00011800, 0x00017800, 0x00010800,
11
+ 0x0001e000, 0x0001a000, 0x0001b000, 0x00019000, 0x0001d000, 0x0001a800, 0x0001d800, 0x0001c800,
12
+ 0x0001f000, 0x0001c000, 0x0001e800, 0x0001b800, 0x00018000, 0x00019800, 0x0001f800, 0x00018800,
13
+ 0x0004e000, 0x0004a000, 0x0004b000, 0x00049000, 0x0004d000, 0x0004a800, 0x0004d800, 0x0004c800,
14
+ 0x0004f000, 0x0004c000, 0x0004e800, 0x0004b800, 0x00048000, 0x00049800, 0x0004f800, 0x00048800,
15
+ 0x00056000, 0x00052000, 0x00053000, 0x00051000, 0x00055000, 0x00052800, 0x00055800, 0x00054800,
16
+ 0x00057000, 0x00054000, 0x00056800, 0x00053800, 0x00050000, 0x00051800, 0x00057800, 0x00050800,
17
+ 0x0002e000, 0x0002a000, 0x0002b000, 0x00029000, 0x0002d000, 0x0002a800, 0x0002d800, 0x0002c800,
18
+ 0x0002f000, 0x0002c000, 0x0002e800, 0x0002b800, 0x00028000, 0x00029800, 0x0002f800, 0x00028800,
19
+ 0x00066000, 0x00062000, 0x00063000, 0x00061000, 0x00065000, 0x00062800, 0x00065800, 0x00064800,
20
+ 0x00067000, 0x00064000, 0x00066800, 0x00063800, 0x00060000, 0x00061800, 0x00067800, 0x00060800,
21
+ 0x0000e000, 0x0000a000, 0x0000b000, 0x00009000, 0x0000d000, 0x0000a800, 0x0000d800, 0x0000c800,
22
+ 0x0000f000, 0x0000c000, 0x0000e800, 0x0000b800, 0x00008000, 0x00009800, 0x0000f800, 0x00008800,
23
+ 0x00076000, 0x00072000, 0x00073000, 0x00071000, 0x00075000, 0x00072800, 0x00075800, 0x00074800,
24
+ 0x00077000, 0x00074000, 0x00076800, 0x00073800, 0x00070000, 0x00071800, 0x00077800, 0x00070800,
25
+ 0x00026000, 0x00022000, 0x00023000, 0x00021000, 0x00025000, 0x00022800, 0x00025800, 0x00024800,
26
+ 0x00027000, 0x00024000, 0x00026800, 0x00023800, 0x00020000, 0x00021800, 0x00027800, 0x00020800,
27
+ 0x0003e000, 0x0003a000, 0x0003b000, 0x00039000, 0x0003d000, 0x0003a800, 0x0003d800, 0x0003c800,
28
+ 0x0003f000, 0x0003c000, 0x0003e800, 0x0003b800, 0x00038000, 0x00039800, 0x0003f800, 0x00038800,
29
+ 0x0005e000, 0x0005a000, 0x0005b000, 0x00059000, 0x0005d000, 0x0005a800, 0x0005d800, 0x0005c800,
30
+ 0x0005f000, 0x0005c000, 0x0005e800, 0x0005b800, 0x00058000, 0x00059800, 0x0005f800, 0x00058800,
31
+ 0x0006e000, 0x0006a000, 0x0006b000, 0x00069000, 0x0006d000, 0x0006a800, 0x0006d800, 0x0006c800,
32
+ 0x0006f000, 0x0006c000, 0x0006e800, 0x0006b800, 0x00068000, 0x00069800, 0x0006f800, 0x00068800,
33
+ 0x00006000, 0x00002000, 0x00003000, 0x00001000, 0x00005000, 0x00002800, 0x00005800, 0x00004800,
34
+ 0x00007000, 0x00004000, 0x00006800, 0x00003800, 0x00000000, 0x00001800, 0x00007800, 0x00000800,
35
+ 0x0007e000, 0x0007a000, 0x0007b000, 0x00079000, 0x0007d000, 0x0007a800, 0x0007d800, 0x0007c800,
36
+ 0x0007f000, 0x0007c000, 0x0007e800, 0x0007b800, 0x00078000, 0x00079800, 0x0007f800, 0x00078800
37
+ ],
38
+ [
39
+ 0x06580000, 0x06180000, 0x06280000, 0x06400000, 0x06100000, 0x06780000, 0x06500000, 0x06680000,
40
+ 0x06700000, 0x06080000, 0x06380000, 0x06200000, 0x06600000, 0x06480000, 0x06300000, 0x06000000,
41
+ 0x04580000, 0x04180000, 0x04280000, 0x04400000, 0x04100000, 0x04780000, 0x04500000, 0x04680000,
42
+ 0x04700000, 0x04080000, 0x04380000, 0x04200000, 0x04600000, 0x04480000, 0x04300000, 0x04000000,
43
+ 0x01580000, 0x01180000, 0x01280000, 0x01400000, 0x01100000, 0x01780000, 0x01500000, 0x01680000,
44
+ 0x01700000, 0x01080000, 0x01380000, 0x01200000, 0x01600000, 0x01480000, 0x01300000, 0x01000000,
45
+ 0x00d80000, 0x00980000, 0x00a80000, 0x00c00000, 0x00900000, 0x00f80000, 0x00d00000, 0x00e80000,
46
+ 0x00f00000, 0x00880000, 0x00b80000, 0x00a00000, 0x00e00000, 0x00c80000, 0x00b00000, 0x00800000,
47
+ 0x06d80000, 0x06980000, 0x06a80000, 0x06c00000, 0x06900000, 0x06f80000, 0x06d00000, 0x06e80000,
48
+ 0x06f00000, 0x06880000, 0x06b80000, 0x06a00000, 0x06e00000, 0x06c80000, 0x06b00000, 0x06800000,
49
+ 0x02580000, 0x02180000, 0x02280000, 0x02400000, 0x02100000, 0x02780000, 0x02500000, 0x02680000,
50
+ 0x02700000, 0x02080000, 0x02380000, 0x02200000, 0x02600000, 0x02480000, 0x02300000, 0x02000000,
51
+ 0x07d80000, 0x07980000, 0x07a80000, 0x07c00000, 0x07900000, 0x07f80000, 0x07d00000, 0x07e80000,
52
+ 0x07f00000, 0x07880000, 0x07b80000, 0x07a00000, 0x07e00000, 0x07c80000, 0x07b00000, 0x07800000,
53
+ 0x03580000, 0x03180000, 0x03280000, 0x03400000, 0x03100000, 0x03780000, 0x03500000, 0x03680000,
54
+ 0x03700000, 0x03080000, 0x03380000, 0x03200000, 0x03600000, 0x03480000, 0x03300000, 0x03000000,
55
+ 0x03d80000, 0x03980000, 0x03a80000, 0x03c00000, 0x03900000, 0x03f80000, 0x03d00000, 0x03e80000,
56
+ 0x03f00000, 0x03880000, 0x03b80000, 0x03a00000, 0x03e00000, 0x03c80000, 0x03b00000, 0x03800000,
57
+ 0x00580000, 0x00180000, 0x00280000, 0x00400000, 0x00100000, 0x00780000, 0x00500000, 0x00680000,
58
+ 0x00700000, 0x00080000, 0x00380000, 0x00200000, 0x00600000, 0x00480000, 0x00300000, 0x00000000,
59
+ 0x05580000, 0x05180000, 0x05280000, 0x05400000, 0x05100000, 0x05780000, 0x05500000, 0x05680000,
60
+ 0x05700000, 0x05080000, 0x05380000, 0x05200000, 0x05600000, 0x05480000, 0x05300000, 0x05000000,
61
+ 0x02d80000, 0x02980000, 0x02a80000, 0x02c00000, 0x02900000, 0x02f80000, 0x02d00000, 0x02e80000,
62
+ 0x02f00000, 0x02880000, 0x02b80000, 0x02a00000, 0x02e00000, 0x02c80000, 0x02b00000, 0x02800000,
63
+ 0x01d80000, 0x01980000, 0x01a80000, 0x01c00000, 0x01900000, 0x01f80000, 0x01d00000, 0x01e80000,
64
+ 0x01f00000, 0x01880000, 0x01b80000, 0x01a00000, 0x01e00000, 0x01c80000, 0x01b00000, 0x01800000,
65
+ 0x07580000, 0x07180000, 0x07280000, 0x07400000, 0x07100000, 0x07780000, 0x07500000, 0x07680000,
66
+ 0x07700000, 0x07080000, 0x07380000, 0x07200000, 0x07600000, 0x07480000, 0x07300000, 0x07000000,
67
+ 0x04d80000, 0x04980000, 0x04a80000, 0x04c00000, 0x04900000, 0x04f80000, 0x04d00000, 0x04e80000,
68
+ 0x04f00000, 0x04880000, 0x04b80000, 0x04a00000, 0x04e00000, 0x04c80000, 0x04b00000, 0x04800000,
69
+ 0x05d80000, 0x05980000, 0x05a80000, 0x05c00000, 0x05900000, 0x05f80000, 0x05d00000, 0x05e80000,
70
+ 0x05f00000, 0x05880000, 0x05b80000, 0x05a00000, 0x05e00000, 0x05c80000, 0x05b00000, 0x05800000
71
+ ],
72
+ [
73
+ 0xb8000002, 0xf8000002, 0xa8000002, 0xd0000002, 0xc0000002, 0x88000002, 0xb0000002, 0xe8000002,
74
+ 0x80000002, 0xc8000002, 0x98000002, 0xf0000002, 0xd8000002, 0xa0000002, 0x90000002, 0xe0000002,
75
+ 0xb8000006, 0xf8000006, 0xa8000006, 0xd0000006, 0xc0000006, 0x88000006, 0xb0000006, 0xe8000006,
76
+ 0x80000006, 0xc8000006, 0x98000006, 0xf0000006, 0xd8000006, 0xa0000006, 0x90000006, 0xe0000006,
77
+ 0xb8000007, 0xf8000007, 0xa8000007, 0xd0000007, 0xc0000007, 0x88000007, 0xb0000007, 0xe8000007,
78
+ 0x80000007, 0xc8000007, 0x98000007, 0xf0000007, 0xd8000007, 0xa0000007, 0x90000007, 0xe0000007,
79
+ 0x38000003, 0x78000003, 0x28000003, 0x50000003, 0x40000003, 0x08000003, 0x30000003, 0x68000003,
80
+ 0x00000003, 0x48000003, 0x18000003, 0x70000003, 0x58000003, 0x20000003, 0x10000003, 0x60000003,
81
+ 0xb8000004, 0xf8000004, 0xa8000004, 0xd0000004, 0xc0000004, 0x88000004, 0xb0000004, 0xe8000004,
82
+ 0x80000004, 0xc8000004, 0x98000004, 0xf0000004, 0xd8000004, 0xa0000004, 0x90000004, 0xe0000004,
83
+ 0x38000001, 0x78000001, 0x28000001, 0x50000001, 0x40000001, 0x08000001, 0x30000001, 0x68000001,
84
+ 0x00000001, 0x48000001, 0x18000001, 0x70000001, 0x58000001, 0x20000001, 0x10000001, 0x60000001,
85
+ 0x38000006, 0x78000006, 0x28000006, 0x50000006, 0x40000006, 0x08000006, 0x30000006, 0x68000006,
86
+ 0x00000006, 0x48000006, 0x18000006, 0x70000006, 0x58000006, 0x20000006, 0x10000006, 0x60000006,
87
+ 0x38000005, 0x78000005, 0x28000005, 0x50000005, 0x40000005, 0x08000005, 0x30000005, 0x68000005,
88
+ 0x00000005, 0x48000005, 0x18000005, 0x70000005, 0x58000005, 0x20000005, 0x10000005, 0x60000005,
89
+ 0xb8000005, 0xf8000005, 0xa8000005, 0xd0000005, 0xc0000005, 0x88000005, 0xb0000005, 0xe8000005,
90
+ 0x80000005, 0xc8000005, 0x98000005, 0xf0000005, 0xd8000005, 0xa0000005, 0x90000005, 0xe0000005,
91
+ 0xb8000003, 0xf8000003, 0xa8000003, 0xd0000003, 0xc0000003, 0x88000003, 0xb0000003, 0xe8000003,
92
+ 0x80000003, 0xc8000003, 0x98000003, 0xf0000003, 0xd8000003, 0xa0000003, 0x90000003, 0xe0000003,
93
+ 0x38000004, 0x78000004, 0x28000004, 0x50000004, 0x40000004, 0x08000004, 0x30000004, 0x68000004,
94
+ 0x00000004, 0x48000004, 0x18000004, 0x70000004, 0x58000004, 0x20000004, 0x10000004, 0x60000004,
95
+ 0xb8000000, 0xf8000000, 0xa8000000, 0xd0000000, 0xc0000000, 0x88000000, 0xb0000000, 0xe8000000,
96
+ 0x80000000, 0xc8000000, 0x98000000, 0xf0000000, 0xd8000000, 0xa0000000, 0x90000000, 0xe0000000,
97
+ 0x38000002, 0x78000002, 0x28000002, 0x50000002, 0x40000002, 0x08000002, 0x30000002, 0x68000002,
98
+ 0x00000002, 0x48000002, 0x18000002, 0x70000002, 0x58000002, 0x20000002, 0x10000002, 0x60000002,
99
+ 0xb8000001, 0xf8000001, 0xa8000001, 0xd0000001, 0xc0000001, 0x88000001, 0xb0000001, 0xe8000001,
100
+ 0x80000001, 0xc8000001, 0x98000001, 0xf0000001, 0xd8000001, 0xa0000001, 0x90000001, 0xe0000001,
101
+ 0x38000007, 0x78000007, 0x28000007, 0x50000007, 0x40000007, 0x08000007, 0x30000007, 0x68000007,
102
+ 0x00000007, 0x48000007, 0x18000007, 0x70000007, 0x58000007, 0x20000007, 0x10000007, 0x60000007,
103
+ 0x38000000, 0x78000000, 0x28000000, 0x50000000, 0x40000000, 0x08000000, 0x30000000, 0x68000000,
104
+ 0x00000000, 0x48000000, 0x18000000, 0x70000000, 0x58000000, 0x20000000, 0x10000000, 0x60000000
105
+ ],
106
+ [
107
+ 0x000000c0, 0x000000f0, 0x00000090, 0x000000a8, 0x000000b0, 0x000000c8, 0x00000088, 0x000000e0,
108
+ 0x000000f8, 0x000000a0, 0x000000d8, 0x00000080, 0x000000e8, 0x000000d0, 0x00000098, 0x000000b8,
109
+ 0x000003c0, 0x000003f0, 0x00000390, 0x000003a8, 0x000003b0, 0x000003c8, 0x00000388, 0x000003e0,
110
+ 0x000003f8, 0x000003a0, 0x000003d8, 0x00000380, 0x000003e8, 0x000003d0, 0x00000398, 0x000003b8,
111
+ 0x00000740, 0x00000770, 0x00000710, 0x00000728, 0x00000730, 0x00000748, 0x00000708, 0x00000760,
112
+ 0x00000778, 0x00000720, 0x00000758, 0x00000700, 0x00000768, 0x00000750, 0x00000718, 0x00000738,
113
+ 0x000006c0, 0x000006f0, 0x00000690, 0x000006a8, 0x000006b0, 0x000006c8, 0x00000688, 0x000006e0,
114
+ 0x000006f8, 0x000006a0, 0x000006d8, 0x00000680, 0x000006e8, 0x000006d0, 0x00000698, 0x000006b8,
115
+ 0x00000040, 0x00000070, 0x00000010, 0x00000028, 0x00000030, 0x00000048, 0x00000008, 0x00000060,
116
+ 0x00000078, 0x00000020, 0x00000058, 0x00000000, 0x00000068, 0x00000050, 0x00000018, 0x00000038,
117
+ 0x000002c0, 0x000002f0, 0x00000290, 0x000002a8, 0x000002b0, 0x000002c8, 0x00000288, 0x000002e0,
118
+ 0x000002f8, 0x000002a0, 0x000002d8, 0x00000280, 0x000002e8, 0x000002d0, 0x00000298, 0x000002b8,
119
+ 0x00000440, 0x00000470, 0x00000410, 0x00000428, 0x00000430, 0x00000448, 0x00000408, 0x00000460,
120
+ 0x00000478, 0x00000420, 0x00000458, 0x00000400, 0x00000468, 0x00000450, 0x00000418, 0x00000438,
121
+ 0x000001c0, 0x000001f0, 0x00000190, 0x000001a8, 0x000001b0, 0x000001c8, 0x00000188, 0x000001e0,
122
+ 0x000001f8, 0x000001a0, 0x000001d8, 0x00000180, 0x000001e8, 0x000001d0, 0x00000198, 0x000001b8,
123
+ 0x00000240, 0x00000270, 0x00000210, 0x00000228, 0x00000230, 0x00000248, 0x00000208, 0x00000260,
124
+ 0x00000278, 0x00000220, 0x00000258, 0x00000200, 0x00000268, 0x00000250, 0x00000218, 0x00000238,
125
+ 0x000007c0, 0x000007f0, 0x00000790, 0x000007a8, 0x000007b0, 0x000007c8, 0x00000788, 0x000007e0,
126
+ 0x000007f8, 0x000007a0, 0x000007d8, 0x00000780, 0x000007e8, 0x000007d0, 0x00000798, 0x000007b8,
127
+ 0x00000540, 0x00000570, 0x00000510, 0x00000528, 0x00000530, 0x00000548, 0x00000508, 0x00000560,
128
+ 0x00000578, 0x00000520, 0x00000558, 0x00000500, 0x00000568, 0x00000550, 0x00000518, 0x00000538,
129
+ 0x00000340, 0x00000370, 0x00000310, 0x00000328, 0x00000330, 0x00000348, 0x00000308, 0x00000360,
130
+ 0x00000378, 0x00000320, 0x00000358, 0x00000300, 0x00000368, 0x00000350, 0x00000318, 0x00000338,
131
+ 0x000004c0, 0x000004f0, 0x00000490, 0x000004a8, 0x000004b0, 0x000004c8, 0x00000488, 0x000004e0,
132
+ 0x000004f8, 0x000004a0, 0x000004d8, 0x00000480, 0x000004e8, 0x000004d0, 0x00000498, 0x000004b8,
133
+ 0x00000640, 0x00000670, 0x00000610, 0x00000628, 0x00000630, 0x00000648, 0x00000608, 0x00000660,
134
+ 0x00000678, 0x00000620, 0x00000658, 0x00000600, 0x00000668, 0x00000650, 0x00000618, 0x00000638,
135
+ 0x000005c0, 0x000005f0, 0x00000590, 0x000005a8, 0x000005b0, 0x000005c8, 0x00000588, 0x000005e0,
136
+ 0x000005f8, 0x000005a0, 0x000005d8, 0x00000580, 0x000005e8, 0x000005d0, 0x00000598, 0x000005b8,
137
+ 0x00000140, 0x00000170, 0x00000110, 0x00000128, 0x00000130, 0x00000148, 0x00000108, 0x00000160,
138
+ 0x00000178, 0x00000120, 0x00000158, 0x00000100, 0x00000168, 0x00000150, 0x00000118, 0x00000138
139
+ ]
140
+ ].freeze
141
+
142
+ end
@@ -0,0 +1,3 @@
1
+ module GostMagma
2
+ VERSION = "0.1.1"
3
+ end
metadata ADDED
@@ -0,0 +1,111 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gost_magma
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - vblazhnovgit
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2019-04-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.0'
55
+ description: GOST R 34.12/13-2015 (Magma) block cipher algorithms for ECB, CBC, CTR,
56
+ OFB, CFB, OMAC, CTR-ACPKM and OMAC-ACPKM modes.
57
+ email:
58
+ - vblazhnov@yandex.ru
59
+ executables: []
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - ".gitignore"
64
+ - ".travis.yml"
65
+ - Gemfile
66
+ - Gemfile.lock
67
+ - LICENSE.txt
68
+ - README.md
69
+ - Rakefile
70
+ - bin/console
71
+ - bin/setup
72
+ - gost_magma.gemspec
73
+ - lib/gost_magma.rb
74
+ - lib/gost_magma/magma.rb
75
+ - lib/gost_magma/magma_cbc.rb
76
+ - lib/gost_magma/magma_cfb.rb
77
+ - lib/gost_magma/magma_ctr.rb
78
+ - lib/gost_magma/magma_ctr_acpkm.rb
79
+ - lib/gost_magma/magma_ecb.rb
80
+ - lib/gost_magma/magma_key_exp_imp.rb
81
+ - lib/gost_magma/magma_ofb.rb
82
+ - lib/gost_magma/magma_omac.rb
83
+ - lib/gost_magma/magma_omac_acpkm.rb
84
+ - lib/gost_magma/magma_tables.rb
85
+ - lib/gost_magma/version.rb
86
+ homepage: https://github.com/vblazhnovgit/gost_magma.git
87
+ licenses:
88
+ - MIT
89
+ metadata:
90
+ allowed_push_host: https://rubygems.org/
91
+ post_install_message:
92
+ rdoc_options: []
93
+ require_paths:
94
+ - lib
95
+ required_ruby_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ required_rubygems_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ requirements: []
106
+ rubyforge_project:
107
+ rubygems_version: 2.6.14.3
108
+ signing_key:
109
+ specification_version: 4
110
+ summary: Magma block ciphers
111
+ test_files: []