summaryrefslogtreecommitdiffstats
path: root/tests/base64decode.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/base64decode.c')
-rw-r--r--tests/base64decode.c82
1 files changed, 82 insertions, 0 deletions
diff --git a/tests/base64decode.c b/tests/base64decode.c
new file mode 100644
index 0000000..9d58993
--- /dev/null
+++ b/tests/base64decode.c
@@ -0,0 +1,82 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <libtpms/tpm_types.h>
+#include <libtpms/tpm_library.h>
+#include <libtpms/tpm_error.h>
+
+static unsigned char *read_file(const char *name, size_t *len)
+{
+ long sz;
+ unsigned char *res;
+ FILE *f = fopen(name, "rb");
+
+ if (!f) {
+ printf("Could not open file %s for reading.", name);
+ exit(EXIT_FAILURE);
+ }
+
+ fseek(f, 0, SEEK_END);
+ sz = ftell(f);
+ fseek(f, 0, SEEK_SET);
+
+ res = malloc(sz + 1);
+ if (res != NULL) {
+ *len = fread(res, 1, sz, f);
+ res[sz] = 0;
+ }
+
+ fclose(f);
+
+ return res;
+}
+
+int main(int argc, char *argv[])
+{
+ int res = EXIT_SUCCESS;
+ TPM_RESULT rc;
+ unsigned char *buf_input = NULL, *buf_cmp = NULL;
+ size_t len_input, len_cmp;
+ unsigned char *result = NULL;
+ size_t result_len;
+
+ if (argc != 3) {
+ printf("Need 2 files as parameters.\n");
+ return EXIT_FAILURE;
+ }
+
+ buf_input = read_file(argv[1], &len_input);
+ buf_cmp = read_file(argv[2], &len_cmp);
+
+ rc = TPMLIB_DecodeBlob((char *)buf_input, TPMLIB_BLOB_TYPE_INITSTATE,
+ &result, &result_len);
+
+ if (rc != TPM_SUCCESS) {
+ printf("Decoding of the input file failed.\n");
+ res = EXIT_FAILURE;
+ goto cleanup;
+ }
+
+ if (result_len != len_cmp) {
+ printf("Length of decoded blob (%zu) does "
+ "not match length of 2nd file (%zu).\n",
+ result_len, len_cmp);
+ res = EXIT_FAILURE;
+ goto cleanup;
+ }
+
+ if (memcmp(result, buf_cmp, result_len) != 0) {
+ printf("Decoded blob does not match input from 2nd file.\n");
+ res = EXIT_FAILURE;
+ goto cleanup;
+ }
+
+cleanup:
+ free(result);
+ free(buf_cmp);
+ free(buf_input);
+
+ return res;
+}