started to implements the integration tests
This commit is contained in:
1 parent
0186c30750
commit
b52129817e
5 files changed
+97
-24
No files matched your search
+17
-5
@@ -13,10 +13,10 @@ type Payload interface {
|
|||||||
GetAlgorithm() string
|
GetAlgorithm() string
|
||||||
GetMode() string
|
GetMode() string
|
||||||
GetHashMethod() string
|
GetHashMethod() string
|
||||||
GetPayloadData() io.Reader
|
GetPayloadData() (io.Reader, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type Encryptor interface {
|
type PublicKeyEncryptor interface {
|
||||||
Encrypt(data []byte) ([]byte, error)
|
Encrypt(data []byte) ([]byte, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -24,8 +24,16 @@ type Signer interface {
|
|||||||
Sign(data []byte) ([]byte, error)
|
Sign(data []byte) ([]byte, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NewEnveloper(publicKeyEncryptor PublicKeyEncryptor, payload Payload, signer Signer) *Enveloper {
|
||||||
|
return &Enveloper{
|
||||||
|
publicKeyEncryptor: publicKeyEncryptor,
|
||||||
|
payload: payload,
|
||||||
|
signer: signer,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type Enveloper struct {
|
type Enveloper struct {
|
||||||
encryptor Encryptor
|
publicKeyEncryptor PublicKeyEncryptor
|
||||||
payload Payload
|
payload Payload
|
||||||
signer Signer
|
signer Signer
|
||||||
EncryptedKey []byte
|
EncryptedKey []byte
|
||||||
@@ -34,7 +42,7 @@ type Enveloper struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (this *Enveloper) EncryptKey() ([]byte, error) {
|
func (this *Enveloper) EncryptKey() ([]byte, error) {
|
||||||
return this.encryptor.Encrypt(this.payload.GetKey())
|
return this.publicKeyEncryptor.Encrypt(this.payload.GetKey())
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *Enveloper) SignPayload() ([]byte, error) {
|
func (this *Enveloper) SignPayload() ([]byte, error) {
|
||||||
@@ -66,8 +74,12 @@ func (this *Enveloper) WritePayload(z *zip.Writer) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
_, err = io.Copy(dataWriter, this.payload.GetPayloadData())
|
if r, err := this.payload.GetPayloadData(); err != nil {
|
||||||
return err
|
return err
|
||||||
|
} else if _, err = io.Copy(dataWriter, r); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *Enveloper) WriteMetadata(z *zip.Writer) error {
|
func (this *Enveloper) WriteMetadata(z *zip.Writer) error {
|
||||||
|
|||||||
+8
-19
@@ -4,15 +4,12 @@ import (
|
|||||||
"archive/zip"
|
"archive/zip"
|
||||||
"bytes"
|
"bytes"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
|
||||||
"github.com/didiercrunch/filou/helper"
|
"github.com/didiercrunch/filou/helper"
|
||||||
"io"
|
"io"
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ = fmt.Print
|
|
||||||
|
|
||||||
type mockPayload struct {
|
type mockPayload struct {
|
||||||
MethodsCall []string
|
MethodsCall []string
|
||||||
}
|
}
|
||||||
@@ -77,13 +74,13 @@ func (this *mockPayload) GetHashMethod() string {
|
|||||||
return theHashMethodUsedInThePayLoad
|
return theHashMethodUsedInThePayLoad
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *mockPayload) GetPayloadData() io.Reader {
|
func (this *mockPayload) GetPayloadData() (io.Reader, error) {
|
||||||
this.addMethodCall("GetPayloadData")
|
this.addMethodCall("GetPayloadData")
|
||||||
someData := `some data must be here. In reality, the data
|
someData := `some data must be here. In reality, the data
|
||||||
would be the encrypted payload. This will be
|
would be the encrypted payload. This will be
|
||||||
the big chunk of the data.
|
the big chunk of the data.
|
||||||
`
|
`
|
||||||
return bytes.NewReader([]byte(someData))
|
return bytes.NewReader([]byte(someData)), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type mockEncryptor struct{}
|
type mockEncryptor struct{}
|
||||||
@@ -110,7 +107,7 @@ func (this *mockSigner) Sign(data []byte) ([]byte, error) {
|
|||||||
|
|
||||||
func TestEncryptKey(t *testing.T) {
|
func TestEncryptKey(t *testing.T) {
|
||||||
env := &Enveloper{
|
env := &Enveloper{
|
||||||
encryptor: &mockEncryptor{},
|
publicKeyEncryptor: &mockEncryptor{},
|
||||||
payload: newMockPayload(),
|
payload: newMockPayload(),
|
||||||
}
|
}
|
||||||
if enc, err := env.EncryptKey(); err != nil {
|
if enc, err := env.EncryptKey(); err != nil {
|
||||||
@@ -121,11 +118,7 @@ func TestEncryptKey(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestCreateEnvelopCompletelyEncryptKey(t *testing.T) {
|
func TestCreateEnvelopCompletelyEncryptKey(t *testing.T) {
|
||||||
env := &Enveloper{
|
env := NewEnveloper(&mockEncryptor{}, newMockPayload(), &mockSigner{})
|
||||||
encryptor: &mockEncryptor{},
|
|
||||||
payload: newMockPayload(),
|
|
||||||
signer: &mockSigner{},
|
|
||||||
}
|
|
||||||
if err := env.CreateEnvelopCompletely(); err != nil {
|
if err := env.CreateEnvelopCompletely(); err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
@@ -147,11 +140,7 @@ func TestSignPayload(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestCreateEnvelopCompletelySignHash(t *testing.T) {
|
func TestCreateEnvelopCompletelySignHash(t *testing.T) {
|
||||||
env := &Enveloper{
|
env := NewEnveloper(&mockEncryptor{}, newMockPayload(), &mockSigner{})
|
||||||
payload: newMockPayload(),
|
|
||||||
encryptor: &mockEncryptor{},
|
|
||||||
signer: &mockSigner{},
|
|
||||||
}
|
|
||||||
if err := env.CreateEnvelopCompletely(); err != nil {
|
if err := env.CreateEnvelopCompletely(); err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
@@ -176,7 +165,7 @@ func TestCreateMetadata(t *testing.T) {
|
|||||||
|
|
||||||
func TestCreateEnvelopCompletelyMetadata(t *testing.T) {
|
func TestCreateEnvelopCompletelyMetadata(t *testing.T) {
|
||||||
env := &Enveloper{
|
env := &Enveloper{
|
||||||
encryptor: &mockEncryptor{},
|
publicKeyEncryptor: &mockEncryptor{},
|
||||||
payload: newMockPayload(),
|
payload: newMockPayload(),
|
||||||
signer: &mockSigner{},
|
signer: &mockSigner{},
|
||||||
}
|
}
|
||||||
@@ -192,7 +181,7 @@ func TestWriteToWriter(t *testing.T) {
|
|||||||
env := &Enveloper{
|
env := &Enveloper{
|
||||||
payload: newMockPayload(),
|
payload: newMockPayload(),
|
||||||
signer: &mockSigner{},
|
signer: &mockSigner{},
|
||||||
encryptor: &mockEncryptor{},
|
publicKeyEncryptor: &mockEncryptor{},
|
||||||
}
|
}
|
||||||
w := helper.NewMockIoWriter()
|
w := helper.NewMockIoWriter()
|
||||||
if err := env.WriteToWriter(w); err != nil {
|
if err := env.WriteToWriter(w); err != nil {
|
||||||
@@ -213,7 +202,7 @@ func TestMethodOrder(t *testing.T) {
|
|||||||
env := &Enveloper{
|
env := &Enveloper{
|
||||||
payload: mockPayload,
|
payload: mockPayload,
|
||||||
signer: &mockSigner{},
|
signer: &mockSigner{},
|
||||||
encryptor: &mockEncryptor{},
|
publicKeyEncryptor: &mockEncryptor{},
|
||||||
}
|
}
|
||||||
w := helper.NewMockIoWriter()
|
w := helper.NewMockIoWriter()
|
||||||
if err := env.WriteToWriter(w); err != nil {
|
if err := env.WriteToWriter(w); err != nil {
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
package integration
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/didiercrunch/filou/envelop"
|
||||||
|
"github.com/didiercrunch/filou/payload"
|
||||||
|
)
|
||||||
|
|
||||||
|
type mockEncryptor struct{}
|
||||||
|
|
||||||
|
func (this *mockEncryptor) Encrypt(data []byte) ([]byte, error) {
|
||||||
|
// cesar encryption!
|
||||||
|
ret := make([]byte, len(data))
|
||||||
|
for i, d := range data {
|
||||||
|
ret[i] = d + 3 // modulo is implicit
|
||||||
|
}
|
||||||
|
return ret, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type mockSigner struct{}
|
||||||
|
|
||||||
|
func (this *mockSigner) Sign(data []byte) ([]byte, error) {
|
||||||
|
// a slice with the sum of the data plus a "secret" value
|
||||||
|
var sum byte = 36
|
||||||
|
for _, d := range data {
|
||||||
|
sum += d
|
||||||
|
}
|
||||||
|
return []byte{sum}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestPayloadCanBeUseInEnvelop(t *testing.T) {
|
||||||
|
payload_ := payload.GetDefaultPayload(bytes.NewBufferString("some data to encrypt"))
|
||||||
|
envelop := envelop.NewEnveloper(&mockEncryptor{}, payload_, &mockSigner{})
|
||||||
|
if envelop == nil {
|
||||||
|
t.Fail()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@ package payload
|
|||||||
import (
|
import (
|
||||||
"archive/zip"
|
"archive/zip"
|
||||||
"crypto/cipher"
|
"crypto/cipher"
|
||||||
|
"crypto/rand"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"io"
|
"io"
|
||||||
)
|
)
|
||||||
@@ -21,6 +22,16 @@ type Payload struct {
|
|||||||
Hash []byte
|
Hash []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetDefaultPayload(dataSource io.Reader) *Payload {
|
||||||
|
return &Payload{
|
||||||
|
DataSource: dataSource,
|
||||||
|
Random: rand.Reader,
|
||||||
|
HashMethod: SHA512,
|
||||||
|
Block: AES256,
|
||||||
|
BlockMode: OFB,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type payloadWriter struct {
|
type payloadWriter struct {
|
||||||
Reader io.Reader
|
Reader io.Reader
|
||||||
Pipewriter io.WriteCloser
|
Pipewriter io.WriteCloser
|
||||||
|
|||||||
@@ -141,5 +141,27 @@ func TestGetPayloadData(t *testing.T) {
|
|||||||
fmt.Println(p.GetHash())
|
fmt.Println(p.GetHash())
|
||||||
errorC <- errors.New("hash has not been computed")
|
errorC <- errors.New("hash has not been computed")
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGetDefaultPayload(t *testing.T) {
|
||||||
|
p := GetDefaultPayload(bytes.NewBufferString("some data to encrypt"))
|
||||||
|
r, err := p.GetPayloadData()
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
errorC := make(chan error)
|
||||||
|
go func(errorC chan error) {
|
||||||
|
if _, err := ioutil.ReadAll(r); err != nil {
|
||||||
|
errorC <- err
|
||||||
|
}
|
||||||
|
errorC <- nil
|
||||||
|
}(errorC)
|
||||||
|
|
||||||
|
if err := <-errorC; err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
} else if len(p.GetHash()) != 512/8 {
|
||||||
|
fmt.Println(p.GetHash())
|
||||||
|
errorC <- errors.New("hash has not been computed")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user