diff --git a/common/crypto.go b/common/crypto.go deleted file mode 100644 index 976d50c..0000000 --- a/common/crypto.go +++ /dev/null @@ -1,54 +0,0 @@ -package common - -import ( - "crypto/aes" - "crypto/cipher" - "crypto/rand" - "errors" - "io" -) - -var cveDBEncryptKey []byte = []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - -func getCVEDBEncryptKey() []byte { - return cveDBEncryptKey -} - -func encrypt(plaintext []byte, key []byte) ([]byte, error) { - c, err := aes.NewCipher(key) - if err != nil { - return nil, err - } - - gcm, err := cipher.NewGCM(c) - if err != nil { - return nil, err - } - - nonce := make([]byte, gcm.NonceSize()) - if _, err = io.ReadFull(rand.Reader, nonce); err != nil { - return nil, err - } - - return gcm.Seal(nonce, nonce, plaintext, nil), nil -} - -func decrypt(ciphertext []byte, key []byte) ([]byte, error) { - c, err := aes.NewCipher(key) - if err != nil { - return nil, err - } - - gcm, err := cipher.NewGCM(c) - if err != nil { - return nil, err - } - - nonceSize := gcm.NonceSize() - if len(ciphertext) < nonceSize { - return nil, errors.New("ciphertext too short") - } - - nonce, ciphertext := ciphertext[:nonceSize], ciphertext[nonceSize:] - return gcm.Open(nil, nonce, ciphertext, nil) -} diff --git a/common/db.go b/common/db.go index 0cc7e87..0d4c9ce 100644 --- a/common/db.go +++ b/common/db.go @@ -10,7 +10,7 @@ import ( log "github.com/sirupsen/logrus" - "github.com/vul-dbgen/share" + utils "github.com/vul-dbgen/share" ) const FirstYear = 2014 @@ -27,20 +27,13 @@ func CreateDBFile(dbFile *DBFile) error { } zb := utils.GzipBytes(buf.Bytes()) - // Use local encrypt function - cipherData, err := encrypt(zb, getCVEDBEncryptKey()) - if err != nil { - log.WithFields(log.Fields{"error": err}).Error("Encrypt tar file fail") - return err - } - b0 := make([]byte, 0) allb := bytes.NewBuffer(b0) keyLen := int32(len(header)) binary.Write(allb, binary.BigEndian, &keyLen) allb.Write(header) - allb.Write(cipherData) + allb.Write(zb) // write to db file fdb, err := os.Create(dbFile.Filename) diff --git a/share/tar.go b/share/tar.go index ad3ea8d..1c43c13 100644 --- a/share/tar.go +++ b/share/tar.go @@ -175,143 +175,6 @@ func EnsureBaseDir(fpath string) error { return os.MkdirAll(baseDir, 0755) } -func ExtractAllArchiveToFiles(path string, r io.Reader, maxFileSize int64, encryptKey []byte) error { - tr, err := getTarReader(r) - if err != nil { - return ErrCouldNotExtract - } - defer tr.Close() - - // For each element in the archive - for { - hdr, err := tr.Next() - if err == io.EOF { - break - } - if err != nil { - return ErrCouldNotExtract - } - - // Get element filename - filename := hdr.Name - filename = strings.TrimPrefix(filename, "./") - - // File size limit - if maxFileSize > 0 && hdr.Size > maxFileSize { - return ErrExtractedFileTooBig - } - - // Extract the element - if hdr.Typeflag == tar.TypeReg { - data, _ := ioutil.ReadAll(tr) - - if encryptKey != nil { - data, _ = Encrypt(encryptKey, data) - } - - err = ioutil.WriteFile(path+filename, data, 0400) - if err != nil { - return err - } - } - } - - return nil -} - -func ExtractAllArchive(dst string, r io.Reader, maxFileSize int64) (int64, error) { - var untarSize int64 - - tr, err := getTarReader(r) - if err != nil { - return untarSize, err - } - defer tr.Close() - - for { - header, err := tr.Next() - switch { - // if no more files are found return - case err == io.EOF: - return untarSize, nil - - // return any other error - case err != nil: - return untarSize, err - - // if the header is nil, just skip it (not sure how this happens) - case header == nil: - continue - } - - // the target location where the dir/file should be created - // "aufs" might have issue to create file like. ".abc.txt" - names := strings.Split(header.Name, "/") - for i, name := range names { - if len(name) > 1 && name[0] == '.' { - names[i] = "_" + name - } - } - - target := filepath.Join(dst, strings.Join(names, "/")) - - // the following switch could also be done using fi.Mode(), not sure if there - // a benefit of using one vs. the other. - // fi := header.FileInfo() - // File size limit - if maxFileSize > 0 && header.Size > maxFileSize { - return untarSize, ErrExtractedFileTooBig - } - untarSize += header.Size - - // check the file type - switch header.Typeflag { - // if its a dir and it doesn't exist create it - case tar.TypeDir: - if _, err := os.Stat(target); err != nil { - if err := os.MkdirAll(target, 0755); err != nil { - log.WithFields(log.Fields{"err": err, "target": target}).Error("mkdirall") - return untarSize, err - } - } - - // only way to put setuid and setgid back into the new file - err = os.Chmod(target, header.FileInfo().Mode()|0755) // forced read/write-able - if err != nil { - log.WithFields(log.Fields{"err": err, "path": header.Name}).Error("chmod") - } - - // if it's a file create it - case tar.TypeReg: - if err := EnsureBaseDir(target); err != nil { - log.WithFields(log.Fields{"err": err, "target": target}).Error("basedir") - return untarSize, err - } - - f, err := os.Create(target) - if err != nil { - log.WithFields(log.Fields{"err": err, "target": target}).Error("create") - return untarSize, err - } - - // copy over contents - if _, err := io.Copy(f, tr); err != nil { - log.WithFields(log.Fields{"err": err}).Error("copy") - return untarSize, err - } - // manually close here after each file operation; defering would cause each file close - // to wait until all operations have completed. - f.Close() - - // only way to put setuid and setgid back into the new file - err = os.Chmod(target, header.FileInfo().Mode()|0444) // forced read-able - if err != nil { - log.WithFields(log.Fields{"err": err, "path": header.Name}).Error("chmod") - } - } - } -} - // getTarReader returns a TarReaderCloser associated with the specified io.Reader. // // Gzip/Bzip2/XZ detection is done by using the magic numbers: @@ -409,7 +272,7 @@ func SelectivelyExtractModules(r io.Reader, lastfix string, maxFileSize int64) ( return data, nil } -//func SelectivelyExtractToFile(r io.Reader, prefix string, toExtract []string, dir string) (map[string]string, error) { +// func SelectivelyExtractToFile(r io.Reader, prefix string, toExtract []string, dir string) (map[string]string, error) { func SelectivelyExtractToFile(r io.Reader, selected func(string) bool, dir string) (map[string]string, error) { files := make(map[string]string) diff --git a/share/utils.go b/share/utils.go index 436453a..6f31d54 100644 --- a/share/utils.go +++ b/share/utils.go @@ -3,11 +3,7 @@ package utils import ( "bytes" "compress/gzip" - "crypto/aes" - "crypto/cipher" - "crypto/rand" "fmt" - "io" "io/ioutil" "os/exec" "runtime" @@ -17,21 +13,6 @@ import ( log "github.com/sirupsen/logrus" ) -func Encrypt(encryptionKey, text []byte) ([]byte, error) { - block, err := aes.NewCipher(encryptionKey) - if err != nil { - return nil, err - } - ciphertext := make([]byte, aes.BlockSize+len(text)) - 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:], text) - return ciphertext, nil -} - func GzipBytes(buf []byte) []byte { var b bytes.Buffer w := gzip.NewWriter(&b)