|
| 1 | +package callformat |
| 2 | + |
| 3 | +import ( |
| 4 | + "crypto/sha512" |
| 5 | + "encoding/hex" |
| 6 | + "testing" |
| 7 | + |
| 8 | + "github.com/oasisprotocol/curve25519-voi/primitives/x25519" |
| 9 | + "github.com/oasisprotocol/deoxysii" |
| 10 | + "github.com/oasisprotocol/oasis-core/go/common/cbor" |
| 11 | + "github.com/stretchr/testify/require" |
| 12 | + |
| 13 | + "github.com/oasisprotocol/oasis-sdk/client-sdk/go/types" |
| 14 | +) |
| 15 | + |
| 16 | +func TestInterop(t *testing.T) { |
| 17 | + clientSK := (x25519.PrivateKey)(sha512.Sum512_256([]byte("callformat test client"))) |
| 18 | + clientPK := clientSK.Public() |
| 19 | + runtimeSK := (x25519.PrivateKey)(sha512.Sum512_256([]byte("callformat test runtime"))) |
| 20 | + runtimePK := runtimeSK.Public() |
| 21 | + |
| 22 | + call := types.Call{ |
| 23 | + Method: "mock", |
| 24 | + Body: nil, |
| 25 | + } |
| 26 | + var nonce [deoxysii.NonceSize]byte |
| 27 | + cfg := EncodeConfig{ |
| 28 | + PublicKey: &types.SignedPublicKey{PublicKey: *runtimePK}, |
| 29 | + Epoch: 1, |
| 30 | + } |
| 31 | + callEnc, metadata := encodeCallEncryptedX25519DeoxysII(&call, clientPK, &clientSK, nonce, &cfg) |
| 32 | + |
| 33 | + // If these change, update runtime-sdk/src/callformat.rs too. |
| 34 | + require.Equal(t, "a264626f6479f6666d6574686f64646d6f636b", hex.EncodeToString(cbor.Marshal(call))) |
| 35 | + require.Equal(t, "a264626f6479a462706b5820eedc75d3c500fc1b2d321757c383e276ab705c5a02013b3f1966e9caf73cdb0264646174615823c4635f2f9496a033a578e3f1e007be5d6cfa9631fb2fe2c8c76d26b322b6afb2fa5cdf6565706f636801656e6f6e63654f00000000000000000000000000000066666f726d617401", hex.EncodeToString(cbor.Marshal(callEnc))) |
| 36 | + |
| 37 | + resultCBOR, err := hex.DecodeString("a1626f6bf6") |
| 38 | + require.NoError(t, err) |
| 39 | + var result types.CallResult |
| 40 | + err = cbor.Unmarshal(resultCBOR, &result) |
| 41 | + require.NoError(t, err) |
| 42 | + resultEncCBOR, err := hex.DecodeString("a167756e6b6e6f776ea264646174615528d1c5eedc5e54e1ef140ba905e84e0bea8daf60af656e6f6e63654f000000000000000000000000000000") |
| 43 | + require.NoError(t, err) |
| 44 | + var resultEnc types.CallResult |
| 45 | + err = cbor.Unmarshal(resultEncCBOR, &resultEnc) |
| 46 | + require.NoError(t, err) |
| 47 | + |
| 48 | + resultOurs, err := DecodeResult(&resultEnc, metadata) |
| 49 | + require.NoError(t, err) |
| 50 | + require.Equal(t, &result, resultOurs) |
| 51 | +} |
0 commit comments