|
|
@ -31,9 +31,9 @@ func copyFromBuf(dst []byte, src []byte, beg int) int { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func generateMessageParams() (*MessageParams, error) { |
|
|
|
func generateMessageParams() (*MessageParams, error) { |
|
|
|
// set all the parameters except p.Dst
|
|
|
|
// set all the parameters except p.Dst and p.Padding
|
|
|
|
|
|
|
|
|
|
|
|
buf := make([]byte, 1024) |
|
|
|
buf := make([]byte, 4) |
|
|
|
mrand.Read(buf) |
|
|
|
mrand.Read(buf) |
|
|
|
sz := mrand.Intn(400) |
|
|
|
sz := mrand.Intn(400) |
|
|
|
|
|
|
|
|
|
|
@ -42,14 +42,10 @@ func generateMessageParams() (*MessageParams, error) { |
|
|
|
p.WorkTime = 1 |
|
|
|
p.WorkTime = 1 |
|
|
|
p.TTL = uint32(mrand.Intn(1024)) |
|
|
|
p.TTL = uint32(mrand.Intn(1024)) |
|
|
|
p.Payload = make([]byte, sz) |
|
|
|
p.Payload = make([]byte, sz) |
|
|
|
p.Padding = make([]byte, padSizeLimitUpper) |
|
|
|
|
|
|
|
p.KeySym = make([]byte, aesKeyLength) |
|
|
|
p.KeySym = make([]byte, aesKeyLength) |
|
|
|
|
|
|
|
mrand.Read(p.Payload) |
|
|
|
var b int |
|
|
|
mrand.Read(p.KeySym) |
|
|
|
b = copyFromBuf(p.Payload, buf, b) |
|
|
|
p.Topic = BytesToTopic(buf) |
|
|
|
b = copyFromBuf(p.Padding, buf, b) |
|
|
|
|
|
|
|
b = copyFromBuf(p.KeySym, buf, b) |
|
|
|
|
|
|
|
p.Topic = BytesToTopic(buf[b:]) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var err error |
|
|
|
var err error |
|
|
|
p.Src, err = crypto.GenerateKey() |
|
|
|
p.Src, err = crypto.GenerateKey() |
|
|
@ -77,11 +73,12 @@ func singleMessageTest(t *testing.T, symmetric bool) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
text := make([]byte, 0, 512) |
|
|
|
text := make([]byte, 0, 512) |
|
|
|
steg := make([]byte, 0, 512) |
|
|
|
|
|
|
|
text = append(text, params.Payload...) |
|
|
|
text = append(text, params.Payload...) |
|
|
|
steg = append(steg, params.Padding...) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
msg := NewSentMessage(params) |
|
|
|
msg, err := NewSentMessage(params) |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
t.Fatalf("failed to create new message with seed %d: %s.", seed, err) |
|
|
|
|
|
|
|
} |
|
|
|
env, err := msg.Wrap(params) |
|
|
|
env, err := msg.Wrap(params) |
|
|
|
if err != nil { |
|
|
|
if err != nil { |
|
|
|
t.Fatalf("failed Wrap with seed %d: %s.", seed, err) |
|
|
|
t.Fatalf("failed Wrap with seed %d: %s.", seed, err) |
|
|
@ -102,10 +99,6 @@ func singleMessageTest(t *testing.T, symmetric bool) { |
|
|
|
t.Fatalf("failed to validate with seed %d.", seed) |
|
|
|
t.Fatalf("failed to validate with seed %d.", seed) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
padsz := len(decrypted.Padding) |
|
|
|
|
|
|
|
if !bytes.Equal(steg[:padsz], decrypted.Padding) { |
|
|
|
|
|
|
|
t.Fatalf("failed with seed %d: compare padding.", seed) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if !bytes.Equal(text, decrypted.Payload) { |
|
|
|
if !bytes.Equal(text, decrypted.Payload) { |
|
|
|
t.Fatalf("failed with seed %d: compare payload.", seed) |
|
|
|
t.Fatalf("failed with seed %d: compare payload.", seed) |
|
|
|
} |
|
|
|
} |
|
|
@ -140,7 +133,10 @@ func TestMessageWrap(t *testing.T) { |
|
|
|
t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) |
|
|
|
t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
msg := NewSentMessage(params) |
|
|
|
msg, err := NewSentMessage(params) |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
t.Fatalf("failed to create new message with seed %d: %s.", seed, err) |
|
|
|
|
|
|
|
} |
|
|
|
params.TTL = 1 |
|
|
|
params.TTL = 1 |
|
|
|
params.WorkTime = 12 |
|
|
|
params.WorkTime = 12 |
|
|
|
params.PoW = target |
|
|
|
params.PoW = target |
|
|
@ -155,7 +151,10 @@ func TestMessageWrap(t *testing.T) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// set PoW target too high, expect error
|
|
|
|
// set PoW target too high, expect error
|
|
|
|
msg2 := NewSentMessage(params) |
|
|
|
msg2, err := NewSentMessage(params) |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
t.Fatalf("failed to create new message with seed %d: %s.", seed, err) |
|
|
|
|
|
|
|
} |
|
|
|
params.TTL = 1000000 |
|
|
|
params.TTL = 1000000 |
|
|
|
params.WorkTime = 1 |
|
|
|
params.WorkTime = 1 |
|
|
|
params.PoW = 10000000.0 |
|
|
|
params.PoW = 10000000.0 |
|
|
@ -175,14 +174,15 @@ func TestMessageSeal(t *testing.T) { |
|
|
|
t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) |
|
|
|
t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
msg := NewSentMessage(params) |
|
|
|
msg, err := NewSentMessage(params) |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
t.Fatalf("failed to create new message with seed %d: %s.", seed, err) |
|
|
|
|
|
|
|
} |
|
|
|
params.TTL = 1 |
|
|
|
params.TTL = 1 |
|
|
|
aesnonce := make([]byte, 12) |
|
|
|
aesnonce := make([]byte, 12) |
|
|
|
salt := make([]byte, 12) |
|
|
|
|
|
|
|
mrand.Read(aesnonce) |
|
|
|
mrand.Read(aesnonce) |
|
|
|
mrand.Read(salt) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
env := NewEnvelope(params.TTL, params.Topic, salt, aesnonce, msg) |
|
|
|
env := NewEnvelope(params.TTL, params.Topic, aesnonce, msg) |
|
|
|
if err != nil { |
|
|
|
if err != nil { |
|
|
|
t.Fatalf("failed Wrap with seed %d: %s.", seed, err) |
|
|
|
t.Fatalf("failed Wrap with seed %d: %s.", seed, err) |
|
|
|
} |
|
|
|
} |
|
|
@ -236,11 +236,12 @@ func singleEnvelopeOpenTest(t *testing.T, symmetric bool) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
text := make([]byte, 0, 512) |
|
|
|
text := make([]byte, 0, 512) |
|
|
|
steg := make([]byte, 0, 512) |
|
|
|
|
|
|
|
text = append(text, params.Payload...) |
|
|
|
text = append(text, params.Payload...) |
|
|
|
steg = append(steg, params.Padding...) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
msg := NewSentMessage(params) |
|
|
|
msg, err := NewSentMessage(params) |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
t.Fatalf("failed to create new message with seed %d: %s.", seed, err) |
|
|
|
|
|
|
|
} |
|
|
|
env, err := msg.Wrap(params) |
|
|
|
env, err := msg.Wrap(params) |
|
|
|
if err != nil { |
|
|
|
if err != nil { |
|
|
|
t.Fatalf("failed Wrap with seed %d: %s.", seed, err) |
|
|
|
t.Fatalf("failed Wrap with seed %d: %s.", seed, err) |
|
|
@ -252,10 +253,6 @@ func singleEnvelopeOpenTest(t *testing.T, symmetric bool) { |
|
|
|
t.Fatalf("failed to open with seed %d.", seed) |
|
|
|
t.Fatalf("failed to open with seed %d.", seed) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
padsz := len(decrypted.Padding) |
|
|
|
|
|
|
|
if !bytes.Equal(steg[:padsz], decrypted.Padding) { |
|
|
|
|
|
|
|
t.Fatalf("failed with seed %d: compare padding.", seed) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if !bytes.Equal(text, decrypted.Payload) { |
|
|
|
if !bytes.Equal(text, decrypted.Payload) { |
|
|
|
t.Fatalf("failed with seed %d: compare payload.", seed) |
|
|
|
t.Fatalf("failed with seed %d: compare payload.", seed) |
|
|
|
} |
|
|
|
} |
|
|
@ -291,21 +288,38 @@ func TestEncryptWithZeroKey(t *testing.T) { |
|
|
|
if err != nil { |
|
|
|
if err != nil { |
|
|
|
t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) |
|
|
|
t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
msg, err := NewSentMessage(params) |
|
|
|
msg := NewSentMessage(params) |
|
|
|
if err != nil { |
|
|
|
|
|
|
|
t.Fatalf("failed to create new message with seed %d: %s.", seed, err) |
|
|
|
|
|
|
|
} |
|
|
|
params.KeySym = make([]byte, aesKeyLength) |
|
|
|
params.KeySym = make([]byte, aesKeyLength) |
|
|
|
_, err = msg.Wrap(params) |
|
|
|
_, err = msg.Wrap(params) |
|
|
|
if err == nil { |
|
|
|
if err == nil { |
|
|
|
t.Fatalf("wrapped with zero key, seed: %d.", seed) |
|
|
|
t.Fatalf("wrapped with zero key, seed: %d.", seed) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
params, err = generateMessageParams() |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
msg, err = NewSentMessage(params) |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
t.Fatalf("failed to create new message with seed %d: %s.", seed, err) |
|
|
|
|
|
|
|
} |
|
|
|
params.KeySym = make([]byte, 0) |
|
|
|
params.KeySym = make([]byte, 0) |
|
|
|
_, err = msg.Wrap(params) |
|
|
|
_, err = msg.Wrap(params) |
|
|
|
if err == nil { |
|
|
|
if err == nil { |
|
|
|
t.Fatalf("wrapped with empty key, seed: %d.", seed) |
|
|
|
t.Fatalf("wrapped with empty key, seed: %d.", seed) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
params, err = generateMessageParams() |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
msg, err = NewSentMessage(params) |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
t.Fatalf("failed to create new message with seed %d: %s.", seed, err) |
|
|
|
|
|
|
|
} |
|
|
|
params.KeySym = nil |
|
|
|
params.KeySym = nil |
|
|
|
_, err = msg.Wrap(params) |
|
|
|
_, err = msg.Wrap(params) |
|
|
|
if err == nil { |
|
|
|
if err == nil { |
|
|
@ -320,7 +334,10 @@ func TestRlpEncode(t *testing.T) { |
|
|
|
if err != nil { |
|
|
|
if err != nil { |
|
|
|
t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) |
|
|
|
t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) |
|
|
|
} |
|
|
|
} |
|
|
|
msg := NewSentMessage(params) |
|
|
|
msg, err := NewSentMessage(params) |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
t.Fatalf("failed to create new message with seed %d: %s.", seed, err) |
|
|
|
|
|
|
|
} |
|
|
|
env, err := msg.Wrap(params) |
|
|
|
env, err := msg.Wrap(params) |
|
|
|
if err != nil { |
|
|
|
if err != nil { |
|
|
|
t.Fatalf("wrapped with zero key, seed: %d.", seed) |
|
|
|
t.Fatalf("wrapped with zero key, seed: %d.", seed) |
|
|
@ -344,3 +361,60 @@ func TestRlpEncode(t *testing.T) { |
|
|
|
t.Fatalf("Hashes are not equal: %x vs. %x", he, hd) |
|
|
|
t.Fatalf("Hashes are not equal: %x vs. %x", he, hd) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func singlePaddingTest(t *testing.T, padSize int) { |
|
|
|
|
|
|
|
params, err := generateMessageParams() |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
t.Fatalf("failed generateMessageParams with seed %d and sz=%d: %s.", seed, padSize, err) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
params.Padding = make([]byte, padSize) |
|
|
|
|
|
|
|
params.PoW = 0.0000000001 |
|
|
|
|
|
|
|
pad := make([]byte, padSize) |
|
|
|
|
|
|
|
_, err = mrand.Read(pad) |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
t.Fatalf("padding is not generated (seed %d): %s", seed, err) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
n := copy(params.Padding, pad) |
|
|
|
|
|
|
|
if n != padSize { |
|
|
|
|
|
|
|
t.Fatalf("padding is not copied (seed %d): %s", seed, err) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
msg, err := NewSentMessage(params) |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
t.Fatalf("failed to create new message with seed %d: %s.", seed, err) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
env, err := msg.Wrap(params) |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
t.Fatalf("failed to wrap, seed: %d and sz=%d.", seed, padSize) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
f := Filter{KeySym: params.KeySym} |
|
|
|
|
|
|
|
decrypted := env.Open(&f) |
|
|
|
|
|
|
|
if decrypted == nil { |
|
|
|
|
|
|
|
t.Fatalf("failed to open, seed and sz=%d: %d.", seed, padSize) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if !bytes.Equal(pad, decrypted.Padding) { |
|
|
|
|
|
|
|
t.Fatalf("padding is not retireved as expected with seed %d and sz=%d:\n[%x]\n[%x].", seed, padSize, pad, decrypted.Padding) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func TestPadding(t *testing.T) { |
|
|
|
|
|
|
|
InitSingleTest() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for i := 1; i < 260; i++ { |
|
|
|
|
|
|
|
singlePaddingTest(t, i) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lim := 256 * 256 |
|
|
|
|
|
|
|
for i := lim - 5; i < lim+2; i++ { |
|
|
|
|
|
|
|
singlePaddingTest(t, i) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for i := 0; i < 256; i++ { |
|
|
|
|
|
|
|
n := mrand.Intn(256*254) + 256 |
|
|
|
|
|
|
|
singlePaddingTest(t, n) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for i := 0; i < 256; i++ { |
|
|
|
|
|
|
|
n := mrand.Intn(256*1024) + 256*256 |
|
|
|
|
|
|
|
singlePaddingTest(t, n) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|