From 657221b8eaa0d5eb0a161014ff990884ffaba288 Mon Sep 17 00:00:00 2001 From: heathjay Date: Tue, 13 May 2025 14:29:08 +0800 Subject: [PATCH] [test] modify for qtsm-sdk-c-samples --- enclave/qtsm-sdk-c/samples/Dockerfile.sdk | 96 +- enclave/qtsm-sdk-c/samples/Makefile | 6 +- enclave/qtsm-sdk-c/samples/README.md | 43 +- enclave/qtsm-sdk-c/samples/env_cfg.sh | 32 - enclave/qtsm-sdk-c/samples/include/eSDKOBS.h | 1427 ----------------- .../samples/include/obs_demo_common.h | 292 ---- enclave/qtsm-sdk-c/samples/include/securec.h | 241 --- .../qtsm-sdk-c/samples/include/securectype.h | 321 ---- enclave/qtsm-sdk-c/samples/lib/build.sh | 144 -- .../qtsm-sdk-c/samples/scripts/build_img.sh | 54 +- .../qtsm-sdk-c/samples/scripts/config.toml | 23 + enclave/qtsm-sdk-c/samples/src/config.json | 26 +- enclave/qtsm-sdk-c/samples/src/enclave.c | 447 ++---- .../qtsm-sdk-c/samples/src/obs_demo_common.c | 239 --- enclave/qtsm-sdk-c/samples/src/test.py | 106 +- .../qtsm-sdk-c/tests/vsock_shell/README.md | 4 +- 16 files changed, 350 insertions(+), 3151 deletions(-) delete mode 100644 enclave/qtsm-sdk-c/samples/env_cfg.sh delete mode 100644 enclave/qtsm-sdk-c/samples/include/eSDKOBS.h delete mode 100644 enclave/qtsm-sdk-c/samples/include/obs_demo_common.h delete mode 100644 enclave/qtsm-sdk-c/samples/include/securec.h delete mode 100644 enclave/qtsm-sdk-c/samples/include/securectype.h delete mode 100644 enclave/qtsm-sdk-c/samples/lib/build.sh create mode 100644 enclave/qtsm-sdk-c/samples/scripts/config.toml delete mode 100644 enclave/qtsm-sdk-c/samples/src/obs_demo_common.c diff --git a/enclave/qtsm-sdk-c/samples/Dockerfile.sdk b/enclave/qtsm-sdk-c/samples/Dockerfile.sdk index e37f50f..eaa52b8 100644 --- a/enclave/qtsm-sdk-c/samples/Dockerfile.sdk +++ b/enclave/qtsm-sdk-c/samples/Dockerfile.sdk @@ -1,59 +1,41 @@ -# Copyright (c) Huawei Technologies Co., Ltd. 2022. All Rights Reserved. -# SPDX-License-Identifier: Apache-2.0. - -FROM ubuntu AS base-img - -RUN cp -a /etc/apt/sources.list /etc/apt/sources.list.bak - -RUN cat /dev/null > /etc/apt/sources.list - -WORKDIR /root/builder - -COPY qtsm-sdk-c/samples/scripts/env_cfg.sh script/ -RUN chmod +x script/env_cfg.sh && \ - /bin/sh -c script/env_cfg.sh - -RUN echo "124.70.125.167 mirrors.tools.huawei.com" >> /etc/hosts -# install relative dependencies -RUN rm -rf /var/lib/apt/lists/* && \ - apt-get update --fix-missing -o Acquire::http::No-Cache=True && \ - apt-get install -y gcc && \ - apt-get install -y make && \ - apt-get install -y tar && \ - apt-get install -y alien && \ - apt-get install -y libssl-dev && \ - apt-get install -y libtirpc-dev && \ - apt-get install -y libkeyutils-dev && \ - apt-get install -y libglib2.0-dev && \ - apt-get install -y curl && \ - apt-get install -y libcurl4-openssl-dev && \ - apt-get install -y libcbor-dev && \ - apt-get install -y libjson-c-dev && \ - apt-get install -y git && \ - apt-get install -y cmake && \ - apt-get install -y wget && \ - apt-get install -y unzip - -COPY qtsm-sdk-c qtsm-sdk-c -COPY rpm /root/builder/rpm -RUN cd /root/builder/rpm && \ - alien --scripts *.rpm && \ - dpkg -i *.deb - -ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/builder/qtsm-sdk-c/samples/lib -RUN tar -zxvf huaweicloud-sdk-c-obs-3.21.8.tar.gz && \ - cd huaweicloud-sdk-c-obs-3.21.8/platform/huaweisecurec/src && \ - make clean && \ +FROM ubuntu:22.04 + +COPY huawei-qingtian /home/huawei-qingtian + +RUN apt-get update -y && \ + apt-get install libglib2.0-dev libcurl4-openssl-dev curl make gcc wget tar iproute2 libssl-dev libjson-c-dev libcbor-dev -y + +RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y && \ + bash -c "source $HOME/.cargo/env" +ENV PATH="/root/.cargo/bin:${PATH}" + +WORKDIR /home/huawei-qingtian/qingtian-tools/qproxy +RUN cargo build --release && \ + mkdir -p /home/test && \ + cp target/release/qproxy /home/test/qproxy + +WORKDIR /home/test +RUN wget https://obs-community-intl.obs.ap-southeast-1.myhuaweicloud.com/obsutil/current/obsutil_linux_amd64.tar.gz && \ + tar zxf obsutil_linux_amd64.tar.gz --wildcards --no-anchored '*/obsutil' --strip-components=1 + +WORKDIR /home/huawei-qingtian/enclave/qtsm-sdk-c/samples +RUN cp scripts/config.toml /home/test/config.toml + +WORKDIR /home/huawei-qingtian/enclave/qtsm/lib +RUN mkdir -p ../output && \ make && \ - cp ../lib/libsecurec.so /usr/local/lib/libsecurec.so && \ - cd /root/builder/huaweicloud-sdk-c-obs-3.21.8/source/eSDK_OBS_API/eSDK_OBS_API_C++ && \ - sed -i '403i #define CURL_SOCKET_PATH "/var/run/enclave_proxy.socket"' src/request.c && \ - sed -i '419i curl_easy_setopt_safe(CURLOPT_UNIX_SOCKET_PATH, CURL_SOCKET_PATH);' src/request.c && \ - sh build.sh && \ - mkdir -p /root/builder/qtsm-sdk-c/samples/lib && \ - cp lib/* /root/builder/qtsm-sdk-c/samples/lib -RUN echo "/usr/lib64" >> /etc/ld.so.conf && \ - ldconfig -WORKDIR /root/builder/qtsm-sdk-c/samples/ + cp libqtsm.so /usr/lib64/ && \ + echo "/usr/lib64" >> /etc/ld.so.conf && \ + ldconfig && \ + cp ../include/qtsm_lib.h /usr/include/ && \ + cp ../include/qtsm_lib_comm.h /usr/include/ + +WORKDIR /home/huawei-qingtian/enclave/qtsm-sdk-c/samples RUN make -CMD ["python3", "/root/builder/qtsm-sdk-c/samples/src/test.py"] \ No newline at end of file + +WORKDIR /home/huawei-qingtian/enclave/qtsm-sdk-c/tests/vsock_shell +RUN gcc vsock_shell.c -o directShell && \ + chmod 777 directShell && \ + cp directShell /home/test/directShell + +CMD /home/test/directShell diff --git a/enclave/qtsm-sdk-c/samples/Makefile b/enclave/qtsm-sdk-c/samples/Makefile index 74a5dfc..ec4705a 100644 --- a/enclave/qtsm-sdk-c/samples/Makefile +++ b/enclave/qtsm-sdk-c/samples/Makefile @@ -27,8 +27,6 @@ LIB += -ljson-c LIB += -lqtsm LIB += -lpthread LIB += -lglib-2.0 -LIB += -lsecurec -LIB += -leSDKOBS QTSM_LIB_PATH += -L $(CURRENT_DIR)/lib QTSM_LIB_PATH += -L /usr/bin @@ -39,7 +37,9 @@ ifeq (,$(CC)) CC := gcc endif -GCC_CHOOSE := -W -Os -g -DSDK_DEBUG +# If you want to open the debug option, please open it. +#GCC_CHOOSE := -W -Os -g -DSDK_DEBUG +GCC_CHOOSE := -W -Os -g GCC_CHOOSE += -Wl,-z,relro,-z,now GCC_CHOOSE += -Wl,-z,noexecstack GCC_CHOOSE += -fstack-protector-strong diff --git a/enclave/qtsm-sdk-c/samples/README.md b/enclave/qtsm-sdk-c/samples/README.md index 3dfd6cc..6a923f0 100644 --- a/enclave/qtsm-sdk-c/samples/README.md +++ b/enclave/qtsm-sdk-c/samples/README.md @@ -15,11 +15,6 @@ pip3 install --trusted-host mirrors.tools.huawei.com -i https://mirrors.tools.hu pip3 install --trusted-host mirrors.tools.huawei.com -i https://mirrors.tools.huawei.com/pypi/simple huaweicloudsdkkms ``` -Please compiling the `libqtsm` firstly. -| name | link | -|------------------------------------------------------------|------------------------------------------------------------------| -| libqtsm | https://github.com/huaweicloud/qingtian_enclave/enclave/qtsm | - ## Preparation - Build up a project and then you can get a `${ProjectID}` @@ -45,36 +40,40 @@ You need to specify contents in the `src/config.json`. ```json { "IAM":{ + "AK":"${SREAK}", + "SK":"${SRESK}", "KeyId" : "${KeyID}", "ProjectId" : "${ProjectID}" }, - "FileName":{ - "Ciphertext": "${CiphertextKey}", - "Plaintext" : "${PlaintextKey}", - "OBSBucket" : "${OBSBucket}" - }, "Endpoint": { "KMSEndpoint" : "${KMSEndpoint}", "OBSEndpoint" : "${OBSEndpoint}" }, "VsockSetting":{ "VsockPort": "${VosckPort}" - } + }, + "FileKeys":{ + "Ciphertext": "${CiphertextKey}", + "Plaintext" : "${PlaintextKey}", + "BucketName" : "${OBSBucket}" + }, } ``` -## Generate the EIF image - -- Make a docker image -- Generate the EIF image using `qt cli` +## Generate the EIF image and launch an Enclave +You can run the script (`scripts/build_img.sh`) to make a EIF image file (`sdkdecrypt.eif`), and launch the enclave -You can run the script (`scripts/build_img.sh`) and then a EIF image file (`sdkdecrypt.eif`)is created. -Node: -In order to communicate with the qt-proxy, which will redirect network packages to huaweicloud obs service, we need to modify the huaweicloud-obs-c source codes (`huaweicloud-sdk-c-obs-3.21.8/source/eSDK_OBS_API/eSDK_OBS_API_C++/src/request.c`). +## Logining into the Enclave for debuging +In this sample, we compile and deploy a vsock server(`directShell`) in the Enclave, which is listening in the 9999 port. And this vsock server is only used for debuging. In our `scripts/build_img.sh`, We also get and compile a vsock client (`nc-vsock`) in the working directory. +After launching the Enclave, you can use following command to login into the Enclave: +`${wORKDIR}/nc-vsock 4 9999` -## Lauch an enclave +And you can run the test in the enclave via: +`python3 /home/huawei-qingtian/enclave/qtsm-sdk-c/samples/src/test.py` -This EIF image file will be delivered to the SRE, who is allowed to launch an enclave to decrypt the ciphertext and put the plaintext back to the OBS bucket. -`qt enclave start --cpus 2 --mem 8192 --eif sdkdecrypt.eif` +### Startup the qproxy to redirect the obsutil network packages +In this sample, we redirect the obs network packages by the `qingtian-tools/qproxy` tool. Therefore, after running the test in the encalve, you need to start up the `qproxy` in the primary VM: +`${WORKDIR}/huawei-qingtian/qingtian-tools/qproxy/target/release/qproxy host --config ${WORKDIR}/huawei-qingtian/enclave/qtsm-sdk-c/samples/scripts/config.toml 4 &` -## Check the plaintext in the OBS bucket \ No newline at end of file +## Check the plaintext in the OBS bucket +You can login in your huawei cloud website, and check whether the plaintext is put into the obs bucket. \ No newline at end of file diff --git a/enclave/qtsm-sdk-c/samples/env_cfg.sh b/enclave/qtsm-sdk-c/samples/env_cfg.sh deleted file mode 100644 index 38060bc..0000000 --- a/enclave/qtsm-sdk-c/samples/env_cfg.sh +++ /dev/null @@ -1,32 +0,0 @@ -echo "deb http://cmc-cd-mirror.rnd.huawei.com/ubuntu/ xenial main multiverse restricted universe" >> /etc/apt/sources.list -echo "deb http://cmc-cd-mirror.rnd.huawei.com/ubuntu/ xenial-backports main multiverse restricted universe" >> /etc/apt/sources.list -echo "deb http://cmc-cd-mirror.rnd.huawei.com/ubuntu/ xenial-proposed main multiverse restricted universe" >> /etc/apt/sources.list -echo "deb http://cmc-cd-mirror.rnd.huawei.com/ubuntu/ xenial-security main multiverse restricted universe" >> /etc/apt/sources.list -echo "deb http://cmc-cd-mirror.rnd.huawei.com/ubuntu/ xenial-updates main multiverse restricted universe" >> /etc/apt/sources.list -echo "deb-src http://cmc-cd-mirror.rnd.huawei.com/ubuntu/ xenial main multiverse restricted universe" >> /etc/apt/sources.list -echo "deb-src http://cmc-cd-mirror.rnd.huawei.com/ubuntu/ xenial-backports main multiverse restricted universe" >> /etc/apt/sources.list -echo "deb-src http://cmc-cd-mirror.rnd.huawei.com/ubuntu/ xenial-proposed main multiverse restricted universe" >> /etc/apt/sources.list -echo "deb-src http://cmc-cd-mirror.rnd.huawei.com/ubuntu/ xenial-security main multiverse restricted universe" >> /etc/apt/sources.list - -echo "deb-src http://cmc-cd-mirror.rnd.huawei.com/ubuntu/ xenial-updates main multiverse restricted universe" >> /etc/apt/sources.list - -echo "deb http://mirrors.tools.huawei.com/ubuntu/ focal main multiverse restricted universe" >> /etc/apt/sources.list -echo "deb http://mirrors.tools.huawei.com/ubuntu/ focal-backports main multiverse restricted universe" >> /etc/apt/sources.list -echo "deb http://mirrors.tools.huawei.com/ubuntu/ focal-proposed main multiverse restricted universe" >> /etc/apt/sources.list -echo "deb http://mirrors.tools.huawei.com/ubuntu/ focal-security main multiverse restricted universe" >> /etc/apt/sources.list -echo "deb http://mirrors.tools.huawei.com/ubuntu/ focal-updates main multiverse restricted universe" >> /etc/apt/sources.list -echo "deb-src http://mirrors.tools.huawei.com/ubuntu/ focal main multiverse restricted universe" >> /etc/apt/sources.list -echo "deb-src http://mirrors.tools.huawei.com/ubuntu/ focal-backports main multiverse restricted universe" >> /etc/apt/sources.list -echo "deb-src http://mirrors.tools.huawei.com/ubuntu/ focal-proposed main multiverse restricted universe" >> /etc/apt/sources.list -echo "deb-src http://mirrors.tools.huawei.com/ubuntu/ focal-security main multiverse restricted universe" >> /etc/apt/sources.list -echo "deb-src http://mirrors.tools.huawei.com/ubuntu/ focal-updates main multiverse restricted universe" >> /etc/apt/sources.list - - -echo "deb http://mirrors.tools.huawei.com/ubuntu/ bionic main multiverse restricted universe" >> /etc/apt/sources.list -echo "deb http://mirrors.tools.huawei.com/ubuntu/ bionic-security main multiverse restricted universe" >> /etc/apt/sources.list -echo "deb http://mirrors.tools.huawei.com/ubuntu/ bionic-updates main multiverse restricted universe" >> /etc/apt/sources.list -echo "deb-src http://mirrors.tools.huawei.com/ubuntu/ bionic main multiverse restricted universe" >> /etc/apt/sources.list -echo "deb-src http://mirrors.tools.huawei.com/ubuntu/ bionic-security main multiverse restricted universe" >> /etc/apt/sources.list -echo "deb-src http://mirrors.tools.huawei.com/ubuntu/ bionic-updates main multiverse restricted universe" >> /etc/apt/sources.list - -/bin/sh diff --git a/enclave/qtsm-sdk-c/samples/include/eSDKOBS.h b/enclave/qtsm-sdk-c/samples/include/eSDKOBS.h deleted file mode 100644 index e36ed58..0000000 --- a/enclave/qtsm-sdk-c/samples/include/eSDKOBS.h +++ /dev/null @@ -1,1427 +0,0 @@ -/********************************************************************************* -* Copyright 2019 Huawei Technologies Co.,Ltd. -* 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. -********************************************************************************** -*/ -#ifndef ESDKOBS_H -#define ESDKOBS_H - -#include -#if defined __GNUC__ || defined LINUX -#include -#else -#include -#endif - -#ifdef WIN32 -#ifdef OBS_EXPORTS -#define eSDK_OBS_API __declspec(dllexport) -#else -#define eSDK_OBS_API __declspec(dllimport) -#endif -#else -#define eSDK_OBS_API __attribute__((__visibility__("default"))) -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#define OBS_INIT_WINSOCK 1 -#define OBS_INIT_ALL (OBS_INIT_WINSOCK) -#define OBS_MAX_DELETE_OBJECT_NUMBER 1000 -#define OBS_MAX_DELETE_OBJECT_DOC 1024000 - -#define ARRAY_LENGTH_4 4 -#define ARRAY_LENGTH_16 16 -#define ARRAY_LENGTH_32 32 -#define ARRAY_LENGTH_50 50 -#define ARRAY_LENGTH_64 64 -#define ARRAY_LENGTH_512 512 -#define ARRAY_LENGTH_1024 1024 -#define ARRAY_LENGTH_2014 2014 - -typedef enum { - OBS_STATUS_OK = 0, - OBS_STATUS_InitCurlFailed, - OBS_STATUS_InternalError, - OBS_STATUS_OutOfMemory, - OBS_STATUS_Interrupted, - OBS_STATUS_QueryParamsTooLong, - OBS_STATUS_FailedToIInitializeRequest, - OBS_STATUS_MetadataHeadersTooLong, - OBS_STATUS_BadContentType, - OBS_STATUS_ContentTypeTooLong, - OBS_STATUS_BadMd5, - OBS_STATUS_Md5TooLong, - OBS_STATUS_BadCacheControl, - OBS_STATUS_CacheControlTooLong, - OBS_STATUS_BadContentDispositionFilename, - OBS_STATUS_ContentDispositionFilenameTooLong, - OBS_STATUS_BadContentEncoding, - OBS_STATUS_ContentEncodingTooLong, - OBS_STATUS_BadIfMatchEtag, - OBS_STATUS_IfMatchEtagTooLong, - OBS_STATUS_BadIfNotMatchEtag, - OBS_STATUS_IfNotMatchEtagTooLong, - OBS_STATUS_UriTooLong, - OBS_STATUS_XmlParseFailure, - OBS_STATUS_UserIdTooLong, - OBS_STATUS_UserDisplayNameTooLong, - OBS_STATUS_EmailAddressTooLong, - OBS_STATUS_GroupUriTooLong, - OBS_STATUS_PermissionTooLong, - OBS_STATUS_TooManyGrants, - OBS_STATUS_BadGrantee, - OBS_STATUS_BadPermission, - OBS_STATUS_XmlDocumentTooLarge, - OBS_STATUS_NameLookupError, - OBS_STATUS_FailedToConnect, - OBS_STATUS_ServerFailedVerification, - OBS_STATUS_ConnectionFailed, - OBS_STATUS_AbortedByCallback, - OBS_STATUS_PartialFile, - OBS_STATUS_InvalidParameter, - OBS_STATUS_NoToken, - OBS_STATUS_OpenFileFailed, - OBS_STATUS_EmptyFile, - - /** - * Errors from the obs service - **/ - OBS_STATUS_AccessDenied, - OBS_STATUS_AccountProblem, - OBS_STATUS_AmbiguousGrantByEmailAddress, - OBS_STATUS_BadDigest, - OBS_STATUS_BucketAlreadyExists, - OBS_STATUS_BucketAlreadyOwnedByYou, - OBS_STATUS_BucketNotEmpty, - OBS_STATUS_CredentialsNotSupported, - OBS_STATUS_CrossLocationLoggingProhibited, - OBS_STATUS_EntityTooSmall, - OBS_STATUS_EntityTooLarge, - OBS_STATUS_ExpiredToken, - OBS_STATUS_IllegalVersioningConfigurationException, - OBS_STATUS_IncompleteBody, - OBS_STATUS_IncorrectNumberOfFilesInPostRequest, - OBS_STATUS_InlineDataTooLarge, - OBS_STATUS_InvalidAccessKeyId, - OBS_STATUS_InvalidAddressingHeader, - OBS_STATUS_InvalidArgument, - OBS_STATUS_InvalidBucketName, - OBS_STATUS_InvalidKey, - OBS_STATUS_InvalidBucketState, - OBS_STATUS_InvalidDigest, - OBS_STATUS_InvalidLocationConstraint, - OBS_STATUS_InvalidObjectState, - OBS_STATUS_InvalidPart, - OBS_STATUS_InvalidPartOrder, - OBS_STATUS_InvalidPayer, - OBS_STATUS_InvalidPolicyDocument, - OBS_STATUS_InvalidRange, - OBS_STATUS_InvalidRedirectLocation, - OBS_STATUS_InvalidRequest, - OBS_STATUS_InvalidSecurity, - OBS_STATUS_InvalidSOAPRequest, - OBS_STATUS_InvalidStorageClass, - OBS_STATUS_InvalidTargetBucketForLogging, - OBS_STATUS_InvalidToken, - OBS_STATUS_InvalidURI, - OBS_STATUS_MalformedACLError, - OBS_STATUS_MalformedPolicy, - OBS_STATUS_MalformedPOSTRequest, - OBS_STATUS_MalformedXML, - OBS_STATUS_MaxMessageLengthExceeded, - OBS_STATUS_MaxPostPreDataLengthExceededError, - OBS_STATUS_MetadataTooLarge, - OBS_STATUS_MethodNotAllowed, - OBS_STATUS_MissingAttachment, - OBS_STATUS_MissingContentLength, - OBS_STATUS_MissingRequestBodyError, - OBS_STATUS_MissingSecurityElement, - OBS_STATUS_MissingSecurityHeader, - OBS_STATUS_NoLoggingStatusForKey, - OBS_STATUS_NoSuchBucket, - OBS_STATUS_NoSuchKey, - OBS_STATUS_NoSuchLifecycleConfiguration, - OBS_STATUS_NoSuchUpload, - OBS_STATUS_NoSuchVersion, - OBS_STATUS_NotImplemented, - OBS_STATUS_NotSignedUp, - OBS_STATUS_NotSuchBucketPolicy, - OBS_STATUS_OperationAborted, - OBS_STATUS_PermanentRedirect, - OBS_STATUS_PreconditionFailed, - OBS_STATUS_Redirect, - OBS_STATUS_RestoreAlreadyInProgress, - OBS_STATUS_RequestIsNotMultiPartContent, - OBS_STATUS_RequestTimeout, - OBS_STATUS_RequestTimeTooSkewed, - OBS_STATUS_RequestTorrentOfBucketError, - OBS_STATUS_SignatureDoesNotMatch, - OBS_STATUS_ServiceUnavailable, - OBS_STATUS_SlowDown, - OBS_STATUS_TemporaryRedirect, - OBS_STATUS_TokenRefreshRequired, - OBS_STATUS_TooManyBuckets, - OBS_STATUS_UnexpectedContent, - OBS_STATUS_UnresolvableGrantByEmailAddress, - OBS_STATUS_UserKeyMustBeSpecified, - OBS_STATUS_InsufficientStorageSpace, - OBS_STATUS_NoSuchWebsiteConfiguration, - OBS_STATUS_NoSuchBucketPolicy, - OBS_STATUS_NoSuchCORSConfiguration, - OBS_STATUS_InArrearOrInsufficientBalance, - OBS_STATUS_NoSuchTagSet, - OBS_STATUS_ErrorUnknown, - /* - * The following are HTTP errors returned by obs without enough detail to - * distinguish any of the above OBS_STATUS_error conditions - */ - OBS_STATUS_HttpErrorMovedTemporarily, - OBS_STATUS_HttpErrorBadRequest, - OBS_STATUS_HttpErrorForbidden, - OBS_STATUS_HttpErrorNotFound, - OBS_STATUS_HttpErrorConflict, - OBS_STATUS_HttpErrorUnknown, - - /* - * posix new add errors - */ - OBS_STATUS_QuotaTooSmall, - /* - * obs-meta errors - */ - OBS_STATUS_MetadataNameDuplicate, - OBS_STATUS_BUTT -} obs_status; - -typedef enum { - OBS_URI_STYLE_VIRTUALHOST = 0, - OBS_URI_STYLE_PATH = 1 -} obs_uri_style; - -typedef enum { - OBS_PROTOCOL_HTTPS = 0, - OBS_PROTOCOL_HTTP = 1 -} obs_protocol; - -typedef enum { - OBS_STORAGE_CLASS_STANDARD = 0, /* STANDARD */ - OBS_STORAGE_CLASS_STANDARD_IA = 1, /* STANDARD_IA */ - OBS_STORAGE_CLASS_GLACIER = 2, /* GLACIER */ - OBS_STORAGE_CLASS_BUTT -} obs_storage_class; - -typedef enum image_process_mode { - obs_image_process_invalid_mode, - obs_image_process_cmd, - obs_image_process_style -}image_process_mode; - -typedef enum { - OBS_CANNED_ACL_PRIVATE = 0, // used by s3 and obs api - OBS_CANNED_ACL_PUBLIC_READ = 1, // used by s3 and obs api - OBS_CANNED_ACL_PUBLIC_READ_WRITE = 2, // used by s3 and obs api - OBS_CANNED_ACL_AUTHENTICATED_READ = 3, // only used by s3 api - OBS_CANNED_ACL_BUCKET_OWNER_READ = 4, // only used by s3 api - OBS_CANNED_ACL_BUCKET_OWNER_FULL_CONTROL = 5, // only used by s3 api - OBS_CANNED_ACL_LOG_DELIVERY_WRITE = 6, // only used by s3 api - OBS_CANNED_ACL_PUBLIC_READ_DELIVERED = 7, // only used by obs api - OBS_CANNED_ACL_PUBLIC_READ_WRITE_DELIVERED = 8, // only used by obs api - OBS_CANNED_ACL_BUTT -} obs_canned_acl; - -typedef enum { - OBS_REDUNDANCY_1AZ = 0, - OBS_REDUNDANCY_3AZ = 1, // only used by obs api - OBS_REDUNDANCY_BUTT -} obs_az_redundancy; - -typedef enum { - OBS_GRANT_READ = 0, - OBS_GRANT_WRITE = 1, - OBS_GRANT_READ_ACP = 2, - OBS_GRANT_WRITE_ACP = 3, - OBS_GRANT_FULL_CONTROL = 4, - OBS_GRANT_READ_DELIVERED = 5, - OBS_GRANT_FULL_CONTROL_DELIVERED = 6, - OBS_GRANT_BUTT -} obs_grant_domain; - -typedef enum { - OBS_GRANTEE_TYPE_HUAWEI_CUSTOMER_BYEMAIL = 0, // only used by s3 api - OBS_GRANTEE_TYPE_CANONICAL_USER = 1, // used by both of s3 and obs api - OBS_GRANTEE_TYPE_ALL_OBS_USERS = 2, // only used by s3 api - OBS_GRANTEE_TYPE_ALL_USERS = 3, // used by both of s3 and obs api - OBS_GRANTEE_TYPE_LOG_DELIVERY = 4, // only used by s3 api - OBS_GRANTEE_TYPE_BUTT -} obs_grantee_type; - -typedef enum { - OBS_PERMISSION_READ = 0, - OBS_PERMISSION_WRITE = 1, - OBS_PERMISSION_READ_ACP = 2, - OBS_PERMISSION_WRITE_ACP = 3, - OBS_PERMISSION_FULL_CONTROL = 4, - OBS_PERMISSION_BUTT -} obs_permission; - -typedef enum { - OBS_TIER_NULL = 0, - OBS_TIER_STANDARD, - OBS_TIER_EXPEDITED, - OBS_TIER_BULK, -} obs_tier; - -typedef enum { - UPLOAD_NOTSTART, - UPLOADING, - UPLOAD_FAILED, - UPLOAD_SUCCESS, - STATUS_BUTT -} part_upload_status; - -typedef enum { - OBS_SMN_FILTER_NULL = 0, - OBS_SMN_FILTER_PREFIX, - OBS_SMN_FILTER_SUFFIX -} obs_smn_filter_rule_enum; - -typedef enum { - SMN_EVENT_NULL = 0, - SMN_EVENT_OBJECT_CREATED_ALL, - SMN_EVENT_OBJECT_CREATED_PUT, - SMN_EVENT_OBJECT_CREATED_POST, - SMN_EVENT_OBJECT_CREATED_COPY, - SMN_EVENT_OBJECT_CREATED_COMPLETE_MULTIPART_UPLOAD, - SMN_EVENT_OBJECT_REMOVED_ALL, - SMN_EVENT_OBJECT_REMOVED_DELETE, - SMN_EVENT_OBJECT_REMOVED_DELETE_MARKER_CREATED, - SMN_EVENT_REDUCED_REDUNDANCY_LOST_OBJECT -} obs_smn_event_enum; - -typedef enum { - DOWNLOAD_NOTSTART, - DOWNLOADING, - DOWNLOAD_FAILED, - DOWNLOAD_SUCCESS, - COMBINE_SUCCESS, - DOWN_STATUS_BUTT -} download_status; - -typedef enum { - OBS_USE_API_S3 = 0, - OBS_USE_API_OBS = 1 -} obs_use_api; - -typedef enum { - OBS_NO_CERTIFICATE, - OBS_DEFAULT_CERTIFICATE, - OBS_DEFINED_CERTIFICATE -} obs_certificate_conf; - -typedef enum { - OBS_ENCRYPTION_KMS, - OBS_ENCRYPTION_SSEC -} obs_encryption_type; - -typedef enum { - OBJECT_DELIVERED_TRUE = 0, // Default value is true. - OBJECT_DELIVERED_FALSE = 1 -} obs_object_delivered; - -typedef enum { - BUCKET_DELIVERED_FALSE = 0, // Default value is false. - BUCKET_DELIVERED_TRUE = 1 -} obs_bucket_delivered; - -typedef enum { - OBS_BUCKET_OBJECT = 0, // object bucket - OBS_BUCKET_PFS = 1 // pfs bucket -} obs_bucket_type; - -typedef enum { - OBS_BUCKET_LIST_ALL = 0, // list all type bucket - OBS_BUCKET_LIST_OBJECT = 1, // list object bucket - OBS_BUCKET_LIST_PFS = 2 // list pfs bucket -} obs_bucket_list_type; - -#define OBS_COMMON_LEN_256 256 - -#define OBS_MAX_ACL_GRANT_COUNT 100 - -#define OBS_MAX_GRANTEE_EMAIL_ADDRESS_SIZE 128 - -#define OBS_MAX_GRANTEE_USER_ID_SIZE 128 - -#define OBS_MAX_GRANTEE_DISPLAY_NAME_SIZE 128 - -#define OBS_MAX_HOSTNAME_SIZE 255 - -#define OBS_MAX_KEY_SIZE 1024 - -#define OBS_MAX_METADATA_SIZE 4096 - -#define OBS_METADATA_HEADER_NAME_PREFIX "x-amz-meta-" - -#define OBS_VERSION_STATUS_ENABLED "Enabled" - -#define OBS_VERSION_STATUS_SUSPENDED "Suspended" - -#define OBS_MAX_METADATA_COUNT \ - (OBS_MAX_METADATA_SIZE / (sizeof(OBS_METADATA_HEADER_NAME_PREFIX "nv") - 1)) - -typedef struct obs_request_context obs_request_context; - -typedef struct tag_obs_create_bucket_params { - obs_canned_acl canned_acl; - obs_az_redundancy az_redundancy; - const char *location_constraint; -} obs_create_bucket_params; - -typedef struct obs_acl_grant { - obs_grantee_type grantee_type; - union { - struct { - char email_address[OBS_MAX_GRANTEE_EMAIL_ADDRESS_SIZE]; - } huawei_customer_by_email; // only used by s3 api - struct { - char id[OBS_MAX_GRANTEE_USER_ID_SIZE]; - char display_name[OBS_MAX_GRANTEE_DISPLAY_NAME_SIZE]; // only used by s3 api - } canonical_user; - } grantee; - obs_permission permission; - obs_bucket_delivered bucket_delivered; // only used by obs api -} obs_acl_grant; - -typedef struct obs_acl_group { - int acl_grant_count; - obs_acl_grant *acl_grants; -} obs_acl_group; - -typedef struct obs_object_info { - char* key; - char* version_id; -} obs_object_info; - -typedef struct obs_delete_object_info { - unsigned int keys_number; - int quiet; -} obs_delete_object_info; - -typedef struct manager_acl_info { - obs_object_info object_info; - char *owner_id; - char *owner_display_name; - int *acl_grant_count_return; - obs_object_delivered object_delivered; // only used by obs api - obs_acl_grant *acl_grants; -} manager_acl_info; - -typedef struct obs_upload_part_info { - unsigned int part_number; - char *upload_id; -} obs_upload_part_info; - -typedef struct obs_complete_upload_Info { - unsigned int part_number; - char *etag; -} obs_complete_upload_Info; - -typedef struct list_part_info { - char *upload_id; - unsigned int max_parts; - unsigned int part_number_marker; -} list_part_info; - -typedef struct obs_name_value { - char *name; - char *value; -} obs_name_value; - -typedef struct obs_error_details { - const char *message; - - const char *resource; - - const char *further_details; - - int extra_details_count; - - obs_name_value *extra_details; -} obs_error_details; - -typedef struct obs_response_properties { - const char *request_id; - - const char *request_id2; - - const char *content_type; - - uint64_t content_length; - - const char *server; - - const char *etag; - - const char *expiration; - - const char *website_redirect_location; - - const char *version_id; - - int64_t last_modified; - - int meta_data_count; - - const obs_name_value *meta_data; - - char use_server_side_encryption; - - const char *allow_origin; - - const char *allow_headers; - - const char *max_age; - - const char *allow_methods; - - const char *expose_headers; - - const char *storage_class; - - const char *server_side_encryption; - - const char *kms_key_id; - - const char *customer_algorithm; - - const char *customer_key_md5; - - const char *bucket_location; - - const char *obs_version; - - const char *restore; - - const char *obs_object_type; - - const char *obs_next_append_position; - - const char *obs_head_epid; - - const char *reserved_indicator; -} obs_response_properties; - -typedef struct obs_list_objects_content { - const char *key; - int64_t last_modified; - const char *etag; - uint64_t size; - const char *owner_id; - const char *owner_display_name; - const char *storage_class; - const char *type; -} obs_list_objects_content; - -typedef struct obs_version { - const char *key; - const char *version_id; - const char *is_latest; - int64_t last_modified; - const char *etag; - uint64_t size; - const char *owner_id; - const char *owner_display_name; - const char *storage_class; - const char *is_delete; -} obs_version; - -typedef struct obs_list_versions { - const char* bucket_name; - const char* prefix; - const char* key_marker; - const char* delimiter; - const char* max_keys; - obs_version* versions; - int versions_count; - const char** common_prefixes; - int common_prefixes_count; -} obs_list_versions; - - -typedef struct obs_list_parts { - unsigned int part_number; - int64_t last_modified; - const char *etag; - uint64_t size; - const char *storage_class; -}obs_list_parts; - -typedef struct obs_list_multipart_upload { - const char *key; - const char *upload_id; - const char *initiator_id; - const char *initiator_display_name; - const char *owner_id; - const char *owner_display_name; - const char *storage_class; - int64_t initiated; -} obs_list_multipart_upload; - -typedef struct obs_lifecycle_transtion { - const char *date; - const char *days; - obs_storage_class storage_class; -} obs_lifecycle_transtion; - -typedef struct obs_lifecycle_noncurrent_transtion { - const char *noncurrent_version_days; - obs_storage_class storage_class; -} obs_lifecycle_noncurrent_transtion; - -typedef struct obs_lifecycle_conf { - const char *date; - const char *days; - const char *id; - const char *prefix; - const char *status; - const char *noncurrent_version_days; - obs_lifecycle_transtion *transition; - unsigned int transition_num; - obs_lifecycle_noncurrent_transtion *noncurrent_version_transition; - unsigned int noncurrent_version_transition_num; -} obs_lifecycle_conf; - -typedef struct obs_bucket_cors_conf { - const char *id; - const char **allowed_method; - unsigned int allowed_method_number; - const char **allowed_origin; - unsigned int allowed_origin_number; - const char **allowed_header; - unsigned int allowed_header_number; - const char *max_age_seconds; - const char **expose_header; - unsigned int expose_header_number; -} obs_bucket_cors_conf; - -typedef struct obs_uploaded_parts_total_info { - int is_truncated; - unsigned int nextpart_number_marker; - char *initiator_id; - char *initiator_display_name; - char *owner_id; - char *owner_display_name; - char *sorage_class; - int parts_count; -} obs_uploaded_parts_total_info; - -typedef struct obs_copy_destination_object_info { - char *destination_bucket; - char *destination_key; - char *version_id; - int64_t *last_modified_return; - int etag_return_size; - char *etag_return; -} obs_copy_destination_object_info; - -typedef struct _obs_upload_file_configuration { - char *upload_file; - uint64_t part_size; - char *check_point_file; - int enable_check_point; - int task_num; -} obs_upload_file_configuration; - -typedef struct _obs_download_file_configuration { - char *downLoad_file; - uint64_t part_size; - char *check_point_file; - int enable_check_point; - int task_num; -} obs_download_file_configuration; - -typedef struct _obs_upload_file_part_info { - int part_num; - uint64_t start_byte; - uint64_t part_size; - part_upload_status status_return; -} obs_upload_file_part_info; - -typedef struct _obs_download_file_part_info { - int part_num; - uint64_t start_byte; - uint64_t part_size; - download_status status_return; -} obs_download_file_part_info; - -typedef struct obs_set_bucket_redirect_all_conf { - const char *host_name; - const char *protocol; -} obs_set_bucket_redirect_all_conf; - -typedef struct obs_delete_objects { - const char *key; - const char *code; - const char *message; - const char *delete_marker; - const char *delete_marker_version_id; -} obs_delete_objects; - -typedef struct bucket_website_routingrule { - const char *key_prefix_equals; - const char *http_errorcode_returned_equals; - const char *protocol; - const char *host_name; - const char *replace_key_prefix_with; - const char *replace_key_with; - const char *http_redirect_code; -} bucket_website_routingrule; - -typedef struct obs_set_bucket_website_conf { - const char *suffix; - const char *key; - bucket_website_routingrule *routingrule_info; - int routingrule_count; -}obs_set_bucket_website_conf; - -typedef struct obs_smn_filter_rule { - obs_smn_filter_rule_enum name; - char* value; -}obs_smn_filter_rule; - -typedef struct obs_smn_topic_configuration { - char* topic; - char* id; - obs_smn_filter_rule* filter_rule; - unsigned int filter_rule_num; - obs_smn_event_enum* event; - unsigned int event_num; -} obs_smn_topic_configuration; - -typedef struct obs_smn_notification_configuration { - obs_smn_topic_configuration* topic_conf; - unsigned int topic_conf_num; -}obs_smn_notification_configuration; - - -/***************************response handle function*******************************************/ -typedef obs_status (obs_response_properties_callback)(const obs_response_properties *properties, - void *callback_data); - -typedef void (obs_response_complete_callback)(obs_status status, - const obs_error_details *error_details, void *callback_data); - -typedef int (obs_put_object_data_callback)(int buffer_size, char *buffer, - void *callback_data); - -typedef int (obs_append_object_data_callback)(int buffer_size, char *buffer, - void *callback_data); -typedef int (obs_modify_object_data_callback)(int buffer_size, char *buffer, - void *callback_data); - -typedef obs_status (obs_get_object_data_callback)(int buffer_size, const char *buffer, - void *callback_data); - -typedef obs_status (obs_list_service_callback)(const char *owner_id, - const char *owner_display_name, - const char *bucket_name, - int64_t creation_date_seconds, - void *callback_data); - -typedef obs_status (obs_list_service_obs_callback)(const char *owner_id, - const char *bucket_name, - int64_t creation_date_seconds, - const char *location, - void *callback_data); - -typedef obs_status (obs_get_bucket_storage_policy)(const char *storage_class_policy, - void *callback_data); - -typedef obs_status (obs_get_bucket_websiteconf_callback)(const char *hostname, const char *protocol, - const char *suffix, const char *key, - const bucket_website_routingrule *routingrule, - int webdatacount, - void *callback_data); - -typedef int (obs_upload_data_callback)(int buffer_size, char *buffer, void *callback_data); - -typedef obs_status (obs_complete_multi_part_upload_callback)(const char *location, - const char *bucket, - const char *key, - const char* etag, - void *callback_data); - -typedef obs_status (obs_list_parts_callback_ex)(obs_uploaded_parts_total_info* uploaded_parts, - obs_list_parts *parts, - void *callback_data); -typedef void (obs_upload_file_callback)(obs_status status, - char *result_message, - int part_count_return, - obs_upload_file_part_info *upload_info_list, - void *callback_data); - -typedef obs_status (obs_list_objects_callback)(int is_truncated, const char *next_marker, - int contents_count, - const obs_list_objects_content *contents, - int common_prefixes_count, - const char **common_prefixes, - void *callback_data); - -typedef obs_status (obs_list_multipart_uploads_callback)(int is_truncated, - const char *next_marker, - const char *next_uploadId_marker, - int uploads_count, - const obs_list_multipart_upload *uploads, - int common_prefixes_count, - const char **common_prefixes, - void *callback_data); - -typedef obs_status (obs_list_versions_callback)(int is_truncated, - const char *next_key_marker, - const char *next_versionid_marker, - const obs_list_versions *versions, - void *callback_data); - -typedef obs_status (get_lifecycle_configuration_callback)(obs_lifecycle_conf* bucket_lifecycle_conf, - unsigned int blcc_number, - void *callback_data); - -typedef void (obs_download_file_callback)(obs_status status, - char *result_message, - int part_count_return, - obs_download_file_part_info *download_info_list, - void *callback_data); - -typedef obs_status (get_cors_configuration_callback)(obs_bucket_cors_conf* bucket_cors_conf, - unsigned int bcc_number, - void *callback_data); - -typedef obs_status (obs_delete_object_data_callback)(int contents_count, - obs_delete_objects *contents, - void *callback_data); - -typedef obs_status (obs_smn_callback)(obs_smn_notification_configuration* notification_conf, - void *callback_data); - -/**************************response handler struct**********************************************/ - -typedef struct obs_response_handler { - obs_response_properties_callback *properties_callback; - obs_response_complete_callback *complete_callback; -} obs_response_handler; - -typedef struct obs_list_objects_handler { - obs_response_handler response_handler; - obs_list_objects_callback *list_Objects_callback; -} obs_list_objects_handler; - -typedef struct obs_list_versions_handler { - obs_response_handler response_handler; - obs_list_versions_callback *list_versions_callback; -} obs_list_versions_handler; - -typedef struct obs_list_multipart_uploads_handler { - obs_response_handler response_handler; - obs_list_multipart_uploads_callback *list_mulpu_callback; -} obs_list_multipart_uploads_handler; - -typedef struct obs_put_object_handler { - obs_response_handler response_handler; - obs_put_object_data_callback *put_object_data_callback; -} obs_put_object_handler; -typedef struct obs_append_object_handler { - obs_response_handler response_handler; - obs_append_object_data_callback *append_object_data_callback; -} obs_append_object_handler; - -typedef struct obs_modify_object_handler { - obs_response_handler response_handler; - obs_modify_object_data_callback *modify_object_data_callback; -} obs_modify_object_handler; - -typedef struct obs_get_object_handler { - obs_response_handler response_handler; - obs_get_object_data_callback *get_object_data_callback; -} obs_get_object_handler; - -typedef struct obs_lifecycle_handler { - obs_response_handler response_handler; - get_lifecycle_configuration_callback *get_lifecycle_callback; -} obs_lifecycle_handler; - -typedef struct obs_cors_handler { - obs_response_handler response_handler; - get_cors_configuration_callback *get_cors_callback; -} obs_cors_handler; - -typedef struct obs_upload_handler { - obs_response_handler response_handler; - obs_upload_data_callback *upload_data_callback; -} obs_upload_handler; - -typedef struct obs_complete_multi_part_upload_handler { - obs_response_handler response_handler; - obs_complete_multi_part_upload_callback *complete_multipart_upload_callback; -} obs_complete_multi_part_upload_handler; - -typedef struct obs_list_parts_handler { - obs_response_handler response_handler; - obs_list_parts_callback_ex *list_parts_callback_ex; -} obs_list_parts_handler; - -typedef struct obs_upload_file_response_handler { - obs_response_handler response_handler; - obs_upload_file_callback *upload_file_callback; -} obs_upload_file_response_handler; - -typedef struct __obs_download_file_response_handler { - obs_response_handler response_handler; - obs_download_file_callback *download_file_callback; -} obs_download_file_response_handler; - -typedef struct obs_delete_object_handler { - obs_response_handler response_handler; - obs_delete_object_data_callback *delete_object_data_callback; -} obs_delete_object_handler; - -typedef struct obs_get_bucket_websiteconf_handler { - obs_response_handler response_handler; - obs_get_bucket_websiteconf_callback *get_bucket_website_conf_callback; -} obs_get_bucket_websiteconf_handler; - -typedef struct obs_smn_handler { - obs_response_handler response_handler; - obs_smn_callback *get_smn_callback_func; -} obs_smn_handler; - -/**************************return struct*******************************************/ -typedef struct obs_bucket_context { - char *host_name; - char *bucket_name; - obs_protocol protocol; - obs_uri_style uri_style; - char *access_key; - char *secret_access_key; - char *certificate_info; - obs_storage_class storage_class; - char *token; - char *epid; - obs_bucket_type bucket_type; - obs_bucket_list_type bucket_list_type; -} obs_bucket_context; - -typedef enum { - OBS_HTTP2_OPEN = 0, - OBS_HTTP2_CLOSE = 1 -} obs_http2_switch; - -typedef enum { - OBS_BBR_OPEN = 0, - OBS_BBR_CLOSE = 1 -} obs_bbr_switch; - -typedef enum { - OBS_OPENSSL_CLOSE = 0, - OBS_OPENSSL_OPEN = 1 -} obs_openssl_switch; - -typedef enum { - OBS_NEGOTIATION_TYPE = 0, - OBS_OBS_TYPE = 1, - OBS_S3_TYPE = 2 -} obs_auth_switch; - -typedef enum { - OBS_NO_METADATA_ACTION = 0, - OBS_REPLACE = 1, - OBS_REPLACE_NEW = 2 -} metadata_action_indicator; - -typedef struct obs_http_request_option { - int speed_limit; - int speed_time; - int connect_time; - int max_connected_time; - char *proxy_host; - char *proxy_auth; - char *ssl_cipher_list; - obs_http2_switch http2_switch; - obs_bbr_switch bbr_switch; - obs_auth_switch auth_switch; - long buffer_size; -} obs_http_request_option; - -typedef struct temp_auth_configure { - long long int expires; - void (*temp_auth_callback)(char *temp_auth_url, char *temp_auth_headers, void *callback_data); - void *callback_data; -} temp_auth_configure; - -typedef struct obs_options { - obs_bucket_context bucket_options; - obs_http_request_option request_options; - temp_auth_configure *temp_auth; -} obs_options; - -typedef struct image_process_configure { - image_process_mode image_process_mode; - char *cmds_stylename; -} image_process_configure; - -typedef struct obs_get_conditions { - uint64_t start_byte; - uint64_t byte_count; - int64_t if_modified_since; - int64_t if_not_modified_since; - char *if_match_etag; - char *if_not_match_etag; - image_process_configure *image_process_config; -} obs_get_conditions; - -typedef struct file_object_config { - int auto_split; - char *file_name; - void (*print_process_callback)(uint64_t remain_bytes, int progress_rate); -} file_object_config; - -typedef struct grant_domain_config { - char *domain; - obs_grant_domain grant_domain; -} grant_domain_config; - -typedef struct obs_put_properties { - char *content_type; - char *md5; - char *cache_control; - char *content_disposition_filename; - char *content_encoding; - char *website_redirect_location; - obs_get_conditions *get_conditions; - uint64_t start_byte; - uint64_t byte_count; - int64_t expires; - obs_canned_acl canned_acl; - obs_az_redundancy az_redundancy; - grant_domain_config *domain_config; - int meta_data_count; - obs_name_value *meta_data; - file_object_config *file_object_config; - metadata_action_indicator metadata_action; -} obs_put_properties; - -typedef struct server_side_encryption_params { - obs_encryption_type encryption_type; - char *kms_server_side_encryption; - char *kms_key_id; - char *ssec_customer_algorithm; - char *ssec_customer_key; - char *des_ssec_customer_algorithm; - char *des_ssec_customer_key; -} server_side_encryption_params; - -typedef obs_status (obs_get_bucket_storage_policy_callback)(const char *storage_class_policy, - void *callback_data); - -typedef struct obs_get_bucket_storage_class_handler { - obs_response_handler response_handler; - obs_get_bucket_storage_policy_callback *get_bucket_sorage_class_callback; -} obs_get_bucket_storage_class_handler; - -typedef obs_status (obs_get_bucket_tagging_callback)(int tagging_count, - obs_name_value *tagging_list, void *callback_data); - -typedef struct obs_get_bucket_tagging_handler { - obs_response_handler response_handler; - obs_get_bucket_tagging_callback *get_bucket_tagging_callback; -} obs_get_bucket_tagging_handler; - -typedef struct obs_list_service_handler { - obs_response_handler response_handler; - obs_list_service_callback *listServiceCallback; -} obs_list_service_handler; - -typedef struct obs_list_service_obs_handler { - obs_response_handler response_handler; - obs_list_service_obs_callback *listServiceCallback; -} obs_list_service_obs_handler; - -typedef struct bucket_logging_message { - char *target_bucket; - int target_bucket_size; - char *target_prefix; - int target_prefix_size; - obs_acl_grant *acl_grants; - int *acl_grant_count; - char *agency; - int agency_size; -} bucket_logging_message; - -/****************************init handle *****************************************************/ -eSDK_OBS_API obs_status obs_initialize(int win32_flags); - -eSDK_OBS_API void obs_deinitialize(); - -eSDK_OBS_API void init_obs_options(obs_options *options); - -eSDK_OBS_API int obs_status_is_retryable(obs_status status); - -eSDK_OBS_API obs_status set_online_request_max_count(uint32_t online_request_max); - -eSDK_OBS_API obs_status init_certificate_by_path(obs_protocol protocol, - obs_certificate_conf ca_conf, const char *path, int path_length); - -eSDK_OBS_API obs_status init_certificate_by_buffer(const char *buffer, int buffer_length); - -/*************************************bucket handle**************************************/ - -eSDK_OBS_API void create_bucket(const obs_options *options, obs_canned_acl canned_acl, - const char *location_constraint, obs_response_handler *handler, void *callback_data); - -eSDK_OBS_API void create_bucket_with_params(const obs_options *options, const obs_create_bucket_params *param, - obs_response_handler *handler, void *callback_data); - -eSDK_OBS_API void create_pfs_bucket(const obs_options *options, obs_canned_acl canned_acl, - const char *location_constraint, obs_response_handler *handler, - void *callback_data); - -eSDK_OBS_API void list_bucket(const obs_options *options, obs_list_service_handler *handler, - void *callback_data); - -eSDK_OBS_API void list_bucket_obs(const obs_options *options, obs_list_service_obs_handler *handler, - void *callback_data); - -eSDK_OBS_API void delete_bucket(const obs_options *options, obs_response_handler *handler, void *callback_data); - - -eSDK_OBS_API void list_bucket_objects(const obs_options *options, const char *prefix, const char *marker, - const char *delimiter, int maxkeys, obs_list_objects_handler *handler, - void *callback_data); - -// only object bucket can use -eSDK_OBS_API void list_versions(const obs_options *options, const char *prefix, const char *key_marker, - const char *delimiter, int maxkeys, const char *version_id_marker, - obs_list_versions_handler *handler, void *callback_data); - -eSDK_OBS_API void set_bucket_quota(const obs_options *options, uint64_t storage_quota, - obs_response_handler *handler, void *callback_data); - -eSDK_OBS_API void get_bucket_quota(const obs_options *options, uint64_t *storagequota_return, - obs_response_handler *handler, void *callback_data); - -eSDK_OBS_API void set_bucket_policy(const obs_options *options, const char *policy, - obs_response_handler *handler, void *callback_data); - -eSDK_OBS_API void get_bucket_policy(const obs_options *options, int policy_return_size, - char *policy_return, obs_response_handler *handler, - void *callback_data); - -eSDK_OBS_API void delete_bucket_policy(const obs_options *options, obs_response_handler *handler, - void *callback_data); - -eSDK_OBS_API void set_bucket_version_configuration(const obs_options *options, const char *version_status, - obs_response_handler *handler, void *callback_data); - -eSDK_OBS_API void get_bucket_version_configuration(const obs_options *options, - int status_return_size, - char *status_return, - obs_response_handler *handler, - void *callback_data); - -eSDK_OBS_API void set_bucket_storage_class_policy(const obs_options *options, - obs_storage_class storage_class_policy, - obs_response_handler *handler, - void *callback_data); - -eSDK_OBS_API void get_bucket_storage_class_policy(const obs_options *options, - obs_get_bucket_storage_class_handler *handler, - void *callback_data); - -eSDK_OBS_API void set_bucket_tagging(const obs_options *options, - obs_name_value *tagging_list, - unsigned int number, - obs_response_handler *handler, - void *callback_data); - -eSDK_OBS_API void get_bucket_tagging(const obs_options *options, - obs_get_bucket_tagging_handler *handler, - void *callback_data); - -eSDK_OBS_API void delete_bucket_tagging(const obs_options *options, - obs_response_handler *handler, - void *callback_data); - - -eSDK_OBS_API void set_bucket_logging_configuration(const obs_options *options, - char *target_bucket, - char *target_prefix, - obs_acl_group *acl_group, - obs_response_handler *handler, - void *callback_data); - -eSDK_OBS_API void set_bucket_logging_configuration_obs(const obs_options *options, - char *target_bucket, - char *target_prefix, - char *agency, - obs_acl_group *acl_group, - obs_response_handler *handler, - void *callback_data); - -eSDK_OBS_API void get_bucket_logging_configuration(const obs_options *options, - obs_response_handler *handler, - bucket_logging_message *logging_message_data, - void *callback_data); - -// only object bucket can use -eSDK_OBS_API void set_bucket_website_configuration(const obs_options *options, - obs_set_bucket_redirect_all_conf *set_bucket_redirect_all, - obs_set_bucket_website_conf *set_bucket_website_conf, - obs_response_handler *handler, - void *callback_data); -// only object bucket can use -eSDK_OBS_API void get_bucket_website_configuration(const obs_options *options, - obs_get_bucket_websiteconf_handler *handler, - void *callback_data); -// only object bucket can use -eSDK_OBS_API void delete_bucket_website_configuration(const obs_options *options, - obs_response_handler *handler, - void *callback_data); - -eSDK_OBS_API void get_bucket_storage_info(const obs_options *options, - int capacity_length, - char *capacity, - int object_number_length, - char *object_number, - obs_response_handler *handler, - void *callback_data); - - eSDK_OBS_API void list_multipart_uploads(const obs_options *options, - const char *prefix, - const char *marker, - const char *delimiter, - const char* uploadid_marke, - int max_uploads, - obs_list_multipart_uploads_handler *handler, - void *callback_data); - -eSDK_OBS_API void set_bucket_lifecycle_configuration(const obs_options *options, - obs_lifecycle_conf* bucket_lifecycle_conf, - unsigned int blcc_number, - obs_response_handler *handler, - void *callback_data); - -eSDK_OBS_API void get_bucket_lifecycle_configuration(const obs_options *options, - obs_lifecycle_handler *handler, - void *callback_data); - -eSDK_OBS_API void delete_bucket_lifecycle_configuration(const obs_options *options, - obs_response_handler *handler, - void *callback_data); - -// only object bucket can use -eSDK_OBS_API void set_bucket_cors_configuration(const obs_options *options, - obs_bucket_cors_conf *obs_cors_conf_info, - unsigned int conf_num, - obs_response_handler *handler, - void *callback_data); - -// only object bucket can use -eSDK_OBS_API void get_bucket_cors_configuration(const obs_options *options, - obs_cors_handler *handler, - void *callback_data); -// only object bucket can use -eSDK_OBS_API void delete_bucket_cors_configuration(const obs_options *options, - obs_response_handler *handler, - void *callback_data); - -eSDK_OBS_API void set_notification_configuration(const obs_options *options, - obs_smn_notification_configuration* notification_conf, - obs_response_handler *handler, - void *callback_data); - - -eSDK_OBS_API void get_notification_configuration(const obs_options *options, - obs_smn_handler *handler, - void *callback_data); - -eSDK_OBS_API void set_bucket_acl(const obs_options *options, - manager_acl_info *aclinfo, - obs_response_handler *handler, - void *callback_data); - - -eSDK_OBS_API void set_bucket_acl_by_head(const obs_options *options, - obs_canned_acl canned_acl, - obs_response_handler *handler, - void *callback_data); - -eSDK_OBS_API void get_bucket_acl(const obs_options *options, - manager_acl_info *aclinfo, - obs_response_handler *handler, - void *callback_data); - -eSDK_OBS_API void obs_options_bucket(const obs_options *options, - char* origin, - char (*request_method)[OBS_COMMON_LEN_256], - unsigned int method_number, - char (*request_header)[OBS_COMMON_LEN_256], - unsigned int header_number, - obs_response_handler *handler, - void *callback_data); - -eSDK_OBS_API void get_bucket_metadata_with_corsconf(const obs_options *options, char *origin, - char (*requestHeader)[OBS_COMMON_LEN_256], - unsigned int number, - obs_response_handler *handler); - -eSDK_OBS_API void obs_head_bucket(const obs_options *options, - obs_response_handler *handler, - void *callback_data); - -/*************************************object handle*************************************/ - -eSDK_OBS_API void get_object_metadata(const obs_options *options, obs_object_info *object_info, - server_side_encryption_params *encryption_params, - obs_response_handler *handler, void *callback_data); - -eSDK_OBS_API void set_object_metadata(const obs_options *options, obs_object_info *object_info, - obs_put_properties *put_properties, - server_side_encryption_params *encryption_params, - obs_response_handler *handler, void *callback_data); - -eSDK_OBS_API void put_object(const obs_options *options, char *key, uint64_t content_length, - obs_put_properties *put_properties, - server_side_encryption_params *encryption_params, - obs_put_object_handler *handler, void *callback_data); - -eSDK_OBS_API void init_get_properties(obs_get_conditions *get_conditions); - -eSDK_OBS_API void get_object(const obs_options *options, obs_object_info *object_info, - obs_get_conditions *get_conditions, - server_side_encryption_params *encryption_params, - obs_get_object_handler *handler, void *callback_data); - -eSDK_OBS_API void delete_object(const obs_options *options, obs_object_info *object_info, - obs_response_handler *handler, void *callback_data); - -eSDK_OBS_API const char *obs_get_status_name(obs_status status); - -eSDK_OBS_API obs_status obs_create_request_context(obs_request_context **request_context_return); - -eSDK_OBS_API void obs_destroy_request_context(obs_request_context *request_context); - -eSDK_OBS_API obs_status obs_runall_request_context(obs_request_context *request_context); - -eSDK_OBS_API void obs_head_object(const obs_options *options, char *key, - obs_response_handler *handler, void *callback_data); - -eSDK_OBS_API void init_put_properties(obs_put_properties *put_properties); - -eSDK_OBS_API void upload_part(const obs_options *options, char *key, obs_upload_part_info *upload_part_info, - uint64_t content_length, obs_put_properties *put_properties, - server_side_encryption_params *encryption_params, - obs_upload_handler *handler, void *callback_data); - -eSDK_OBS_API void initiate_multi_part_upload(const obs_options *options, char *key, int upload_id_return_size, - char *upload_id_return, obs_put_properties *put_properties, - server_side_encryption_params *encryption_params, - obs_response_handler *handler, void *callback_data); - -eSDK_OBS_API void complete_multi_part_upload(const obs_options *options, char *key, const char *upload_id, - unsigned int part_number, - obs_complete_upload_Info *complete_upload_Info, - obs_put_properties *put_properties, - obs_complete_multi_part_upload_handler *handler, void *callback_data); - -eSDK_OBS_API void list_parts (const obs_options *options, char *key, list_part_info *listpart, - obs_list_parts_handler *handler, void *callback_data); - -eSDK_OBS_API void abort_multi_part_upload(const obs_options *options, char *key, const char *upload_id, - obs_response_handler *handler, void *callback_data); - -eSDK_OBS_API void copy_object(const obs_options *options, char *key, const char *version_id, - obs_copy_destination_object_info *object_info, - unsigned int is_copy, obs_put_properties *put_properties, - server_side_encryption_params *encryption_params, - obs_response_handler *handler, void *callback_data); - -eSDK_OBS_API void copy_part(const obs_options *options, char *key, obs_copy_destination_object_info *object_info, - obs_upload_part_info *copypart, obs_put_properties *put_properties, - server_side_encryption_params *encryption_params, obs_response_handler *handler, - void *callback_data); - -eSDK_OBS_API void restore_object(const obs_options *options, obs_object_info *object_info, const char *days, - obs_tier tier, const obs_response_handler *handler, void *callback_data); - -eSDK_OBS_API void obs_options_object(const obs_options *options, char* key, char* origin, - char (*request_method)[OBS_COMMON_LEN_256], unsigned int method_number, - char (*request_header)[OBS_COMMON_LEN_256], unsigned int header_number, - obs_response_handler *handler, void *callback_data); - -eSDK_OBS_API void initialize_break_point_lock(); - -eSDK_OBS_API void deinitialize_break_point_lock(); - -eSDK_OBS_API void upload_file(const obs_options *options, char *key, server_side_encryption_params *encryption_params, - obs_upload_file_configuration *upload_file_config, obs_upload_file_response_handler *handler, - void *callback_data); - -eSDK_OBS_API void download_file(const obs_options *options, char *key, char* version_id, - obs_get_conditions *get_conditions, - server_side_encryption_params *encryption_params, - obs_download_file_configuration *download_file_config, - obs_download_file_response_handler *handler, void *callback_data); - -eSDK_OBS_API void batch_delete_objects(const obs_options *options, obs_object_info *object_info, - obs_delete_object_info *delobj, - obs_put_properties *put_properties, obs_delete_object_handler *handler, - void *callback_data); - -eSDK_OBS_API void get_object_acl(const obs_options *options, manager_acl_info *aclinfo, - obs_response_handler *handler, void *callback_data); - -eSDK_OBS_API void set_object_acl(const obs_options *options, manager_acl_info *aclinfo, - obs_response_handler *handler, void *callback_data); - -eSDK_OBS_API void set_object_acl_by_head(const obs_options *options, obs_object_info *object_info, - obs_canned_acl canned_acl, - obs_response_handler *handler, - void *callback_data); -// only object bucket can use Modify_object -eSDK_OBS_API void append_object(const obs_options *options, char *key, uint64_t content_length, const char *position, - obs_put_properties *put_properties, server_side_encryption_params *encryption_params, - obs_append_object_handler *handler, void *callback_data); -// only pfs bucket can use Modify_object -eSDK_OBS_API void modify_object(const obs_options *options, char *key, uint64_t content_length, uint64_t position, - obs_put_properties *put_properties, server_side_encryption_params *encryption_params, - obs_modify_object_handler *handler, void *callback_data); -// only pfs bucket can use truncate_object -eSDK_OBS_API void truncate_object(const obs_options *options, char *key, uint64_t object_length, - obs_response_handler *handler, void *callback_data); -// only pfs bucket can use rename_object -eSDK_OBS_API void rename_object(const obs_options *options, char *key, char *new_object_name, - obs_response_handler *handler, void *callback_data); - -eSDK_OBS_API void compute_md5(const char *buffer, int64_t buffer_size, - char *outbuffer, int64_t max_out_put_buffer_size); - -eSDK_OBS_API int set_obs_log_path(const char *log_path); - -eSDK_OBS_API void set_openssl_callback(obs_openssl_switch switch_flag); - -#ifdef __cplusplus -} -#endif - -#endif /* LIBOBS_H */ diff --git a/enclave/qtsm-sdk-c/samples/include/obs_demo_common.h b/enclave/qtsm-sdk-c/samples/include/obs_demo_common.h deleted file mode 100644 index 007820f..0000000 --- a/enclave/qtsm-sdk-c/samples/include/obs_demo_common.h +++ /dev/null @@ -1,292 +0,0 @@ -/********************************************************************************* -* Copyright 2019 Huawei Technologies Co.,Ltd. -* 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. -********************************************************************************** -*/ -#ifndef OBS_DEMO_COMMON_H -#define OBS_DEMO_COMMON_H -#define ARRAY_LENGTH_2048 2048 -#define ARRAY_LENGTH_1024 1024 -#define TAG_KV_LENGTH 250 -#define TIMES_SHIFT 64 -#define TAGLIST_LENGTH 10 -extern int showResponsePropertiesG; -extern char locationconstraint[ARRAY_LENGTH_2048]; -extern char ACCESS_KEY_ID[ARRAY_LENGTH_2048]; -extern char SECRET_ACCESS_KEY[ARRAY_LENGTH_2048]; -extern char HOST_NAME[ARRAY_LENGTH_2048]; -extern char BUCKET_NAME[ARRAY_LENGTH_2048]; -extern char UPLOAD_ID[ARRAY_LENGTH_2048]; -extern obs_canned_acl canned_acl; -extern char *CA_FILE; - -// struct------------------------------------------ -typedef struct head_object_data { - obs_status ret_status; - int object_length; -} head_object_data; - - -typedef struct tagkv { - char key[TAG_KV_LENGTH]; - char value[TAG_KV_LENGTH]; -} tagkv; - -typedef struct TaggingInfo { - int tagCount; - tagkv taglist[TAGLIST_LENGTH]; - obs_status ret_status; -} TaggingInfo; - -typedef struct list_object_callback_data { - int is_truncated; - char next_marker[ARRAY_LENGTH_1024]; - int keyCount; - int allDetails; - obs_status ret_status; -} list_object_callback_data; - -typedef struct list_bucket_callback_data { - int is_truncated; - char next_marker[ARRAY_LENGTH_1024]; - int keyCount; - int allDetails; - obs_status ret_status; -} list_bucket_callback_data; - -typedef struct list_versions_callback_data { - char bucket_name[ARRAY_LENGTH_1024]; - char prefix[ARRAY_LENGTH_1024]; - char key_marker[ARRAY_LENGTH_1024]; - char delimiter[ARRAY_LENGTH_1024]; - int max_keys; - int is_truncated; - char next_key_marker[ARRAY_LENGTH_1024]; - char next_versionId_marker[ARRAY_LENGTH_1024]; - int keyCount; - int allDetails; - obs_status ret_status; -} list_versions_callback_data; - -typedef struct growbuffer { - int size; - int start; - char data[TIMES_SHIFT * ARRAY_LENGTH_1024]; - struct growbuffer *prev, *next; -} growbuffer; - -typedef struct put_file_object_callback_data { - FILE *infile; - uint64_t content_length; - obs_status ret_status; -} put_file_object_callback_data; - -typedef struct put_buffer_object_callback_data { - char *put_buffer; - uint64_t buffer_size; - uint64_t cur_offset; - obs_status ret_status; -} put_buffer_object_callback_data; - - -typedef struct put_object_callback_data { - FILE *infile; - growbuffer *gb; - uint64_t content_length, originalContentLength; - int noStatus; - obs_status put_status; -} put_object_callback_data; - - -typedef struct get_object_callback_data { - FILE *outfile; - obs_status ret_status; -} get_object_callback_data; - -typedef struct list_service_data { - int headerPrinted; - int allDetails; - obs_status ret_status; -} list_service_data; - -typedef struct test_upload_file_callback_data { - FILE *infile; - int part_num; - uint64_t part_size; - uint64_t start_byte; - int noStatus; - obs_status ret_status; -} test_upload_file_callback_data; - - -typedef struct list_parts_callback_data { - int isTruncated; - char initiatorId[ARRAY_LENGTH_1024]; - char initiatorDisplayName[ARRAY_LENGTH_1024]; - char ownerId[ARRAY_LENGTH_1024]; - char ownerDisplayName[ARRAY_LENGTH_1024]; - unsigned int nextPartNumberMarker; - char storageClass[TIMES_SHIFT]; - int keyCount; - int allDetails; - obs_status ret_status; -} list_parts_callback_data; - -typedef struct _test_concurrent_upload_file_callback_data { - FILE *infile; - char etag[ARRAY_LENGTH_1024]; - char *upload_id; - unsigned int part_num; - uint64_t part_size; - uint64_t start_byte; - obs_options *option; - char *key; - obs_status ret_status; -} test_concurrent_upload_file_callback_data; - -typedef struct __tempAuthResult { - char tmpAuthUrl[ARRAY_LENGTH_1024]; - char actualHeaders[ARRAY_LENGTH_1024]; -} tempAuthResult; - -typedef struct list_multipart_uploads_callback_data { - obs_status ret_status; -}list_multipart_uploads_callback_data; - -// common handle------------------------------------- -void printError(); -FILE *write_to_file(char *localfile); -void common_error_handle(const obs_error_details *error); -void create_and_write_file(char *filename, unsigned int file_size); -void print_grant_info(int acl_grant_count, obs_acl_grant *acl_grants); -void printListBucketHeader(int allDetails); -void printListServiceHeader(int allDetails); -uint64_t open_file_and_get_length(char *localfile, put_file_object_callback_data *data); - -// callback----------------------------------- -obs_status response_properties_callback(const obs_response_properties *properties, void *callback_data); -void response_complete_callback(obs_status status, const obs_error_details *error, void *callback_data); -obs_status head_properties_callback(const obs_response_properties *properties, void *callback_data); -void head_complete_callback(obs_status status, const obs_error_details *error, void *callback_data); -obs_status get_bucket_storageclass_handler(const char *storage_class, void *callBackData); -obs_status get_bucket_tagging_callback(int tagging_count, obs_name_value *tagging_list, void *callback_data); -void get_tagging_complete_callback(obs_status status, const obs_error_details *error, void *callback_data); -obs_status get_bucket_websiteconf_callback(const char *hostname, - const char *protocol, - const char *suffix, - const char *key, - const bucket_website_routingrule *websiteconf, - int webdatacount, - void *callback_data); -obs_status list_objects_callback(int is_truncated, const char *next_marker, - int contents_count, - const obs_list_objects_content *contents, - int common_prefixes_count, - const char **common_prefixes, - void *callback_data); -void list_object_complete_callback(obs_status status, const obs_error_details *error, void *callback_data); -obs_status listVersionsCallback(int is_truncated, const char *next_key_marker, const char *next_versionId_marker, - const obs_list_versions *list_versions, void *callback_data); - -obs_status getBucketLifecycleConfigurationCallbackEx (obs_lifecycle_conf* bucketLifeCycleConf, - unsigned int blccNumber, void *callback_data); - -obs_status get_cors_info_callback(obs_bucket_cors_conf* bucket_cors_conf, - unsigned int bcc_number, - void *callback_data); -obs_status get_notification_info_callback(obs_smn_notification_configuration* notification_conf, - void *callback_data); - -void put_file_complete_callback(obs_status status, - const obs_error_details *error, - void *callback_data); -void put_buffer_complete_callback(obs_status status, const obs_error_details *error, void *callback_data); -int put_file_data_callback(int buffer_size, char *buffer, void *callback_data); -int put_buffer_data_callback(int buffer_size, char *buffer, void *callback_data); -obs_status get_properties_callback(const obs_response_properties *properties, void *callback_data); -obs_status set_online_request_max_rate(uint64_t online_request_rate); -void initialize_get_token_lock(); -void deinitialize_get_token_lock(); -void preduce_token(); -int get_token(int buffer_size); -obs_status get_object_data_callback(int buffer_size, const char *buffer, void *callback_data); -void get_object_complete_callback(obs_status status, const obs_error_details *error, void *callback_data); - -obs_status delete_objects_data_callback(int contentsCount, obs_delete_objects *delobjs, void *callbackData); -obs_status listServiceCallback(const char *owner_id, - const char *owner_display_name, - const char *bucket_name, - int64_t creationDate, - void *callback_data); -obs_status listServiceObsCallback(const char *owner_id, - const char *bucket_name, - int64_t creationDate, - const char *location, - void *callback_data); -void list_bucket_complete_callback(obs_status status, - const obs_error_details *error, - void *callback_data); - -void upload_part_from_file(test_upload_file_callback_data *data); - -int test_upload_file_data_callback(int buffer_size, char *buffer, void *callback_data); -int test_concurrent_upload_part_data_callback(int buffer_size, char *buffer, void *callback_data); - - -uint64_t get_file_info(char *localfile, test_upload_file_callback_data *data); - -obs_status CompleteMultipartUploadCallback(const char *location, - const char *bucket, - const char *key, - const char* eTag, - void *callbackData); -void upload_part_complete_callback(obs_status status, - const obs_error_details *error, - void *callback_data); -obs_status listPartsCallbackEx(obs_uploaded_parts_total_info* uploadedParts, - obs_list_parts *parts, - void *callbackData); -void list_part_complete_callback(obs_status status, - const obs_error_details *error, - void *callback_data); -void listMultiPartUploadsCompleteCallback(obs_status status, - const obs_error_details *error, - void *callback_data); -obs_status listMultiPartUploadsCallback(int is_truncated, const char *next_marker, - const char *next_uploadId_marker, int uploads_count, - const obs_list_multipart_upload *uploads, int common_prefixes_count, - const char **common_prefixes, void *callback_data); -void uploadFileResultCallback(obs_status status, - char *resultMsg, - int partCountReturn, - obs_upload_file_part_info *uploadInfoList, - void *callbackData); -void downloadFileResultCallback(obs_status status, - char *resultMsg, - int partCountReturn, - obs_download_file_part_info *downloadInfoList, - void *callbackData); -obs_status concurrent_response_properties_callback(const obs_response_properties *properties, void *callback_data); - -void concurrent_upload_file_complete_callback(obs_status status, const obs_error_details *error, void *callback_data); - -obs_status DeleteObjectsDataCallback(int contentsCount, obs_delete_objects *delobjs, void *callbackData); - -int get_certificate_info(char *buffer, int buffer_length); -void tempAuthCallBack_getResult(char *tempAuthUrl, char *tempAuthActualHeaders, void *callbackData); - -void init_bucket_get_logging_message(bucket_logging_message *logging_message); -void destroy_logging_message(bucket_logging_message *logging_message); - - -#endif /* UTIL_H */ - diff --git a/enclave/qtsm-sdk-c/samples/include/securec.h b/enclave/qtsm-sdk-c/samples/include/securec.h deleted file mode 100644 index 1296c3d..0000000 --- a/enclave/qtsm-sdk-c/samples/include/securec.h +++ /dev/null @@ -1,241 +0,0 @@ -/********************************************************************************* -* Copyright 2019 Huawei Technologies Co.,Ltd. -* 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. -********************************************************************************** -*/ - -#ifndef __SECUREC_H__5D13A042_DC3F_4ED9_A8D1_882811274C27 -#define __SECUREC_H__5D13A042_DC3F_4ED9_A8D1_882811274C27 - -/* If you need high performance, enable the WITH_PERFORMANCE_ADDONS macro! */ -#define WITH_PERFORMANCE_ADDONS - -#include "securectype.h" /* lint !e537 */ -#include - -/* If stack size on some embedded platform is limited, you can define the following macro -* which will put some variables on heap instead of stack. -#define STACK_SIZE_LESS_THAN_1K -*/ - -/* for performance consideration, the following macro will call the corresponding API -* of libC for memcpy, memmove and memset -*/ -#define CALL_LIBC_COR_API - -/* codes should run under the macro COMPATIBLE_LINUX_FORMAT in unknow system on default, - and strtold. The function - strtold is referenced first at ISO9899:1999(C99), and some old compilers can - not support these functions. Here provides a macro to open these functions: - - SECUREC_SUPPORT_STRTOLD -- if defined, strtold will be used -*/ - -/* define error code */ -#ifndef errno_t -typedef int errno_t; -#endif - -/* success */ -#define EOK (0) - -/* invalid parameter */ -#ifdef EINVAL -#undef EINVAL -#endif -#define EINVAL (22) -#define EINVAL_AND_RESET (22 | 0X80) -/* invalid parameter range */ -#ifdef ERANGE -#undef ERANGE /* to avoid redefinition */ -#endif -#define ERANGE (34) -#define ERANGE_AND_RESET (34 | 0X80) - -/* A wide-character code has been detected that does not correspond to a -* valid character, or a byte sequence does not form a valid wide-character code -*/ -#ifdef EILSEQ -#undef EILSEQ -#endif -#define EILSEQ (42) - -#ifdef EOVERLAP_AND_RESET -#undef EOVERLAP_AND_RESET -#endif -/* Once the buffer overlap is detected, the dest buffer must be reseted! */ -#define EOVERLAP_AND_RESET (54 | 0X80) - -/* if you need export the function of this library in Win32 dll, use __declspec(dllexport) */ -#ifdef WIN32 -#ifdef HUAWEISECUREC_WXPORTS -#define HUAWEISECUREC_API __declspec(dllexport) -#else -#define HUAWEISECUREC_API __declspec(dllimport) -#endif -#else -#define HUAWEISECUREC_API -#endif // WIN32 - -#ifdef __cplusplus -extern "C" -{ -#endif - - /* memset function */ - errno_t HUAWEISECUREC_API memset_s(void* dest, size_t destMax, int c, size_t count); - -#if defined __GNUC__ || defined LINUX - /* memcpy function */ - errno_t memcpy_s(void* dest, size_t destMax, const void* src, size_t count); - - /* return SecureC Version */ - void getHwSecureCVersion(char* verStr, int bufSize, unsigned short* verNumber); - - /* wmemcpy */ - errno_t wmemcpy_s(wchar_t* dest, size_t destMax, const wchar_t* src, size_t count); - - /* memmove */ - errno_t memmove_s(void* dest, size_t destMax, const void* src, size_t count); - - errno_t wmemmove_s(wchar_t* dest, size_t destMax, const wchar_t* src, size_t count); - - errno_t wcscpy_s(wchar_t* strDest, size_t destMax, const wchar_t* strSrc); - - errno_t wcsncpy_s(wchar_t* strDest, size_t destMax, const wchar_t* strSrc, size_t count); - - errno_t wcscat_s(wchar_t* strDest, size_t destMax, const wchar_t* strSrc); - - errno_t wcsncat_s(wchar_t* strDest, size_t destMax, const wchar_t* strSrc, size_t count); - - /* strtok */ - char* strtok_s(char* strToken, const char* strDelimit, char** context); - - wchar_t* wcstok_s(wchar_t* strToken, const wchar_t* strDelimit, wchar_t** context); - - /* sprintf */ - int sprintf_s(char* strDest, size_t destMax, const char* format, ...) SECUREC_ATTRIBUTE(3, 4); - - int swprintf_s(wchar_t* strDest, size_t destMax, const wchar_t* format, ...); - - /* vsprintf */ - int vsprintf_s(char* strDest, size_t destMax, const char* format, va_list argptr) SECUREC_ATTRIBUTE(3, 0); - - int vswprintf_s(wchar_t* strDest, size_t destMax, const wchar_t* format, va_list argptr); - - int vsnprintf_s(char* strDest, size_t destMax, size_t count, const char* format, va_list arglist) SECUREC_ATTRIBUTE(4, 0); - - /* snprintf */ - int snprintf_s(char* strDest, size_t destMax, size_t count, const char* format, ...) SECUREC_ATTRIBUTE(4, 5); - - /* scanf */ - int scanf_s(const char* format, ...); - - int wscanf_s(const wchar_t* format, ...); - - /* vscanf */ - int vscanf_s(const char* format, va_list arglist); - - int vwscanf_s(const wchar_t* format, va_list arglist); - - /* fscanf */ - int fscanf_s(FILE* stream, const char* format, ...); - - int fwscanf_s(FILE* stream, const wchar_t* format, ...); - - /* vfscanf */ - int vfscanf_s(FILE* stream, const char* format, va_list arglist); - - int vfwscanf_s(FILE* stream, const wchar_t* format, va_list arglist); - - /* sscanf */ - int sscanf_s(const char* buffer, const char* format, ...); - - int swscanf_s(const wchar_t* buffer, const wchar_t* format, ...); - - /* vsscanf */ - int vsscanf_s(const char* buffer, const char* format, va_list argptr); - - int vswscanf_s(const wchar_t* buffer, const wchar_t* format, va_list arglist); - - /* gets */ - char* gets_s(char* buffer, size_t destMax); - - /* strcpy */ - errno_t strcpy_s(char* strDest, size_t destMax, const char* strSrc); - /* strncpy */ - errno_t strncpy_s(char* strDest, size_t destMax, const char* strSrc, size_t count); - - /* strcat */ - errno_t strcat_s(char* strDest, size_t destMax, const char* strSrc); - /* strncat */ - errno_t strncat_s(char* strDest, size_t destMax, const char* strSrc, size_t count); - - errno_t strncpy_error(char* strDest, size_t destMax, const char* strSrc, size_t count); - errno_t strcpy_error(char* strDest, size_t destMax, const char* strSrc); - -#if defined(WITH_PERFORMANCE_ADDONS) - /* those functions are used by macro */ - errno_t memset_sOptTc(void* dest, size_t destMax, int c, size_t count); - errno_t memcpy_sOptTc(void* dest, size_t destMax, const void* src, size_t count); - - /* strcpy_sp is a macro, NOT a function in performance optimization mode. */ - /* lint -save -e506 -e1055 */ -#define strcpy_sp(dest, destMax, src) (( __builtin_constant_p((destMax)) && __builtin_constant_p((src))) ? \ - STRCPY_SM((dest), (destMax), (src)) : strcpy_s((dest), (destMax), (src))) /* lint -restore */ - - /* strncpy_sp is a macro, NOT a function in performance optimization mode. */ - /* lint -save -e506 -e1055 */ -#define strncpy_sp(dest, destMax, src, count) ((__builtin_constant_p((count)) \ - && __builtin_constant_p((destMax)) \ - && __builtin_constant_p((src))) ? \ - STRNCPY_SM((dest), (destMax), (src), (count)) : strncpy_s((dest), (destMax), (src), (count))) /* lint -restore */ - - /* strcat_sp is a macro, NOT a function in performance optimization mode. */ - /* lint -save -e506 -e1055 */ -#define strcat_sp(dest, destMax, src) (( __builtin_constant_p((destMax)) && __builtin_constant_p((src))) ? \ - STRCAT_SM((dest), (destMax), (src)) : strcat_s((dest), (destMax), (src))) /* lint -restore */ - - /* strncat_sp is a macro, NOT a function in performance optimization mode. */ - /* lint -save -e506 -e1055 */ -#define strncat_sp(dest, destMax, src, count) ((__builtin_constant_p((count)) \ - && __builtin_constant_p((destMax)) \ - && __builtin_constant_p((src))) ? \ - STRNCAT_SM((dest), (destMax), (src), (count)) : strncat_s((dest), (destMax), (src), (count))) /* lint -restore */ - - /* memcpy_sp is a macro, NOT a function in performance optimization mode. */ - /* lint -save -e506 -e1055 */ -#define memcpy_sp(dest, destMax, src, count) (__builtin_constant_p((count)) ? \ - (MEMCPY_SM((dest), (destMax), (src), (count))) : \ - (__builtin_constant_p((destMax)) ? \ - (((size_t)(destMax) > 0 && (((UINT64T)(destMax) & (UINT64T)(-2)) < SECUREC_MEM_MAX_LEN)) ? \ - memcpy_sOptTc((dest), (destMax), (src), (count)) : ERANGE) : \ - memcpy_s((dest), (destMax), (src), (count)))) /* lint -restore */ - - /* memset_sp is a macro, NOT a function in performance optimization mode. */ - /* lint -save -e506 -e1055 */ -#define memset_sp(dest, destMax, c, count) (__builtin_constant_p((count)) ? \ - (MEMSET_SM((dest), (destMax), (c), (count))) : \ - (__builtin_constant_p((destMax)) ? \ - (((size_t)(destMax) > 0 && (((UINT64T)(destMax) & (UINT64T)(-2)) < SECUREC_MEM_MAX_LEN)) ? \ - memset_sOptTc((dest), (destMax), (c), (count)) : ERANGE) : \ - memset_s((dest), (destMax), (c), (count)))) /* lint -restore */ - -#endif -#else -#endif - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* __SECUREC_H__5D13A042_DC3F_4ED9_A8D1_882811274C27 */ diff --git a/enclave/qtsm-sdk-c/samples/include/securectype.h b/enclave/qtsm-sdk-c/samples/include/securectype.h deleted file mode 100644 index 6d1853c..0000000 --- a/enclave/qtsm-sdk-c/samples/include/securectype.h +++ /dev/null @@ -1,321 +0,0 @@ -/********************************************************************************* -* Copyright 2019 Huawei Technologies Co.,Ltd. -* 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. -********************************************************************************** -*/ - -#ifndef __SECURECTYPE_H__A7BBB686_AADA_451B_B9F9_44DACDAE18A7 -#define __SECURECTYPE_H__A7BBB686_AADA_451B_B9F9_44DACDAE18A7 - -/* Shielding VC symbol redefinition warning */ -#if defined(_MSC_VER) && (_MSC_VER >= 1400) -#ifdef __STDC_WANT_SECURE_LIB__ - #undef __STDC_WANT_SECURE_LIB__ -#endif - #define __STDC_WANT_SECURE_LIB__ 0 -#ifdef _CRTIMP_ALTERNATIVE - #undef _CRTIMP_ALTERNATIVE -#endif - #define _CRTIMP_ALTERNATIVE // comment microsoft *_s function -#endif - -#include -#include -#include -/* #include this file is used to define some macros, such as INT_MAX and SIZE_MAX */ - -/* if enable COMPATIBLE_WIN_FORMAT, the output format will be compatible to Windows. */ -#if (defined(_WIN32) || defined(_WIN64) || defined(_MSC_VER)) -#define COMPATIBLE_WIN_FORMAT -#endif -#if defined(COMPATIBLE_WIN_FORMAT) -/* in windows platform, can't use optimized function for there is no __builtin_constant_p like function */ -/* If need optimized macro, can define this: #define __builtin_constant_p(x) 1 */ -#ifdef WITH_PERFORMANCE_ADDONS -#undef WITH_PERFORMANCE_ADDONS -#endif -#endif - -#if (defined(__VXWORKS__) \ - || defined(__vxworks) \ - || defined(__VXWORKS) \ - || defined(_VXWORKS_PLATFORM_) \ - || defined(SECUREC_VXWORKS_VERSION_5_4)) -#if !defined(SECUREC_VXWORKS_PLATFORM) -#define SECUREC_VXWORKS_PLATFORM -#endif -#endif - -#ifdef SECUREC_VXWORKS_PLATFORM -#include -#endif - -/* if enable COMPATIBLE_LINUX_FORMAT, the output format will be compatible to Linux. */ -#if !(defined(COMPATIBLE_WIN_FORMAT) || defined(SECUREC_VXWORKS_PLATFORM)) -#define COMPATIBLE_LINUX_FORMAT -#endif -#ifdef COMPATIBLE_LINUX_FORMAT -#include -#endif - -#if defined(__GNUC__) && !defined(WIN32) -#define SECUREC_ATTRIBUTE(x, y) __attribute__((format(printf, (x), (y)))) -#else -#define SECUREC_ATTRIBUTE(x, y) -#endif -/* above 3.4 */ -#if defined(__GNUC__) && ((__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 3))) - long __builtin_expect(long exp, long c); -#define LIKELY(x) __builtin_expect(!!(x), 1) -#define UNLIKELY(x) __builtin_expect(!!(x), 0) -#else -#define LIKELY(x) (x) -#define UNLIKELY(x) (x) -#endif - -#ifndef TWO_MIN -#define TWO_MIN(a, b) ((a) < (b) ? (a) : (b)) -#endif - -#define WCHAR_SIZE sizeof(wchar_t) - -/* ref //sourceforge.net/p/predef/wiki/OperatingSystems/ -#if !(defined(__hpux) \ - || defined(_AIX) \ - || defined(__VXWORKS__) \ - || defined(__vxworks) \ - ||defined(__ANDROID__) \ - || defined(__WRLINUX__) \ - || defined(_TYPE_uint8_t)) -typedef unsigned char unit8_t; -#endif -*/ -typedef signed char INT8T; -typedef unsigned char UINT8T; - -#if defined(COMPATIBLE_WIN_FORMAT) || defined(__ARMCC_VERSION) -typedef __int64 INT64T; -typedef unsigned __int64 UINT64T; -#if defined(__ARMCC_VERSION) -typedef int INT32T; -typedef unsigned int UINT32T; -#else -typedef __int32 INT32T; -typedef unsigned __int32 UINT32T; -#endif -#else -typedef int INT32T; -typedef unsigned int UINT32T; -typedef long long INT64T; -typedef unsigned long long UINT64T; -#endif - -/* define the max length of the string */ -#define SECUREC_STRING_MAX_LEN (0x7fffffffUL) -#define SECUREC_WCHAR_STRING_MAX_LEN (SECUREC_STRING_MAX_LEN / WCHAR_SIZE) - -/* add SECUREC_MEM_MAX_LEN for memcpy and memmove */ -#define SECUREC_MEM_MAX_LEN (0x7fffffffUL) -#define SECUREC_WCHAR_MEM_MAX_LEN (SECUREC_MEM_MAX_LEN / WCHAR_SIZE) - -#if SECUREC_STRING_MAX_LEN > 0x7fffffff -#error "max string is 2G, or you may remove this macro" -#endif - -#if (defined(__GNUC__ ) && defined(__SIZEOF_POINTER__ )) -#if (__SIZEOF_POINTER__ != 4) && (__SIZEOF_POINTER__ != 8) -#error "unsupported system, contact Security Design Technology Department of 2012 Labs" -#endif -#endif - -#define IN_REGISTER register - -#define SECC_MALLOC(x) malloc((size_t)(x)) -#define SECC_FREE(x) free((void *)(x)) - -#if defined(_WIN64) || defined(WIN64) || defined(__LP64__) || defined(_LP64) -#define SECUREC_ON_64BITS -#endif - -#if (!defined(SECUREC_ON_64BITS) && defined(__GNUC__ ) && defined(__SIZEOF_POINTER__ )) -#if __SIZEOF_POINTER__ == 8 -#define SECUREC_ON_64BITS -#endif -#endif - -#if defined(__SVR4) || defined(__svr4__) -#define __SOLARIS -#endif - -#if (defined(__hpux) || defined(_AIX) || defined(__SOLARIS)) -#define __UNIX -#endif - -#if ((!defined(SECUREC_SUPPORT_STRTOLD)) && defined(COMPATIBLE_LINUX_FORMAT)) -#if defined(__USE_ISOC99) \ - || (defined(_AIX) && defined(_ISOC99_SOURCE)) \ - || (defined(__hpux) && defined(__ia64)) \ - || (defined(__SOLARIS) && (!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX)) \ - || defined(_STDC_C99) \ - || defined(__EXTENSIONS__)) -#define SECUREC_SUPPORT_STRTOLD -#endif -#endif -#if ((defined(SECUREC_WRLINUX_BELOW4) || defined(_WRLINUX_BELOW4_)) && defined(SECUREC_SUPPORT_STRTOLD)) -#undef SECUREC_SUPPORT_STRTOLD -#endif - -#if defined(WITH_PERFORMANCE_ADDONS) - /* for strncpy_s performance optimization */ -#define STRNCPY_SM(dest, destMax, src, count) \ - ((NULL != (void*)dest && NULL != (void*)src && (size_t)destMax > 0 \ - && (((UINT64T)(destMax) & (UINT64T)(-2)) < SECUREC_STRING_MAX_LEN) \ - && (TWO_MIN(count, strlen(src)) + 1) <= (size_t)destMax) ? \ - ((count < strlen(src))? (memcpy(dest, src, count), *((char*)dest + count) = '\0', EOK) : \ - (memcpy(dest, src, strlen(src) + 1), EOK)) :(strncpy_error(dest, destMax, src, count))) - -#define STRCPY_SM(dest, destMax, src) \ - ((NULL != (void*)dest && NULL != (void*)src \ - && (size_t)destMax > 0 \ - && (((UINT64T)(destMax) & (UINT64T)(-2)) < SECUREC_STRING_MAX_LEN) \ - && (strlen(src) + 1) <= (size_t)destMax) ? \ - (memcpy(dest, src, strlen(src) + 1), EOK) : \ - (strcpy_error(dest, destMax, src))) - - /* for strcat_s performance optimization */ -#if defined(__GNUC__) -#define STRCAT_SM(dest, destMax, src) \ - ({ int catRet =EOK; \ - if (NULL != (void*)dest \ - && NULL != (void*)src \ - && (size_t)(destMax) >0 \ - && (((UINT64T)(destMax) & (UINT64T)(-2)) < SECUREC_STRING_MAX_LEN)) { \ - char* pCatTmpDst = (dest); \ - size_t catRestSz = (destMax); \ - do { \ - while (catRestSz > 0 && *pCatTmpDst) { \ - ++pCatTmpDst; \ - --catRestSz; \ - } \ - if (catRestSz == 0) { \ - catRet = EINVAL; \ - break; \ - } \ - if ((strlen(src) + 1) <= catRestSz) { \ - memcpy(pCatTmpDst, (src), strlen(src) + 1); \ - catRet = EOK; \ - } else { \ - catRet = ERANGE; \ - } \ - } while (0); \ - if (EOK != catRet) catRet = strcat_s((dest), (destMax), (src)); \ - } else { \ - catRet = strcat_s((dest), (destMax), (src)); \ - } \ - catRet;}) -#else -#define STRCAT_SM(dest, destMax, src) strcat_s(dest, destMax, src) -#endif - - /* for strncat_s performance optimization */ -#if defined(__GNUC__) -#define STRNCAT_SM(dest, destMax, src, count) \ - ({ int ncatRet = EOK; \ - if (NULL != (void*)dest && NULL != (void*)src \ - && (size_t)destMax > 0 \ - && (((UINT64T)(destMax) & (UINT64T)(-2)) < SECUREC_STRING_MAX_LEN) \ - && (((UINT64T)(count) & (UINT64T)(-2)) < SECUREC_STRING_MAX_LEN)) { \ - char* pCatTmpDest = (dest); \ - size_t ncatRestSz = (destMax); \ - do { \ - while (ncatRestSz > 0 && *pCatTmpDest) { \ - ++pCatTmpDest; \ - --ncatRestSz; \ - } \ - if (ncatRestSz == 0) { \ - ncatRet = EINVAL; \ - break; \ - } \ - if ((TWO_MIN((count), strlen(src)) + 1) <= ncatRestSz) { \ - if ((count) < strlen(src)) { \ - memcpy(pCatTmpDest, (src), (count)); \ - *(pCatTmpDest + (count)) = '\0'; \ - } else { \ - memcpy(pCatTmpDest, (src), strlen(src) + 1); \ - } \ - } else { \ - ncatRet = ERANGE; \ - } \ - } while (0); \ - if (EOK != ncatRet) ncatRet = strncat_s((dest), (destMax), (src), (count)); \ - } else { \ - ncatRet = strncat_s((dest), (destMax), (src), (count)); \ - } \ - ncatRet;}) -#else -#define STRNCAT_SM(dest, destMax, src, count) strncat_s(dest, destMax, src, count) -#endif - - /* - MEMCPY_SM do NOT check buffer overlap by default, or you can add this check to improve security - condCheck = condCheck || (dest == src) || (dest > src && dest < (void*)((UINT8T*)src + count));\ - condCheck = condCheck || (src > dest && src < (void*)((UINT8T*)dest + count)); \ - */ - -#define MEMCPY_SM(dest, destMax, src, count) \ - (!(((size_t)destMax== 0 ) \ - || (((UINT64T)(destMax) & (UINT64T)(-2)) > SECUREC_MEM_MAX_LEN) \ - || ((size_t)count > (size_t)destMax) \ - || (NULL == (void*)dest) \ - || (NULL == (void*)src)) ? (memcpy(dest, src, count), EOK) : (memcpy_s(dest, destMax, src, count))) - -#define MEMSET_SM(dest, destMax, c, count) \ - (!(((size_t)destMax == 0 ) \ - || (((UINT64T)(destMax) & (UINT64T)(-2)) > SECUREC_MEM_MAX_LEN) \ - || (NULL == (void*)dest) \ - || ((size_t)count > (size_t)destMax)) ? (memset(dest, c, count), EOK) : (memset_s(dest, destMax, c, count))) - -#endif /* WITH_PERFORMANCE_ADDONS */ - -/* 20150105 For software and hardware decoupling,such as UMG */ -#ifdef SECUREC_SYSAPI4VXWORKS -#ifdef feof -#undef feof -#endif -extern int feof(FILE *stream); - -#ifndef isspace -#define isspace(c) (((c) == ' ') || ((c) == '\t') || ((c) == '\r') || ((c) == '\n')) -#endif -#ifndef isascii -#define isascii(c) (((unsigned char)(c))<=0x7f) -#endif -#ifndef isupper -#define isupper(c) ((c) >= 'A' && (c) <= 'Z') -#endif -#ifndef islower -#define islower(c) ((c) >= 'a' && (c) <= 'z') -#endif -#ifndef isalpha -#define isalpha(c) (isupper(c) || (islower(c))) -#endif -#ifndef isdigit -#define isdigit(c) ((c) >= '0' && (c) <= '9') -#endif -#ifndef isxdigit -#define isxupper(c) ((c) >= 'A' && (c) <= 'F') -#define isxlower(c) ((c) >= 'a' && (c) <= 'f') -#define isxdigit(c) (isdigit(c) || isxupper(c) ||isxlower(c)) -#endif -#endif - -#endif /* __SECURECTYPE_H__A7BBB686_AADA_451B_B9F9_44DACDAE18A7 */ diff --git a/enclave/qtsm-sdk-c/samples/lib/build.sh b/enclave/qtsm-sdk-c/samples/lib/build.sh deleted file mode 100644 index 7a7c948..0000000 --- a/enclave/qtsm-sdk-c/samples/lib/build.sh +++ /dev/null @@ -1,144 +0,0 @@ -#!/bin/bash -#Usage: build.sh packageName release|debug -#----------------------- variables --------------------# - -G_CWD=`dirname $0` -pushd $G_CWD >/dev/null -G_CWD=`pwd` -popd >/dev/null - -G_FILE_NAME=$0 -G_BUILD_OPTION=release -G_BUILD_DIR=${G_CWD} -g_PATH=build - -G_SECUREC_PATH=$G_CWD/../../../platform/huaweisecurec -G_THIRTY_DIR=$G_CWD/../../../build/script/Provider -L_THIRTY_DIR=../../../build/script/Provider -G_PLATFORM=$G_CWD/../../../platform/ -#----------------------- functions ---------------------# -L_PACKAGE_NAME=$1 -L_PRODUCT_TYPE=`echo $2 | tr A-Z a-z` -L_PRODUCT=`echo $3 | tr A-Z a-z` - -if [ "debug" == "$2" ];then - G_BUILD_OPTION=debug - export DEBUG=debug -fi - -export openssl_version=openssl-1.1.1k -export curl_version=curl-7.78.0 -export pcre_version=pcre-8.45 -export iconv_version=iconv-1.15 -export libxml2_version=libxml2-2.9.9 - -# **************************************************************************** # -# Function Name: ifFailExitAndPrint -# Description: -# Parameter: $1 command exec result code $2 description -# Return: none -# **************************************************************************** # -ifFailExitAndPrint() -{ - if [ "0" != "$1" ] ;then - echo "$2" - exit 1 - fi -} - -# **************************************************************************** # -# Function Name: compileThirty -# Description: -# Parameter: $1 SLPAgentĿ¼ -# Return: non -# **************************************************************************** # -compileThirty() -{ - eval 'L_TMP_THIRTY_DIR=${'$1'}' - if [ ! -d ${G_THIRTY_DIR} ];then - echo "no such diretory ${L_TMP_THIRTY_DIR}." - exit 1 - fi - - cd ${L_TMP_THIRTY_DIR} - if [ "build_ci" != "$L_PRODUCT" ];then - bash build_logAPI_staic.sh - ifFailExitAndPrint $? "make failed." - - bash build_pcre.sh - ifFailExitAndPrint $? "make failed." - - bash build_openssl.sh - ifFailExitAndPrint $? "make failed." - - bash build_iconv.sh - ifFailExitAndPrint $? "make failed." - - bash build_libxml2.sh - ifFailExitAndPrint $? "make failed." - - bash build_curl.sh - ifFailExitAndPrint $? "make failed." - - fi - cd ${G_BUILD_DIR} -} - - -popd >/dev/null - -make clean -mkdir cmake-build -cd cmake-build -mkdir cmake -cd cmake -cmake $G_CWD/../../../ -DCMAKE_BUILD_TYPE=Release -make -cd ../../ - - -if [ -d demo ];then - rm -rf demo -fi -if [ -d include ];then - rm -rf include -fi -if [ -d lib ];then - rm -rf lib -fi -mkdir demo -mkdir include -mkdir lib - -mkdir demo_static -mkdir include_static -mkdir lib_static - -if [ "$G_BUILD_OPTION" == "debug" ];then -g_PATH=build-debug -fi - - -cp -f inc/eSDKOBS.h include -cp -f cmake-build/cmake/lib/*.so lib -cp -f ./../../../platform/huaweisecurec/include/* include -cp -f ./../../../platform/huaweisecurec/lib/libsecurec.so lib -cp -af ./../../../platform/eSDK_LogAPI_V2.1.10/C/linux_64/libeSDKLogAPI.so lib -cp -af ./../../../platform/eSDK_LogAPI_V2.1.10/C/linux_64/liblog4cpp* lib -cp -af ./../../../build/script/Provider/build/linux/${curl_version}/lib/* lib -cp -af ./../../../build/script/Provider/build/linux/${libxml2_version}/lib/* lib -cp -af ./../../../build/script/Provider/build/linux/${openssl_version}/lib/* lib -cp -af ./../../../build/script/Provider/build/linux/${pcre_version}/lib/* lib -cp -af ./../../../build/script/Provider/build/linux/${iconv_version}/lib/* lib -cp -f Makefile_obs demo/Makefile -cp -f OBS.ini lib -cp -f "./../../../source/eSDK_OBS_API/eSDK_OBS_API_C++_Demo/object_test.c" demo/object_test.c -cp -f "./../../../source/eSDK_OBS_API/eSDK_OBS_API_C++_Demo/demo.c" demo/demo.c -cp -f "./../../../source/eSDK_OBS_API/eSDK_OBS_API_C++_Demo/demo_common.c" demo/demo_common.c -cp -f "./../../../source/eSDK_OBS_API/eSDK_OBS_API_C++_Demo/demo_common.h" demo/demo_common.h -cp -f cert/client.pem demo/client.pem -cp -f cert/client.pem lib/client.pem -tar zcvf ${L_PACKAGE_NAME}.tgz demo include lib readme.txt - -rm -rf {demo,include,lib,"Log Collection Statement.txt"} -rm -rf {demo_static,include_static,lib_static,"Log Collection Statement.txt"} \ No newline at end of file diff --git a/enclave/qtsm-sdk-c/samples/scripts/build_img.sh b/enclave/qtsm-sdk-c/samples/scripts/build_img.sh index 94cbc0f..59704d0 100644 --- a/enclave/qtsm-sdk-c/samples/scripts/build_img.sh +++ b/enclave/qtsm-sdk-c/samples/scripts/build_img.sh @@ -1,24 +1,40 @@ #!/bin/bash - +set -e CUR_DIR=$(pwd) -QT_DIR=${CUR_DIR}/../../.. - -pushd ${QT_DIR} > /dev/null +TOP_DIR=${CUR_DIR}/../../../../.. +echo ${TOP_DIR} +pushd ${TOP_DIR} > /dev/null -cp ${QT_DIR}/qtsm-sdk-c/samples/Dockerfile.sdk . -mkdir -p rpm && cd rpm -wget https://repo.huaweicloud.com/hce/2.0/updates/x86_64/Packages/libcbor-0.10.2-0.hce2.x86_64.rpm -wget https://repo.huaweicloud.com/hce/2.0/os/x86_64/Packages/cjson-1.7.15-1.hce2.x86_64.rpm -wget https://repo.huaweicloud.com/hce/2.0/os/x86_64/Packages/cjson-devel-1.7.15-1.hce2.x86_64.rpm -wget https://repo.huaweicloud.com/hce/2.0/debuginfo/x86_64/Packages/libcbor-devel-0.10.2-0.hce2.x86_64.rpm -wget https://repo.huaweicloud.com/hce/2.0/debuginfo/x86_64/Packages/libqtsm-devel-1.0.0-3.hce2.x86_64.rpm -wget https://repo.huaweicloud.com/euler/2.9/os/x86_64/updates/json-c-0.13.1-7.h3.eulerosv2r9.x86_64.rpm -wget https://repo.huaweicloud.com/euler/2.9/os/x86_64/updates/json-c-devel-0.13.1-7.h3.eulerosv2r9.x86_64.rpm -cd .. -wget https://github.com/huaweicloud/huaweicloud-sdk-c-obs/archive/refs/tags/v3.21.8.tar.gz +cp ${TOP_DIR}/huawei-qingtian/enclave/qtsm-sdk-c/samples/Dockerfile.sdk . docker build -f Dockerfile.sdk -t ubuntusdk . -rm ./Dockerfile.sdk -rm -rf huaweicloud-sdk-c-obs-3.21.8.tar.gz -qt enclave make-img --docker-uri ubuntusdk --eif ${CUR_DIR}/sdkdecrypt.eif -rm -rf ./rpm +qt enclave make-img --docker-uri ubuntusdk --eif ${TOP_DIR}/sdkdecrypt.eif + +cd ${TOP_DIR} +# get vsock client to login into the enclave for debuging +git clone https://github.com/stefanha/nc-vsock.git +cd nc-vsock && make + +# buildup the qproxy to redirect the network packages from the enclave's obsutil +cd ${TOP_DIR}/huawei-qingtian/qingtian-tools/qproxy +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y +source $HOME/.cargo/env +cargo build --release + +# install jq to get the obs endpoint +yum install jq -y +OBSEndpoint=$(jq -r '.Endpoint.OBSEndpoint' ${TOP_DIR}/huawei-qingtian/enclave/qtsm-sdk-c/samples/src/config.json) +echo ${OBSEndpoint} +sed -i "5s/.*/hostname = \"${OBSEndpoint}\"/" ${TOP_DIR}/huawei-qingtian/enclave/qtsm-sdk-c/samples/scripts/config.toml + +# launch the enclave +qt enclave start --cpus 2 --mem 8192 --eif ${TOP_DIR}/sdkdecrypt.eif --cid 4 +# launch the qt-proxy for redirecting the kms-api network packages +VsockPort=$(jq -r '.VsockSetting.VsockPort' ${TOP_DIR}/huawei-qingtian/enclave/qtsm-sdk-c/samples/src/config.json) +KmsEndpoint=$(jq -r '.Endpoint.KMSEndpoint' ${TOP_DIR}/huawei-qingtian/enclave/qtsm-sdk-c/samples/src/config.json) +/usr/local/bin/qingtian/enclave/qt_proxy -l ${VsockPort} -a ${KmsEndpoint} -p 443 & + +# launch the qproxy host +# sleep(100) +# ${TOP_DIR}/huawei-qingtian/qingtian-tools/qproxy/target/release/qproxy host --config ${TOP_DIR}/huawei-qingtian/enclave/qtsm-sdk-c/samples/src/config.toml 4 & + popd > /dev/null \ No newline at end of file diff --git a/enclave/qtsm-sdk-c/samples/scripts/config.toml b/enclave/qtsm-sdk-c/samples/scripts/config.toml new file mode 100644 index 0000000..7d3e7fd --- /dev/null +++ b/enclave/qtsm-sdk-c/samples/scripts/config.toml @@ -0,0 +1,23 @@ +[[outbound_connections]] +# The hostname to forward traffic to +# +# Can also be an IP address +hostname = "obs.xxxxxx.myhuaweicloud.com" +# The port inside the enclave to use +# +# Must be unique and not conflict with qproxy ports (9999 and 9966 by default) +vsock_port = 6666 +# The port of the server to forward traffic to (connections will be made to +# hostname:port) +# +# The same port will be exposed inside the enclave +# +# Must not conflict with qproxy ports (8080 by default) +tcp_port = 443 + +[log_location] +host_log = "host.log" # qproxy host log name, e.g./var/log/qproxy/host.log +enclave_log = "enclave.log" # qproxy enclave log name, e.g./var/log/qproxy/enclave.log +log_level = "debug" # qproxy logger level, e.g. "off", "info", "warn", "error", "debug", "trace" +host_log_dir = "/var/log/qproxy" # qproxy host log dir, and its default value is "/var/log/qproxy" +enclave_log_dir = "/var/log/qproxy" # qproxy enclave log dir, and its default value is "/var/log/qproxy" diff --git a/enclave/qtsm-sdk-c/samples/src/config.json b/enclave/qtsm-sdk-c/samples/src/config.json index 954148a..b1f9d81 100644 --- a/enclave/qtsm-sdk-c/samples/src/config.json +++ b/enclave/qtsm-sdk-c/samples/src/config.json @@ -1,20 +1,20 @@ { "IAM":{ - "AK":"FAHWEXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", - "SK":"7RqQV7kXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", - "KeyId" : "dd0b5b30-XXXXXXXXXXXXXXXXXXXXXXXXXXX", - "ProjectId" : "06057XXXXXXXXXXXXXXXXXXXXXXXXXXX" - }, - "FileName":{ - "Ciphertext": "ciphertext", - "Plaintext" : "plaintext", - "OBSBucket" : "bank-password" + "AK":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + "SK":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + "KeyId" : "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + "ProjectId" : "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, "Endpoint": { - "KMSEndpoint" : "kms.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", - "OBSEndpoint" : "obs.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" + "KMSEndpoint" : "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + "OBSEndpoint" : "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, "VsockSetting":{ - "VsockPort": "8000" + "VsockPort": "8000" + }, + "FileKeys":{ + "Ciphertext": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + "Plaintext" : "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + "BucketName" : "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" } -} +} \ No newline at end of file diff --git a/enclave/qtsm-sdk-c/samples/src/enclave.c b/enclave/qtsm-sdk-c/samples/src/enclave.c index ccbdf0a..d758529 100644 --- a/enclave/qtsm-sdk-c/samples/src/enclave.c +++ b/enclave/qtsm-sdk-c/samples/src/enclave.c @@ -31,326 +31,172 @@ #include "getopt.h" #endif -#include "eSDKOBS.h" -#include "obs_demo_common.h" -#include "securec.h" -#include "enclave_proxy.h" - #include "kms.h" #include "qtsm_lib.h" #include "attestation.h" -#define CIPHERTEXT_FILE "/root/text" -#define PLAINTEXT_LENGTH 1000 +#include "enclave_proxy.h" +#define CIPHERTEXT_FILE "/home/test/ciphertext" +#define PLAINTEXT_FILE "/home/test/plaintext" #define PARENT_CID 3 #define ENCLAVE_DEMO_BIN "enclave_demo_bin" -#define OBS_MAX_COUNT 10 #define ARGS_NUM 11 #define VSOCK_PORT_SHIFT 2 #define PLAINTEXT_KEY_LENGTH 128 +#define CIPHERTEXT_LEN 1024 +#define PLAINTEXT_LEN 1024 +#define MAX_SOCKET_PATH_LEN 128 static int vsock_port; -static char plaintext_key[PLAINTEXT_KEY_LENGTH]; - -struct ObsObject { - char *key; - unsigned char *buffer; - unsigned int buffer_size; - int is_get; - int vsock_cid; - int vsock_port; -}; - -struct ProcessedData { - char *data; - int data_len; -}; - -struct KmsInfo { - int vsock_cid; - int vsock_port; - char *endpoint; - char *project_id; - char *key_id; -}; - -static int test_get_object(char *key) -{ - obs_object_info object_info; - obs_options option; - get_object_callback_data data; - obs_get_conditions getcondition; - int rc = 0; - - init_obs_options(&option); - - memset_s(&getcondition, sizeof(getcondition), 0, sizeof(obs_get_conditions)); - init_get_properties(&getcondition); - - option.bucket_options.host_name = HOST_NAME; - option.bucket_options.bucket_name = BUCKET_NAME; - option.bucket_options.access_key = ACCESS_KEY_ID; - option.bucket_options.secret_access_key = SECRET_ACCESS_KEY; - - memset_s(&object_info, sizeof(object_info), 0, sizeof(obs_object_info)); - object_info.key = key; - - data.ret_status = OBS_STATUS_BUTT; - data.outfile = write_to_file(CIPHERTEXT_FILE); - - // The starting position of the reading - getcondition.start_byte = 0; - // Read length, default is 0: read to the end of the object - obs_get_object_handler get_object_handler = { - {&get_properties_callback, &get_object_complete_callback}, - &get_object_data_callback - }; - - get_object(&option, &object_info, &getcondition, 0, &get_object_handler, &data); - if (OBS_STATUS_OK == data.ret_status) { - printf("get %s object successfully.\n", key); - rc = 0; - } else { - printf("get %s object faied(%s).\n", key, obs_get_status_name(data.ret_status)); - rc = -1; +static sig_str_t global_ak; +static sig_str_t global_sk; +static sig_str_t global_endpoint; +static sig_str_t global_uri_prefix; +static sig_str_t global_key_id; +static sig_str_t global_socket_path; +static sig_params_t global_params; +keyid_handle_t global_handle; + +static int get_ciphertext(char *buffer, size_t buf_size, const char *filepath) { + if (!buffer || buf_size == 0 || !filepath) { + fprintf(stderr, "Invalid parameters\n"); + return -1; } - fclose(data.outfile); - return rc; -} -static int test_put_object_from_buffer(struct ObsObject *obs_object) -{ - obs_options option; - obs_put_properties put_properties; - put_buffer_object_callback_data data; - int rc = 0; - // Initialize option - init_obs_options(&option); - // Initialize upload object properties - init_put_properties(&put_properties); - option.bucket_options.host_name = HOST_NAME; - option.bucket_options.bucket_name = BUCKET_NAME; - option.bucket_options.access_key = ACCESS_KEY_ID; - option.bucket_options.secret_access_key = SECRET_ACCESS_KEY; + FILE *fp = fopen(filepath, "rb"); + if (!fp) { + perror("Failed to open file"); + return -1; + } - // Initialize the structure that stores the uploaded data - memset_s(&data, sizeof(data), 0, sizeof(put_buffer_object_callback_data)); - // Assign buffer to the uploaded data structure - data.put_buffer = obs_object->buffer; - // set buffersize - data.buffer_size = obs_object->buffer_size; + fseek(fp, 0, SEEK_END); + long file_size = ftell(fp); + rewind(fp); - // Set callback function - obs_put_object_handler putobjectHandler = { - { &response_properties_callback, &put_buffer_complete_callback}, - &put_buffer_data_callback - }; + if (file_size > (long)buf_size - 1) { + fprintf(stderr, "Buffer too small (need %ld bytes)\n", file_size); + fclose(fp); + return -1; + } - put_object(&option, obs_object->key, obs_object->buffer_size, &put_properties, 0, &putobjectHandler, &data); - if (OBS_STATUS_OK == data.ret_status) { - printf("put object %s from buffer successfully.\n", obs_object->key); - rc = 0; - } else { - printf("put object %s from buffer failed(%s).\n", obs_object->key, obs_get_status_name(data.ret_status)); - rc = -1; + size_t read_size = fread(buffer, 1, buf_size - 1, fp); + if (ferror(fp)) { + perror("Read error"); + fclose(fp); + return -1; } - return rc; + + buffer[read_size] = '\0'; + fclose(fp); + return (int)read_size; } -static int test_interact_with_obs(struct ObsObject *obs_object) +static int setup_qt_proxy(struct connect_info *conn, int vsock_cid, int vsock_port) { - struct connect_info conn = {0}; int rc; - memset_s(&conn, sizeof(conn), 0, sizeof(struct connect_info)); - /*------ obs init------*/ - obs_initialize(OBS_INIT_ALL); - set_online_request_max_count(OBS_MAX_COUNT); - /* setup proxy */ - rc = setup_proxy(&conn, obs_object->vsock_cid, obs_object->vsock_port); + rc = setup_proxy(conn, vsock_cid, vsock_port); if (rc != PX_NO_ERROR) { - printf("setup_proxy obs error. rc is %d\n", rc); - goto err_conn; + printf("setup_proxy in kms decryption error\n"); + return -1; } + return 0; +} - if (obs_object->is_get & 1) { - rc = test_get_object(obs_object->key); - } else { - rc = test_put_object_from_buffer(obs_object); +static int write_string_to_file(const char *buff, const char *filepath) { + if (!buff || !filepath) { + fprintf(stderr, "Invalid parameters\n"); + return -1; } - close_proxy(&conn); -err_conn: - obs_deinitialize(); - return rc; -} - -static int read_ciphertext_from_file(struct ProcessedData *ciphertext_data) -{ - FILE *fp; - int rc; - int len; + size_t data_size = strlen(buff); - fp = fopen(CIPHERTEXT_FILE, "r"); - if (fp == NULL) { - printf("fopen ciphertext err"); + FILE *fp = fopen(filepath, "wb"); + if (!fp) { + perror("Failed to open file"); return -1; } - fseek(fp, 0, SEEK_END); - len = ftell(fp); - if (len < 0 || len > INT_MAX) { - printf("invalid ciphertext"); - rc = -1; - goto fclose_fp; - } - ciphertext_data->data_len = len; - rewind(fp); - ciphertext_data->data = (char *)malloc((ciphertext_data->data_len + 1) * sizeof(char)); - if (!ciphertext_data->data) { - printf("malloc ciphertext_data error\n"); - rc = -1; - goto fclose_fp; - } - memset_s(ciphertext_data->data, (ciphertext_data->data_len + 1) * sizeof(char), 0, - (ciphertext_data->data_len + 1) * sizeof(char)); - rc = fread(ciphertext_data->data, 1, ciphertext_data->data_len * sizeof(char), fp); - if (rc != len) { - printf("fread ciphertext from ciphertext error\n"); - goto free_ciphertext_data_data; - } - printf("%s\n", ciphertext_data->data); + size_t written = fwrite(buff, 1, data_size, fp); fclose(fp); - return 0; -free_ciphertext_data_data: - if (ciphertext_data->data) { - free(ciphertext_data->data); - ciphertext_data->data = NULL; + + if (written != data_size) { + fprintf(stderr, "Write incomplete\n"); + return -1; } -fclose_fp: - fclose(fp); - return rc; + + return (int)written; } -static unsigned long test_kms_decrypt_data(sig_params_t params, keyid_handle_t handle, - const struct ProcessedData *ciphertext, struct ProcessedData *plaintext) +static unsigned long test_kms_decrypt_data() { plain_cipher_buff_t data_buffer = {0}; unsigned long status; - unsigned int i; - data_buffer.data_in = ciphertext->data; - data_buffer.data_in_len = ciphertext->data_len; - data_buffer.data_out = plaintext->data; - data_buffer.data_out_len = &(plaintext->data_len); + int rc; + size_t data_len = PLAINTEXT_LEN; + size_t tmp_data_len; + struct connect_info conn = {0}; + char ciphertextdata[CIPHERTEXT_LEN] = {0}; + char plaintextdata[PLAINTEXT_LEN] = {0}; + + /* Step1: setup qt_proxy, */ + if ((rc = setup_qt_proxy(&conn, PARENT_CID, vsock_port)) != 0) + return -1; + + /* Step2: read ciphertext */ + tmp_data_len = get_ciphertext(ciphertextdata, CIPHERTEXT_LEN, CIPHERTEXT_FILE); + if (tmp_data_len < 0) { + printf("read ciphertext from file error in test_kms_decrpyt. \n"); + rc = -1; + goto close_proxy; + } + + data_buffer.data_in = ciphertextdata; + data_buffer.data_in_len = strlen(ciphertextdata); + data_buffer.data_out = plaintextdata; + data_buffer.data_out_len = &data_len; printf("\n***********kms input **************\n"); - printf("data_in: %s \n data_in_len : %d\n data_out: %s\n data_out_len:%d\n", - data_buffer.data_in, data_buffer.data_in_len, data_buffer.data_out, data_buffer.data_out_len); + printf("data_in: %s \n data_in_len : %d\n data_out: %s\n data_out_len:%u\n", + data_buffer.data_in, data_buffer.data_in_len, data_buffer.data_out, *(data_buffer.data_out_len)); printf("************kms input end ************\n"); - /* call kms_decrypt_data api */ - status = kms_decrypt_data_blocking(¶ms, &handle, &data_buffer); + /* Step3: decrypt ciphertext*/ + status = kms_decrypt_data_blocking(&global_params, &global_handle, &data_buffer); if (status == KMS_SUCCESS) { printf("plain_data_len is %u\n", *(data_buffer.data_out_len)); - for (i = 0; i < *(data_buffer.data_out_len); i++) + for (unsigned int i = 0; i < *(data_buffer.data_out_len); i++) printf("%c", data_buffer.data_out[i]); printf("\n"); + } else { + rc = -1; + printf("Status: %ld\n", status); + goto close_proxy; } - return status; -} - -static int test_kms_decrypt(struct KmsInfo *kms_info, struct ProcessedData *plaintext_data) -{ - int rc; - struct connect_info conn; - sig_params_t params; - keyid_handle_t handle; - unsigned long status; - struct ProcessedData *ciphertext_data; - - /* get ciphertext from text file */ - ciphertext_data = malloc(sizeof(struct ProcessedData)); - if (!ciphertext_data) { - printf("alloc memory for ciphertext_data error. \n"); - return -1; - } - rc = read_ciphertext_from_file(ciphertext_data); - if (rc < 0) { + tmp_data_len = write_string_to_file(plaintextdata, PLAINTEXT_FILE); + if (tmp_data_len < 0) { printf("read ciphertext from file error in test_kms_decrpyt. \n"); - goto free_ciphertext_data; - } - - /* decrypt the ciphertext invoking kms decrypt api */ - rc = NO_ERROR; - sig_params_init(¶ms); - sig_str_t ak = sig_str(ACCESS_KEY_ID); - sig_str_t sk = sig_str(SECRET_ACCESS_KEY); - sig_str_t host = sig_str(kms_info->endpoint); - sig_str_t uri_prefix = sig_str(kms_info->project_id); - /* Set sign params */ - params.key = ak; - params.secret = sk; - params.host = host; - params.uri_prefix = uri_prefix; - /* Set key_id */ - handle.key_id = kms_info->key_id; - handle.len = strlen(kms_info->key_id); - - /* setup proxy */ - memset_s(&conn, sizeof(conn), 0, sizeof(struct connect_info)); - rc = setup_proxy(&conn, kms_info->vsock_cid, kms_info->vsock_port); - if (rc != PX_NO_ERROR) { - printf("setup_proxy in kms decryption error.\n"); rc = -1; - goto free_ciphertext_data; + goto close_proxy; } - /* test decrypt data api */ - status = test_kms_decrypt_data(params, handle, ciphertext_data, plaintext_data); - if (status != KMS_SUCCESS) { - printf("invoking kms decrypt api err: %ld.\n", status); - rc = -1; - } -close_conn: +close_proxy: close_proxy(&conn); -free_ciphertext_data: - free(ciphertext_data); return rc; } static void help() { printf("%s [-p vsock_port] [-a ak] [-s sk] \n " \ - "[-c ciphertext_key] [-l plaintext_key] [-b bucket_name] \n" \ - "[-k key_id] [-m kms_endpoint] [-o obs_endpoint] [-j project_id] \n", ENCLAVE_DEMO_BIN); + "[-k key_id] [-m kms_endpoint] [-j project_id] \n", ENCLAVE_DEMO_BIN); } -static int get_ciphertext(struct ObsObject *obs_object) -{ - int rc; - obs_object->is_get = 1; - obs_object->vsock_cid = PARENT_CID; - obs_object->vsock_port = vsock_port; - rc = test_interact_with_obs(obs_object); - if (rc < 0) { - printf("get ciphertext from obs error\n"); - } - return rc; -} - -static int invoke_kms_decryption(struct KmsInfo *kms_info, struct ProcessedData *plaintext_data) +static void convert_sig_str(char *data, sig_str_t *pa) { - int rc; - - kms_info->vsock_cid = PARENT_CID; - kms_info->vsock_port = vsock_port + 1; - rc = test_kms_decrypt(kms_info, plaintext_data); - if (rc < 0) { - printf("kms_decrpt error\n"); - } - return rc; + pa->data = data; + pa->len = strlen(data); } -static int process_input(int argc, char **argv, struct KmsInfo *kms_info, struct ObsObject *obs_object) +static int process_input(int argc, char **argv, sig_params_t *params, keyid_handle_t *handle) { int rc = 0; int c; @@ -359,17 +205,13 @@ static int process_input(int argc, char **argv, struct KmsInfo *kms_info, struct {"vsock_port", required_argument, 0, 'p'}, {"ak", required_argument, 0, 'a'}, {"sk", required_argument, 0, 's'}, - {"ciphertext_key", required_argument, 0, 'c'}, - {"plaintext_key", required_argument, 0, 'l'}, - {"bucket_name", required_argument, 0, 'b'}, {"key_id", required_argument, 0, 'k'}, {"kms_endpoint", required_argument, 0, 'm'}, - {"obs_endpoint", required_argument, 0, 'o'}, {"project_id", required_argument, 0, 'j'}, {0, 0, 0, 0} }; - while ((c = getopt_long(argc, argv, "hc:p:a:s:c:l:b:k:m:o:j:", options, NULL)) != -1) { + while ((c = getopt_long(argc, argv, "hc:p:a:s:k:m:j:", options, NULL)) != -1) { switch (c) { case 'h': case '?': @@ -379,31 +221,24 @@ static int process_input(int argc, char **argv, struct KmsInfo *kms_info, struct vsock_port = atoll(optarg); break; case 'a': - rc = strcpy_s(ACCESS_KEY_ID, sizeof(ACCESS_KEY_ID), optarg); + convert_sig_str(optarg, &global_ak); + params->key = global_ak; break; case 's': - rc = strcpy_s(SECRET_ACCESS_KEY, sizeof(SECRET_ACCESS_KEY), optarg); - break; - case 'c': - obs_object->key = optarg; - break; - case 'l': - rc = strcpy_s(plaintext_key, sizeof(plaintext_key), optarg); - break; - case 'b': - rc = strcpy_s(BUCKET_NAME, sizeof(BUCKET_NAME), optarg); + convert_sig_str(optarg, &global_sk); + params->secret = global_sk; break; case 'k': - kms_info->key_id = optarg; + handle->key_id = optarg; + handle->len = strlen(handle->key_id); break; case 'm': - kms_info->endpoint = optarg; - break; - case 'o': - rc = strcpy_s(HOST_NAME, sizeof(HOST_NAME), optarg); + convert_sig_str(optarg, &global_endpoint); + params->host = global_endpoint; break; case 'j': - kms_info->project_id = optarg; + convert_sig_str(optarg, &global_uri_prefix); + params->uri_prefix = global_uri_prefix; break; default: printf("unsupport option %c\n", c); @@ -417,56 +252,24 @@ static int process_input(int argc, char **argv, struct KmsInfo *kms_info, struct return rc; } -static int put_data_to_obs(struct ObsObject *obs_object, struct ProcessedData *plaintext_data) -{ - int rc; - - obs_object->key = plaintext_key; - obs_object->is_get = 0; - obs_object->buffer_size = plaintext_data->data_len; - obs_object->buffer = plaintext_data->data; - obs_object->vsock_port = vsock_port + VSOCK_PORT_SHIFT; - rc = test_interact_with_obs(obs_object); - if (rc < 0) - printf("put data to obs err\n"); - return rc; -} - int main(int argc, char **argv) { - struct ObsObject obs_object = {0}; int rc; - struct KmsInfo kms_info = {0}; - struct ProcessedData plaintext_data = {0}; + char socket_path[MAX_SOCKET_PATH_LEN] = {0}; /*---------process input-------*/ - rc = process_input(argc, argv, &kms_info, &obs_object); + rc = process_input(argc, argv, &global_params, &global_handle); if (rc < 0) return -1; - - /*--------get ciphertext----*/ - rc = get_ciphertext(&obs_object); + /*---------init socket path----*/ + rc = snprintf(socket_path, sizeof(socket_path), CURL_SOCKET_PATH, vsock_port); if (rc < 0) return -1; - - /*---- invoke kms decryption api -----*/ - plaintext_data.data_len = PLAINTEXT_LENGTH; - plaintext_data.data = (char *)malloc(plaintext_data.data_len * sizeof(char)); - memset_s(plaintext_data.data, plaintext_data.data_len * sizeof(char), - 0, plaintext_data.data_len * sizeof(char)); - rc = invoke_kms_decryption(&kms_info, &plaintext_data); - if (rc < 0) - goto free_plaintext_data; - - /*------ put plaintext to obs------*/ - rc = put_data_to_obs(&obs_object, &plaintext_data); + convert_sig_str(socket_path, &global_socket_path); + global_params.socket_path = global_socket_path; + /* test decrypt api */ + rc = test_kms_decrypt_data(); if (rc < 0) - printf("put plaintext to obs error\n"); - -free_plaintext_data: - if (plaintext_data.data_len != 0) { - free(plaintext_data.data); - plaintext_data.data = NULL; - } + return -1; return rc; -} +} \ No newline at end of file diff --git a/enclave/qtsm-sdk-c/samples/src/obs_demo_common.c b/enclave/qtsm-sdk-c/samples/src/obs_demo_common.c deleted file mode 100644 index d9576e2..0000000 --- a/enclave/qtsm-sdk-c/samples/src/obs_demo_common.c +++ /dev/null @@ -1,239 +0,0 @@ -/********************************************************************************* -* Copyright 2019 Huawei Technologies Co.,Ltd. -* 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. -********************************************************************************** -*/ -#include -#include -#include -#include -#include -#include - -#if defined __GNUC__ || defined LINUX -#include -#include -#include -#include -#include -#else -#include "getopt.h" -#endif - -#include "eSDKOBS.h" -#include "obs_demo_common.h" -#include "securec.h" - -#define DATA_BUF_OFFSET 100 -#define ARRAY_LENGTH_1024 1024 -#define ARRAY_LENGTH_2048 2048 -int showResponsePropertiesG = 1; -char locationconstraint[ARRAY_LENGTH_2048] = {0}; -char ACCESS_KEY_ID[ARRAY_LENGTH_2048] = {0}; -char SECRET_ACCESS_KEY[ARRAY_LENGTH_2048] = {0}; -char HOST_NAME[ARRAY_LENGTH_2048] = {0}; -char BUCKET_NAME[ARRAY_LENGTH_2048] = {0}; -obs_canned_acl canned_acl = OBS_CANNED_ACL_BUCKET_OWNER_FULL_CONTROL; -char *CA_FILE = "./client.pem"; -char UPLOAD_ID[ARRAY_LENGTH_2048] = {0}; - -int get_certificate_info(char *buffer, int buffer_length) -{ - int content_length = 0; - FILE *fp = fopen(CA_FILE, "r"); - if (fp) { - while (1) { - int rc = fread(buffer, sizeof(char), buffer_length, fp); - if (rc <= 0) - break; - content_length += rc; - } - fclose(fp); - } - return content_length; -} - -FILE *write_to_file(char *localfile) -{ - FILE *outfile = 0; - if (localfile) { - struct stat buf; - if (stat(localfile, &buf) == -1) { - outfile = fopen(localfile, "wb"); - } else { - outfile = fopen(localfile, "a"); - } - - if (!outfile) { - fprintf(stderr, "\nERROR: Failed to open output file %s: ", - localfile); - perror(0); - return -1; - } - } else if (showResponsePropertiesG) { - fprintf(stderr, "\nERROR: get -s requires a file_name parameter\n"); - } else { - outfile = stdout; - } - return outfile; -} - -obs_status response_properties_callback(const obs_response_properties *properties, void *callback_data) -{ - (void) callback_data; - - if (!showResponsePropertiesG) - return OBS_STATUS_OK; - -#define print_nonnull(name, field) \ - do { \ - if (properties->field) { \ - printf("%s: %s\n", name, properties->field); \ - } \ - } while (0) - - print_nonnull("ETag", etag); - print_nonnull("expiration", expiration); - print_nonnull("website_redirect_location", website_redirect_location); - print_nonnull("version_id", version_id); - if (properties->last_modified > 0) { - char timebuf[256] = {0}; - time_t t = (time_t) properties->last_modified; - strftime(timebuf, sizeof(timebuf), "%Y-%m-%dT%H:%M:%SZ", gmtime(&t)); - printf("Last-Modified: %s\n", timebuf); - } - int i; - for (i = 0; i < properties->meta_data_count; i++) { - printf("x-amz-meta-%s: %s\n", properties->meta_data[i].name, - properties->meta_data[i].value); - } - return OBS_STATUS_OK; -} - -void put_buffer_complete_callback(obs_status status, - const obs_error_details *error, - void *callback_data) -{ - put_buffer_object_callback_data *data = (put_buffer_object_callback_data *)callback_data; - data->ret_status = status; -} - -int put_buffer_data_callback(int buffer_size, char *buffer, void *callback_data) -{ - put_buffer_object_callback_data *data = (put_buffer_object_callback_data *) callback_data; - - int toRead = 0; - if (data->buffer_size) { - toRead = ((data->buffer_size > (unsigned) buffer_size) ? - (unsigned) buffer_size : data->buffer_size); - memcpy_s(buffer, buffer_size, data->put_buffer + data->cur_offset, toRead); - } - - uint64_t originalContentLength = data->buffer_size; - data->buffer_size -= toRead; - data->cur_offset += toRead; - if (data->buffer_size) { - printf("%llu bytes remaining ", (unsigned long long)data->buffer_size); - printf("(%d%% complete) ...\n", - (int)(((originalContentLength - data->buffer_size) * DATA_BUF_OFFSET) / originalContentLength)); - } - - return toRead; -} - -obs_status get_properties_callback(const obs_response_properties *properties, void *callback_data) -{ - if (properties->request_id) - printf(" request id: %s \n", properties->request_id); - if (properties->request_id2) - printf(" request id 2: %s \n", properties->request_id2); - if (properties->version_id) - printf(" version id: %s \n", properties->version_id); - if (properties->storage_class) - printf(" storage class: %s \n", properties->storage_class); - if (properties->bucket_location) - printf("bucket location: %s \n", properties->bucket_location); - if (properties->obs_version) - printf(" obs version: %s \n", properties->obs_version); - if (properties->restore) - printf(" restore: %s \n", properties->restore); - if (properties->obs_object_type) - printf(" object type: %s \n", properties->obs_object_type); - if (properties->obs_next_append_position) - printf("append position: %s \n", properties->obs_next_append_position); -} - -int TOKEN_BUCKET = 0; -time_t PRODUCE_TIME = 0; - -uint64_t LIMIT_FLOW_MAX_SPEED = 0; -pthread_mutex_t G_MUTEXTHREADGETTOKEN; // G_MUTEXTHREADGETTOKEN - -void preduce_token() -{ - if (TOKEN_BUCKET == LIMIT_FLOW_MAX_SPEED) - return; - - int times = 0; - - if (PRODUCE_TIME == 0) { - PRODUCE_TIME = time(0); - times = 1; - } else { - time_t cur_time = time(0); - times = (cur_time - PRODUCE_TIME); - if (times > 0) { - PRODUCE_TIME = cur_time; - } - } - - if (times > 0) - TOKEN_BUCKET = LIMIT_FLOW_MAX_SPEED; -} - -int get_token(int buffer_size) -{ - if (0 == LIMIT_FLOW_MAX_SPEED) - return 1; - preduce_token(); - - if (TOKEN_BUCKET < buffer_size) { - printf("has token %d need token %d.\n", TOKEN_BUCKET, buffer_size); - return 0; - } - - TOKEN_BUCKET -= buffer_size; - return 1; -} - -obs_status get_object_data_callback(int buffer_size, const char *buffer, - void *callback_data) -{ - pthread_mutex_lock(&G_MUTEXTHREADGETTOKEN); - while (0 == get_token(buffer_size)) - sleep(1); - - pthread_mutex_unlock(&G_MUTEXTHREADGETTOKEN); - - get_object_callback_data *data = (get_object_callback_data *) callback_data; - size_t wrote = fwrite(buffer, 1, buffer_size, data->outfile); - return ((wrote < (size_t) buffer_size) ? - OBS_STATUS_AbortedByCallback : OBS_STATUS_OK); -} - -void get_object_complete_callback(obs_status status, - const obs_error_details *error, - void *callback_data) -{ - get_object_callback_data *data = (get_object_callback_data *) callback_data; - data->ret_status = status; -} \ No newline at end of file diff --git a/enclave/qtsm-sdk-c/samples/src/test.py b/enclave/qtsm-sdk-c/samples/src/test.py index bf1081c..fb6b398 100644 --- a/enclave/qtsm-sdk-c/samples/src/test.py +++ b/enclave/qtsm-sdk-c/samples/src/test.py @@ -2,36 +2,108 @@ import json import subprocess +import os +import time +import re def get_config(): - with open("/root/builder/qtsm-sdk-c/samples/src/config.json") as f: + with open("/home/huawei-qingtian/enclave/qtsm-sdk-c/samples/src/config.json") as f: Config = json.load(f) IAM = Config['IAM'] + AK = IAM['AK'] + SK = IAM['SK'] KeyId = IAM['KeyId'] ProjectId = IAM['ProjectId'] allProjectId = "/v1.0/" + ProjectId + "/kms/" - FileName = Config['FileName'] - Ciphertext = FileName['Ciphertext'] - Plaintext = FileName['Plaintext'] - OBSBucket = FileName['OBSBucket'] Endpoint = Config['Endpoint'] - OBSEndpoint = Endpoint['OBSEndpoint'] KMSEndpoint = Endpoint['KMSEndpoint'] + OBSEndpoint = Endpoint['OBSEndpoint'] VsockSetting = Config['VsockSetting'] VsockPort = VsockSetting['VsockPort'] - return [VsockPort, Ciphertext, Plaintext, OBSBucket, KeyId, KMSEndpoint, OBSEndpoint, allProjectId] + FileKeys = Config['FileKeys'] + CiphertextFile = FileKeys['Ciphertext'] + PlaintextFile = FileKeys['Plaintext'] + BucketName = FileKeys['BucketName'] + return [AK, SK, VsockPort, KeyId, KMSEndpoint, OBSEndpoint, allProjectId, CiphertextFile, PlaintextFile, BucketName] -sreak = os.environ.get("SREAK") -if sreak is None: - print("sreak is none") - return -1 +Qproxy = "/home/test/qproxy" +QproxyConfig = "/home/test/config.toml" +Obsutil = "/home/test/obsutil" +Cipherpwd = "/home/test/ciphertext" +Plainpwd = "/home/test/plaintext" -sresk = os.environ.get("SRESK") -if sresk is None: - print("sreak is none") - return -1 +def wait_for_log_pattern(log_file, pattern, poll_interval=2): + """ + 轮询日志文件直到找到匹配模式 + :param log_file: 日志文件路径 + :param pattern: 要匹配的正则表达式模式 + :param poll_interval: 检查间隔(秒) + """ + time.sleep(poll_interval) + with open(log_file, 'r') as f: + # 先移动到文件末尾 + f.seek(0, 2) + + while True: + line = f.readline() + if not line: + time.sleep(poll_interval) + continue + if re.search(pattern, line): + print(f"找到匹配模式: {pattern}") + return res = get_config() -command="/root/builder/qtsm-sdk-c/samples/enclave_demo_bin -a {0} -s {1} -p {2} -c {3} -l {4} -b {5} -k {6} -m {7} -o {8} -j {9}" - .format(sreak, sresk, res[0], res[1], res[2], res[3], res[4], res[5], res[6], res[7]) + +# Pre1: setup the /etc/hosts +command = 'ip link set lo up' +print(command) +subprocess.call(command, shell=True) +command = 'echo "127.0.0.1 {0}" >> /etc/hosts'.format(res[5]) +print(command) subprocess.call(command, shell=True) +command = 'echo "127.0.0.1 {0}.{1}" >> /etc/hosts'.format(res[9], res[5]) +print(command) +subprocess.call(command, shell=True) + +# Pre2: lauch the qproxy enclave +obsendpoint = 'hostname= "{0}"'.format(res[5]) +subprocess.call(f"sed -i '5s/.*/{obsendpoint}/' {QproxyConfig}", shell=True) +process = subprocess.Popen( + ["/home/test/qproxy", "enclave", "--config", QproxyConfig], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + preexec_fn=os.setsid, + shell=False +) + +print(f"qproxy 已启动,PID: {process.pid}") +# 使用示例 +wait_for_log_pattern( + "/var/log/qproxy/enclave.log", + r"Starting outbound proxy connection to.*" +) +print("继续执行后续代码...") + +# Step1: init obsutil config" +command = "{0} config -i={1} -k={2} -e={3}".format(Obsutil, res[0], res[1], res[5]) +print(command) +subprocess.call(command, shell=True) + +# Step2: get ciphertext from obs +cipher = "obs://{0}/{1}".format(res[9], res[7]) +command = "{0} cp {1} {2}".format(Obsutil, cipher, Cipherpwd) +print(command) +subprocess.call(command, shell=True) + +# Step3: call kms decryption api +command="/home/huawei-qingtian/enclave/qtsm-sdk-c/samples/enclave_demo_bin -a {0} -s {1} -p {2} -k {3} -m {4} -j {5}".format(res[0], res[1], res[2], res[3], res[4], res[6]) +print(command) +subprocess.call(command, shell=True) + + +# Step4: put ciphertext to obs +plain = "obs://{0}/{1}".format(res[9], res[8]) +command = "{0} cp {1} {2}".format(Obsutil, Plainpwd, plain) +print(command) +subprocess.call(command, shell=True) \ No newline at end of file diff --git a/enclave/qtsm-sdk-c/tests/vsock_shell/README.md b/enclave/qtsm-sdk-c/tests/vsock_shell/README.md index ebaef34..82ff8a5 100644 --- a/enclave/qtsm-sdk-c/tests/vsock_shell/README.md +++ b/enclave/qtsm-sdk-c/tests/vsock_shell/README.md @@ -23,8 +23,8 @@ Compile the vsock_shell file into an executable file. 2. build nc-vsock After downloading the nc-vsock source code, run the `make` command in the ./nc-vsock directory. -`git clone https://github.com/stefanha/nc-vsock/tree/master` -`make` +`git clone https://github.com/stefanha/nc-vsock.git` +`cd nc-vsock && make` 3. connect to the enclave `./nc-vsock 4 9999` -- Gitee