diff --git a/storage/cmix/roundKeys_test.go b/storage/cmix/roundKeys_test.go index 940d669e912024f21a45d669da5289cf33ca73a9..0b701375bab6fee74bd509bab1d208f33dcde61b 100644 --- a/storage/cmix/roundKeys_test.go +++ b/storage/cmix/roundKeys_test.go @@ -7,111 +7,110 @@ package cmix -// TODO: commented out to work with go 1.16 -// // tests that the encrypted paylaods and kmacs generated are consistent -// func TestRoundKeys_Encrypt_Consistency(t *testing.T) { -// const numKeys = 5 -// -// expectedPayload := []byte{107, 20, 177, 34, 255, 243, 201, 126, 124, 105, 4, -// 62, 204, 52, 56, 2, 60, 196, 105, 167, 80, 78, 189, 83, 248, 113, 207, -// 34, 255, 55, 37, 48, 75, 130, 200, 218, 88, 16, 29, 171, 26, 26, 77, 59, -// 244, 111, 117, 236, 102, 86, 32, 31, 223, 26, 151, 112, 191, 183, 152, -// 18, 104, 58, 49, 42, 77, 233, 163, 193, 36, 7, 44, 173, 99, 65, 24, 127, -// 197, 96, 51, 69, 8, 154, 35, 119, 147, 80, 113, 55, 173, 129, 151, 195, -// 56, 11, 92, 2, 181, 135, 1, 114, 12, 197, 55, 252, 123, 89, 92, 185, 87, -// 215, 193, 203, 199, 224, 58, 173, 193, 159, 166, 22, 60, 138, 97, 15, -// 173, 213, 45, 236, 7, 66, 39, 168, 21, 26, 210, 66, 176, 135, 131, 113, -// 157, 53, 120, 128, 187, 167, 127, 170, 248, 215, 158, 18, 61, 158, 137, -// 62, 120, 254, 114, 93, 78, 11, 13, 104, 94, 232, 98, 108, 238, 42, 181, -// 221, 128, 124, 188, 119, 13, 101, 7, 61, 85, 19, 20, 140, 32, 101, 39, -// 151, 93, 134, 78, 155, 100, 110, 192, 76, 62, 249, 91, 105, 225, 180, -// 95, 197, 101, 80, 8, 93, 139, 78, 109, 197, 255, 218, 6, 167, 49, 61, -// 184, 178, 174, 155, 147, 238, 228, 169, 27, 175, 119, 76, 217, 240, 1, -// 134, 114, 3, 179, 223, 152, 68, 152, 221, 44, 128, 55, 165, 206, 116, -// 88, 188, 72, 41, 41, 9, 67, 188, 182, 118, 213, 25, 237, 146, 170, 80, -// 42, 101, 230, 87, 244, 170, 176, 110, 94, 43, 110, 200, 54, 126, 206, -// 252, 182, 21, 207, 142, 170, 150, 34, 155, 99, 110, 131, 120, 137, 255, -// 200, 132, 249, 213, 180, 121, 235, 126, 30, 149, 18, 8, 159, 153, 73, -// 71, 104, 246, 231, 168, 201, 108, 42, 10, 110, 35, 183, 160, 15, 11, -// 171, 117, 0, 87, 251, 218, 121, 155, 237, 58, 24, 139, 217, 62, 238, -// 255, 116, 172, 135, 221, 207, 163, 214, 62, 1, 144, 245, 233, 147, 188, -// 67, 97, 161, 79, 109, 129, 114, 21, 183, 66, 54, 242, 120, 91, 158, 35, -// 110, 167, 44, 54, 87, 208, 145, 212, 59, 160, 115, 214, 146, 201, 199, -// 104, 86, 140, 131, 189, 146, 47, 165, 197, 90, 100, 105, 16, 223, 96, -// 86, 132, 221, 190, 175, 241, 121, 157, 19, 190, 243, 191, 116, 92, 31, -// 209, 147, 7, 233, 188, 114, 88, 225, 180, 52, 139, 70, 88, 193, 111, -// 49, 209, 4, 19, 135, 206, 56, 164, 230, 222, 219, 153, 94, 163, 168, -// 181, 185, 206, 124, 13, 179, 32, 93, 85, 6, 179, 57, 197, 89, 254, -// 180, 133, 147, 174, 182, 38, 8, 127, 20, 133, 100, 20, 228, 62, 252, -// 175, 50, 239, 179, 108, 59, 222, 29, 113, 140, 2, 104, 167, 175, 193, -// 208, 149, 24, 135, 165, 106, 249, 164, 122, 139, 169, 193, 39, 209, 132, -// 238, 23, 153, 115, 200, 104, 31} -// -// expectedKmacs := [][]byte{{110, 235, 79, 128, 16, 94, 181, 95, 101, -// 152, 187, 204, 87, 236, 211, 102, 88, 130, 191, 103, 23, 229, -// 48, 142, 155, 167, 200, 108, 66, 172, 178, 209}, -// {48, 74, 148, 205, 235, 46, 172, 128, 28, 42, 116, 27, 64, 83, 122, -// 5, 51, 162, 200, 198, 234, 92, 77, 131, 136, 108, 57, 97, 193, -// 208, 148, 217}, -// {202, 163, 19, 179, 175, 100, 71, 176, 241, 80, 85, 174, 120, 45, -// 152, 117, 82, 193, 203, 188, 158, 60, 111, 217, 64, 47, 219, -// 169, 100, 177, 42, 159}, -// {66, 121, 20, 21, 206, 142, 3, 75, 229, 94, 197, 4, 117, 223, 245, -// 117, 14, 17, 158, 138, 176, 106, 93, 55, 247, 155, 250, 232, -// 41, 169, 197, 150}, -// {65, 74, 222, 172, 217, 13, 56, 208, 111, 98, 199, 205, 74, 141, 30, -// 109, 51, 20, 186, 9, 234, 197, 6, 200, 139, 86, 139, 130, 8, 15, -// 32, 209}} -// -// cmixGrp := cyclic.NewGroup( -// large.NewIntFromString("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1"+ -// "29024E088A67CC74020BBEA63B139B22514A08798E3404DD"+ -// "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245"+ -// "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED"+ -// "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D"+ -// "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F"+ -// "83655D23DCA3AD961C62F356208552BB9ED529077096966D"+ -// "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B"+ -// "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9"+ -// "DE2BCBF6955817183995497CEA956AE515D2261898FA0510"+ -// "15728E5A8AACAA68FFFFFFFFFFFFFFFF", 16), -// large.NewIntFromString("2", 16)) -// -// prng := rand.New(rand.NewSource(42)) -// -// keys := make([]*key, numKeys) -// -// for i := 0; i < numKeys; i++ { -// keyBytes, _ := csprng.GenerateInGroup(cmixGrp.GetPBytes(), cmixGrp.GetP().ByteLen(), prng) -// keys[i] = &key{ -// k: cmixGrp.NewIntFromBytes(keyBytes), -// } -// } -// -// salt := make([]byte, 32) -// prng.Read(salt) -// -// msg := format.NewMessage(cmixGrp.GetP().ByteLen()) -// contents := make([]byte, msg.ContentsSize()) -// prng.Read(contents) -// msg.SetContents(contents) -// -// rk := RoundKeys{ -// keys: keys, -// g: cmixGrp, -// } -// -// rid := id.Round(42) -// -// encMsg, kmacs := rk.Encrypt(msg, salt, rid) -// -// if !bytes.Equal(encMsg.Marshal(), expectedPayload) { -// t.Errorf("Encrypted messages do not match\n "+ -// "expected: %v\n received: %v", expectedPayload, encMsg.Marshal()) -// } -// -// if !reflect.DeepEqual(kmacs, expectedKmacs) { -// t.Errorf("kmacs do not match\n "+ -// "expected: %v\n received: %v", expectedKmacs, kmacs) -// } -// } +import ( + "bytes" + "gitlab.com/elixxir/crypto/cyclic" + "gitlab.com/elixxir/primitives/format" + "gitlab.com/xx_network/crypto/csprng" + "gitlab.com/xx_network/crypto/large" + "gitlab.com/xx_network/primitives/id" + "math/rand" + "reflect" + "testing" +) + +// tests that the encrypted paylaods and kmacs generated are consistent +func TestRoundKeys_Encrypt_Consistency(t *testing.T) { + const numKeys = 5 + + expectedPayload := []byte{240, 199, 83, 226, 28, 164, 104, 139, 171, 255, 234, 86, 170, 65, 29, 254, 100, 4, 81, + 112, 154, 115, 224, 245, 29, 60, 226, 209, 135, 75, 108, 62, 95, 185, 211, 56, 83, 55, 250, 159, 173, 176, 137, + 181, 1, 155, 228, 223, 170, 232, 71, 225, 55, 27, 189, 218, 146, 74, 134, 133, 105, 17, 69, 105, 160, 60, 206, + 32, 244, 175, 98, 142, 217, 27, 92, 132, 225, 146, 171, 59, 2, 191, 220, 125, 212, 81, 114, 98, 75, 253, 93, + 126, 48, 230, 249, 118, 215, 90, 231, 126, 43, 235, 151, 191, 23, 77, 147, 98, 212, 86, 89, 42, 189, 24, 124, + 189, 201, 184, 82, 152, 255, 137, 119, 21, 74, 118, 157, 114, 229, 232, 36, 185, 104, 101, 132, 23, 79, 65, 195, + 53, 222, 27, 66, 80, 123, 252, 109, 254, 44, 120, 114, 126, 237, 159, 252, 185, 187, 95, 255, 31, 41, 245, 225, + 95, 101, 118, 190, 233, 44, 5, 42, 239, 140, 70, 216, 211, 129, 43, 189, 1, 11, 111, 2, 64, 254, 44, 87, 164, + 28, 188, 227, 1, 32, 134, 183, 156, 84, 222, 79, 27, 210, 124, 46, 153, 56, 122, 117, 17, 171, 85, 232, 112, + 170, 10, 31, 115, 17, 119, 233, 150, 200, 183, 198, 74, 70, 179, 135, 27, 195, 190, 56, 126, 143, 226, 93, 16, + 46, 147, 248, 128, 124, 182, 254, 187, 223, 187, 54, 181, 62, 89, 202, 176, 25, 249, 139, 167, 26, 98, 143, 3, + 78, 54, 116, 201, 6, 33, 158, 225, 254, 106, 15, 6, 175, 96, 2, 63, 0, 59, 188, 124, 120, 147, 95, 24, 26, 115, + 235, 154, 240, 65, 226, 133, 91, 249, 223, 55, 122, 0, 76, 225, 104, 101, 242, 46, 136, 122, 127, 159, 0, 9, + 210, 42, 181, 31, 94, 20, 106, 175, 195, 56, 223, 165, 217, 164, 93, 55, 190, 253, 192, 249, 117, 226, 222, 65, + 82, 136, 36, 58, 3, 246, 76, 101, 24, 20, 50, 89, 22, 144, 184, 38, 82, 103, 2, 48, 59, 73, 75, 58, 33, 206, 49, + 88, 201, 44, 176, 242, 248, 254, 127, 101, 62, 57, 103, 75, 213, 73, 30, 146, 223, 118, 104, 126, 189, 179, 132, + 25, 183, 178, 65, 131, 72, 121, 42, 170, 40, 186, 65, 73, 175, 234, 52, 10, 171, 36, 165, 24, 156, 12, 198, 100, + 77, 137, 91, 221, 152, 219, 207, 244, 44, 126, 178, 119, 133, 147, 158, 54, 188, 52, 10, 63, 138, 180, 44, 29, + 40, 236, 255, 163, 208, 2, 212, 184, 50, 157, 82, 199, 90, 1, 205, 214, 143, 123, 92, 210, 88, 98, 182, 197, 49, + 170, 100, 143, 145, 9, 156, 0, 45, 59, 196, 6, 8, 157, 98, 15, 111, 162, 51, 12, 223, 0, 173, 187, 178, 1, 156, + 68, 183, 64, 178, 250, 40, 65, 50, 161, 96, 163, 106, 14, 43, 179, 75, 199, 15, 223, 192, 121, 144, 223, 167, + 254, 150, 188} + + expectedKmacs := [][]byte{{110, 235, 79, 128, 16, 94, 181, 95, 101, + 152, 187, 204, 87, 236, 211, 102, 88, 130, 191, 103, 23, 229, + 48, 142, 155, 167, 200, 108, 66, 172, 178, 209}, + {48, 74, 148, 205, 235, 46, 172, 128, 28, 42, 116, 27, 64, 83, 122, + 5, 51, 162, 200, 198, 234, 92, 77, 131, 136, 108, 57, 97, 193, + 208, 148, 217}, + {202, 163, 19, 179, 175, 100, 71, 176, 241, 80, 85, 174, 120, 45, + 152, 117, 82, 193, 203, 188, 158, 60, 111, 217, 64, 47, 219, + 169, 100, 177, 42, 159}, + {66, 121, 20, 21, 206, 142, 3, 75, 229, 94, 197, 4, 117, 223, 245, + 117, 14, 17, 158, 138, 176, 106, 93, 55, 247, 155, 250, 232, + 41, 169, 197, 150}, + {65, 74, 222, 172, 217, 13, 56, 208, 111, 98, 199, 205, 74, 141, 30, + 109, 51, 20, 186, 9, 234, 197, 6, 200, 139, 86, 139, 130, 8, 15, + 32, 209}} + + cmixGrp := cyclic.NewGroup( + large.NewIntFromString("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1"+ + "29024E088A67CC74020BBEA63B139B22514A08798E3404DD"+ + "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245"+ + "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED"+ + "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D"+ + "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F"+ + "83655D23DCA3AD961C62F356208552BB9ED529077096966D"+ + "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B"+ + "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9"+ + "DE2BCBF6955817183995497CEA956AE515D2261898FA0510"+ + "15728E5A8AACAA68FFFFFFFFFFFFFFFF", 16), + large.NewIntFromString("2", 16)) + + prng := rand.New(rand.NewSource(42)) + + keys := make([]*key, numKeys) + + for i := 0; i < numKeys; i++ { + keyBytes, _ := csprng.GenerateInGroup(cmixGrp.GetPBytes(), cmixGrp.GetP().ByteLen(), prng) + keys[i] = &key{ + k: cmixGrp.NewIntFromBytes(keyBytes), + } + } + + salt := make([]byte, 32) + prng.Read(salt) + + msg := format.NewMessage(cmixGrp.GetP().ByteLen()) + contents := make([]byte, msg.ContentsSize()) + prng.Read(contents) + msg.SetContents(contents) + + rk := RoundKeys{ + keys: keys, + g: cmixGrp, + } + + rid := id.Round(42) + + encMsg, kmacs := rk.Encrypt(msg, salt, rid) + + if !bytes.Equal(encMsg.Marshal(), expectedPayload) { + t.Errorf("Encrypted messages do not match\n "+ + "expected: %v\n received: %v", expectedPayload, encMsg.Marshal()) + } + + if !reflect.DeepEqual(kmacs, expectedKmacs) { + t.Errorf("kmacs do not match\n "+ + "expected: %v\n received: %v", expectedKmacs, kmacs) + } +}