github.com/hoffie/larasync@v0.0.0-20151025221940-0384d2bddcef/helpers/crypto/signer_test.go (about)

     1  package crypto
     2  
     3  import (
     4  	"bytes"
     5  	"io"
     6  
     7  	"github.com/agl/ed25519"
     8  	. "gopkg.in/check.v1"
     9  )
    10  
    11  type SignerTests struct{}
    12  
    13  var _ = Suite(&SignerTests{})
    14  
    15  func (t *SignerTests) TestReadAndWrite(c *C) {
    16  	testBytes := []byte("Test")
    17  	pubKey, privKey, err := ed25519.GenerateKey(
    18  		bytes.NewBufferString("just some deterministic 'random' bytes"))
    19  	c.Assert(err, IsNil)
    20  
    21  	data := &bytes.Buffer{}
    22  	s := NewSigningWriter(*privKey, data)
    23  	written, err := s.Write(testBytes)
    24  	c.Assert(err, IsNil)
    25  	c.Assert(written, Equals, len(testBytes))
    26  	err = s.Finalize()
    27  	c.Assert(err, IsNil)
    28  
    29  	dataReader := bytes.NewReader(data.Bytes())
    30  	v, err := NewVerifyingReader(*pubKey, dataReader)
    31  	c.Assert(err, IsNil)
    32  	gotten := &bytes.Buffer{}
    33  	_, err = io.Copy(gotten, v)
    34  
    35  	c.Assert(gotten.Bytes(), DeepEquals, testBytes)
    36  	c.Assert(v.VerifyAfterRead(), Equals, true)
    37  }
    38  
    39  func (t *SignerTests) TestReadAndWriteTamper(c *C) {
    40  	testBytes := []byte("Test")
    41  	pubKey, privKey, err := ed25519.GenerateKey(
    42  		bytes.NewBufferString("just some deterministic 'random' bytes"))
    43  	c.Assert(err, IsNil)
    44  
    45  	data := &bytes.Buffer{}
    46  	s := NewSigningWriter(*privKey, data)
    47  	written, err := s.Write(testBytes)
    48  	c.Assert(err, IsNil)
    49  	c.Assert(written, Equals, len(testBytes))
    50  	err = s.Finalize()
    51  	c.Assert(err, IsNil)
    52  
    53  	byteData := data.Bytes()
    54  	byteData[0] = 'F'
    55  	dataReader := bytes.NewReader(byteData)
    56  	v, err := NewVerifyingReader(*pubKey, dataReader)
    57  	c.Assert(err, IsNil)
    58  	gotten := &bytes.Buffer{}
    59  	_, err = io.Copy(gotten, v)
    60  	c.Assert(err, IsNil)
    61  	c.Assert(v.VerifyAfterRead(), Equals, false)
    62  }
    63  
    64  func (t *SignerTests) TestReadAndWriteWrongPubkey(c *C) {
    65  	testBytes := []byte("Foo")
    66  	_, privKey, err := ed25519.GenerateKey(
    67  		bytes.NewBufferString("just some deterministic 'random' bytes"))
    68  	c.Assert(err, IsNil)
    69  	pubKey2, _, err := ed25519.GenerateKey(
    70  		bytes.NewBufferString("and some more 'random' data......"))
    71  	c.Assert(err, IsNil)
    72  
    73  	data := &bytes.Buffer{}
    74  	s := NewSigningWriter(*privKey, data)
    75  	written, err := s.Write(testBytes)
    76  	c.Assert(err, IsNil)
    77  	c.Assert(written, Equals, len(testBytes))
    78  	err = s.Finalize()
    79  	c.Assert(err, IsNil)
    80  
    81  	byteData := data.Bytes()
    82  	dataReader := bytes.NewReader(byteData)
    83  	v, err := NewVerifyingReader(*pubKey2, dataReader)
    84  	c.Assert(err, IsNil)
    85  	gotten := &bytes.Buffer{}
    86  	_, err = io.Copy(gotten, v)
    87  	c.Assert(err, IsNil)
    88  	c.Assert(v.VerifyAfterRead(), Equals, false)
    89  }