-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvectors2048_test.go
110 lines (88 loc) · 9.31 KB
/
vectors2048_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
//go:build bits2048
// +build bits2048
package ctidh
import (
"encoding/hex"
"testing"
"github.com/stretchr/testify/require"
)
func Test2048BitVectorBlindingOperation(t *testing.T) {
publicKeyHex := "21418e787fe5ca6b7ac5c9fc4463e6e1ea5ef8d7b11bb96f6d1a7d2a70427c7a9f6ed48c32c390f573f9e6e01ef23ad84903492eea776470f68b13cadedbb1eb7cc184ff363e883d45603646301c2a477ef3c13c213503b8c21ee637ddb6b10f5f215bc7a07d3451b6bdac99cff25a1c795ade4b3b61d2a8800269d79c0b5b7d30bc917e42ed84fc55dd2cf7e26dfb024cb9af7cdde07b32ae23c2b6c47f815767e0e184b22b80acbfee433586f4d8a7e57d83dae8ed3f37553367d4e2a183c9771548ad9e25ba7f86a40bacc71911fa5b9a059b18ac9fe358e12bd5f315385f9aed96ede4ed2ff8089de64e9caf8a9b1d615b610fbc95c57f25ce9b445d7533"
publicKeyBytes, err := hex.DecodeString(publicKeyHex)
require.NoError(t, err)
publicKey := new(PublicKey)
err = publicKey.FromBytes(publicKeyBytes)
require.NoError(t, err)
blindingFactorHex := "dcd05b1450127b4ce5670e5796c63686c9afb12735f155d883250aabcd98e49ddba9d9edb632181d891ee4d5e78550b45e8e7a72365fede727d5f90acad97e7a2b70cace99765e8193e3d439d55b64576af0cca5fded676daa42f00809670572f8d3e48cd02f87d0c3c051c5730f1e9e84cf6b3c0c11311ce4f4ce110336f373d1247d339341e692b060087b0816e77879282b62211a8287281c487ba4d87e336f758093763342ec2ed4c256c2572d985d7f0b5fd2bba61203a8633277930d6840ab8865189dcfc9a63b82307e99818f52cfb158cb55a93e55387e1a08976823675e0b9c0e5a47"
blindingFactor, err := hex.DecodeString(blindingFactorHex)
require.NoError(t, err)
publicKey.Blind(blindingFactor)
blindingOutputHex := "6241f560983a45cb77ff202411b842106b313f13e16f6daee47ea2d613442f3326570451e70c15a33ef5d40b4b8e0776a6bb92d3113512e267cf71d9688da2bd1542124b8c4c2d17f22c8f1c82140bf617a48c46eb77f9ef653bac42f00ce49d3e7f7a89e211bec0d05ffce70402f74e5c4a6f0a35e34903e02af2e61bd2fb6274007dd456a341e3e70c515c0c17f61483c9af83cde4b590f2d502fa414a95c7777e876d303654c9cd3274f19f0afc60909cbd97f71fdcbfd5dedd0364b4d0402aeba7e0988a9d4d15566ed94ef918ace99ebfc108d5933b3ee01229d1099ec209e7cf305ff4369761870b06d148601dc8c566f50f06c5981079c315f623ed1f"
blindingOutputBytes, err := hex.DecodeString(blindingOutputHex)
require.NoError(t, err)
require.Equal(t, blindingOutputBytes, publicKey.Bytes())
}
func Test2048BitVectors(t *testing.T) {
// Alice
alicePrivateKeyHex := "000000000000010000000000ff0000ff00010000ff00ff000000000000ff000100ff00000000fe00000100000000010000ffff000000ff00000000000100010000ff0100000000000000ff0000ff000000ff00000000000000000000000000fe0000ff000000000000000000fe0100ff00010000010000000000ff0000ffff00000101000100010000000000000101000000000000ff000001ff000001ff000100000000000000000101ff00000000000000ff01000000000000000001000101000000000000000000ff0000000000000100000000000000000000000000000000ff0000000000"
alicePrivateKeyBytes, err := hex.DecodeString(alicePrivateKeyHex)
require.NoError(t, err)
alicePrivateKey := new(PrivateKey)
alicePrivateKey.FromBytes(alicePrivateKeyBytes)
alicePublicKeyHex := "21e57c6198f94739d91dfd3ce3bf73c0a272309c49a6495f47d14b8facf7abcf2f20668e9c3eb8c1630d8259596a035c17e153825b93fa1df44bc172e7b48d6b79291ce4fa4cc54a7e52c1f466d9de824d71a4164c2b0e50d61cbf44aa16a3e3ff8f9d39f92a4835c144f1f64e34a72561648c8b7d447681c1b8c97e36c9f73d9666b3749515a32a9f293ac30d1a3fe0d3e4c8ef4907ae1d074a1ee994adf35242c4a743bc47215c816539ff11691dd2f20be8f81b499696f01c5053437a594f1c1f30ed0caca6c4966b6c4115b343b18af1d6648725d5746ed45bc78b010217b172c400f2a7608ee5a991b3a03990709754f0f4e2870d921e16a80920b8c300"
alicePublicKeyBytes, err := hex.DecodeString(alicePublicKeyHex)
alicePublicKey := new(PublicKey)
err = alicePublicKey.FromBytes(alicePublicKeyBytes)
require.NoError(t, err)
// Bob
bobPrivateKeyHex := "0000000000000000000100010000000100000000000000ff01ff0000ff000001ff0000000000fe01000000ff00000000ff0000000000010000ff0000000100000000fe0000000000ff000000ff000000000000000000000000ff00000000ff0001000000000002000000ff0000000000ff00ff00ff00000000fe0000ff00000000ff000001ff0000ff00000000ff00ff00000000000000ff00000001000002000000000000ff000100ff00000000010000000000ff0000ffff000000000000ff0001000000ff000001000000000000ff000000000000000000000000010000000000000000ff00"
bobPrivateKeyBytes, err := hex.DecodeString(bobPrivateKeyHex)
require.NoError(t, err)
bobPrivateKey := new(PrivateKey)
bobPrivateKey.FromBytes(bobPrivateKeyBytes)
bobPublicKeyHex := "4c494a11faa365e6b22bce7f3074b3285668f5ed99e83492f3860e4957a65ca0da1ce5e8a86e880bdc8b91cb57962114d3ae94de4399953345ec6a8e7a76e9c34b6b7bde647e7339e48a19ca05fcc0b69c25369588f85e41cbbee54543e3886a2f6213d7d1fd04892420501df582cc2ce974a13d2c71131b8d36aa304c5222532b064ef0a06886bfeffae4049672fcbb1f92ee4cf99b4cb83d3efa0e5a461b425d900147570e09610159d6af16628957dc781b5c84e8f198d6041ffdaf5a67e11f054f1876981fa52cea9a796a20052d1c68df0aa51b682c5ebbf9c2464fdfa90ac0e619097c2f713ced9dd0a2c4fabdd373626936a282281110fde352da7729"
bobPublicKeyBytes, err := hex.DecodeString(bobPublicKeyHex)
bobPublicKey := new(PublicKey)
err = bobPublicKey.FromBytes(bobPublicKeyBytes)
require.NoError(t, err)
// NIKE
bobSharedBytes := DeriveSecret(bobPrivateKey, alicePublicKey)
aliceSharedBytes := DeriveSecret(alicePrivateKey, bobPublicKey)
require.Equal(t, bobSharedBytes, aliceSharedBytes)
sharedSecretHex := "660261a31b1ce1ba858ae7a0c17314b5587f13dc1c31a6eb7a38933037705bfe7b19cfd387d32dc0ea99de95f6fa1bfc7667066b668542358b6cd244b64e75a558130d583761c21c5d67f012acc846319e23c73cbcee02bb26a397f2c06fa7f73332d9761a1dd19ef73b9d8f3a8a235fc9f85d73da4240f7de268cf7dc2682a56d4afca6bad9fbfd899d9d3d22273b3f12e37dba810fd76e4ccacb2e1c7b7e42db692cb3b7fb7ffb3077e7674a4fec683c43eef1a92df1789e764fc08c9e02c3db0f8df04450f5f6a3f84b1380c061351feaa9e7f4d3814dd334b8100437432619abb1b874e4d93460430921d27cd8affdbca1236bea9307a91c97eeb2f0d72d"
sharedSecretBytes, err := hex.DecodeString(sharedSecretHex)
require.NoError(t, err)
require.Equal(t, sharedSecretBytes, aliceSharedBytes)
}
func TestPython2048BitVectors(t *testing.T) {
// Alice
alicePrivateKeyHex := "00010000000000000000000000ff000000ffff02ff00000000000000ff000000020000fe01000000000000000001ff0000010000000000ff00000000ff00000100ff0000ff00000001000001000000010000010000000000ff000000ff000001000000000001ff00010000000000ff00000001000000ff0000000000030000ffffff00000000000000000001ff00ff000000000000010100000000ff000000000000ff00020000000000000000ff00000001000000ffff0000000000ff000000000000000100000101000000ff00000000000000000000000000000000ff000000000001000000"
alicePrivateKeyBytes, err := hex.DecodeString(alicePrivateKeyHex)
require.NoError(t, err)
alicePrivateKey := new(PrivateKey)
alicePrivateKey.FromBytes(alicePrivateKeyBytes)
alicePublicKeyHex := "b2af3db1d3070879a0a0f4dbabd8c4d4e44536ad3caa22a1e212fffaa9886611b09904ba5e2d889e7aa54186d9b134e01a06da93f5c61b5c035a3d738388a121e3b6774f298fedaca36edfc4f1c5c10153ad40fa8a116f9668189bbbae25c09d42d34703756076e3326c6302dade803bbcdbb6a66650bf3115c72b40d9e71eca2309298a5b2c0469d62c1fa46a956287617395e04e7e3842f71e060ca73738461bb30f2ca3329c2c8bbdce4b4f4b47ef3c851799144003cab417d55988ddbe23920fd92692d00eb3aa1e63d04651ca4e10a885c7af948ebf93dae875152ca10a47feb67d79c7536c941122996a5d81e8ed3306056b2c31048edd3e8bbfa28c38"
alicePublicKeyBytes, err := hex.DecodeString(alicePublicKeyHex)
alicePublicKey := new(PublicKey)
err = alicePublicKey.FromBytes(alicePublicKeyBytes)
require.NoError(t, err)
// Bob
bobPrivateKeyHex := "0000000100000000000000ff00000100ff000000000000000001fe0000010000020000010000ff00000000000100010001000000ff00000100000000ff000000000000000000ffff00000000000000000000ff00fe0000000000ff00000100000000ff000001000000ff00ff000000000000010002000000ff00000001ff0000ff00ff00000000000000000001000000000100000100000001000000ff0000ff010000000000000101ff0000000000000100000100000001000000ff00000000000000010000ff0000ff00000000000000010000000000000000000000000000ff000000010000"
bobPrivateKeyBytes, err := hex.DecodeString(bobPrivateKeyHex)
require.NoError(t, err)
bobPrivateKey := new(PrivateKey)
bobPrivateKey.FromBytes(bobPrivateKeyBytes)
bobPublicKeyHex := "135d73849ad45f7e14134b5b550e9700923cdd2f2c6eba69a6a34317120c0fcba202b171924ff08eaa6b0c7635b457e9d5e3ce2a09ea562704166d59ca57fb3ae8046a0aa330c60978add40ea6e3c386c4ca3c7b33ef02f8aec3f166c31949e93a30e665c971588faa4eb4ef07f3143fb6c0efd4f7264f1dde8fdb6d277657b2129439b7f01aba57b82efa2c2fe12a637b99a5f974ae08c3ae24a2f70eff86947dbde7f7624b082143ea3e4864afbb3d1a40af0f2e1acc09eb07922d05f99072fdd534f3d96edd09dc642cbc452345a49d0f30b515078a76696bed53c175b436c58bbcfb95893b99f252896bb3d29bb711d401a89969aeaf7b88409c76b4e834"
bobPublicKeyBytes, err := hex.DecodeString(bobPublicKeyHex)
bobPublicKey := new(PublicKey)
err = bobPublicKey.FromBytes(bobPublicKeyBytes)
require.NoError(t, err)
// NIKE
bobSharedBytes := DeriveSecret(bobPrivateKey, alicePublicKey)
aliceSharedBytes := DeriveSecret(alicePrivateKey, bobPublicKey)
require.Equal(t, bobSharedBytes, aliceSharedBytes)
sharedSecretHex := "f61ebdb51cff8de704e1940b702b7359f3936f632b9ac33a18d9f58f85153875e14fdc701912cc8717f0cb4c32729bc5eb9dbfc9ef207281103ae381f2ba0553686cbc43c279d1da8897e5fbab50e2a05e38ef7b012a85b856ebb3c1ebd133dc32f710dd6d67f80093b37402e5581f350f09188ac97b2ea7a14fbaa3c5db0bb38036ac2e81e34f1a04fae0fd91b90b3bca1fa3ae5b5bd37e0edebf08d806eb4cd9ab136289c9e86aba3f8839fabec86ae0cdbd794409a6b6f81b3a5c5f9f56da5e9bdeaf8f6d802be6f987ab5772f35b3855291c9ab3b1848d654841a24e014f7a112cf7591d16bf1d33b2d46e4294fca42cacb1c2eacdbe9040ab794906353f"
sharedSecretBytes, err := hex.DecodeString(sharedSecretHex)
require.NoError(t, err)
require.Equal(t, sharedSecretBytes, aliceSharedBytes)
}