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 }