You've already forked rsa-file-encryption
Added test for crypt (#1)
* Added test for crypt * Added test for crypt * Added test for crypt * Added test for crypt * Added test for crypt
This commit is contained in:
91
crypt/crypt_test.go
Normal file
91
crypt/crypt_test.go
Normal file
@@ -0,0 +1,91 @@
|
||||
package crypt
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestLimitsKeySize(t *testing.T) {
|
||||
_, _, err := GenerateKeyPair(512)
|
||||
if err == nil {
|
||||
t.Errorf("GenerateKeyPair returned no error")
|
||||
}
|
||||
|
||||
_, _, err = GenerateKeyPair(16385)
|
||||
if err == nil {
|
||||
t.Errorf("GenerateKeyPair returned no error")
|
||||
}
|
||||
|
||||
_, _, err = GenerateKeyPair(0)
|
||||
if err != nil {
|
||||
t.Errorf("GenerateKeyPair returned an error")
|
||||
}
|
||||
}
|
||||
|
||||
func TestEncryption(t *testing.T) {
|
||||
data := []byte("hello world")
|
||||
|
||||
keyPem, pubPem, err := GenerateKeyPair(2048)
|
||||
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
ef := EncryptedFile{
|
||||
plainText: data,
|
||||
PublicPem: pubPem,
|
||||
privatePem: keyPem,
|
||||
}
|
||||
|
||||
err = ef.ParsePublicPem()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
err = ef.ParsePrivatePem()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
err = ef.GenerateSymmetricKey()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
err = ef.EncryptFile()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
if len(ef.ciphertext) == 0 {
|
||||
t.Error("ciphertext is empty")
|
||||
}
|
||||
|
||||
if len(ef.nonce) == 0 {
|
||||
t.Error("nonce is empty")
|
||||
}
|
||||
|
||||
if bytes.Equal(ef.plainText, ef.ciphertext) {
|
||||
t.Error("ciphertext and plaintext are the same")
|
||||
}
|
||||
|
||||
dc := EncryptedFile{
|
||||
ciphertext: ef.ciphertext,
|
||||
privatePem: keyPem,
|
||||
}
|
||||
|
||||
err = dc.ParsePrivatePem()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
err = dc.unpackFileAndDecrypt(ef.packFile())
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
if !bytes.Equal(ef.plainText, dc.plainText) {
|
||||
t.Error("plaintext and plaintext are different")
|
||||
}
|
||||
|
||||
}
|
||||
47
crypt/pem.go
Normal file
47
crypt/pem.go
Normal file
@@ -0,0 +1,47 @@
|
||||
package crypt
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"crypto/rsa"
|
||||
"crypto/x509"
|
||||
"encoding/pem"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
func GenerateKeyPair(bitSize int) ([]byte, []byte, error) {
|
||||
if bitSize == 0 {
|
||||
bitSize = 4096
|
||||
}
|
||||
|
||||
if bitSize < 2048 {
|
||||
return nil, nil, fmt.Errorf("key to weak. size must be greater than 2048")
|
||||
}
|
||||
|
||||
if bitSize > 16384 {
|
||||
return nil, nil, fmt.Errorf("key to large. size must be less than 16384")
|
||||
}
|
||||
|
||||
key, err := rsa.GenerateKey(rand.Reader, bitSize)
|
||||
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
keyPEM := pem.EncodeToMemory(
|
||||
&pem.Block{
|
||||
Type: "RSA PRIVATE KEY",
|
||||
Bytes: x509.MarshalPKCS1PrivateKey(key),
|
||||
},
|
||||
)
|
||||
|
||||
pub := key.Public()
|
||||
|
||||
pubPEM := pem.EncodeToMemory(
|
||||
&pem.Block{
|
||||
Type: "RSA PUBLIC KEY",
|
||||
Bytes: x509.MarshalPKCS1PublicKey(pub.(*rsa.PublicKey)),
|
||||
},
|
||||
)
|
||||
|
||||
return keyPEM, pubPEM, nil
|
||||
}
|
||||
Reference in New Issue
Block a user