Documentation ¶
Index ¶
- Constants
- Variables
- func BytesToPemFile(pemBytes []byte, fileName string) (err error)
- func DecryptVerifyMsg(encryptedMsg []byte, signature []byte, senderPubKey *rsa.PublicKey, ...) (symKey []byte, err error)
- func EncryptSignMsg(msg []byte, receiverPubKey *rsa.PublicKey, senderPrivKey *rsa.PrivateKey) (encryptedData []byte, dataSignature []byte, err error)
- func OpenKeysAsBlock(keyPath string, keyName string) (keyBlock *pem.Block, err error)
- func OpenPrivKey(keyPath string, keyFileN string) (privKey *rsa.PrivateKey, err error)
- func OpenPubKey(keyPath string, keyFileN string) (pubKey *rsa.PublicKey, err error)
- func PemToSha256(pubBlock *pem.Block) []byte
- type AesGcmChunk
Constants ¶
const ( // ChunkSize is a size of each file chunks in bytes. // Should be less than max value of uint32 (4294967295) // since the util package use unsigned 4 bytes to represent the data size. ChunkSize = 16777216 // 2^24 bytes, about 16.7 MB IvSize = 12 SymKeySize = 32 )
Variables ¶
var ChunkIncorrectOrder = errors.New("encrypted chunk incorrect order")
ChunkIncorrectOrder occurs when encrypted file chunks are received in incorrect order.
var IncompleteFile = errors.New("incomplete file")
IncompleteFile occurs when written chunk size != total chunk size.
var NoPemBlock = errors.New("[]byte does not contain public pem block")
Functions ¶
func BytesToPemFile ¶
BytesToPemFile writes pemBytes to fileName in PEM block format.
func DecryptVerifyMsg ¶
func DecryptVerifyMsg(encryptedMsg []byte, signature []byte, senderPubKey *rsa.PublicKey, receiverPrivKey *rsa.PrivateKey) ( symKey []byte, err error)
DecryptVerifyMsg decrypts key for symmetric encryption with receiver's private key, and verify signature with sender's public key.
func EncryptSignMsg ¶
func EncryptSignMsg(msg []byte, receiverPubKey *rsa.PublicKey, senderPrivKey *rsa.PrivateKey) ( encryptedData []byte, dataSignature []byte, err error)
EncryptSignMsg encrypts key for symmetric encryption with receiver's public key, and sign hashed symmetric encryption key with sender's private key.
func OpenKeysAsBlock ¶
OpenKeysAsBlock open keys and return them as *pem.Block.
If keyName ends with .priv - return private key block if found - return newly created private key pem block if not found If keyName ends anything else - return public key block if found - return err if not found
func OpenPrivKey ¶
func OpenPrivKey(keyPath string, keyFileN string) (privKey *rsa.PrivateKey, err error)
OpenPrivKey opens private key named keyFileN in keyPath
func OpenPubKey ¶
OpenPubKey opens public key named keyFileN in keyPath
func PemToSha256 ¶
PemToSha256 generates bytes containing sha256sum of pubBlock bytes.
Types ¶
type AesGcmChunk ¶
type AesGcmChunk struct {
// contains filtered or unexported fields
}
AesGcmChunk stores data for encrypting or decrypting chunks, but it cannot be both.
func DecryptSetup ¶
func DecryptSetup() (ag *AesGcmChunk, err error)
DecryptSetup creates temporary file, make directory if it doesn't exist then return *AesGcmChunk
func EncryptSetup ¶
func EncryptSetup(fileN string) (ag *AesGcmChunk, err error)
EncryptSetup opens file, determine number of chunks, then return *AesGcmChunk
func (*AesGcmChunk) Decrypt ¶
func (ag *AesGcmChunk) Decrypt(chanMap chan *util.Message, senderPubKey *rsa.PublicKey, receiverPrivKey *rsa.PrivateKey) (err error)
Decrypt reads encrypted data from reader and decrypts the file and return error, if raised. Sender's public key is required for verifying signature. Receiver's private key is required for decrypting symmetric encryption key. err == nil indicates successful execution.
func (*AesGcmChunk) Encrypt ¶
func (ag *AesGcmChunk) Encrypt(writer io.Writer, receiverPubKey *rsa.PublicKey, senderPrivKey *rsa.PrivateKey) (err error)
Encrypt encrypts file and write to writer and return error if raised. Receiver's public key is required for encrypting symmetric encryption key. Sender's private key is required for signing the encrypted key. err == nil indicates successful execution. TODO: Send error if previous operation was unsuccessful