Catch undersize bytes and panics
This commit is contained in:
parent
43d94fdf50
commit
7ee8da5d3e
21
romulus_m.go
21
romulus_m.go
|
@ -11,6 +11,10 @@ const noncesize int = 16
|
||||||
|
|
||||||
func Encrypt(key []byte, plaintext []byte, additionalData []byte) ([]byte, error) {
|
func Encrypt(key []byte, plaintext []byte, additionalData []byte) ([]byte, error) {
|
||||||
|
|
||||||
|
if len(key) < keysize {
|
||||||
|
return nil, errors.New("Failed to encrypt")
|
||||||
|
}
|
||||||
|
|
||||||
cipher := make([]byte, len(plaintext)+abytes+noncesize)
|
cipher := make([]byte, len(plaintext)+abytes+noncesize)
|
||||||
var cipherlen uint64 = (uint64)(len(cipher))
|
var cipherlen uint64 = (uint64)(len(cipher))
|
||||||
nonce := genNonce()
|
nonce := genNonce()
|
||||||
|
@ -27,15 +31,25 @@ func Encrypt(key []byte, plaintext []byte, additionalData []byte) ([]byte, error
|
||||||
)
|
)
|
||||||
|
|
||||||
if ret != 0 {
|
if ret != 0 {
|
||||||
return nil, errors.New("Failed to decrypt")
|
return nil, errors.New("Failed to encrypt")
|
||||||
}
|
}
|
||||||
copy(cipher, nonce)
|
copy(cipher, nonce)
|
||||||
return cipher[:(int)(cipherlen)+noncesize], nil
|
return cipher[:(int)(cipherlen)+noncesize], nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func Decrypt(key []byte, ciphertext []byte, additionalData []byte) ([]byte, bool, error) {
|
func Decrypt(key []byte, ciphertext []byte, additionalData []byte) (plaintext []byte, auth bool, err error) {
|
||||||
|
|
||||||
plaintext := make([]byte, len(ciphertext))
|
if len(ciphertext) <= noncesize || len(key) < keysize {
|
||||||
|
return nil, false, errors.New("Failed to decrypt")
|
||||||
|
}
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
recover()
|
||||||
|
err = errors.New("Recoverd from panic in decrypt")
|
||||||
|
auth = false
|
||||||
|
}()
|
||||||
|
|
||||||
|
plaintext = make([]byte, len(ciphertext))
|
||||||
var plaintextLen uint64 = (uint64)(len(plaintext))
|
var plaintextLen uint64 = (uint64)(len(plaintext))
|
||||||
ret := romulus_m_decrypt(
|
ret := romulus_m_decrypt(
|
||||||
plaintext,
|
plaintext,
|
||||||
|
@ -48,6 +62,7 @@ func Decrypt(key []byte, ciphertext []byte, additionalData []byte) ([]byte, bool
|
||||||
ciphertext[:noncesize],
|
ciphertext[:noncesize],
|
||||||
key[:keysize],
|
key[:keysize],
|
||||||
)
|
)
|
||||||
|
|
||||||
if ret == -1 {
|
if ret == -1 {
|
||||||
return nil, false, errors.New("Failed to authenticate")
|
return nil, false, errors.New("Failed to authenticate")
|
||||||
} else if ret != 0 {
|
} else if ret != 0 {
|
||||||
|
|
Loading…
Reference in New Issue