1 // GoGOST -- Pure Go GOST cryptographic functions library
2 // Copyright (C) 2015-2019 Sergey Matveev <stargrave@stargrave.org>
4 // This program is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
14 // You should have received a copy of the GNU General Public License
15 // along with this program. If not, see <http://www.gnu.org/licenses/>.
17 package gost34112012256
24 func TestTLSTreeMagmaCTROMAC(t *testing.T) {
25 tt := NewTLSTree(TLSGOSTR341112256WithMagmaCTROMAC, []byte{
26 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
27 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
28 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
29 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
31 t.Run("0", func(t *testing.T) {
33 if bytes.Compare(got, []byte{
34 0x50, 0x76, 0x42, 0xD9, 0x58, 0xC5, 0x20, 0xC6,
35 0xD7, 0xEE, 0xF5, 0xCA, 0x8A, 0x53, 0x16, 0xD4,
36 0xF3, 0x4B, 0x85, 0x5D, 0x2D, 0xD4, 0xBC, 0xBF,
37 0x4E, 0x5B, 0xF0, 0xFF, 0x64, 0x1A, 0x19, 0xFF,
41 if bytes.Compare(got, tt.Derive(1)) != 0 {
45 t.Run("4095", func(t *testing.T) {
46 if bytes.Compare(tt.Derive(4095), []byte{
47 0x50, 0x76, 0x42, 0xD9, 0x58, 0xC5, 0x20, 0xC6,
48 0xD7, 0xEE, 0xF5, 0xCA, 0x8A, 0x53, 0x16, 0xD4,
49 0xF3, 0x4B, 0x85, 0x5D, 0x2D, 0xD4, 0xBC, 0xBF,
50 0x4E, 0x5B, 0xF0, 0xFF, 0x64, 0x1A, 0x19, 0xFF,
55 t.Run("4096", func(t *testing.T) {
56 if bytes.Compare(tt.Derive(4096), []byte{
57 0x71, 0x86, 0x93, 0xEC, 0xD3, 0xF1, 0xDC, 0xE2,
58 0x11, 0x93, 0xBD, 0x56, 0x40, 0x6A, 0xA4, 0xE2,
59 0x09, 0x0F, 0xE1, 0xC8, 0x7A, 0x5D, 0x5D, 0x7A,
60 0x8C, 0xE6, 0xE0, 0xD8, 0x28, 0xA4, 0x39, 0x15,
65 t.Run("33554431", func(t *testing.T) {
66 if bytes.Compare(tt.Derive(33554431), []byte{
67 0xCD, 0x4E, 0x6F, 0x09, 0x94, 0xC4, 0xCA, 0x17,
68 0xA9, 0xAD, 0xE5, 0x3D, 0x69, 0x20, 0x49, 0x77,
69 0x57, 0x87, 0x3B, 0xC0, 0x8D, 0x4F, 0x98, 0x06,
70 0xE3, 0xC9, 0x99, 0xA7, 0xE4, 0xAE, 0x70, 0xE0,
75 t.Run("33554432", func(t *testing.T) {
76 if bytes.Compare(tt.Derive(33554432), []byte{
77 0x4E, 0xAB, 0x0F, 0x8A, 0x28, 0x2D, 0xE5, 0x78,
78 0x85, 0x7B, 0xE0, 0x15, 0xD1, 0x32, 0xCD, 0xFD,
79 0x88, 0xF0, 0xEB, 0xD9, 0x9D, 0x10, 0xCC, 0xA3,
80 0xB6, 0xD9, 0x11, 0x4E, 0x37, 0x56, 0x5D, 0xE7,
85 t.Run("274877906943", func(t *testing.T) {
86 if bytes.Compare(tt.Derive(274877906943), []byte{
87 0x37, 0x06, 0xB1, 0xBE, 0xE6, 0xF3, 0xBE, 0xDB,
88 0x74, 0x66, 0x4E, 0x1C, 0x43, 0x40, 0xB5, 0xE1,
89 0x81, 0x5F, 0xFA, 0x87, 0xEA, 0x80, 0xF4, 0x0E,
90 0xAF, 0xCC, 0x28, 0xEF, 0x30, 0xDD, 0xF3, 0xBB,
95 t.Run("274877906944", func(t *testing.T) {
96 if bytes.Compare(tt.Derive(274877906944), []byte{
97 0x9B, 0xE5, 0x7C, 0xB5, 0x2F, 0x46, 0xB6, 0x0C,
98 0x68, 0x40, 0xCD, 0x4E, 0x95, 0x9A, 0x16, 0x8A,
99 0x74, 0x82, 0x2C, 0x1D, 0x00, 0x6A, 0xC7, 0x46,
100 0xDA, 0xBB, 0xB9, 0x84, 0x8E, 0xB0, 0xA5, 0x8A,
107 func TestTLSTreeKuznyechikCTROMAC(t *testing.T) {
108 tt := NewTLSTree(TLSGOSTR341112256WithKuznyechikCTROMAC, []byte{
109 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
110 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
111 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
112 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
114 t.Run("0", func(t *testing.T) {
116 if bytes.Compare(got, []byte{
117 0x50, 0x76, 0x42, 0xD9, 0x58, 0xC5, 0x20, 0xC6,
118 0xD7, 0xEE, 0xF5, 0xCA, 0x8A, 0x53, 0x16, 0xD4,
119 0xF3, 0x4B, 0x85, 0x5D, 0x2D, 0xD4, 0xBC, 0xBF,
120 0x4E, 0x5B, 0xF0, 0xFF, 0x64, 0x1A, 0x19, 0xFF,
124 if bytes.Compare(got, tt.Derive(1)) != 0 {
128 t.Run("63", func(t *testing.T) {
129 if bytes.Compare(tt.Derive(63), []byte{
130 0x50, 0x76, 0x42, 0xD9, 0x58, 0xC5, 0x20, 0xC6,
131 0xD7, 0xEE, 0xF5, 0xCA, 0x8A, 0x53, 0x16, 0xD4,
132 0xF3, 0x4B, 0x85, 0x5D, 0x2D, 0xD4, 0xBC, 0xBF,
133 0x4E, 0x5B, 0xF0, 0xFF, 0x64, 0x1A, 0x19, 0xFF,
138 t.Run("64", func(t *testing.T) {
139 if bytes.Compare(tt.Derive(64), []byte{
140 0xC1, 0x9B, 0x63, 0x9F, 0x4B, 0xEA, 0x78, 0x8C,
141 0x1C, 0x59, 0xB4, 0xC8, 0x87, 0xDB, 0x5B, 0x07,
142 0xC1, 0x91, 0x19, 0x10, 0x18, 0x68, 0xDA, 0xB8,
143 0x9A, 0x8D, 0x93, 0x61, 0xB2, 0xF0, 0x10, 0xF3,
148 t.Run("524287", func(t *testing.T) {
149 if bytes.Compare(tt.Derive(524287), []byte{
150 0x92, 0x30, 0x3E, 0xB5, 0x61, 0x56, 0x88, 0x54,
151 0xE3, 0x3E, 0x4F, 0xE0, 0x97, 0xA9, 0x95, 0x99,
152 0x17, 0x9F, 0x5B, 0x90, 0x94, 0xAE, 0x34, 0x79,
153 0xE6, 0x1C, 0x43, 0x69, 0x3A, 0x3F, 0x0A, 0x06,
158 t.Run("524288", func(t *testing.T) {
159 if bytes.Compare(tt.Derive(524288), []byte{
160 0xE8, 0x55, 0xA0, 0xE2, 0xCB, 0xDD, 0x68, 0xC1,
161 0x13, 0x7C, 0xEF, 0x3E, 0x80, 0x1E, 0x0B, 0xFF,
162 0x68, 0x62, 0x8C, 0x36, 0x43, 0x68, 0x27, 0x6D,
163 0x0C, 0xB8, 0x7E, 0xB5, 0x6E, 0x94, 0xEF, 0x42,
168 t.Run("4294967295", func(t *testing.T) {
169 if bytes.Compare(tt.Derive(4294967295), []byte{
170 0x93, 0xD3, 0xCA, 0xE9, 0x5A, 0x55, 0xB7, 0x1A,
171 0xA3, 0xB9, 0xA7, 0xDD, 0xF9, 0x9A, 0x6A, 0xAC,
172 0x3F, 0xDA, 0x17, 0x2A, 0x79, 0x60, 0x58, 0x04,
173 0xA9, 0xC9, 0xFC, 0x6E, 0x84, 0x8A, 0xF1, 0xAA,
178 t.Run("4294967296", func(t *testing.T) {
179 if bytes.Compare(tt.Derive(4294967296), []byte{
180 0x7F, 0xFB, 0x1A, 0xD7, 0xE5, 0x7B, 0x70, 0xBE,
181 0x10, 0x96, 0x31, 0xD2, 0x71, 0x92, 0x98, 0xB9,
182 0x7D, 0xEE, 0x3B, 0x00, 0x8D, 0x86, 0xF8, 0x3D,
183 0xAA, 0xF6, 0x2A, 0x4E, 0xA5, 0xB7, 0xAA, 0xFD,