code.gitea.io/gitea@v1.19.3/modules/util/legacy.go (about) 1 // Copyright 2022 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package util 5 6 import ( 7 "crypto/aes" 8 "crypto/cipher" 9 "crypto/rand" 10 "errors" 11 "io" 12 "os" 13 ) 14 15 // CopyFile copies file from source to target path. 16 func CopyFile(src, dest string) error { 17 si, err := os.Lstat(src) 18 if err != nil { 19 return err 20 } 21 22 sr, err := os.Open(src) 23 if err != nil { 24 return err 25 } 26 defer sr.Close() 27 28 dw, err := os.Create(dest) 29 if err != nil { 30 return err 31 } 32 defer dw.Close() 33 34 if _, err = io.Copy(dw, sr); err != nil { 35 return err 36 } 37 38 if err = os.Chtimes(dest, si.ModTime(), si.ModTime()); err != nil { 39 return err 40 } 41 return os.Chmod(dest, si.Mode()) 42 } 43 44 // AESGCMEncrypt (from legacy package): encrypts plaintext with the given key using AES in GCM mode. should be replaced. 45 func AESGCMEncrypt(key, plaintext []byte) ([]byte, error) { 46 block, err := aes.NewCipher(key) 47 if err != nil { 48 return nil, err 49 } 50 51 gcm, err := cipher.NewGCM(block) 52 if err != nil { 53 return nil, err 54 } 55 56 nonce := make([]byte, gcm.NonceSize()) 57 if _, err := rand.Read(nonce); err != nil { 58 return nil, err 59 } 60 61 ciphertext := gcm.Seal(nil, nonce, plaintext, nil) 62 return append(nonce, ciphertext...), nil 63 } 64 65 // AESGCMDecrypt (from legacy package): decrypts ciphertext with the given key using AES in GCM mode. should be replaced. 66 func AESGCMDecrypt(key, ciphertext []byte) ([]byte, error) { 67 block, err := aes.NewCipher(key) 68 if err != nil { 69 return nil, err 70 } 71 72 gcm, err := cipher.NewGCM(block) 73 if err != nil { 74 return nil, err 75 } 76 77 size := gcm.NonceSize() 78 if len(ciphertext)-size <= 0 { 79 return nil, errors.New("ciphertext is empty") 80 } 81 82 nonce := ciphertext[:size] 83 ciphertext = ciphertext[size:] 84 85 plainText, err := gcm.Open(nil, nonce, ciphertext, nil) 86 if err != nil { 87 return nil, err 88 } 89 90 return plainText, nil 91 }