internal/cveschema: move CVE structs to separate package

The CVE structs are moved from internal to internal/cveschema. These
structs may be moved to be able non-internal package in the future, for
use by govulncheck.

This is a follow up from CL 355270.

Change-Id: I96580cb60f69752d448f7acc079b4f9adbf16668
Reviewed-on: https://go-review.googlesource.com/c/vulndb/+/356389
Trust: Julie Qiu <julie@golang.org>
Run-TryBot: Julie Qiu <julie@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Roland Shoemaker <roland@golang.org>
diff --git a/cmd/report2cve/main.go b/cmd/report2cve/main.go
index a1030ed..304bc1a 100644
--- a/cmd/report2cve/main.go
+++ b/cmd/report2cve/main.go
@@ -12,12 +12,12 @@
 	"os"
 	"strings"
 
-	"golang.org/x/vulndb/internal"
+	"golang.org/x/vulndb/internal/cveschema"
 	"golang.org/x/vulndb/internal/report"
 	"gopkg.in/yaml.v2"
 )
 
-func fromReport(r *report.Report) (*internal.CVE, error) {
+func fromReport(r *report.Report) (*cveschema.CVE, error) {
 	if r.CVE != "" {
 		return nil, errors.New("report has CVE ID is wrong section (should be in cve_metadata for self-issued CVEs)")
 	}
@@ -28,18 +28,18 @@
 		return nil, errors.New("report missing CVE ID")
 	}
 
-	c := &internal.CVE{
+	c := &cveschema.CVE{
 		DataType:    "CVE",
 		DataFormat:  "MITRE",
 		DataVersion: "4.0",
-		CVEDataMeta: internal.CVEDataMeta{
+		CVEDataMeta: cveschema.CVEDataMeta{
 			ID:       r.CVEMetadata.ID,
 			ASSIGNER: "security@golang.org",
 			STATE:    "PUBLIC",
 		},
 
-		Description: internal.Description{
-			DescriptionData: []internal.LangString{
+		Description: cveschema.Description{
+			DescriptionData: []cveschema.LangString{
 				{
 					Lang:  "eng",
 					Value: strings.TrimSuffix(r.CVEMetadata.Description, "\n"),
@@ -47,10 +47,10 @@
 			},
 		},
 
-		Problemtype: internal.Problemtype{
-			ProblemtypeData: []internal.ProblemtypeDataItems{
+		Problemtype: cveschema.Problemtype{
+			ProblemtypeData: []cveschema.ProblemtypeDataItems{
 				{
-					Description: []internal.LangString{
+					Description: []cveschema.LangString{
 						{
 							Lang:  "eng",
 							Value: r.CVEMetadata.CWE,
@@ -60,13 +60,13 @@
 			},
 		},
 
-		Affects: internal.Affects{
-			Vendor: internal.Vendor{
-				VendorData: []internal.VendorDataItems{
+		Affects: cveschema.Affects{
+			Vendor: cveschema.Vendor{
+				VendorData: []cveschema.VendorDataItems{
 					{
 						VendorName: "n/a", // ???
-						Product: internal.Product{
-							ProductData: []internal.ProductDataItem{
+						Product: cveschema.Product{
+							ProductData: []cveschema.ProductDataItem{
 								{
 									ProductName: r.Package,
 									Version:     versionToVersion(r.Versions),
@@ -80,10 +80,10 @@
 	}
 
 	for _, additional := range r.AdditionalPackages {
-		c.Affects.Vendor.VendorData = append(c.Affects.Vendor.VendorData, internal.VendorDataItems{
+		c.Affects.Vendor.VendorData = append(c.Affects.Vendor.VendorData, cveschema.VendorDataItems{
 			VendorName: "n/a",
-			Product: internal.Product{
-				ProductData: []internal.ProductDataItem{
+			Product: cveschema.Product{
+				ProductData: []cveschema.ProductDataItem{
 					{
 						ProductName: additional.Package,
 						Version:     versionToVersion(additional.Versions),
@@ -94,29 +94,29 @@
 	}
 
 	if r.Links.PR != "" {
-		c.References.ReferenceData = append(c.References.ReferenceData, internal.Reference{URL: r.Links.PR})
+		c.References.ReferenceData = append(c.References.ReferenceData, cveschema.Reference{URL: r.Links.PR})
 	}
 	if r.Links.Commit != "" {
-		c.References.ReferenceData = append(c.References.ReferenceData, internal.Reference{URL: r.Links.Commit})
+		c.References.ReferenceData = append(c.References.ReferenceData, cveschema.Reference{URL: r.Links.Commit})
 	}
 	for _, url := range r.Links.Context {
-		c.References.ReferenceData = append(c.References.ReferenceData, internal.Reference{URL: url})
+		c.References.ReferenceData = append(c.References.ReferenceData, cveschema.Reference{URL: url})
 	}
 
 	return c, nil
 }
 
-func versionToVersion(versions []report.VersionRange) internal.VersionData {
-	vd := internal.VersionData{}
+func versionToVersion(versions []report.VersionRange) cveschema.VersionData {
+	vd := cveschema.VersionData{}
 	for _, vr := range versions {
 		if vr.Introduced != "" {
-			vd.VersionData = append(vd.VersionData, internal.VersionDataItems{
+			vd.VersionData = append(vd.VersionData, cveschema.VersionDataItems{
 				VersionValue:    vr.Introduced,
 				VersionAffected: ">=",
 			})
 		}
 		if vr.Fixed != "" {
-			vd.VersionData = append(vd.VersionData, internal.VersionDataItems{
+			vd.VersionData = append(vd.VersionData, cveschema.VersionDataItems{
 				VersionValue:    vr.Fixed,
 				VersionAffected: "<",
 			})
diff --git a/internal/cve.go b/internal/cveschema/cveschema.go
similarity index 97%
rename from internal/cve.go
rename to internal/cveschema/cveschema.go
index da22b33..4aa66af 100644
--- a/internal/cve.go
+++ b/internal/cveschema/cveschema.go
@@ -2,8 +2,9 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// Package internal contains functionality for interacting with x/vulndb.
-package internal
+// Package cveschema contains the schema for a CVE, as derived from
+// https://github.com/CVEProject/automation-working-group/tree/master/cve_json_schema.
+package cveschema
 
 // CVE represents a "Common Vulnerabilities and Exposures" record, which is
 // associated with a CVE ID and provided by a CNA.
@@ -12,9 +13,6 @@
 // component resulting from a weakness that can be exploited, causing a negative
 // impact to the confidentiality, integrity, or availability of an impacted
 // component or components.
-//
-// This schema is derived from
-// https://github.com/CVEProject/automation-working-group/tree/master/cve_json_schema.
 type CVE struct {
 	// DataType identifies what kind of data is held in this JSON file. This is
 	// mandatory and designed to prevent problems with attempting to detect