From 8878d8705f0b0fcddb3979194340ca39df897580 Mon Sep 17 00:00:00 2001 From: StevenWdV Date: Sat, 20 Nov 2021 18:09:09 +0100 Subject: Add C bindings and a C# wrapper --- exports/.gitignore | 3 +++ exports/Makefile | 12 ++++++++++++ exports/exports.go | 28 ++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 exports/.gitignore create mode 100644 exports/Makefile create mode 100644 exports/exports.go (limited to 'exports') diff --git a/exports/.gitignore b/exports/.gitignore new file mode 100644 index 0000000..a95b306 --- /dev/null +++ b/exports/.gitignore @@ -0,0 +1,3 @@ +*.dll +*.so +*.h diff --git a/exports/Makefile b/exports/Makefile new file mode 100644 index 0000000..94781be --- /dev/null +++ b/exports/Makefile @@ -0,0 +1,12 @@ +.PHONY: build + +ifeq ($(OS),Windows_NT) + lib_suffix := .dll +else + lib_suffix := .so +endif + +build: eduvpn_verify$(lib_suffix) + +eduvpn_verify.dll eduvpn_verify.so: exports.go ../verify.go + go build -o $@ -buildmode=c-shared $< diff --git a/exports/exports.go b/exports/exports.go new file mode 100644 index 0000000..f841eca --- /dev/null +++ b/exports/exports.go @@ -0,0 +1,28 @@ +package main + +import "C" + +import "eduvpn-common" + +// Functions here should not take string parameters, see https://pkg.go.dev/cmd/cgo#hdr-C_references_to_Go + +// Verify verifies a signature on a JSON file. See eduvpn_verify.Verify for more details. +// It returns 0 for a valid signature and a nonzero eduvpn_verify.VerifyErrorCode otherwise. +//export Verify +func Verify(signatureFileContent []byte, signedJson []byte, expectedFileName []byte, minSignTime uint64) int { + valid, err := eduvpn_verify.Verify(string(signatureFileContent), signedJson, string(expectedFileName), minSignTime) + if valid { + return 0 + } else { + return int(err.(eduvpn_verify.VerifyError).Code) + } +} + +// InsecureTestingSetExtraKey adds an extra allowed key for verification with Verify. +// ONLY USE FOR TESTING. Not Thread-safe. Do not call in parallel to Verify. +//export InsecureTestingSetExtraKey +func InsecureTestingSetExtraKey(keyString []byte) { + eduvpn_verify.InsecureTestingSetExtraKey(string(keyString)) +} + +func main() { panic("compile with -buildmode=c-shared") } -- cgit v1.2.3