forked from lug/matterbridge
		
	Update dependencies (#1929)
This commit is contained in:
		
							
								
								
									
										41
									
								
								vendor/go.mau.fi/whatsmeow/util/gcmutil/gcm.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								vendor/go.mau.fi/whatsmeow/util/gcmutil/gcm.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
// Copyright (c) 2022 Tulir Asokan
 | 
			
		||||
//
 | 
			
		||||
// This Source Code Form is subject to the terms of the Mozilla Public
 | 
			
		||||
// License, v. 2.0. If a copy of the MPL was not distributed with this
 | 
			
		||||
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
 | 
			
		||||
 | 
			
		||||
package gcmutil
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"crypto/aes"
 | 
			
		||||
	"crypto/cipher"
 | 
			
		||||
	"fmt"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func Prepare(secretKey []byte) (gcm cipher.AEAD, err error) {
 | 
			
		||||
	var block cipher.Block
 | 
			
		||||
	if block, err = aes.NewCipher(secretKey); err != nil {
 | 
			
		||||
		err = fmt.Errorf("failed to initialize AES cipher: %w", err)
 | 
			
		||||
	} else if gcm, err = cipher.NewGCM(block); err != nil {
 | 
			
		||||
		err = fmt.Errorf("failed to initialize GCM: %w", err)
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Decrypt(secretKey, iv, ciphertext, additionalData []byte) ([]byte, error) {
 | 
			
		||||
	if gcm, err := Prepare(secretKey); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	} else if plaintext, decryptErr := gcm.Open(nil, iv, ciphertext, additionalData); decryptErr != nil {
 | 
			
		||||
		return nil, decryptErr
 | 
			
		||||
	} else {
 | 
			
		||||
		return plaintext, nil
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Encrypt(secretKey, iv, plaintext, additionalData []byte) ([]byte, error) {
 | 
			
		||||
	if gcm, err := Prepare(secretKey); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	} else {
 | 
			
		||||
		return gcm.Seal(nil, iv, plaintext, additionalData), nil
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user