Utility to Import external RSA pem key into TPM
[aaf/sshsm.git] / tpm-util / duplicate / util.c
diff --git a/tpm-util/duplicate/util.c b/tpm-util/duplicate/util.c
new file mode 100644 (file)
index 0000000..6d5337f
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+ * Copyright 2018 Intel Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *     Unless required by applicable law or agreed to in writing, software
+ *     distributed under the License is distributed on an "AS IS" BASIS,
+ *     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *     See the License for the specific language governing permissions and
+ *     limitations under the License.
+ */
+// Author: Arun Kumar Sekar
+
+#include "util.h"
+
+TPM_RC ConcatSizedByteBuffer( TPM2B_MAX_BUFFER *result, TPM2B *addBuffer )
+{
+    int i;
+
+    if( ( result->t.size + addBuffer->size ) > MAX_DIGEST_BUFFER )
+        return TSS2_SYS_RC_BAD_VALUE;
+    else
+    {
+        for( i = 0; i < addBuffer->size; i++ )
+            result->t.buffer[i + result->t.size] = addBuffer->buffer[i];
+
+        result->t.size += addBuffer->size;
+
+        return TPM_RC_SUCCESS;
+    }
+}
+
+int saveDataToFile(const char *fileName, UINT8 *buf, UINT16 size)
+{
+    FILE *f;
+    UINT16 count = 1;
+    if( fileName == NULL || buf == NULL || size == 0 )
+        return -1;
+
+    f = fopen(fileName, "wb+");
+    if( f == NULL ) {
+        printf("File(%s) open error.\n", fileName);
+        return -2;
+    }
+
+    while( size > 0 && count > 0 ) {
+        count = fwrite(buf, 1, size, f);
+        size -= count;
+        buf += count;
+    }
+
+    if( size > 0 ) {
+        printf("File write error\n");
+        fclose(f);
+        return -3;
+    }
+
+    fclose(f);
+    return 0;
+}
+
+int loadDataFromFile(const char *fileName, UINT8 *buf, UINT16 *size)
+{
+    UINT16 count = 1, left;
+    FILE *f;
+    if ( size == NULL || buf == NULL || fileName == NULL )
+        return -1;
+
+    f = fopen(fileName, "rb+");
+    if( f == NULL ) {
+        printf("File(%s) open error.\n", fileName);
+        return -2;
+    }
+
+    left = *size;
+    *size = 0;
+    while( left > 0 && count > 0 ) {
+        count = fread(buf, 1, left, f);
+        *size += count;
+        left -= count;
+        buf += count;
+    }
+
+    if( *size == 0 ) {
+        printf("File read error\n");
+        fclose(f);
+        return -3;
+    }
+    fclose(f);
+    return 0;
+}
+
+