so many things

This commit is contained in:
didier.amyot committed 2014-09-13 13:41:44 -07:00
1 parent e8e1d66c1e
commit 112b062571
4 files changed
+70 -287

No files matched your search

+4 -68
View File
@@ -1,77 +1,13 @@
package encrypter
import (
"crypto/aes"
"crypto/cipher"
"crypto/rand"
"github.com/didiercrunch/ecrypto/keys"
"io"
)
type FileEncrypter struct {
PublicKey keys.PublicKey
PrivateKey keys.PrivateKey
InputPath string
OutputPath string
randomReader io.Reader
iv []byte
key []byte
type StreamEncrypter interface {
EncrypeReaderToWriter(clearInput io.Reader, encryptedOutput io.Writer)
}
func NewEncrypter() *FileEncrypter {
ret := new(FileEncrypter)
ret.randomReader = rand.Reader
return ret
}
func (this *FileEncrypter) createSymetricKey(size int) ([]byte, error) {
key := make([]byte, size)
_, err := io.ReadFull(this.randomReader, key)
return key, err
}
func (this *FileEncrypter) getCypherBlock() (cipher.Block, error) {
var err error
this.key, err = this.createSymetricKey(32)
if err != nil {
return nil, err
}
return aes.NewCipher(this.key)
}
func (this *FileEncrypter) createIV(block cipher.Block) (iv []byte, err error) {
return this.createSymetricKey(block.BlockSize())
}
func (this *FileEncrypter) createStreamMode(block cipher.Block) (stream cipher.Stream, err error) {
this.iv, err = this.createIV(block)
if err != nil {
return nil, err
}
return cipher.NewOFB(block, this.iv), err
}
func (this *FileEncrypter) createFileHandlerAndCypherBlock() (stream cipher.Stream, err error) {
cypherBlock, err := this.getCypherBlock()
if err != nil {
return nil, err
}
return this.createStreamMode(cypherBlock)
}
func (this *FileEncrypter) encrypeReaderToWriter(clearInput io.Reader, encryptedOutput io.Writer) error {
stream, err := this.createFileHandlerAndCypherBlock()
if err != nil {
return err
}
writer := &cipher.StreamWriter{S: stream, W: encryptedOutput}
if _, err := io.Copy(writer, clearInput); err != nil {
return err
}
return nil
}
func (this *FileEncrypter) Encrypt() error {
return nil
type StreamSigner interface {
SignStream(input io.Reader) ([]byte, error)
}