From b4d45554f29e0e7352f7bd8942c402fb877d00a4 Mon Sep 17 00:00:00 2001
From: Jakob Unterwurzacher
Date: Wed, 4 May 2016 22:24:06 +0200
Subject: Revert "stupidgcm: print openssl error stack before panicing"

This did not help in debugging the openssl <= 1.0.1c issue at all
and makes the code more complex. Keep it simple.
---
 internal/stupidgcm/stupidgcm.go | 46 ++++++++++++++---------------------------
 1 file changed, 15 insertions(+), 31 deletions(-)

diff --git a/internal/stupidgcm/stupidgcm.go b/internal/stupidgcm/stupidgcm.go
index 8bc956b..0f4e25d 100644
--- a/internal/stupidgcm/stupidgcm.go
+++ b/internal/stupidgcm/stupidgcm.go
@@ -3,7 +3,6 @@
 package stupidgcm
 
 // #include <openssl/evp.h>
-// #include <openssl/err.h>
 // #cgo pkg-config: libcrypto
 import "C"
 
@@ -19,21 +18,6 @@ const (
 	tagLen = 16
 )
 
-func opensslPanic(msg string) {
-	for {
-		e := C.ERR_get_error()
-		if e == 0 {
-			break
-		}
-		log.Printf("openssl error: %d:%s:%s:%s", e,
-			C.GoString(C.ERR_lib_error_string(e)),
-			C.GoString(C.ERR_func_error_string(e)),
-			C.GoString(C.ERR_reason_error_string(e)))
-	}
-	log.Printf("(no further openssl error messages)")
-	log.Panic(msg)
-}
-
 // stupidGCM implements the cipher.AEAD interface
 type stupidGCM struct {
 	key []byte
@@ -69,28 +53,28 @@ func (g stupidGCM) Seal(dst, iv, in, authData []byte) []byte {
 	// Create scratch space "context"
 	ctx := C.EVP_CIPHER_CTX_new()
 	if ctx == nil {
-		opensslPanic("EVP_CIPHER_CTX_new failed")
+		panic("EVP_CIPHER_CTX_new failed")
 	}
 
 	// Set cipher to AES-256
 	if C.EVP_EncryptInit_ex(ctx, C.EVP_aes_256_gcm(), nil, nil, nil) != 1 {
-		opensslPanic("EVP_EncryptInit_ex I failed")
+		panic("EVP_EncryptInit_ex I failed")
 	}
 
 	// Use 16-byte IV
 	if C.EVP_CIPHER_CTX_ctrl(ctx, C.EVP_CTRL_GCM_SET_IVLEN, ivLen, nil) != 1 {
-		opensslPanic("EVP_CIPHER_CTX_ctrl EVP_CTRL_GCM_SET_IVLEN failed")
+		panic("EVP_CIPHER_CTX_ctrl EVP_CTRL_GCM_SET_IVLEN failed")
 	}
 
 	// Set key and IV
 	if C.EVP_EncryptInit_ex(ctx, nil, nil, (*C.uchar)(&g.key[0]), (*C.uchar)(&iv[0])) != 1 {
-		opensslPanic("EVP_EncryptInit_ex II failed")
+		panic("EVP_EncryptInit_ex II failed")
 	}
 
 	// Provide authentication data
 	var resultLen C.int
 	if C.EVP_EncryptUpdate(ctx, nil, &resultLen, (*C.uchar)(&authData[0]), C.int(len(authData))) != 1 {
-		opensslPanic("EVP_EncryptUpdate authData failed")
+		panic("EVP_EncryptUpdate authData failed")
 	}
 	if int(resultLen) != len(authData) {
 		log.Panicf("Unexpected length %d", resultLen)
@@ -98,7 +82,7 @@ func (g stupidGCM) Seal(dst, iv, in, authData []byte) []byte {
 
 	// Encrypt "in" into "buf"
 	if C.EVP_EncryptUpdate(ctx, (*C.uchar)(&buf[0]), &resultLen, (*C.uchar)(&in[0]), C.int(len(in))) != 1 {
-		opensslPanic("EVP_EncryptUpdate failed")
+		panic("EVP_EncryptUpdate failed")
 	}
 	if int(resultLen) != len(in) {
 		log.Panicf("Unexpected length %d", resultLen)
@@ -108,7 +92,7 @@ func (g stupidGCM) Seal(dst, iv, in, authData []byte) []byte {
 	// Because GCM is a stream encryption, this will not write out any data.
 	dummy := make([]byte, 16)
 	if C.EVP_EncryptFinal_ex(ctx, (*C.uchar)(&dummy[0]), &resultLen) != 1 {
-		opensslPanic("EVP_EncryptFinal_ex failed")
+		panic("EVP_EncryptFinal_ex failed")
 	}
 	if resultLen != 0 {
 		log.Panicf("Unexpected length %d", resultLen)
@@ -116,7 +100,7 @@ func (g stupidGCM) Seal(dst, iv, in, authData []byte) []byte {
 
 	// Get GMAC tag and append it to the ciphertext in "buf"
 	if C.EVP_CIPHER_CTX_ctrl(ctx, C.EVP_CTRL_GCM_GET_TAG, tagLen, (unsafe.Pointer)(&buf[len(in)])) != 1 {
-		opensslPanic("EVP_CIPHER_CTX_ctrl EVP_CTRL_GCM_GET_TAG failed")
+		panic("EVP_CIPHER_CTX_ctrl EVP_CTRL_GCM_GET_TAG failed")
 	}
 
 	// Free scratch space
@@ -142,33 +126,33 @@ func (g stupidGCM) Open(dst, iv, in, authData []byte) ([]byte, error) {
 	// Create scratch space "context"
 	ctx := C.EVP_CIPHER_CTX_new()
 	if ctx == nil {
-		opensslPanic("EVP_CIPHER_CTX_new failed")
+		panic("EVP_CIPHER_CTX_new failed")
 	}
 
 	// Set cipher to AES-256
 	if C.EVP_DecryptInit_ex(ctx, C.EVP_aes_256_gcm(), nil, nil, nil) != 1 {
-		opensslPanic("EVP_DecryptInit_ex I failed")
+		panic("EVP_DecryptInit_ex I failed")
 	}
 
 	// Use 16-byte IV
 	if C.EVP_CIPHER_CTX_ctrl(ctx, C.EVP_CTRL_GCM_SET_IVLEN, ivLen, nil) != 1 {
-		opensslPanic("EVP_CIPHER_CTX_ctrl EVP_CTRL_GCM_SET_IVLEN failed")
+		panic("EVP_CIPHER_CTX_ctrl EVP_CTRL_GCM_SET_IVLEN failed")
 	}
 
 	// Set key and IV
 	if C.EVP_DecryptInit_ex(ctx, nil, nil, (*C.uchar)(&g.key[0]), (*C.uchar)(&iv[0])) != 1 {
-		opensslPanic("EVP_DecryptInit_ex II failed")
+		panic("EVP_DecryptInit_ex II failed")
 	}
 
 	// Set expected GMAC tag
 	if C.EVP_CIPHER_CTX_ctrl(ctx, C.EVP_CTRL_GCM_SET_TAG, tagLen, (unsafe.Pointer)(&tag[0])) != 1 {
-		opensslPanic("EVP_CIPHER_CTX_ctrl failed")
+		panic("EVP_CIPHER_CTX_ctrl failed")
 	}
 
 	// Provide authentication data
 	var resultLen C.int
 	if C.EVP_DecryptUpdate(ctx, nil, &resultLen, (*C.uchar)(&authData[0]), C.int(len(authData))) != 1 {
-		opensslPanic("EVP_DecryptUpdate authData failed")
+		panic("EVP_DecryptUpdate authData failed")
 	}
 	if int(resultLen) != len(authData) {
 		log.Panicf("Unexpected length %d", resultLen)
@@ -176,7 +160,7 @@ func (g stupidGCM) Open(dst, iv, in, authData []byte) ([]byte, error) {
 
 	// Decrypt "ciphertext" into "buf"
 	if C.EVP_DecryptUpdate(ctx, (*C.uchar)(&buf[0]), &resultLen, (*C.uchar)(&ciphertext[0]), C.int(len(ciphertext))) != 1 {
-		opensslPanic("EVP_DecryptUpdate failed")
+		panic("EVP_DecryptUpdate failed")
 	}
 	if int(resultLen) != len(ciphertext) {
 		log.Panicf("Unexpected length %d", resultLen)
-- 
cgit v1.2.3