// Copyright 2016 Documize Inc. . All rights reserved. // // This software (Documize Community Edition) is licensed under // GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html // // You can operate outside the AGPL restrictions by purchasing // Documize Enterprise Edition and obtaining a commercial license // by contacting . // // https://documize.com package secrets import ( "crypto/aes" "crypto/cipher" "crypto/rand" "errors" "io" ) var key = []byte("8456FHkQW1566etydT46jk39ghjfFhg4") // 32 bytes // MakeAES creates an AES encryption of of a given string, // using a hard-wired key value, // suitable for use as an authentication token. func MakeAES(secret string) ([]byte, error) { block, err := aes.NewCipher(key) if err != nil { return nil, err } b := EncodeBase64([]byte(secret)) ciphertext := make([]byte, aes.BlockSize+len(b)) iv := ciphertext[:aes.BlockSize] if _, err := io.ReadFull(rand.Reader, iv); err != nil { return nil, err } cfb := cipher.NewCFBEncrypter(block, iv) cfb.XORKeyStream(ciphertext[aes.BlockSize:], b) return ciphertext, nil } // DecryptAES decrypts an AES encoded []byte, // using a hard-wired key value, // suitable for use when reading an authentication token. func DecryptAES(text []byte) ([]byte, error) { block, err := aes.NewCipher(key) if err != nil { return nil, errors.New("aes.NewCipher failure: " + err.Error()) } if len(text) < aes.BlockSize { return nil, errors.New("ciphertext too short") } iv := text[:aes.BlockSize] text = text[aes.BlockSize:] cfb := cipher.NewCFBDecrypter(block, iv) cfb.XORKeyStream(text, text) return DecodeBase64(text) }