so many things
This commit is contained in:
1 parent
e8e1d66c1e
commit
112b062571
4 files changed
+70
-287
No files matched your search
+4
-68
@@ -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)
|
||||
}
|
||||
Reference in new issue
Block a user