summaryrefslogtreecommitdiff
path: root/exports
diff options
context:
space:
mode:
authorStevenWdV <stevenwdv@gmail.com>2021-11-20 18:09:09 +0100
committerStevenWdV <stevenwdv@gmail.com>2021-11-22 12:37:33 +0100
commit8878d8705f0b0fcddb3979194340ca39df897580 (patch)
tree6c920d0b9d40584dfe6bf7e5b2e865acff72e72f /exports
parentb8d368b93479233a8ecbeba3daf4b10bee8f0a4a (diff)
Add C bindings and a C# wrapper
Diffstat (limited to 'exports')
-rw-r--r--exports/.gitignore3
-rw-r--r--exports/Makefile12
-rw-r--r--exports/exports.go28
3 files changed, 43 insertions, 0 deletions
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") }