ceremonyclient/node/crypto/doubleratchet_test.go

132 lines
4.0 KiB
Go
Raw Normal View History

2023-08-21 03:50:38 +00:00
package crypto_test
// Uncomment with full release
// import (
// "crypto/rand"
// "testing"
// "github.com/stretchr/testify/require"
// "source.quilibrium.com/quilibrium/monorepo/nekryptology/pkg/core/curves"
// "source.quilibrium.com/quilibrium/monorepo/node/crypto"
// )
// func TestRatchetEncrypt(t *testing.T) {
// x448SendingIdentityPrivateKey := curves.ED448().Scalar.Random(rand.Reader)
// x448SendingEphemeralPrivateKey := curves.ED448().Scalar.Random(rand.Reader)
// x448ReceivingIdentityPrivateKey := curves.ED448().Scalar.Random(rand.Reader)
// x448ReceivingSignedPrePrivateKey := curves.ED448().Scalar.Random(rand.Reader)
// x448SendingIdentityKey := curves.ED448().NewGeneratorPoint().Mul(x448SendingIdentityPrivateKey)
// x448SendingEphemeralKey := curves.ED448().NewGeneratorPoint().Mul(x448SendingEphemeralPrivateKey)
// x448ReceivingIdentityKey := curves.ED448().NewGeneratorPoint().Mul(x448ReceivingIdentityPrivateKey)
// x448ReceivingSignedPreKey := curves.ED448().NewGeneratorPoint().Mul(x448ReceivingSignedPrePrivateKey)
// senderResult := crypto.SenderX3DH(
// x448SendingIdentityPrivateKey,
// x448SendingEphemeralPrivateKey,
// x448ReceivingIdentityKey,
// x448ReceivingSignedPreKey,
// 96,
// )
// receiverResult := crypto.ReceiverX3DH(
// x448ReceivingIdentityPrivateKey,
// x448ReceivingSignedPrePrivateKey,
// x448SendingIdentityKey,
// x448SendingEphemeralKey,
// 96,
// )
// sender, err := crypto.NewDoubleRatchetParticipant(
// senderResult[:32],
// senderResult[32:64],
// senderResult[64:],
// true,
// x448SendingEphemeralPrivateKey,
// x448ReceivingSignedPreKey,
// *curves.ED448(),
// nil,
// )
// require.NoError(t, err)
// receiver, err := crypto.NewDoubleRatchetParticipant(
// receiverResult[:32],
// receiverResult[32:64],
// receiverResult[64:],
// false,
// x448ReceivingSignedPrePrivateKey,
// x448SendingEphemeralKey,
// *curves.ED448(),
// nil,
// )
// require.NoError(t, err)
// envelope1, err := sender.RatchetEncrypt([]byte("hello there"))
// require.NoError(t, err)
// envelope2, err := sender.RatchetEncrypt([]byte("general kenobi"))
// require.NoError(t, err)
// plaintext1, err := receiver.RatchetDecrypt(envelope1)
// require.NoError(t, err)
// plaintext2, err := receiver.RatchetDecrypt(envelope2)
// require.NoError(t, err)
// envelope3, err := receiver.RatchetEncrypt([]byte("you are a bold one"))
// require.NoError(t, err)
// envelope4, err := receiver.RatchetEncrypt([]byte("[mechanical laughing]"))
// require.NoError(t, err)
// plaintext3, err := sender.RatchetDecrypt(envelope3)
// require.NoError(t, err)
// plaintext4, err := sender.RatchetDecrypt(envelope4)
// require.NoError(t, err)
// // confirm large messages
// msg5 := make([]byte, 1024*1024*10)
// msg6 := make([]byte, 1024*1024*10)
// msg7 := make([]byte, 1024*1024*10)
// msg8 := make([]byte, 1024*1024*10)
// rand.Read(msg5)
// rand.Read(msg6)
// rand.Read(msg7)
// rand.Read(msg8)
// envelope5, err := sender.RatchetEncrypt(msg5)
// require.NoError(t, err)
// envelope6, err := sender.RatchetEncrypt(msg6)
// require.NoError(t, err)
// plaintext5, err := receiver.RatchetDecrypt(envelope5)
// require.NoError(t, err)
// plaintext6, err := receiver.RatchetDecrypt(envelope6)
// require.NoError(t, err)
// envelope7, err := receiver.RatchetEncrypt(msg7)
// require.NoError(t, err)
// envelope8, err := receiver.RatchetEncrypt(msg8)
// require.NoError(t, err)
// plaintext7, err := sender.RatchetDecrypt(envelope7)
// require.NoError(t, err)
// plaintext8, err := sender.RatchetDecrypt(envelope8)
// require.NoError(t, err)
// require.Equal(t, []byte("hello there"), plaintext1)
// require.Equal(t, []byte("general kenobi"), plaintext2)
// require.Equal(t, []byte("you are a bold one"), plaintext3)
// require.Equal(t, []byte("[mechanical laughing]"), plaintext4)
// require.Equal(t, msg5, plaintext5)
// require.Equal(t, msg6, plaintext6)
// require.Equal(t, msg7, plaintext7)
// require.Equal(t, msg8, plaintext8)
// }