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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user