diff --git a/CHANGELOG.md b/CHANGELOG.md index 37c5b19..6046cd4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.27.0] - 2025-12-18 +### Added +- Added gRPC `DownloadRuleset` and REST endpoint GET `/v2/cryptography/rulesets/{ruleset_name}/{version}/download` for downloading cryptographic rulesets for keywords and deep code analysis. + ## [0.26.0] - 2025-12-09 ### Added - Added `requirement` field to dependency response @@ -213,6 +217,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added REST endpoint support for each service also [Unreleased]: https://github.com/scanoss/papi/compare/v0.12.0...HEAD +[0.27.0]: https://github.com/scanoss/papi/compare/v0.26.0...v0.27.0 [0.26.0]: https://github.com/scanoss/papi/compare/v0.25.0...v0.26.0 [0.25.0]: https://github.com/scanoss/papi/compare/v0.24.0...v0.25.0 [0.24.0]: https://github.com/scanoss/papi/compare/v0.23.0...v0.24.0 diff --git a/api/cryptographyv2/scanoss-cryptography.pb.go b/api/cryptographyv2/scanoss-cryptography.pb.go index c9587c0..2413778 100644 --- a/api/cryptographyv2/scanoss-cryptography.pb.go +++ b/api/cryptographyv2/scanoss-cryptography.pb.go @@ -40,6 +40,7 @@ import ( _ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options" commonv2 "github.com/scanoss/papi/api/commonv2" _ "google.golang.org/genproto/googleapis/api/annotations" + httpbody "google.golang.org/genproto/googleapis/api/httpbody" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -1250,6 +1251,72 @@ func (x *ComponentEncryptionHintsResponse) GetStatus() *commonv2.StatusResponse return nil } +// Request message for downloading a cryptography detection ruleset. +// +// Specifies which ruleset to download and which version to retrieve. +// +// The response is a raw binary tarball (.tar.gz) with metadata in HTTP headers: +// - X-Ruleset-Name: Name of the ruleset +// - X-Ruleset-Version: Resolved version (when "latest" is requested, this shows actual version) +// - X-Checksum-SHA256: SHA256 checksum for integrity verification +// - Content-Disposition: Suggested filename for download +type RulesetDownloadRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Name of ruleset to download (e.g., "dca", "keywords") + // - "dca": Deep Code Analysis rules for using with SCANOSS Crypto Finder + // - "keywords": Keyword-based detection rules + RulesetName string `protobuf:"bytes,1,opt,name=ruleset_name,proto3" json:"ruleset_name,omitempty"` + // Version of the ruleset to download + // Use "latest" for the most recent version, or specify a version like "v1.2.3" + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RulesetDownloadRequest) Reset() { + *x = RulesetDownloadRequest{} + mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RulesetDownloadRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RulesetDownloadRequest) ProtoMessage() {} + +func (x *RulesetDownloadRequest) ProtoReflect() protoreflect.Message { + mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[19] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RulesetDownloadRequest.ProtoReflect.Descriptor instead. +func (*RulesetDownloadRequest) Descriptor() ([]byte, []int) { + return file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_rawDescGZIP(), []int{19} +} + +func (x *RulesetDownloadRequest) GetRulesetName() string { + if x != nil { + return x.RulesetName + } + return "" +} + +func (x *RulesetDownloadRequest) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + // Algorithm information for a specific component. type AlgorithmResponse_Purls struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -1267,7 +1334,7 @@ type AlgorithmResponse_Purls struct { func (x *AlgorithmResponse_Purls) Reset() { *x = AlgorithmResponse_Purls{} - mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[19] + mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1279,7 +1346,7 @@ func (x *AlgorithmResponse_Purls) String() string { func (*AlgorithmResponse_Purls) ProtoMessage() {} func (x *AlgorithmResponse_Purls) ProtoReflect() protoreflect.Message { - mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[19] + mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1347,7 +1414,7 @@ type AlgorithmsInRangeResponse_Purl struct { func (x *AlgorithmsInRangeResponse_Purl) Reset() { *x = AlgorithmsInRangeResponse_Purl{} - mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[20] + mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1359,7 +1426,7 @@ func (x *AlgorithmsInRangeResponse_Purl) String() string { func (*AlgorithmsInRangeResponse_Purl) ProtoMessage() {} func (x *AlgorithmsInRangeResponse_Purl) ProtoReflect() protoreflect.Message { - mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[20] + mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1427,7 +1494,7 @@ type ComponentsAlgorithmsInRangeResponse_Component struct { func (x *ComponentsAlgorithmsInRangeResponse_Component) Reset() { *x = ComponentsAlgorithmsInRangeResponse_Component{} - mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[21] + mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1439,7 +1506,7 @@ func (x *ComponentsAlgorithmsInRangeResponse_Component) String() string { func (*ComponentsAlgorithmsInRangeResponse_Component) ProtoMessage() {} func (x *ComponentsAlgorithmsInRangeResponse_Component) ProtoReflect() protoreflect.Message { - mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[21] + mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1507,7 +1574,7 @@ type ComponentAlgorithmsInRangeResponse_Component struct { func (x *ComponentAlgorithmsInRangeResponse_Component) Reset() { *x = ComponentAlgorithmsInRangeResponse_Component{} - mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[22] + mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1519,7 +1586,7 @@ func (x *ComponentAlgorithmsInRangeResponse_Component) String() string { func (*ComponentAlgorithmsInRangeResponse_Component) ProtoMessage() {} func (x *ComponentAlgorithmsInRangeResponse_Component) ProtoReflect() protoreflect.Message { - mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[22] + mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1587,7 +1654,7 @@ type VersionsInRangeResponse_Purl struct { func (x *VersionsInRangeResponse_Purl) Reset() { *x = VersionsInRangeResponse_Purl{} - mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[23] + mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1599,7 +1666,7 @@ func (x *VersionsInRangeResponse_Purl) String() string { func (*VersionsInRangeResponse_Purl) ProtoMessage() {} func (x *VersionsInRangeResponse_Purl) ProtoReflect() protoreflect.Message { - mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[23] + mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1667,7 +1734,7 @@ type ComponentsVersionsInRangeResponse_Component struct { func (x *ComponentsVersionsInRangeResponse_Component) Reset() { *x = ComponentsVersionsInRangeResponse_Component{} - mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[24] + mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1679,7 +1746,7 @@ func (x *ComponentsVersionsInRangeResponse_Component) String() string { func (*ComponentsVersionsInRangeResponse_Component) ProtoMessage() {} func (x *ComponentsVersionsInRangeResponse_Component) ProtoReflect() protoreflect.Message { - mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[24] + mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[25] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1747,7 +1814,7 @@ type ComponentVersionsInRangeResponse_Component struct { func (x *ComponentVersionsInRangeResponse_Component) Reset() { *x = ComponentVersionsInRangeResponse_Component{} - mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[25] + mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1759,7 +1826,7 @@ func (x *ComponentVersionsInRangeResponse_Component) String() string { func (*ComponentVersionsInRangeResponse_Component) ProtoMessage() {} func (x *ComponentVersionsInRangeResponse_Component) ProtoReflect() protoreflect.Message { - mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[25] + mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1827,7 +1894,7 @@ type HintsResponse_Purls struct { func (x *HintsResponse_Purls) Reset() { *x = HintsResponse_Purls{} - mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[26] + mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1839,7 +1906,7 @@ func (x *HintsResponse_Purls) String() string { func (*HintsResponse_Purls) ProtoMessage() {} func (x *HintsResponse_Purls) ProtoReflect() protoreflect.Message { - mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[26] + mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[27] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1907,7 +1974,7 @@ type HintsInRangeResponse_Purl struct { func (x *HintsInRangeResponse_Purl) Reset() { *x = HintsInRangeResponse_Purl{} - mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[27] + mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1919,7 +1986,7 @@ func (x *HintsInRangeResponse_Purl) String() string { func (*HintsInRangeResponse_Purl) ProtoMessage() {} func (x *HintsInRangeResponse_Purl) ProtoReflect() protoreflect.Message { - mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[27] + mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1987,7 +2054,7 @@ type ComponentsHintsInRangeResponse_Component struct { func (x *ComponentsHintsInRangeResponse_Component) Reset() { *x = ComponentsHintsInRangeResponse_Component{} - mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[28] + mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1999,7 +2066,7 @@ func (x *ComponentsHintsInRangeResponse_Component) String() string { func (*ComponentsHintsInRangeResponse_Component) ProtoMessage() {} func (x *ComponentsHintsInRangeResponse_Component) ProtoReflect() protoreflect.Message { - mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[28] + mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[29] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2067,7 +2134,7 @@ type ComponentHintsInRangeResponse_Component struct { func (x *ComponentHintsInRangeResponse_Component) Reset() { *x = ComponentHintsInRangeResponse_Component{} - mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[29] + mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2079,7 +2146,7 @@ func (x *ComponentHintsInRangeResponse_Component) String() string { func (*ComponentHintsInRangeResponse_Component) ProtoMessage() {} func (x *ComponentHintsInRangeResponse_Component) ProtoReflect() protoreflect.Message { - mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[29] + mi := &file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[30] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2134,7 +2201,7 @@ var File_scanoss_api_cryptography_v2_scanoss_cryptography_proto protoreflect.Fil const file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_rawDesc = "" + "\n" + - "6scanoss/api/cryptography/v2/scanoss-cryptography.proto\x12\x1bscanoss.api.cryptography.v2\x1a*scanoss/api/common/v2/scanoss-common.proto\x1a\x1cgoogle/api/annotations.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\"E\n" + + "6scanoss/api/cryptography/v2/scanoss-cryptography.proto\x12\x1bscanoss.api.cryptography.v2\x1a*scanoss/api/common/v2/scanoss-common.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x19google/api/httpbody.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\"E\n" + "\tAlgorithm\x12\x1c\n" + "\talgorithm\x18\x01 \x01(\tR\talgorithm\x12\x1a\n" + "\bstrength\x18\x02 \x01(\tR\bstrength\"\xb5\x03\n" + @@ -2351,7 +2418,10 @@ const file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_rawDesc = "" + " ComponentEncryptionHintsResponse\x12I\n" + "\tcomponent\x18\x01 \x01(\v2+.scanoss.api.cryptography.v2.ComponentHintsR\tcomponent\x12=\n" + "\x06status\x18\x02 \x01(\v2%.scanoss.api.common.v2.StatusResponseR\x06status:\x98\x03\x92A\x94\x03\n" + - "\x91\x03J\x8e\x03{\"component\":{\"purl\": \"pkg:github/scanoss/engine\", \"requirement\": \">=5.0.0\", \"version\": \"5.0.0\", \"hints\": [{\"id\": \"openssl-hint-001\", \"name\": \"OpenSSL\", \"description\": \"Industry standard cryptographic library\", \"category\": \"library\", \"url\": \"https://www.openssl.org/\", \"purl\": \"pkg:generic/openssl@3.0.0\"}]}, \"status\": {\"status\": \"SUCCESS\", \"message\": \"Cryptographic hints Successfully retrieved\"}}2\x86\x14\n" + + "\x91\x03J\x8e\x03{\"component\":{\"purl\": \"pkg:github/scanoss/engine\", \"requirement\": \">=5.0.0\", \"version\": \"5.0.0\", \"hints\": [{\"id\": \"openssl-hint-001\", \"name\": \"OpenSSL\", \"description\": \"Industry standard cryptographic library\", \"category\": \"library\", \"url\": \"https://www.openssl.org/\", \"purl\": \"pkg:generic/openssl@3.0.0\"}]}, \"status\": {\"status\": \"SUCCESS\", \"message\": \"Cryptographic hints Successfully retrieved\"}}\"V\n" + + "\x16RulesetDownloadRequest\x12\"\n" + + "\fruleset_name\x18\x01 \x01(\tR\fruleset_name\x12\x18\n" + + "\aversion\x18\x02 \x01(\tR\aversion2\xaa\x15\n" + "\fCryptography\x12q\n" + "\x04Echo\x12\".scanoss.api.common.v2.EchoRequest\x1a#.scanoss.api.common.v2.EchoResponse\" \x82\xd3\xe4\x93\x02\x1a:\x01*\"\x15/v2/cryptography/echo\x12h\n" + "\rGetAlgorithms\x12\".scanoss.api.common.v2.PurlRequest\x1a..scanoss.api.cryptography.v2.AlgorithmResponse\"\x03\x88\x02\x01\x12\xaa\x01\n" + @@ -2368,7 +2438,8 @@ const file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_rawDesc = "" + "\x19GetComponentsHintsInRange\x12(.scanoss.api.common.v2.ComponentsRequest\x1a;.scanoss.api.cryptography.v2.ComponentsHintsInRangeResponse\"2\x82\xd3\xe4\x93\x02,:\x01*\"'/v2/cryptography/hints/range/components\x12i\n" + "\x12GetEncryptionHints\x12\".scanoss.api.common.v2.PurlRequest\x1a*.scanoss.api.cryptography.v2.HintsResponse\"\x03\x88\x02\x01\x12\xaf\x01\n" + "\x1bGetComponentEncryptionHints\x12'.scanoss.api.common.v2.ComponentRequest\x1a=.scanoss.api.cryptography.v2.ComponentEncryptionHintsResponse\"(\x82\xd3\xe4\x93\x02\"\x12 /v2/cryptography/hints/component\x12\xb6\x01\n" + - "\x1cGetComponentsEncryptionHints\x12(.scanoss.api.common.v2.ComponentsRequest\x1a>.scanoss.api.cryptography.v2.ComponentsEncryptionHintsResponse\",\x82\xd3\xe4\x93\x02&:\x01*\"!/v2/cryptography/hints/componentsB\xbb\x03\x92A\xfc\x02\x12\x83\x02\n" + + "\x1cGetComponentsEncryptionHints\x12(.scanoss.api.common.v2.ComponentsRequest\x1a>.scanoss.api.cryptography.v2.ComponentsEncryptionHintsResponse\",\x82\xd3\xe4\x93\x02&:\x01*\"!/v2/cryptography/hints/components\x12\xa1\x01\n" + + "\x0fDownloadRuleset\x123.scanoss.api.cryptography.v2.RulesetDownloadRequest\x1a\x14.google.api.HttpBody\"C\x82\xd3\xe4\x93\x02=\x12;/v2/cryptography/rulesets/{ruleset_name}/{version}/downloadB\xbb\x03\x92A\xfc\x02\x12\x83\x02\n" + "\x1cSCANOSS Cryptography Service\x12\x87\x01Cryptography service provides cryptographic intelligence for software components including algorithm detection and encryption analysis.\"T\n" + "\x14scanoss-cryptography\x12'https://github.com/scanoss/cryptography\x1a\x13support@scanoss.com2\x032.0\x1a\x0fapi.scanoss.com*\x02\x01\x022\x10application/json:\x10application/jsonR;\n" + "\x03404\x124\n" + @@ -2387,7 +2458,7 @@ func file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_rawDescGZIP() [ return file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_rawDescData } -var file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes = make([]protoimpl.MessageInfo, 30) +var file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes = make([]protoimpl.MessageInfo, 31) var file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_goTypes = []any{ (*Algorithm)(nil), // 0: scanoss.api.cryptography.v2.Algorithm (*AlgorithmResponse)(nil), // 1: scanoss.api.cryptography.v2.AlgorithmResponse @@ -2408,113 +2479,117 @@ var file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_goTypes = []any{ (*ComponentHintsInRangeResponse)(nil), // 16: scanoss.api.cryptography.v2.ComponentHintsInRangeResponse (*ComponentsEncryptionHintsResponse)(nil), // 17: scanoss.api.cryptography.v2.ComponentsEncryptionHintsResponse (*ComponentEncryptionHintsResponse)(nil), // 18: scanoss.api.cryptography.v2.ComponentEncryptionHintsResponse - (*AlgorithmResponse_Purls)(nil), // 19: scanoss.api.cryptography.v2.AlgorithmResponse.Purls - (*AlgorithmsInRangeResponse_Purl)(nil), // 20: scanoss.api.cryptography.v2.AlgorithmsInRangeResponse.Purl - (*ComponentsAlgorithmsInRangeResponse_Component)(nil), // 21: scanoss.api.cryptography.v2.ComponentsAlgorithmsInRangeResponse.Component - (*ComponentAlgorithmsInRangeResponse_Component)(nil), // 22: scanoss.api.cryptography.v2.ComponentAlgorithmsInRangeResponse.Component - (*VersionsInRangeResponse_Purl)(nil), // 23: scanoss.api.cryptography.v2.VersionsInRangeResponse.Purl - (*ComponentsVersionsInRangeResponse_Component)(nil), // 24: scanoss.api.cryptography.v2.ComponentsVersionsInRangeResponse.Component - (*ComponentVersionsInRangeResponse_Component)(nil), // 25: scanoss.api.cryptography.v2.ComponentVersionsInRangeResponse.Component - (*HintsResponse_Purls)(nil), // 26: scanoss.api.cryptography.v2.HintsResponse.Purls - (*HintsInRangeResponse_Purl)(nil), // 27: scanoss.api.cryptography.v2.HintsInRangeResponse.Purl - (*ComponentsHintsInRangeResponse_Component)(nil), // 28: scanoss.api.cryptography.v2.ComponentsHintsInRangeResponse.Component - (*ComponentHintsInRangeResponse_Component)(nil), // 29: scanoss.api.cryptography.v2.ComponentHintsInRangeResponse.Component - (*commonv2.StatusResponse)(nil), // 30: scanoss.api.common.v2.StatusResponse - (commonv2.ErrorCode)(0), // 31: scanoss.api.common.v2.ErrorCode - (*commonv2.EchoRequest)(nil), // 32: scanoss.api.common.v2.EchoRequest - (*commonv2.PurlRequest)(nil), // 33: scanoss.api.common.v2.PurlRequest - (*commonv2.ComponentRequest)(nil), // 34: scanoss.api.common.v2.ComponentRequest - (*commonv2.ComponentsRequest)(nil), // 35: scanoss.api.common.v2.ComponentsRequest - (*commonv2.EchoResponse)(nil), // 36: scanoss.api.common.v2.EchoResponse + (*RulesetDownloadRequest)(nil), // 19: scanoss.api.cryptography.v2.RulesetDownloadRequest + (*AlgorithmResponse_Purls)(nil), // 20: scanoss.api.cryptography.v2.AlgorithmResponse.Purls + (*AlgorithmsInRangeResponse_Purl)(nil), // 21: scanoss.api.cryptography.v2.AlgorithmsInRangeResponse.Purl + (*ComponentsAlgorithmsInRangeResponse_Component)(nil), // 22: scanoss.api.cryptography.v2.ComponentsAlgorithmsInRangeResponse.Component + (*ComponentAlgorithmsInRangeResponse_Component)(nil), // 23: scanoss.api.cryptography.v2.ComponentAlgorithmsInRangeResponse.Component + (*VersionsInRangeResponse_Purl)(nil), // 24: scanoss.api.cryptography.v2.VersionsInRangeResponse.Purl + (*ComponentsVersionsInRangeResponse_Component)(nil), // 25: scanoss.api.cryptography.v2.ComponentsVersionsInRangeResponse.Component + (*ComponentVersionsInRangeResponse_Component)(nil), // 26: scanoss.api.cryptography.v2.ComponentVersionsInRangeResponse.Component + (*HintsResponse_Purls)(nil), // 27: scanoss.api.cryptography.v2.HintsResponse.Purls + (*HintsInRangeResponse_Purl)(nil), // 28: scanoss.api.cryptography.v2.HintsInRangeResponse.Purl + (*ComponentsHintsInRangeResponse_Component)(nil), // 29: scanoss.api.cryptography.v2.ComponentsHintsInRangeResponse.Component + (*ComponentHintsInRangeResponse_Component)(nil), // 30: scanoss.api.cryptography.v2.ComponentHintsInRangeResponse.Component + (*commonv2.StatusResponse)(nil), // 31: scanoss.api.common.v2.StatusResponse + (commonv2.ErrorCode)(0), // 32: scanoss.api.common.v2.ErrorCode + (*commonv2.EchoRequest)(nil), // 33: scanoss.api.common.v2.EchoRequest + (*commonv2.PurlRequest)(nil), // 34: scanoss.api.common.v2.PurlRequest + (*commonv2.ComponentRequest)(nil), // 35: scanoss.api.common.v2.ComponentRequest + (*commonv2.ComponentsRequest)(nil), // 36: scanoss.api.common.v2.ComponentsRequest + (*commonv2.EchoResponse)(nil), // 37: scanoss.api.common.v2.EchoResponse + (*httpbody.HttpBody)(nil), // 38: google.api.HttpBody } var file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_depIdxs = []int32{ - 19, // 0: scanoss.api.cryptography.v2.AlgorithmResponse.purls:type_name -> scanoss.api.cryptography.v2.AlgorithmResponse.Purls - 30, // 1: scanoss.api.cryptography.v2.AlgorithmResponse.status:type_name -> scanoss.api.common.v2.StatusResponse + 20, // 0: scanoss.api.cryptography.v2.AlgorithmResponse.purls:type_name -> scanoss.api.cryptography.v2.AlgorithmResponse.Purls + 31, // 1: scanoss.api.cryptography.v2.AlgorithmResponse.status:type_name -> scanoss.api.common.v2.StatusResponse 0, // 2: scanoss.api.cryptography.v2.ComponentAlgorithms.algorithms:type_name -> scanoss.api.cryptography.v2.Algorithm - 31, // 3: scanoss.api.cryptography.v2.ComponentAlgorithms.error_code:type_name -> scanoss.api.common.v2.ErrorCode + 32, // 3: scanoss.api.cryptography.v2.ComponentAlgorithms.error_code:type_name -> scanoss.api.common.v2.ErrorCode 2, // 4: scanoss.api.cryptography.v2.ComponentsAlgorithmsResponse.components:type_name -> scanoss.api.cryptography.v2.ComponentAlgorithms - 30, // 5: scanoss.api.cryptography.v2.ComponentsAlgorithmsResponse.status:type_name -> scanoss.api.common.v2.StatusResponse + 31, // 5: scanoss.api.cryptography.v2.ComponentsAlgorithmsResponse.status:type_name -> scanoss.api.common.v2.StatusResponse 2, // 6: scanoss.api.cryptography.v2.ComponentAlgorithmsResponse.component:type_name -> scanoss.api.cryptography.v2.ComponentAlgorithms - 30, // 7: scanoss.api.cryptography.v2.ComponentAlgorithmsResponse.status:type_name -> scanoss.api.common.v2.StatusResponse - 20, // 8: scanoss.api.cryptography.v2.AlgorithmsInRangeResponse.purls:type_name -> scanoss.api.cryptography.v2.AlgorithmsInRangeResponse.Purl - 30, // 9: scanoss.api.cryptography.v2.AlgorithmsInRangeResponse.status:type_name -> scanoss.api.common.v2.StatusResponse - 21, // 10: scanoss.api.cryptography.v2.ComponentsAlgorithmsInRangeResponse.components:type_name -> scanoss.api.cryptography.v2.ComponentsAlgorithmsInRangeResponse.Component - 30, // 11: scanoss.api.cryptography.v2.ComponentsAlgorithmsInRangeResponse.status:type_name -> scanoss.api.common.v2.StatusResponse - 22, // 12: scanoss.api.cryptography.v2.ComponentAlgorithmsInRangeResponse.component:type_name -> scanoss.api.cryptography.v2.ComponentAlgorithmsInRangeResponse.Component - 30, // 13: scanoss.api.cryptography.v2.ComponentAlgorithmsInRangeResponse.status:type_name -> scanoss.api.common.v2.StatusResponse - 23, // 14: scanoss.api.cryptography.v2.VersionsInRangeResponse.purls:type_name -> scanoss.api.cryptography.v2.VersionsInRangeResponse.Purl - 30, // 15: scanoss.api.cryptography.v2.VersionsInRangeResponse.status:type_name -> scanoss.api.common.v2.StatusResponse - 24, // 16: scanoss.api.cryptography.v2.ComponentsVersionsInRangeResponse.components:type_name -> scanoss.api.cryptography.v2.ComponentsVersionsInRangeResponse.Component - 30, // 17: scanoss.api.cryptography.v2.ComponentsVersionsInRangeResponse.status:type_name -> scanoss.api.common.v2.StatusResponse - 25, // 18: scanoss.api.cryptography.v2.ComponentVersionsInRangeResponse.component:type_name -> scanoss.api.cryptography.v2.ComponentVersionsInRangeResponse.Component - 30, // 19: scanoss.api.cryptography.v2.ComponentVersionsInRangeResponse.status:type_name -> scanoss.api.common.v2.StatusResponse + 31, // 7: scanoss.api.cryptography.v2.ComponentAlgorithmsResponse.status:type_name -> scanoss.api.common.v2.StatusResponse + 21, // 8: scanoss.api.cryptography.v2.AlgorithmsInRangeResponse.purls:type_name -> scanoss.api.cryptography.v2.AlgorithmsInRangeResponse.Purl + 31, // 9: scanoss.api.cryptography.v2.AlgorithmsInRangeResponse.status:type_name -> scanoss.api.common.v2.StatusResponse + 22, // 10: scanoss.api.cryptography.v2.ComponentsAlgorithmsInRangeResponse.components:type_name -> scanoss.api.cryptography.v2.ComponentsAlgorithmsInRangeResponse.Component + 31, // 11: scanoss.api.cryptography.v2.ComponentsAlgorithmsInRangeResponse.status:type_name -> scanoss.api.common.v2.StatusResponse + 23, // 12: scanoss.api.cryptography.v2.ComponentAlgorithmsInRangeResponse.component:type_name -> scanoss.api.cryptography.v2.ComponentAlgorithmsInRangeResponse.Component + 31, // 13: scanoss.api.cryptography.v2.ComponentAlgorithmsInRangeResponse.status:type_name -> scanoss.api.common.v2.StatusResponse + 24, // 14: scanoss.api.cryptography.v2.VersionsInRangeResponse.purls:type_name -> scanoss.api.cryptography.v2.VersionsInRangeResponse.Purl + 31, // 15: scanoss.api.cryptography.v2.VersionsInRangeResponse.status:type_name -> scanoss.api.common.v2.StatusResponse + 25, // 16: scanoss.api.cryptography.v2.ComponentsVersionsInRangeResponse.components:type_name -> scanoss.api.cryptography.v2.ComponentsVersionsInRangeResponse.Component + 31, // 17: scanoss.api.cryptography.v2.ComponentsVersionsInRangeResponse.status:type_name -> scanoss.api.common.v2.StatusResponse + 26, // 18: scanoss.api.cryptography.v2.ComponentVersionsInRangeResponse.component:type_name -> scanoss.api.cryptography.v2.ComponentVersionsInRangeResponse.Component + 31, // 19: scanoss.api.cryptography.v2.ComponentVersionsInRangeResponse.status:type_name -> scanoss.api.common.v2.StatusResponse 11, // 20: scanoss.api.cryptography.v2.ComponentHints.hints:type_name -> scanoss.api.cryptography.v2.Hint - 31, // 21: scanoss.api.cryptography.v2.ComponentHints.error_code:type_name -> scanoss.api.common.v2.ErrorCode - 26, // 22: scanoss.api.cryptography.v2.HintsResponse.purls:type_name -> scanoss.api.cryptography.v2.HintsResponse.Purls - 30, // 23: scanoss.api.cryptography.v2.HintsResponse.status:type_name -> scanoss.api.common.v2.StatusResponse - 27, // 24: scanoss.api.cryptography.v2.HintsInRangeResponse.purls:type_name -> scanoss.api.cryptography.v2.HintsInRangeResponse.Purl - 30, // 25: scanoss.api.cryptography.v2.HintsInRangeResponse.status:type_name -> scanoss.api.common.v2.StatusResponse - 28, // 26: scanoss.api.cryptography.v2.ComponentsHintsInRangeResponse.components:type_name -> scanoss.api.cryptography.v2.ComponentsHintsInRangeResponse.Component - 30, // 27: scanoss.api.cryptography.v2.ComponentsHintsInRangeResponse.status:type_name -> scanoss.api.common.v2.StatusResponse - 29, // 28: scanoss.api.cryptography.v2.ComponentHintsInRangeResponse.component:type_name -> scanoss.api.cryptography.v2.ComponentHintsInRangeResponse.Component - 30, // 29: scanoss.api.cryptography.v2.ComponentHintsInRangeResponse.status:type_name -> scanoss.api.common.v2.StatusResponse + 32, // 21: scanoss.api.cryptography.v2.ComponentHints.error_code:type_name -> scanoss.api.common.v2.ErrorCode + 27, // 22: scanoss.api.cryptography.v2.HintsResponse.purls:type_name -> scanoss.api.cryptography.v2.HintsResponse.Purls + 31, // 23: scanoss.api.cryptography.v2.HintsResponse.status:type_name -> scanoss.api.common.v2.StatusResponse + 28, // 24: scanoss.api.cryptography.v2.HintsInRangeResponse.purls:type_name -> scanoss.api.cryptography.v2.HintsInRangeResponse.Purl + 31, // 25: scanoss.api.cryptography.v2.HintsInRangeResponse.status:type_name -> scanoss.api.common.v2.StatusResponse + 29, // 26: scanoss.api.cryptography.v2.ComponentsHintsInRangeResponse.components:type_name -> scanoss.api.cryptography.v2.ComponentsHintsInRangeResponse.Component + 31, // 27: scanoss.api.cryptography.v2.ComponentsHintsInRangeResponse.status:type_name -> scanoss.api.common.v2.StatusResponse + 30, // 28: scanoss.api.cryptography.v2.ComponentHintsInRangeResponse.component:type_name -> scanoss.api.cryptography.v2.ComponentHintsInRangeResponse.Component + 31, // 29: scanoss.api.cryptography.v2.ComponentHintsInRangeResponse.status:type_name -> scanoss.api.common.v2.StatusResponse 12, // 30: scanoss.api.cryptography.v2.ComponentsEncryptionHintsResponse.components:type_name -> scanoss.api.cryptography.v2.ComponentHints - 30, // 31: scanoss.api.cryptography.v2.ComponentsEncryptionHintsResponse.status:type_name -> scanoss.api.common.v2.StatusResponse + 31, // 31: scanoss.api.cryptography.v2.ComponentsEncryptionHintsResponse.status:type_name -> scanoss.api.common.v2.StatusResponse 12, // 32: scanoss.api.cryptography.v2.ComponentEncryptionHintsResponse.component:type_name -> scanoss.api.cryptography.v2.ComponentHints - 30, // 33: scanoss.api.cryptography.v2.ComponentEncryptionHintsResponse.status:type_name -> scanoss.api.common.v2.StatusResponse + 31, // 33: scanoss.api.cryptography.v2.ComponentEncryptionHintsResponse.status:type_name -> scanoss.api.common.v2.StatusResponse 0, // 34: scanoss.api.cryptography.v2.AlgorithmResponse.Purls.algorithms:type_name -> scanoss.api.cryptography.v2.Algorithm - 31, // 35: scanoss.api.cryptography.v2.AlgorithmResponse.Purls.error_code:type_name -> scanoss.api.common.v2.ErrorCode + 32, // 35: scanoss.api.cryptography.v2.AlgorithmResponse.Purls.error_code:type_name -> scanoss.api.common.v2.ErrorCode 0, // 36: scanoss.api.cryptography.v2.AlgorithmsInRangeResponse.Purl.algorithms:type_name -> scanoss.api.cryptography.v2.Algorithm - 31, // 37: scanoss.api.cryptography.v2.AlgorithmsInRangeResponse.Purl.error_code:type_name -> scanoss.api.common.v2.ErrorCode + 32, // 37: scanoss.api.cryptography.v2.AlgorithmsInRangeResponse.Purl.error_code:type_name -> scanoss.api.common.v2.ErrorCode 0, // 38: scanoss.api.cryptography.v2.ComponentsAlgorithmsInRangeResponse.Component.algorithms:type_name -> scanoss.api.cryptography.v2.Algorithm - 31, // 39: scanoss.api.cryptography.v2.ComponentsAlgorithmsInRangeResponse.Component.error_code:type_name -> scanoss.api.common.v2.ErrorCode + 32, // 39: scanoss.api.cryptography.v2.ComponentsAlgorithmsInRangeResponse.Component.error_code:type_name -> scanoss.api.common.v2.ErrorCode 0, // 40: scanoss.api.cryptography.v2.ComponentAlgorithmsInRangeResponse.Component.algorithms:type_name -> scanoss.api.cryptography.v2.Algorithm - 31, // 41: scanoss.api.cryptography.v2.ComponentAlgorithmsInRangeResponse.Component.error_code:type_name -> scanoss.api.common.v2.ErrorCode - 31, // 42: scanoss.api.cryptography.v2.VersionsInRangeResponse.Purl.error_code:type_name -> scanoss.api.common.v2.ErrorCode - 31, // 43: scanoss.api.cryptography.v2.ComponentsVersionsInRangeResponse.Component.error_code:type_name -> scanoss.api.common.v2.ErrorCode - 31, // 44: scanoss.api.cryptography.v2.ComponentVersionsInRangeResponse.Component.error_code:type_name -> scanoss.api.common.v2.ErrorCode + 32, // 41: scanoss.api.cryptography.v2.ComponentAlgorithmsInRangeResponse.Component.error_code:type_name -> scanoss.api.common.v2.ErrorCode + 32, // 42: scanoss.api.cryptography.v2.VersionsInRangeResponse.Purl.error_code:type_name -> scanoss.api.common.v2.ErrorCode + 32, // 43: scanoss.api.cryptography.v2.ComponentsVersionsInRangeResponse.Component.error_code:type_name -> scanoss.api.common.v2.ErrorCode + 32, // 44: scanoss.api.cryptography.v2.ComponentVersionsInRangeResponse.Component.error_code:type_name -> scanoss.api.common.v2.ErrorCode 11, // 45: scanoss.api.cryptography.v2.HintsResponse.Purls.hints:type_name -> scanoss.api.cryptography.v2.Hint - 31, // 46: scanoss.api.cryptography.v2.HintsResponse.Purls.error_code:type_name -> scanoss.api.common.v2.ErrorCode + 32, // 46: scanoss.api.cryptography.v2.HintsResponse.Purls.error_code:type_name -> scanoss.api.common.v2.ErrorCode 11, // 47: scanoss.api.cryptography.v2.HintsInRangeResponse.Purl.hints:type_name -> scanoss.api.cryptography.v2.Hint - 31, // 48: scanoss.api.cryptography.v2.HintsInRangeResponse.Purl.error_code:type_name -> scanoss.api.common.v2.ErrorCode + 32, // 48: scanoss.api.cryptography.v2.HintsInRangeResponse.Purl.error_code:type_name -> scanoss.api.common.v2.ErrorCode 11, // 49: scanoss.api.cryptography.v2.ComponentsHintsInRangeResponse.Component.hints:type_name -> scanoss.api.cryptography.v2.Hint - 31, // 50: scanoss.api.cryptography.v2.ComponentsHintsInRangeResponse.Component.error_code:type_name -> scanoss.api.common.v2.ErrorCode + 32, // 50: scanoss.api.cryptography.v2.ComponentsHintsInRangeResponse.Component.error_code:type_name -> scanoss.api.common.v2.ErrorCode 11, // 51: scanoss.api.cryptography.v2.ComponentHintsInRangeResponse.Component.hints:type_name -> scanoss.api.cryptography.v2.Hint - 31, // 52: scanoss.api.cryptography.v2.ComponentHintsInRangeResponse.Component.error_code:type_name -> scanoss.api.common.v2.ErrorCode - 32, // 53: scanoss.api.cryptography.v2.Cryptography.Echo:input_type -> scanoss.api.common.v2.EchoRequest - 33, // 54: scanoss.api.cryptography.v2.Cryptography.GetAlgorithms:input_type -> scanoss.api.common.v2.PurlRequest - 34, // 55: scanoss.api.cryptography.v2.Cryptography.GetComponentAlgorithms:input_type -> scanoss.api.common.v2.ComponentRequest - 35, // 56: scanoss.api.cryptography.v2.Cryptography.GetComponentsAlgorithms:input_type -> scanoss.api.common.v2.ComponentsRequest - 33, // 57: scanoss.api.cryptography.v2.Cryptography.GetAlgorithmsInRange:input_type -> scanoss.api.common.v2.PurlRequest - 34, // 58: scanoss.api.cryptography.v2.Cryptography.GetComponentAlgorithmsInRange:input_type -> scanoss.api.common.v2.ComponentRequest - 35, // 59: scanoss.api.cryptography.v2.Cryptography.GetComponentsAlgorithmsInRange:input_type -> scanoss.api.common.v2.ComponentsRequest - 33, // 60: scanoss.api.cryptography.v2.Cryptography.GetVersionsInRange:input_type -> scanoss.api.common.v2.PurlRequest - 34, // 61: scanoss.api.cryptography.v2.Cryptography.GetComponentVersionsInRange:input_type -> scanoss.api.common.v2.ComponentRequest - 35, // 62: scanoss.api.cryptography.v2.Cryptography.GetComponentsVersionsInRange:input_type -> scanoss.api.common.v2.ComponentsRequest - 33, // 63: scanoss.api.cryptography.v2.Cryptography.GetHintsInRange:input_type -> scanoss.api.common.v2.PurlRequest - 34, // 64: scanoss.api.cryptography.v2.Cryptography.GetComponentHintsInRange:input_type -> scanoss.api.common.v2.ComponentRequest - 35, // 65: scanoss.api.cryptography.v2.Cryptography.GetComponentsHintsInRange:input_type -> scanoss.api.common.v2.ComponentsRequest - 33, // 66: scanoss.api.cryptography.v2.Cryptography.GetEncryptionHints:input_type -> scanoss.api.common.v2.PurlRequest - 34, // 67: scanoss.api.cryptography.v2.Cryptography.GetComponentEncryptionHints:input_type -> scanoss.api.common.v2.ComponentRequest - 35, // 68: scanoss.api.cryptography.v2.Cryptography.GetComponentsEncryptionHints:input_type -> scanoss.api.common.v2.ComponentsRequest - 36, // 69: scanoss.api.cryptography.v2.Cryptography.Echo:output_type -> scanoss.api.common.v2.EchoResponse - 1, // 70: scanoss.api.cryptography.v2.Cryptography.GetAlgorithms:output_type -> scanoss.api.cryptography.v2.AlgorithmResponse - 4, // 71: scanoss.api.cryptography.v2.Cryptography.GetComponentAlgorithms:output_type -> scanoss.api.cryptography.v2.ComponentAlgorithmsResponse - 3, // 72: scanoss.api.cryptography.v2.Cryptography.GetComponentsAlgorithms:output_type -> scanoss.api.cryptography.v2.ComponentsAlgorithmsResponse - 5, // 73: scanoss.api.cryptography.v2.Cryptography.GetAlgorithmsInRange:output_type -> scanoss.api.cryptography.v2.AlgorithmsInRangeResponse - 7, // 74: scanoss.api.cryptography.v2.Cryptography.GetComponentAlgorithmsInRange:output_type -> scanoss.api.cryptography.v2.ComponentAlgorithmsInRangeResponse - 6, // 75: scanoss.api.cryptography.v2.Cryptography.GetComponentsAlgorithmsInRange:output_type -> scanoss.api.cryptography.v2.ComponentsAlgorithmsInRangeResponse - 8, // 76: scanoss.api.cryptography.v2.Cryptography.GetVersionsInRange:output_type -> scanoss.api.cryptography.v2.VersionsInRangeResponse - 10, // 77: scanoss.api.cryptography.v2.Cryptography.GetComponentVersionsInRange:output_type -> scanoss.api.cryptography.v2.ComponentVersionsInRangeResponse - 9, // 78: scanoss.api.cryptography.v2.Cryptography.GetComponentsVersionsInRange:output_type -> scanoss.api.cryptography.v2.ComponentsVersionsInRangeResponse - 14, // 79: scanoss.api.cryptography.v2.Cryptography.GetHintsInRange:output_type -> scanoss.api.cryptography.v2.HintsInRangeResponse - 16, // 80: scanoss.api.cryptography.v2.Cryptography.GetComponentHintsInRange:output_type -> scanoss.api.cryptography.v2.ComponentHintsInRangeResponse - 15, // 81: scanoss.api.cryptography.v2.Cryptography.GetComponentsHintsInRange:output_type -> scanoss.api.cryptography.v2.ComponentsHintsInRangeResponse - 13, // 82: scanoss.api.cryptography.v2.Cryptography.GetEncryptionHints:output_type -> scanoss.api.cryptography.v2.HintsResponse - 18, // 83: scanoss.api.cryptography.v2.Cryptography.GetComponentEncryptionHints:output_type -> scanoss.api.cryptography.v2.ComponentEncryptionHintsResponse - 17, // 84: scanoss.api.cryptography.v2.Cryptography.GetComponentsEncryptionHints:output_type -> scanoss.api.cryptography.v2.ComponentsEncryptionHintsResponse - 69, // [69:85] is the sub-list for method output_type - 53, // [53:69] is the sub-list for method input_type + 32, // 52: scanoss.api.cryptography.v2.ComponentHintsInRangeResponse.Component.error_code:type_name -> scanoss.api.common.v2.ErrorCode + 33, // 53: scanoss.api.cryptography.v2.Cryptography.Echo:input_type -> scanoss.api.common.v2.EchoRequest + 34, // 54: scanoss.api.cryptography.v2.Cryptography.GetAlgorithms:input_type -> scanoss.api.common.v2.PurlRequest + 35, // 55: scanoss.api.cryptography.v2.Cryptography.GetComponentAlgorithms:input_type -> scanoss.api.common.v2.ComponentRequest + 36, // 56: scanoss.api.cryptography.v2.Cryptography.GetComponentsAlgorithms:input_type -> scanoss.api.common.v2.ComponentsRequest + 34, // 57: scanoss.api.cryptography.v2.Cryptography.GetAlgorithmsInRange:input_type -> scanoss.api.common.v2.PurlRequest + 35, // 58: scanoss.api.cryptography.v2.Cryptography.GetComponentAlgorithmsInRange:input_type -> scanoss.api.common.v2.ComponentRequest + 36, // 59: scanoss.api.cryptography.v2.Cryptography.GetComponentsAlgorithmsInRange:input_type -> scanoss.api.common.v2.ComponentsRequest + 34, // 60: scanoss.api.cryptography.v2.Cryptography.GetVersionsInRange:input_type -> scanoss.api.common.v2.PurlRequest + 35, // 61: scanoss.api.cryptography.v2.Cryptography.GetComponentVersionsInRange:input_type -> scanoss.api.common.v2.ComponentRequest + 36, // 62: scanoss.api.cryptography.v2.Cryptography.GetComponentsVersionsInRange:input_type -> scanoss.api.common.v2.ComponentsRequest + 34, // 63: scanoss.api.cryptography.v2.Cryptography.GetHintsInRange:input_type -> scanoss.api.common.v2.PurlRequest + 35, // 64: scanoss.api.cryptography.v2.Cryptography.GetComponentHintsInRange:input_type -> scanoss.api.common.v2.ComponentRequest + 36, // 65: scanoss.api.cryptography.v2.Cryptography.GetComponentsHintsInRange:input_type -> scanoss.api.common.v2.ComponentsRequest + 34, // 66: scanoss.api.cryptography.v2.Cryptography.GetEncryptionHints:input_type -> scanoss.api.common.v2.PurlRequest + 35, // 67: scanoss.api.cryptography.v2.Cryptography.GetComponentEncryptionHints:input_type -> scanoss.api.common.v2.ComponentRequest + 36, // 68: scanoss.api.cryptography.v2.Cryptography.GetComponentsEncryptionHints:input_type -> scanoss.api.common.v2.ComponentsRequest + 19, // 69: scanoss.api.cryptography.v2.Cryptography.DownloadRuleset:input_type -> scanoss.api.cryptography.v2.RulesetDownloadRequest + 37, // 70: scanoss.api.cryptography.v2.Cryptography.Echo:output_type -> scanoss.api.common.v2.EchoResponse + 1, // 71: scanoss.api.cryptography.v2.Cryptography.GetAlgorithms:output_type -> scanoss.api.cryptography.v2.AlgorithmResponse + 4, // 72: scanoss.api.cryptography.v2.Cryptography.GetComponentAlgorithms:output_type -> scanoss.api.cryptography.v2.ComponentAlgorithmsResponse + 3, // 73: scanoss.api.cryptography.v2.Cryptography.GetComponentsAlgorithms:output_type -> scanoss.api.cryptography.v2.ComponentsAlgorithmsResponse + 5, // 74: scanoss.api.cryptography.v2.Cryptography.GetAlgorithmsInRange:output_type -> scanoss.api.cryptography.v2.AlgorithmsInRangeResponse + 7, // 75: scanoss.api.cryptography.v2.Cryptography.GetComponentAlgorithmsInRange:output_type -> scanoss.api.cryptography.v2.ComponentAlgorithmsInRangeResponse + 6, // 76: scanoss.api.cryptography.v2.Cryptography.GetComponentsAlgorithmsInRange:output_type -> scanoss.api.cryptography.v2.ComponentsAlgorithmsInRangeResponse + 8, // 77: scanoss.api.cryptography.v2.Cryptography.GetVersionsInRange:output_type -> scanoss.api.cryptography.v2.VersionsInRangeResponse + 10, // 78: scanoss.api.cryptography.v2.Cryptography.GetComponentVersionsInRange:output_type -> scanoss.api.cryptography.v2.ComponentVersionsInRangeResponse + 9, // 79: scanoss.api.cryptography.v2.Cryptography.GetComponentsVersionsInRange:output_type -> scanoss.api.cryptography.v2.ComponentsVersionsInRangeResponse + 14, // 80: scanoss.api.cryptography.v2.Cryptography.GetHintsInRange:output_type -> scanoss.api.cryptography.v2.HintsInRangeResponse + 16, // 81: scanoss.api.cryptography.v2.Cryptography.GetComponentHintsInRange:output_type -> scanoss.api.cryptography.v2.ComponentHintsInRangeResponse + 15, // 82: scanoss.api.cryptography.v2.Cryptography.GetComponentsHintsInRange:output_type -> scanoss.api.cryptography.v2.ComponentsHintsInRangeResponse + 13, // 83: scanoss.api.cryptography.v2.Cryptography.GetEncryptionHints:output_type -> scanoss.api.cryptography.v2.HintsResponse + 18, // 84: scanoss.api.cryptography.v2.Cryptography.GetComponentEncryptionHints:output_type -> scanoss.api.cryptography.v2.ComponentEncryptionHintsResponse + 17, // 85: scanoss.api.cryptography.v2.Cryptography.GetComponentsEncryptionHints:output_type -> scanoss.api.cryptography.v2.ComponentsEncryptionHintsResponse + 38, // 86: scanoss.api.cryptography.v2.Cryptography.DownloadRuleset:output_type -> google.api.HttpBody + 70, // [70:87] is the sub-list for method output_type + 53, // [53:70] is the sub-list for method input_type 53, // [53:53] is the sub-list for extension type_name 53, // [53:53] is the sub-list for extension extendee 0, // [0:53] is the sub-list for field type_name @@ -2527,7 +2602,6 @@ func file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_init() { } file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[2].OneofWrappers = []any{} file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[12].OneofWrappers = []any{} - file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[19].OneofWrappers = []any{} file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[20].OneofWrappers = []any{} file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[21].OneofWrappers = []any{} file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[22].OneofWrappers = []any{} @@ -2538,13 +2612,14 @@ func file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_init() { file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[27].OneofWrappers = []any{} file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[28].OneofWrappers = []any{} file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[29].OneofWrappers = []any{} + file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_msgTypes[30].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_rawDesc), len(file_scanoss_api_cryptography_v2_scanoss_cryptography_proto_rawDesc)), NumEnums: 0, - NumMessages: 30, + NumMessages: 31, NumExtensions: 0, NumServices: 1, }, diff --git a/api/cryptographyv2/scanoss-cryptography.pb.gw.go b/api/cryptographyv2/scanoss-cryptography.pb.gw.go index d8b117f..6f4fce6 100644 --- a/api/cryptographyv2/scanoss-cryptography.pb.gw.go +++ b/api/cryptographyv2/scanoss-cryptography.pb.gw.go @@ -508,6 +508,61 @@ func local_request_Cryptography_GetComponentsEncryptionHints_0(ctx context.Conte return msg, metadata, err } +func request_Cryptography_DownloadRuleset_0(ctx context.Context, marshaler runtime.Marshaler, client CryptographyClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq RulesetDownloadRequest + metadata runtime.ServerMetadata + err error + ) + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["ruleset_name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "ruleset_name") + } + protoReq.RulesetName, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "ruleset_name", err) + } + val, ok = pathParams["version"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "version") + } + protoReq.Version, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "version", err) + } + msg, err := client.DownloadRuleset(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_Cryptography_DownloadRuleset_0(ctx context.Context, marshaler runtime.Marshaler, server CryptographyServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq RulesetDownloadRequest + metadata runtime.ServerMetadata + err error + ) + val, ok := pathParams["ruleset_name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "ruleset_name") + } + protoReq.RulesetName, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "ruleset_name", err) + } + val, ok = pathParams["version"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "version") + } + protoReq.Version, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "version", err) + } + msg, err := server.DownloadRuleset(ctx, &protoReq) + return msg, metadata, err +} + // RegisterCryptographyHandlerServer registers the http handlers for service Cryptography to "mux". // UnaryRPC :call CryptographyServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -834,6 +889,26 @@ func RegisterCryptographyHandlerServer(ctx context.Context, mux *runtime.ServeMu } forward_Cryptography_GetComponentsEncryptionHints_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) + mux.Handle(http.MethodGet, pattern_Cryptography_DownloadRuleset_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/scanoss.api.cryptography.v2.Cryptography/DownloadRuleset", runtime.WithHTTPPathPattern("/v2/cryptography/rulesets/{ruleset_name}/{version}/download")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Cryptography_DownloadRuleset_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_Cryptography_DownloadRuleset_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) return nil } @@ -1146,6 +1221,23 @@ func RegisterCryptographyHandlerClient(ctx context.Context, mux *runtime.ServeMu } forward_Cryptography_GetComponentsEncryptionHints_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) + mux.Handle(http.MethodGet, pattern_Cryptography_DownloadRuleset_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/scanoss.api.cryptography.v2.Cryptography/DownloadRuleset", runtime.WithHTTPPathPattern("/v2/cryptography/rulesets/{ruleset_name}/{version}/download")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Cryptography_DownloadRuleset_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_Cryptography_DownloadRuleset_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) return nil } @@ -1166,6 +1258,7 @@ var ( pattern_Cryptography_GetEncryptionHints_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"scanoss.api.cryptography.v2.Cryptography", "GetEncryptionHints"}, "")) pattern_Cryptography_GetComponentEncryptionHints_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v2", "cryptography", "hints", "component"}, "")) pattern_Cryptography_GetComponentsEncryptionHints_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v2", "cryptography", "hints", "components"}, "")) + pattern_Cryptography_DownloadRuleset_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"v2", "cryptography", "rulesets", "ruleset_name", "version", "download"}, "")) ) var ( @@ -1185,4 +1278,5 @@ var ( forward_Cryptography_GetEncryptionHints_0 = runtime.ForwardResponseMessage forward_Cryptography_GetComponentEncryptionHints_0 = runtime.ForwardResponseMessage forward_Cryptography_GetComponentsEncryptionHints_0 = runtime.ForwardResponseMessage + forward_Cryptography_DownloadRuleset_0 = runtime.ForwardResponseMessage ) diff --git a/api/cryptographyv2/scanoss-cryptography_grpc.pb.go b/api/cryptographyv2/scanoss-cryptography_grpc.pb.go index 0ce14be..8dcfca9 100644 --- a/api/cryptographyv2/scanoss-cryptography_grpc.pb.go +++ b/api/cryptographyv2/scanoss-cryptography_grpc.pb.go @@ -39,6 +39,7 @@ package cryptographyv2 import ( context "context" commonv2 "github.com/scanoss/papi/api/commonv2" + httpbody "google.golang.org/genproto/googleapis/api/httpbody" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" @@ -66,6 +67,7 @@ const ( Cryptography_GetEncryptionHints_FullMethodName = "/scanoss.api.cryptography.v2.Cryptography/GetEncryptionHints" Cryptography_GetComponentEncryptionHints_FullMethodName = "/scanoss.api.cryptography.v2.Cryptography/GetComponentEncryptionHints" Cryptography_GetComponentsEncryptionHints_FullMethodName = "/scanoss.api.cryptography.v2.Cryptography/GetComponentsEncryptionHints" + Cryptography_DownloadRuleset_FullMethodName = "/scanoss.api.cryptography.v2.Cryptography/DownloadRuleset" ) // CryptographyClient is the client API for Cryptography service. @@ -180,6 +182,29 @@ type CryptographyClient interface { // // See: https://github.com/scanoss/papi/blob/main/protobuf/scanoss/api/cryptography/v2/README.md#componentshintsinrange GetComponentsEncryptionHints(ctx context.Context, in *commonv2.ComponentsRequest, opts ...grpc.CallOption) (*ComponentsEncryptionHintsResponse, error) + // Download cryptography detection ruleset as a tarball. + // + // Downloads a compressed tarball containing cryptographic detection rules for various + // programming languages. Rulesets can be used with tools like SCANOSS Crypto Finder for + // cryptographic algorithm detection in source code. + // + // Supported ruleset types: + // - dca: Deep Code Analysis rules (for SCANOSS Crypto Finder) + // - keywords: Keyword-based detection rules + // + // Version can be: + // - "latest": Most recent version + // - Specific version: e.g., "v1.2.3" + // + // Response headers (via grpc-gateway): + // - Content-Type: application/gzip + // - Content-Disposition: attachment; filename="scanoss-crypto-{ruleset_name}-{version}.tar.gz" + // - SCANOSS-Ruleset-Name: Name of the ruleset + // - SCANOSS-Ruleset-Version: Resolved version number + // - X-Checksum-SHA256: SHA256 checksum of the tarball + // + // See: https://github.com/scanoss/papi/blob/main/protobuf/scanoss/api/cryptography/v2/README.md#downloadruleset + DownloadRuleset(ctx context.Context, in *RulesetDownloadRequest, opts ...grpc.CallOption) (*httpbody.HttpBody, error) } type cryptographyClient struct { @@ -355,6 +380,16 @@ func (c *cryptographyClient) GetComponentsEncryptionHints(ctx context.Context, i return out, nil } +func (c *cryptographyClient) DownloadRuleset(ctx context.Context, in *RulesetDownloadRequest, opts ...grpc.CallOption) (*httpbody.HttpBody, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(httpbody.HttpBody) + err := c.cc.Invoke(ctx, Cryptography_DownloadRuleset_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + // CryptographyServer is the server API for Cryptography service. // All implementations must embed UnimplementedCryptographyServer // for forward compatibility. @@ -467,6 +502,29 @@ type CryptographyServer interface { // // See: https://github.com/scanoss/papi/blob/main/protobuf/scanoss/api/cryptography/v2/README.md#componentshintsinrange GetComponentsEncryptionHints(context.Context, *commonv2.ComponentsRequest) (*ComponentsEncryptionHintsResponse, error) + // Download cryptography detection ruleset as a tarball. + // + // Downloads a compressed tarball containing cryptographic detection rules for various + // programming languages. Rulesets can be used with tools like SCANOSS Crypto Finder for + // cryptographic algorithm detection in source code. + // + // Supported ruleset types: + // - dca: Deep Code Analysis rules (for SCANOSS Crypto Finder) + // - keywords: Keyword-based detection rules + // + // Version can be: + // - "latest": Most recent version + // - Specific version: e.g., "v1.2.3" + // + // Response headers (via grpc-gateway): + // - Content-Type: application/gzip + // - Content-Disposition: attachment; filename="scanoss-crypto-{ruleset_name}-{version}.tar.gz" + // - SCANOSS-Ruleset-Name: Name of the ruleset + // - SCANOSS-Ruleset-Version: Resolved version number + // - X-Checksum-SHA256: SHA256 checksum of the tarball + // + // See: https://github.com/scanoss/papi/blob/main/protobuf/scanoss/api/cryptography/v2/README.md#downloadruleset + DownloadRuleset(context.Context, *RulesetDownloadRequest) (*httpbody.HttpBody, error) mustEmbedUnimplementedCryptographyServer() } @@ -525,6 +583,9 @@ func (UnimplementedCryptographyServer) GetComponentEncryptionHints(context.Conte func (UnimplementedCryptographyServer) GetComponentsEncryptionHints(context.Context, *commonv2.ComponentsRequest) (*ComponentsEncryptionHintsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetComponentsEncryptionHints not implemented") } +func (UnimplementedCryptographyServer) DownloadRuleset(context.Context, *RulesetDownloadRequest) (*httpbody.HttpBody, error) { + return nil, status.Errorf(codes.Unimplemented, "method DownloadRuleset not implemented") +} func (UnimplementedCryptographyServer) mustEmbedUnimplementedCryptographyServer() {} func (UnimplementedCryptographyServer) testEmbeddedByValue() {} @@ -834,6 +895,24 @@ func _Cryptography_GetComponentsEncryptionHints_Handler(srv interface{}, ctx con return interceptor(ctx, in, info, handler) } +func _Cryptography_DownloadRuleset_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RulesetDownloadRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CryptographyServer).DownloadRuleset(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Cryptography_DownloadRuleset_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CryptographyServer).DownloadRuleset(ctx, req.(*RulesetDownloadRequest)) + } + return interceptor(ctx, in, info, handler) +} + // Cryptography_ServiceDesc is the grpc.ServiceDesc for Cryptography service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -905,6 +984,10 @@ var Cryptography_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetComponentsEncryptionHints", Handler: _Cryptography_GetComponentsEncryptionHints_Handler, }, + { + MethodName: "DownloadRuleset", + Handler: _Cryptography_DownloadRuleset_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "scanoss/api/cryptography/v2/scanoss-cryptography.proto", diff --git a/protobuf/scanoss/api/cryptography/v2/README.md b/protobuf/scanoss/api/cryptography/v2/README.md index 1fb823a..03030ea 100644 --- a/protobuf/scanoss/api/cryptography/v2/README.md +++ b/protobuf/scanoss/api/cryptography/v2/README.md @@ -434,3 +434,104 @@ curl -X POST 'https://api.scanoss.com/v2/cryptography/hints/components' \ ] }' ``` + +## DownloadRuleset + +Downloads cryptography detection rulesets as compressed tarballs. Rulesets contain detection rules for identifying cryptographic algorithms across various programming languages, designed for use with tools like SemGrep/OpenGrep. + +### Supported Ruleset Types + +- **dca**: Deep Code Analysis rules for semantic analysis using SCANOSS Crypto Finder +- **keywords**: Keyword-based detection rules for pattern matching + +### Version Specification + +- `latest`: Downloads the most recent version of the ruleset +- Specific version: e.g., `v1.2.3` for a particular release + +### HTTP Request Examples + +```bash +# Get DCA ruleset (latest version) +curl -X GET 'https://api.scanoss.com/v2/cryptography/rulesets/dca/latest/download' \ + -H "X-Api-Key: $SC_API_KEY" + +# Get Keywords ruleset (specific version) +curl -X GET 'https://api.scanoss.com/v2/cryptography/rulesets/keywords/v1.2.3/download' \ + -H "X-Api-Key: $SC_API_KEY" +``` + +### Response Format + +The REST API returns a **raw binary tarball** (`.tar.gz`) with metadata in HTTP response headers. + +#### Response Headers + +```http +HTTP/1.1 200 OK +Content-Type: application/gzip +Content-Disposition: attachment; filename="scanoss-crypto-dca-v1.2.3.tar.gz" +X-Ruleset-Name: dca +X-Ruleset-Version: v1.2.3 +X-Checksum-SHA256: a3f5d8b9e2c7f1a4b6d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0 + + +``` + +#### Downloading with curl + +```bash +# Download directly to file +curl -X GET 'https://api.scanoss.com/v2/cryptography/rulesets/dca/latest/download' \ + -H "X-Api-Key: $SC_API_KEY" \ + -o scanoss-crypto-dca-latest.tar.gz + +# Extract immediately +tar -xzf scanoss-crypto-dca-latest.tar.gz +``` + +#### Downloading with curl and extracting headers + +```bash +# Download and capture headers +curl -X GET 'https://api.scanoss.com/v2/cryptography/rulesets/dca/latest/download' \ + -H "X-Api-Key: $SC_API_KEY" \ + -D headers.txt \ + -o scanoss-crypto-dca-latest.tar.gz + +# View metadata from headers +cat headers.txt +``` + +#### Tarball Structure + +The downloaded and extracted tarball contains: + +``` +dca-v1.2.3/ +├── java/ # Java cryptography detection rules +│ ├── jca.yaml +│ ├── bouncycastle.yaml +│ └── ... +├── python/ # Python cryptography detection rules +│ ├── cryptography.yaml +│ ├── pycrypto.yaml +│ └── ... +├── go/ # Go cryptography detection rules +│ └── ... +└── manifest.json # Ruleset metadata and checksums +``` + +#### Manifest File + +Each tarball includes a `manifest.json` with ruleset information: + +```json +{ + "name": "dca", + "version": "v1.2.3", + "description": "Standard cryptography detection rules (to be used with SCANOSS Crypto Finder)", + "created_at": "2025-11-10T10:00:00Z", + "checksum_sha256": "abc123..." +} +``` diff --git a/protobuf/scanoss/api/cryptography/v2/scanoss-cryptography.proto b/protobuf/scanoss/api/cryptography/v2/scanoss-cryptography.proto index b1c462b..2c4a432 100644 --- a/protobuf/scanoss/api/cryptography/v2/scanoss-cryptography.proto +++ b/protobuf/scanoss/api/cryptography/v2/scanoss-cryptography.proto @@ -24,7 +24,7 @@ /*** * Cryptography definition details - * + * * Provides cryptographic intelligence for software components including algorithm detection, * encryption hints, and cryptographic assessment across version ranges. ***/ @@ -35,6 +35,7 @@ option go_package = "github.com/scanoss/papi/api/cryptographyv2;cryptographyv2"; import "scanoss/api/common/v2/scanoss-common.proto"; import "google/api/annotations.proto"; +import "google/api/httpbody.proto"; import "protoc-gen-openapiv2/options/annotations.proto"; option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = { @@ -67,7 +68,7 @@ option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = { /* * Cryptography Service Definition - * + * * Provides comprehensive cryptographic intelligence for software components * including algorithm detection, encryption hints, and security assessments. */ @@ -85,7 +86,7 @@ service Cryptography { // ****** Algorithms ****** // /* * Get cryptographic algorithms associated with a list of PURLs - legacy endpoint. - * + * * Legacy method for retrieving cryptographic algorithms used by software components. * Use GetComponentAlgorithms or GetComponentsAlgorithms instead. */ @@ -95,10 +96,10 @@ service Cryptography { /* * Get cryptographic algorithms associated with a single software component. - * + * * Analyzes the component and returns cryptographic algorithms detected in the codebase * including algorithm names and strength classifications. - * + * * See: https://github.com/scanoss/papi/blob/main/protobuf/scanoss/api/cryptography/v2/README.md#getcomponentalgorithms */ rpc GetComponentAlgorithms(scanoss.api.common.v2.ComponentRequest) returns(ComponentAlgorithmsResponse) { @@ -109,10 +110,10 @@ service Cryptography { /* * Get cryptographic algorithms associated with multiple software components in a single request. - * + * * Analyzes multiple components and returns cryptographic algorithms detected in each codebase * including algorithm names and strength classifications. - * + * * See: https://github.com/scanoss/papi/blob/main/protobuf/scanoss/api/cryptography/v2/README.md#getcomponentsalgorithms */ rpc GetComponentsAlgorithms(scanoss.api.common.v2.ComponentsRequest) returns(ComponentsAlgorithmsResponse) { @@ -126,7 +127,7 @@ service Cryptography { // ****** Algorithms in range ****** // /* * Get cryptographic algorithms used across version ranges - legacy endpoint. - * + * * Legacy method for retrieving cryptographic algorithms across component version ranges. * Use GetComponentAlgorithmsInRange or GetComponentsAlgorithmsInRange instead. */ @@ -136,10 +137,10 @@ service Cryptography { /* * Get cryptographic algorithms used by a component across specified version ranges. - * + * * Analyzes the component across version ranges and returns all cryptographic algorithms * detected along with the versions where they appear. - * + * * See: https://github.com/scanoss/papi/blob/main/protobuf/scanoss/api/cryptography/v2/README.md#getcomponentalgorithmsinrange */ rpc GetComponentAlgorithmsInRange(scanoss.api.common.v2.ComponentRequest) returns(ComponentAlgorithmsInRangeResponse) { @@ -150,10 +151,10 @@ service Cryptography { /* * Get cryptographic algorithms used by multiple components across specified version ranges. - * + * * Analyzes multiple components across version ranges and returns all cryptographic algorithms * detected along with the versions where they appear for each component. - * + * * See: https://github.com/scanoss/papi/blob/main/protobuf/scanoss/api/cryptography/v2/README.md#getcomponentsalgorithmsinrange */ rpc GetComponentsAlgorithmsInRange(scanoss.api.common.v2.ComponentsRequest) returns(ComponentsAlgorithmsInRangeResponse) { @@ -167,7 +168,7 @@ service Cryptography { // ****** Versions in range ****** // /* * Get component versions that contain or don't contain cryptographic algorithms - legacy endpoint. - * + * * Legacy method for retrieving version lists based on cryptographic algorithm presence. * Use ComponentVersionsInRange or ComponentsVersionsInRange instead. */ @@ -177,10 +178,10 @@ service Cryptography { /* * Get component versions that contain or don't contain cryptographic algorithms within specified ranges. - * + * * Returns lists of versions that either contain cryptographic algorithms or don't, * helping assess cryptographic presence across component evolution. - * + * * See: https://github.com/scanoss/papi/blob/main/protobuf/scanoss/api/cryptography/v2/README.md#componentversionsinrange */ rpc GetComponentVersionsInRange(scanoss.api.common.v2.ComponentRequest) returns(ComponentVersionsInRangeResponse) { @@ -191,10 +192,10 @@ service Cryptography { /* * Get multiple component versions that contain or don't contain cryptographic algorithms within specified ranges. - * + * * Returns lists of versions for multiple components that either contain cryptographic algorithms or don't, * helping assess cryptographic presence across component evolution in batch operations. - * + * * See: https://github.com/scanoss/papi/blob/main/protobuf/scanoss/api/cryptography/v2/README.md#componentsversionsinrange */ rpc GetComponentsVersionsInRange(scanoss.api.common.v2.ComponentsRequest) returns(ComponentsVersionsInRangeResponse) { @@ -208,7 +209,7 @@ service Cryptography { // ****** Hints in range ****** // /* * Get cryptographic hints across version ranges - legacy endpoint. - * + * * Legacy method for retrieving cryptographic hints related to protocols, libraries, * SDKs and frameworks across version ranges. Use ComponentHintsInRange or ComponentsHintsInRange instead. */ @@ -245,7 +246,7 @@ service Cryptography { // ****** Encryption hints ****** // /* * Get encryption hints for components - legacy endpoint. - * + * * Legacy method for retrieving hints about cryptographic protocols, libraries, * SDKs and frameworks used by components. Use ComponentHintsInRange or ComponentsHintsInRange instead. */ @@ -282,12 +283,42 @@ service Cryptography { }; }; + /* + * Download cryptography detection ruleset as a tarball. + * + * Downloads a compressed tarball containing cryptographic detection rules for various + * programming languages. Rulesets can be used with tools like SCANOSS Crypto Finder for + * cryptographic algorithm detection in source code. + * + * Supported ruleset types: + * - dca: Deep Code Analysis rules (for SCANOSS Crypto Finder) + * - keywords: Keyword-based detection rules + * + * Version can be: + * - "latest": Most recent version + * - Specific version: e.g., "v1.2.3" + * + * Response headers (via grpc-gateway): + * - Content-Type: application/gzip + * - Content-Disposition: attachment; filename="scanoss-crypto-{ruleset_name}-{version}.tar.gz" + * - SCANOSS-Ruleset-Name: Name of the ruleset + * - SCANOSS-Ruleset-Version: Resolved version number + * - X-Checksum-SHA256: SHA256 checksum of the tarball + * + * See: https://github.com/scanoss/papi/blob/main/protobuf/scanoss/api/cryptography/v2/README.md#downloadruleset + */ + rpc DownloadRuleset(RulesetDownloadRequest) returns(google.api.HttpBody) { + option (google.api.http) = { + get: "/v2/cryptography/rulesets/{ruleset_name}/{version}/download" + }; + }; + } /* * Cryptographic algorithm information. - * + * * Contains details about cryptographic algorithms detected in software components * including algorithm identification and strength assessment. */ @@ -300,7 +331,7 @@ message Algorithm { /* * Legacy response message for cryptographic algorithm information. - * + * * Contains algorithm data for multiple components. Use ComponentAlgorithmResponse * or ComponentsAlgorithmsResponse instead for new implementations. */ @@ -328,7 +359,7 @@ message AlgorithmResponse { /* * Cryptographic algorithm information for a specific component identified by PURL and version. - * + * * Contains comprehensive algorithm details including detected algorithms and their * strength classifications for software components. */ @@ -348,7 +379,7 @@ message ComponentAlgorithms { /* * Response message for GetComponentsAlgorithms method. - * + * * Contains cryptographic algorithm information for multiple software components * processed in a single batch request. Each component is analyzed independently. */ @@ -367,7 +398,7 @@ message ComponentsAlgorithmsResponse{ /* * Response message for GetComponentAlgorithms method. - * + * * Contains cryptographic algorithm information for a single software component including * algorithm names, strength classifications, and analysis metadata. */ @@ -411,7 +442,7 @@ message AlgorithmsInRangeResponse { /* * Response message for GetComponentsAlgorithmsInRange method. - * + * * Contains cryptographic algorithm information for multiple components across version ranges * processed in a single batch request. Each component is analyzed independently. */ @@ -443,7 +474,7 @@ message ComponentsAlgorithmsInRangeResponse { /* * Response message for GetComponentAlgorithmsInRange method. - * + * * Contains cryptographic algorithm information for a single component across version ranges * including all detected algorithms and the versions where they appear. */ @@ -498,7 +529,7 @@ message ComponentAlgorithmsInRangeResponse { /* * Response message for ComponentsVersionsInRange method. - * + * * Contains version lists for multiple components categorized by cryptographic algorithm presence, * processed in a single batch request. Each component is analyzed independently. */ @@ -530,7 +561,7 @@ message ComponentsVersionsInRangeResponse { /* * Response message for ComponentVersionsInRange method. - * + * * Contains version lists for a single component categorized by cryptographic algorithm presence, * helping assess cryptographic adoption across component evolution. */ @@ -564,7 +595,7 @@ message ComponentVersionsInRangeResponse { /* * Cryptographic hint information. - * + * * Contains details about cryptographic protocols, libraries, SDKs and frameworks * detected in software components, providing insights into cryptographic usage patterns. */ @@ -585,7 +616,7 @@ message Hint { /* * Cryptographic hint information for a specific component identified by PURL and version. - * + * * Contains comprehensive cryptographic hints about protocols, libraries, SDKs and frameworks * used by the component, providing insights into cryptographic dependencies and usage patterns. */ @@ -706,7 +737,7 @@ message ComponentHintsInRangeResponse { /* * Response message for ComponentsHintsInRange method. - * + * * Contains cryptographic hint information for multiple software components * processed in a single batch request. Each component is analyzed independently. */ @@ -724,7 +755,7 @@ message ComponentsEncryptionHintsResponse { /* * Response message for ComponentHintsInRange method. - * + * * Contains cryptographic hint information for a single software component including * details about protocols, libraries, SDKs and frameworks used. */ @@ -738,4 +769,27 @@ message ComponentEncryptionHintsResponse { ComponentHints component = 1; // Response status indicating success or failure scanoss.api.common.v2.StatusResponse status = 2; -} \ No newline at end of file +} + + +/* + * Request message for downloading a cryptography detection ruleset. + * + * Specifies which ruleset to download and which version to retrieve. + * + * The response is a raw binary tarball (.tar.gz) with metadata in HTTP headers: + * - X-Ruleset-Name: Name of the ruleset + * - X-Ruleset-Version: Resolved version (when "latest" is requested, this shows actual version) + * - X-Checksum-SHA256: SHA256 checksum for integrity verification + * - Content-Disposition: Suggested filename for download + */ +message RulesetDownloadRequest { + // Name of ruleset to download (e.g., "dca", "keywords") + // - "dca": Deep Code Analysis rules for using with SCANOSS Crypto Finder + // - "keywords": Keyword-based detection rules + string ruleset_name = 1 [json_name = "ruleset_name"]; + + // Version of the ruleset to download + // Use "latest" for the most recent version, or specify a version like "v1.2.3" + string version = 2; +} diff --git a/protobuf/scanoss/api/cryptography/v2/scanoss-cryptography.swagger.json b/protobuf/scanoss/api/cryptography/v2/scanoss-cryptography.swagger.json index ca09a80..12f5f48 100644 --- a/protobuf/scanoss/api/cryptography/v2/scanoss-cryptography.swagger.json +++ b/protobuf/scanoss/api/cryptography/v2/scanoss-cryptography.swagger.json @@ -512,6 +512,53 @@ "Cryptography" ] } + }, + "/v2/cryptography/rulesets/{ruleset_name}/{version}/download": { + "get": { + "summary": "Download cryptography detection ruleset as a tarball.", + "description": "Downloads a compressed tarball containing cryptographic detection rules for various\nprogramming languages. Rulesets can be used with tools like SCANOSS Crypto Finder for\ncryptographic algorithm detection in source code.\n\nSupported ruleset types:\n- dca: Deep Code Analysis rules (for SCANOSS Crypto Finder)\n- keywords: Keyword-based detection rules\n\nVersion can be:\n- \"latest\": Most recent version\n- Specific version: e.g., \"v1.2.3\"\n\nResponse headers (via grpc-gateway):\n- Content-Type: application/gzip\n- Content-Disposition: attachment; filename=\"scanoss-crypto-{ruleset_name}-{version}.tar.gz\"\n- SCANOSS-Ruleset-Name: Name of the ruleset\n- SCANOSS-Ruleset-Version: Resolved version number\n- X-Checksum-SHA256: SHA256 checksum of the tarball\n\nSee: https://github.com/scanoss/papi/blob/main/protobuf/scanoss/api/cryptography/v2/README.md#downloadruleset", + "operationId": "Cryptography_DownloadRuleset", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/apiHttpBody" + } + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "type": "string", + "format": "string" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "ruleset_name", + "description": "Name of ruleset to download (e.g., \"dca\", \"keywords\")\n- \"dca\": Deep Code Analysis rules for using with SCANOSS Crypto Finder\n- \"keywords\": Keyword-based detection rules", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "version", + "description": "Version of the ruleset to download\nUse \"latest\" for the most recent version, or specify a version like \"v1.2.3\"", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Cryptography" + ] + } } }, "definitions": { @@ -539,14 +586,39 @@ }, "description": "Server information." }, + "apiHttpBody": { + "type": "object", + "properties": { + "content_type": { + "type": "string", + "description": "The HTTP Content-Type header value specifying the content type of the body." + }, + "data": { + "type": "string", + "format": "byte", + "description": "The HTTP request/response body as raw binary." + }, + "extensions": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/protobufAny" + }, + "description": "Application specific response metadata. Must be set in the first response\nfor streaming APIs." + } + }, + "description": "Message that represents an arbitrary HTTP body. It should only be used for\npayload formats that can't be represented as JSON, such as raw binary or\nan HTML page.\n\n\nThis message can be used both in streaming and non-streaming API methods in\nthe request as well as the response.\n\nIt can be used as a top-level request field, which is convenient if one\nwants to extract parameters from either the URL or HTTP template into the\nrequest fields and also want access to the raw HTTP body.\n\nExample:\n\n message GetResourceRequest {\n // A unique request id.\n string request_id = 1;\n\n // The raw HTTP body is bound to this field.\n google.api.HttpBody http_body = 2;\n\n }\n\n service ResourceService {\n rpc GetResource(GetResourceRequest)\n returns (google.api.HttpBody);\n rpc UpdateResource(google.api.HttpBody)\n returns (google.protobuf.Empty);\n\n }\n\nExample with streaming methods:\n\n service CaldavService {\n rpc GetCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n rpc UpdateCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n\n }\n\nUse of this type only changes how the request and response bodies are\nhandled, all other features will continue to work unchanged." + }, "protobufAny": { "type": "object", "properties": { "@type": { - "type": "string" + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." } }, - "additionalProperties": {} + "additionalProperties": {}, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { "type": "object",