diff --git a/DBPatch/DBPatch_VPKI_DataDB_Create.bat b/DBPatch/DBPatch_VPKI_DataDB_Create.bat
new file mode 100644
index 0000000..a801f55
--- /dev/null
+++ b/DBPatch/DBPatch_VPKI_DataDB_Create.bat
@@ -0,0 +1,20 @@
+@echo off
+CD ./sqlScripts/
+
+::log
+IF NOT EXIST .\logs mkdir logs
+
+::DB 정의 스키마
+SET Schema=SystemX.DB.VPKI_DataDB
+
+::연결정보
+SET ServerIP=127.0.0.1
+SET ServerPort=1433
+SET UserID=SystemX
+SET Passwd=X
+SET DBName=VPKI_DataDB
+
+::Default DB
+@echo off
+CALL _CreateDB.bat %Schema% %ServerIP% %ServerPort% %UserID% %Passwd% %DBName%
+CALL _CreateDB.bat %Schema% %ServerIP% %ServerPort% %UserID% %Passwd% %DBName%_DEV
\ No newline at end of file
diff --git a/DBPatch/DBPatch_VPKI_DataDB_Update.bat b/DBPatch/DBPatch_VPKI_DataDB_Update.bat
new file mode 100644
index 0000000..86b5a6b
--- /dev/null
+++ b/DBPatch/DBPatch_VPKI_DataDB_Update.bat
@@ -0,0 +1,23 @@
+@echo off
+CD .\sqlScripts\
+
+::log
+IF NOT EXIST .\logs mkdir logs
+
+::DB 정의 스키마
+SET Schema=SystemX.DB.VPKI_DataDB
+
+::연결정보
+SET ServerIP=127.0.0.1
+SET ServerPort=1433
+SET UserID=SystemX
+SET Passwd=X
+SET DBName=VPKI_DataDB
+
+@echo off
+::generate update script
+CALL _UpdateScriptGenerate.bat %Schema% %ServerIP% %ServerPort% %UserID% %Passwd% %DBName%
+
+::Default DB
+CALL _UpdateDB.bat %Schema% %ServerIP% %ServerPort% %UserID% %Passwd% %DBName%
+CALL _UpdateDB.bat %Schema% %ServerIP% %ServerPort% %UserID% %Passwd% %DBName%_DEV
\ No newline at end of file
diff --git a/DBPatch/Tool_VPKI_DataDB_Scaffold.bat b/DBPatch/Tool_VPKI_DataDB_Scaffold.bat
new file mode 100644
index 0000000..9140a58
--- /dev/null
+++ b/DBPatch/Tool_VPKI_DataDB_Scaffold.bat
@@ -0,0 +1,4 @@
+::AccountDB
+cd ../Projects/SystemX.Core/SystemX.Core.DB
+
+dotnet ef dbcontext scaffold "server=127.0.0.1; user id=SystemX; password=X; database=VPKI_DataDB; TrustServerCertificate=true;" Microsoft.EntityFrameworkCore.SqlServer --namespace SystemX.Core.DB --context-dir VPKI_DataDB\Context --output-dir VPKI_DataDB\Tables -f --use-database-names --no-onconfiguring
\ No newline at end of file
diff --git a/DBPatch/sqlScripts/SystemX.DB.VPKI_DataDB_Create.sql b/DBPatch/sqlScripts/SystemX.DB.VPKI_DataDB_Create.sql
new file mode 100644
index 0000000..0125007
--- /dev/null
+++ b/DBPatch/sqlScripts/SystemX.DB.VPKI_DataDB_Create.sql
@@ -0,0 +1,348 @@
+/*
+SystemX.DB.VPKI_DataDB의 배포 스크립트
+
+이 코드는 도구를 사용하여 생성되었습니다.
+파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
+변경 내용이 손실됩니다.
+*/
+
+GO
+SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON;
+
+SET NUMERIC_ROUNDABORT OFF;
+
+
+GO
+/*
+:setvar DatabaseName "SystemX.DB.VPKI_DataDB"
+:setvar DefaultFilePrefix "SystemX.DB.VPKI_DataDB"
+:setvar DefaultDataPath ""
+:setvar DefaultLogPath ""
+*/
+
+GO
+:on error exit
+GO
+/*
+SQLCMD 모드가 지원되지 않으면 SQLCMD 모드를 검색하고 스크립트를 실행하지 않습니다.
+SQLCMD 모드를 설정한 후에 이 스크립트를 다시 사용하려면 다음을 실행합니다.
+SET NOEXEC OFF;
+*/
+:setvar __IsSqlCmdEnabled "True"
+GO
+IF N'$(__IsSqlCmdEnabled)' NOT LIKE N'True'
+ BEGIN
+ PRINT N'이 스크립트를 실행하려면 SQLCMD 모드를 사용하도록 설정해야 합니다.';
+ SET NOEXEC ON;
+ END
+
+
+GO
+USE [master];
+
+
+GO
+
+IF (DB_ID(N'$(DatabaseName)') IS NOT NULL)
+BEGIN
+ ALTER DATABASE [$(DatabaseName)]
+ SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
+ DROP DATABASE [$(DatabaseName)];
+END
+
+GO
+PRINT N'$(DatabaseName) 데이터베이스를 만드는 중...'
+GO
+CREATE DATABASE [$(DatabaseName)] COLLATE Korean_Wansung_CI_AS
+GO
+USE [$(DatabaseName)];
+
+
+GO
+IF EXISTS (SELECT 1
+ FROM [master].[dbo].[sysdatabases]
+ WHERE [name] = N'$(DatabaseName)')
+ BEGIN
+ ALTER DATABASE [$(DatabaseName)]
+ SET ANSI_NULLS ON,
+ ANSI_PADDING ON,
+ ANSI_WARNINGS ON,
+ ARITHABORT ON,
+ CONCAT_NULL_YIELDS_NULL ON,
+ NUMERIC_ROUNDABORT OFF,
+ QUOTED_IDENTIFIER ON,
+ ANSI_NULL_DEFAULT ON,
+ CURSOR_DEFAULT LOCAL,
+ RECOVERY FULL,
+ CURSOR_CLOSE_ON_COMMIT OFF,
+ AUTO_CREATE_STATISTICS ON,
+ AUTO_SHRINK OFF,
+ AUTO_UPDATE_STATISTICS ON,
+ RECURSIVE_TRIGGERS OFF
+ WITH ROLLBACK IMMEDIATE;
+ END
+
+
+GO
+IF EXISTS (SELECT 1
+ FROM [master].[dbo].[sysdatabases]
+ WHERE [name] = N'$(DatabaseName)')
+ BEGIN
+ ALTER DATABASE [$(DatabaseName)]
+ SET ALLOW_SNAPSHOT_ISOLATION OFF;
+ END
+
+
+GO
+IF EXISTS (SELECT 1
+ FROM [master].[dbo].[sysdatabases]
+ WHERE [name] = N'$(DatabaseName)')
+ BEGIN
+ ALTER DATABASE [$(DatabaseName)]
+ SET READ_COMMITTED_SNAPSHOT OFF
+ WITH ROLLBACK IMMEDIATE;
+ END
+
+
+GO
+IF EXISTS (SELECT 1
+ FROM [master].[dbo].[sysdatabases]
+ WHERE [name] = N'$(DatabaseName)')
+ BEGIN
+ ALTER DATABASE [$(DatabaseName)]
+ SET AUTO_UPDATE_STATISTICS_ASYNC OFF,
+ PAGE_VERIFY NONE,
+ DATE_CORRELATION_OPTIMIZATION OFF,
+ DISABLE_BROKER,
+ PARAMETERIZATION SIMPLE,
+ SUPPLEMENTAL_LOGGING OFF
+ WITH ROLLBACK IMMEDIATE;
+ END
+
+
+GO
+IF IS_SRVROLEMEMBER(N'sysadmin') = 1
+ BEGIN
+ IF EXISTS (SELECT 1
+ FROM [master].[dbo].[sysdatabases]
+ WHERE [name] = N'$(DatabaseName)')
+ BEGIN
+ EXECUTE sp_executesql N'ALTER DATABASE [$(DatabaseName)]
+ SET TRUSTWORTHY OFF,
+ DB_CHAINING OFF
+ WITH ROLLBACK IMMEDIATE';
+ END
+ END
+ELSE
+ BEGIN
+ PRINT N'데이터베이스 설정을 수정할 수 없습니다. 이러한 설정을 적용하려면 SysAdmin이어야 합니다.';
+ END
+
+
+GO
+IF IS_SRVROLEMEMBER(N'sysadmin') = 1
+ BEGIN
+ IF EXISTS (SELECT 1
+ FROM [master].[dbo].[sysdatabases]
+ WHERE [name] = N'$(DatabaseName)')
+ BEGIN
+ EXECUTE sp_executesql N'ALTER DATABASE [$(DatabaseName)]
+ SET HONOR_BROKER_PRIORITY OFF
+ WITH ROLLBACK IMMEDIATE';
+ END
+ END
+ELSE
+ BEGIN
+ PRINT N'데이터베이스 설정을 수정할 수 없습니다. 이러한 설정을 적용하려면 SysAdmin이어야 합니다.';
+ END
+
+
+GO
+ALTER DATABASE [$(DatabaseName)]
+ SET TARGET_RECOVERY_TIME = 0 SECONDS
+ WITH ROLLBACK IMMEDIATE;
+
+
+GO
+IF EXISTS (SELECT 1
+ FROM [master].[dbo].[sysdatabases]
+ WHERE [name] = N'$(DatabaseName)')
+ BEGIN
+ ALTER DATABASE [$(DatabaseName)]
+ SET FILESTREAM(NON_TRANSACTED_ACCESS = OFF),
+ CONTAINMENT = NONE
+ WITH ROLLBACK IMMEDIATE;
+ END
+
+
+GO
+IF EXISTS (SELECT 1
+ FROM [master].[dbo].[sysdatabases]
+ WHERE [name] = N'$(DatabaseName)')
+ BEGIN
+ ALTER DATABASE [$(DatabaseName)]
+ SET AUTO_CREATE_STATISTICS ON(INCREMENTAL = OFF),
+ MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = OFF,
+ DELAYED_DURABILITY = DISABLED
+ WITH ROLLBACK IMMEDIATE;
+ END
+
+
+GO
+IF EXISTS (SELECT 1
+ FROM [master].[dbo].[sysdatabases]
+ WHERE [name] = N'$(DatabaseName)')
+ BEGIN
+ ALTER DATABASE [$(DatabaseName)]
+ SET QUERY_STORE (QUERY_CAPTURE_MODE = ALL, DATA_FLUSH_INTERVAL_SECONDS = 900, INTERVAL_LENGTH_MINUTES = 60, MAX_PLANS_PER_QUERY = 200, CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 367), MAX_STORAGE_SIZE_MB = 100)
+ WITH ROLLBACK IMMEDIATE;
+ END
+
+
+GO
+IF EXISTS (SELECT 1
+ FROM [master].[dbo].[sysdatabases]
+ WHERE [name] = N'$(DatabaseName)')
+ BEGIN
+ ALTER DATABASE [$(DatabaseName)]
+ SET QUERY_STORE = OFF
+ WITH ROLLBACK IMMEDIATE;
+ END
+
+
+GO
+IF EXISTS (SELECT 1
+ FROM [master].[dbo].[sysdatabases]
+ WHERE [name] = N'$(DatabaseName)')
+ BEGIN
+ ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 0;
+ ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET MAXDOP = PRIMARY;
+ ALTER DATABASE SCOPED CONFIGURATION SET LEGACY_CARDINALITY_ESTIMATION = OFF;
+ ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET LEGACY_CARDINALITY_ESTIMATION = PRIMARY;
+ ALTER DATABASE SCOPED CONFIGURATION SET PARAMETER_SNIFFING = ON;
+ ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET PARAMETER_SNIFFING = PRIMARY;
+ ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_HOTFIXES = OFF;
+ ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET QUERY_OPTIMIZER_HOTFIXES = PRIMARY;
+ END
+
+
+GO
+IF EXISTS (SELECT 1
+ FROM [master].[dbo].[sysdatabases]
+ WHERE [name] = N'$(DatabaseName)')
+ BEGIN
+ ALTER DATABASE [$(DatabaseName)]
+ SET TEMPORAL_HISTORY_RETENTION ON
+ WITH ROLLBACK IMMEDIATE;
+ END
+
+
+GO
+IF fulltextserviceproperty(N'IsFulltextInstalled') = 1
+ EXECUTE sp_fulltext_database 'enable';
+
+
+GO
+PRINT N'테이블 [dbo].[tVerifyResult]을(를) 만드는 중...';
+
+
+GO
+CREATE TABLE [dbo].[tVerifyResult] (
+ [cCuid] BIGINT NOT NULL,
+ [cResult] NCHAR (20) NOT NULL,
+ PRIMARY KEY CLUSTERED ([cCuid] ASC)
+);
+
+
+GO
+PRINT N'테이블 [dbo].[tTbscsr]을(를) 만드는 중...';
+
+
+GO
+CREATE TABLE [dbo].[tTbscsr] (
+ [cCuid] BIGINT IDENTITY (1, 1) NOT NULL,
+ [cIftid] NVARCHAR (100) NOT NULL,
+ [cMacaddr] NVARCHAR (100) NOT NULL,
+ [cWmi] NVARCHAR (20) NOT NULL,
+ [cIdType] NVARCHAR (10) NOT NULL,
+ [cSupplierId] NVARCHAR (10) NOT NULL,
+ [cDc] NVARCHAR (20) NOT NULL,
+ [cTierCode] NVARCHAR (20) NOT NULL,
+ [cUnitCode] NVARCHAR (20) NOT NULL,
+ [cPublickey] NVARCHAR (1024) NOT NULL,
+ [cCertType] NVARCHAR (20) NOT NULL,
+ [cOriginTbscsr] NVARCHAR (4000) NOT NULL,
+ [cHashedTbscsr] NVARCHAR (1024) NOT NULL,
+ [cPcid] NVARCHAR (50) NOT NULL,
+ [cDn] NVARCHAR (250) NOT NULL,
+ [cDateTime] DATETIME2 (7) NOT NULL,
+ PRIMARY KEY CLUSTERED ([cCuid] ASC)
+);
+
+
+GO
+PRINT N'테이블 [dbo].[tOcsp]을(를) 만드는 중...';
+
+
+GO
+CREATE TABLE [dbo].[tOcsp] (
+ [cCuid] BIGINT NOT NULL,
+ [cStatus] NVARCHAR (20) NOT NULL,
+ [cVerify] NVARCHAR (20) NOT NULL,
+ [cOcsp] NVARCHAR (MAX) NULL,
+ [cDateTime] DATETIME2 (7) NOT NULL,
+ PRIMARY KEY CLUSTERED ([cCuid] ASC)
+);
+
+
+GO
+PRINT N'테이블 [dbo].[tCertificate]을(를) 만드는 중...';
+
+
+GO
+CREATE TABLE [dbo].[tCertificate] (
+ [cCuid] BIGINT NOT NULL,
+ [cCsrsignature] NVARCHAR (1024) NOT NULL,
+ [cTierCode] NVARCHAR (20) NOT NULL,
+ [cUnitCode] NVARCHAR (20) NOT NULL,
+ [cVehicleCode] NVARCHAR (20) NOT NULL,
+ [cLocalCode] NVARCHAR (20) NOT NULL,
+ [cBrandCode] NVARCHAR (20) NOT NULL,
+ [cCsr] NVARCHAR (2048) NOT NULL,
+ [cCert] NVARCHAR (2048) NOT NULL,
+ [cMessage] NVARCHAR (250) NOT NULL,
+ [cIssueCount] INT NOT NULL,
+ [cDateTime] DATETIME2 (7) NOT NULL,
+ PRIMARY KEY CLUSTERED ([cCuid] ASC)
+);
+
+
+GO
+DECLARE @VarDecimalSupported AS BIT;
+
+SELECT @VarDecimalSupported = 0;
+
+IF ((ServerProperty(N'EngineEdition') = 3)
+ AND (((@@microsoftversion / power(2, 24) = 9)
+ AND (@@microsoftversion & 0xffff >= 3024))
+ OR ((@@microsoftversion / power(2, 24) = 10)
+ AND (@@microsoftversion & 0xffff >= 1600))))
+ SELECT @VarDecimalSupported = 1;
+
+IF (@VarDecimalSupported > 0)
+ BEGIN
+ EXECUTE sp_db_vardecimal_storage_format N'$(DatabaseName)', 'ON';
+ END
+
+
+GO
+ALTER DATABASE [$(DatabaseName)]
+ SET MULTI_USER
+ WITH ROLLBACK IMMEDIATE;
+
+
+GO
+PRINT N'업데이트가 완료되었습니다.';
+
+
+GO
diff --git a/DBPatch/sqlScripts/SystemX.DB.VPKI_DataDB_Update.sql b/DBPatch/sqlScripts/SystemX.DB.VPKI_DataDB_Update.sql
new file mode 100644
index 0000000..37a7cb9
--- /dev/null
+++ b/DBPatch/sqlScripts/SystemX.DB.VPKI_DataDB_Update.sql
@@ -0,0 +1,48 @@
+/*
+VPKI_DataDB의 배포 스크립트
+
+이 코드는 도구를 사용하여 생성되었습니다.
+이 파일을 변경하면 잘못된 동작이 발생할 수 있으며 코드가 다시 생성되면
+이러한 변경 내용이 손실됩니다.
+*/
+
+GO
+SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON;
+
+SET NUMERIC_ROUNDABORT OFF;
+
+
+GO
+/*
+:setvar DatabaseName "VPKI_DataDB"
+:setvar DefaultFilePrefix "VPKI_DataDB"
+:setvar DefaultDataPath "D:\20_MSSQL\DATA\"
+:setvar DefaultLogPath "D:\20_MSSQL\DATA\"
+*/
+
+GO
+:on error exit
+GO
+/*
+SQLCMD 모드를 검색하고 SQLCMD 모드가 지원되지 않는 경우 스크립트 실행을 사용하지 않도록 설정합니다.
+SQLCMD 모드를 사용하도록 설정한 후 스크립트를 다시 사용하도록 설정하려면 다음을 실행합니다.
+NOEXEC를 끕니다.
+*/
+:setvar __IsSqlCmdEnabled "True"
+GO
+IF N'$(__IsSqlCmdEnabled)' NOT LIKE N'True'
+ BEGIN
+ PRINT N'이 스크립트를 실행하려면 SQLCMD 모드를 사용하도록 설정해야 합니다.';
+ SET NOEXEC ON;
+ END
+
+
+GO
+USE [$(DatabaseName)];
+
+
+GO
+PRINT N'업데이트가 완료되었습니다.';
+
+
+GO
diff --git a/DBPatch/sqlScripts/dacpac/SystemX.DB.AccountDB.dacpac b/DBPatch/sqlScripts/dacpac/SystemX.DB.AccountDB.dacpac
index da6252b..71f0e72 100644
Binary files a/DBPatch/sqlScripts/dacpac/SystemX.DB.AccountDB.dacpac and b/DBPatch/sqlScripts/dacpac/SystemX.DB.AccountDB.dacpac differ
diff --git a/DBPatch/sqlScripts/dacpac/SystemX.DB.UniqueKeyDB.dacpac b/DBPatch/sqlScripts/dacpac/SystemX.DB.UniqueKeyDB.dacpac
index 9587265..88ac311 100644
Binary files a/DBPatch/sqlScripts/dacpac/SystemX.DB.UniqueKeyDB.dacpac and b/DBPatch/sqlScripts/dacpac/SystemX.DB.UniqueKeyDB.dacpac differ
diff --git a/DBPatch/sqlScripts/dacpac/SystemX.DB.VPKI_DataDB.dacpac b/DBPatch/sqlScripts/dacpac/SystemX.DB.VPKI_DataDB.dacpac
new file mode 100644
index 0000000..e8d4516
Binary files /dev/null and b/DBPatch/sqlScripts/dacpac/SystemX.DB.VPKI_DataDB.dacpac differ
diff --git a/DBPatch/sqlScripts/dacpac/SystemX.DB.VpkiDB.dacpac b/DBPatch/sqlScripts/dacpac/SystemX.DB.VpkiDB.dacpac
new file mode 100644
index 0000000..b273b27
Binary files /dev/null and b/DBPatch/sqlScripts/dacpac/SystemX.DB.VpkiDB.dacpac differ
diff --git a/DBPatch/sqlScripts/dacpac/VPKI_DataDB.dacpac b/DBPatch/sqlScripts/dacpac/VPKI_DataDB.dacpac
new file mode 100644
index 0000000..6bfd490
Binary files /dev/null and b/DBPatch/sqlScripts/dacpac/VPKI_DataDB.dacpac differ
diff --git a/Projects/Config/WebApi.VpkiApi.Config.json b/Projects/Config/WebApi.VpkiApi.Config.json
new file mode 100644
index 0000000..48c111a
--- /dev/null
+++ b/Projects/Config/WebApi.VpkiApi.Config.json
@@ -0,0 +1,69 @@
+{
+ "Server": {
+ "Address": "https://*",
+ "Port": 8080,
+ "IIS": false
+ },
+ "API": [
+ {
+ "ApiName": "vpkira",
+ "Address": "https://vpkira.hmckmc.co.kr/"
+ }
+ ],
+ "Auth": {
+ "issuer": "vpki.api",
+ "audience": "vpki",
+ "accessTokenSecret": "t6zdogyrT0U1bYw3gJvMm3JHmj2Iyawr7O2WKE2truX+MK0l/XNGmpU2ofagdUWBN4DxAUv7c8xSYVv/8abL6A==",
+ "accessTokenExpires": 60, //minutes
+ "refreshTokenSecret": "1vVuoGqIqkStFI3QUXHMr0/yO1feLPnhqcfFGjZyk478+4WY7dhrUjCfVeWjmmSZYgb+rtP0X6ec+3iL35Yezw==",
+ "refreshTokenExpires": 1440 //minuts, 60*24 (1day)
+ },
+ "DataBase": [
+ {
+ "IP": "127.0.0.1",
+ "Port": 1433,
+ "DBName": "VPKI_AccountDB",
+ "DBID": 1,
+ "DBContext": "VpkiAccountDbContext",
+ "UserID": "VPKI",
+ "Password": "Kefico!@34"
+ },
+ {
+ "IP": "127.0.0.1",
+ "Port": 1433,
+ "DBName": "VPKI_AccountDB_DEV",
+ "DBID": 2,
+ "DBContext": "VpkiAccountDbContext",
+ "UserID": "VPKI",
+ "Password": "Kefico!@34"
+ },
+ {
+ "IP": "127.0.0.1",
+ "Port": 1433,
+ "DBName": "VPKI_DataDB",
+ "DBID": 1,
+ "DBContext": "VpkiDataDbContext",
+ "UserID": "VPKI",
+ "Password": "Kefico!@34"
+ },
+ {
+ "IP": "127.0.0.1",
+ "Port": 1433,
+ "DBName": "VPKI_DataDB_DEV",
+ "DBID": 2,
+ "DBContext": "VpkiDataDbContext",
+ "UserID": "VPKI",
+ "Password": "Kefico!@34"
+ }
+ ],
+ "Openssl": {
+ "Path": "C:/Program Files/OpenSSL-Win64/bin/openssl.exe",
+ "SubCAPath": "../SubCA/",
+ "SubCA": {
+ "prov_v1": "SubCA_P02OEM.pem",
+ "prov_cert": "SubCA_P20OEM.pem",
+ "vehicle_cert": "SubCA_P20VHC.pem"
+ },
+ "RootCA": "hkmcrootca.pem"
+ }
+}
\ No newline at end of file
diff --git a/Projects/DLL/SystemX.Core.DB.dll b/Projects/DLL/SystemX.Core.DB.dll
index b4db5f2..6bba90a 100644
Binary files a/Projects/DLL/SystemX.Core.DB.dll and b/Projects/DLL/SystemX.Core.DB.dll differ
diff --git a/Projects/DLL/SystemX.Core.dll b/Projects/DLL/SystemX.Core.dll
index 0e43fed..b113d4a 100644
Binary files a/Projects/DLL/SystemX.Core.dll and b/Projects/DLL/SystemX.Core.dll differ
diff --git a/Projects/SystemX.Core/DB/SystemX.DB.VPKI_DataDB/SystemX.DB.VPKI_DataDB.sqlproj b/Projects/SystemX.Core/DB/SystemX.DB.VPKI_DataDB/SystemX.DB.VPKI_DataDB.sqlproj
new file mode 100644
index 0000000..98eeb4c
--- /dev/null
+++ b/Projects/SystemX.Core/DB/SystemX.DB.VPKI_DataDB/SystemX.DB.VPKI_DataDB.sqlproj
@@ -0,0 +1,78 @@
+
+
+
+ Debug
+ AnyCPU
+ SystemX.DB.VPKI_DataDB
+ 2.0
+ 4.1
+ {5d374f06-d9fa-4159-bc84-1f3ca506f50e}
+ Microsoft.Data.Tools.Schema.Sql.Sql160DatabaseSchemaProvider
+ Database
+
+
+ SystemX.DB.VPKI_DataDB
+ SystemX.DB.VPKI_DataDB
+ 1042,CI
+ BySchemaAndSchemaType
+ True
+ v4.7.2
+ CS
+ Properties
+ False
+ True
+ True
+ True
+ Korean_Wansung_CI_AS
+
+
+ bin\Release\
+ $(MSBuildProjectName).sql
+ False
+ pdbonly
+ true
+ false
+ true
+ prompt
+ 4
+
+
+ bin\Debug\
+ $(MSBuildProjectName).sql
+ true
+ true
+ full
+ false
+ true
+ true
+ prompt
+ 4
+
+
+ 11.0
+
+ True
+ 11.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ xcopy /y $(ProjectDir)$(OutputPath)$(TargetName)_Create.sql $(SolutionDir)..\..\DBPatch\sqlScripts\
+
+xcopy /y $(ProjectDir)$(OutputPath)$(TargetName).dacpac $(SolutionDir)..\..\DBPatch\sqlScripts\dacpac\
+
+
\ No newline at end of file
diff --git a/Projects/SystemX.Core/DB/SystemX.DB.VPKI_DataDB/dbo/Tables/tCertificate.sql b/Projects/SystemX.Core/DB/SystemX.DB.VPKI_DataDB/dbo/Tables/tCertificate.sql
new file mode 100644
index 0000000..5b3ef42
--- /dev/null
+++ b/Projects/SystemX.Core/DB/SystemX.DB.VPKI_DataDB/dbo/Tables/tCertificate.sql
@@ -0,0 +1,15 @@
+CREATE TABLE [dbo].[tCertificate]
+(
+ [cCuid] BIGINT NOT NULL PRIMARY KEY,
+ [cCsrsignature] NVARCHAR(1024) NOT NULL,
+ [cTierCode]NVARCHAR(20) NOT NULL,
+ [cUnitCode]NVARCHAR(20) NOT NULL,
+ [cVehicleCode]NVARCHAR(20) NOT NULL,
+ [cLocalCode]NVARCHAR(20) NOT NULL,
+ [cBrandCode]NVARCHAR(20) NOT NULL,
+ [cCsr] NVARCHAR(2048) NOT NULL,
+ [cCert] NVARCHAR(2048) NOT NULL,
+ [cMessage] NVARCHAR(250) NOT NULL,
+ [cIssueCount] INT NOT NULL,
+ [cDateTime] DATETIME2 NOT NULL
+)
diff --git a/Projects/SystemX.Core/DB/SystemX.DB.VPKI_DataDB/dbo/Tables/tOcsp.sql b/Projects/SystemX.Core/DB/SystemX.DB.VPKI_DataDB/dbo/Tables/tOcsp.sql
new file mode 100644
index 0000000..a46a532
--- /dev/null
+++ b/Projects/SystemX.Core/DB/SystemX.DB.VPKI_DataDB/dbo/Tables/tOcsp.sql
@@ -0,0 +1,8 @@
+CREATE TABLE [dbo].[tOcsp]
+(
+ [cCuid] BIGINT NOT NULL PRIMARY KEY,
+ [cStatus] NVARCHAR(20) NOT NULL,
+ [cVerify] NVARCHAR(20) NOT NULL,
+ [cOcsp] NVARCHAR(MAX) NULL,
+ [cDateTime] DATETIME2 NOT NULL
+)
diff --git a/Projects/SystemX.Core/DB/SystemX.DB.VPKI_DataDB/dbo/Tables/tTbscsr.sql b/Projects/SystemX.Core/DB/SystemX.DB.VPKI_DataDB/dbo/Tables/tTbscsr.sql
new file mode 100644
index 0000000..b1455a2
--- /dev/null
+++ b/Projects/SystemX.Core/DB/SystemX.DB.VPKI_DataDB/dbo/Tables/tTbscsr.sql
@@ -0,0 +1,19 @@
+CREATE TABLE [dbo].[tTbscsr]
+(
+ [cCuid] BIGINT NOT NULL PRIMARY KEY IDENTITY(1,1),
+ [cIftid] NVARCHAR(100) NOT NULL,
+ [cMacaddr] NVARCHAR(100) NOT NULL,
+ [cWmi] NVARCHAR(20) NOT NULL,
+ [cIdType] NVARCHAR(10)NOT NULL,
+ [cSupplierId] NVARCHAR(10) NOT NULL,
+ [cDc] NVARCHAR(20) NOT NULL,
+ [cTierCode]NVARCHAR(20) NOT NULL,
+ [cUnitCode]NVARCHAR(20) NOT NULL,
+ [cPublickey]NVARCHAR(1024) NOT NULL,
+ [cCertType]NVARCHAR(20) NOT NULL,
+ [cOriginTbscsr] NVARCHAR(4000) NOT NULL,
+ [cHashedTbscsr] NVARCHAR(1024) NOT NULL,
+ [cPcid] NVARCHAR(50) NOT NULL,
+ [cDn]NVARCHAR(250) NOT NULL,
+ [cDateTime] DATETIME2 NOT NULL
+)
diff --git a/Projects/SystemX.Core/DB/SystemX.DB.VPKI_DataDB/dbo/Tables/tVerifyResult.sql b/Projects/SystemX.Core/DB/SystemX.DB.VPKI_DataDB/dbo/Tables/tVerifyResult.sql
new file mode 100644
index 0000000..5cb4b60
--- /dev/null
+++ b/Projects/SystemX.Core/DB/SystemX.DB.VPKI_DataDB/dbo/Tables/tVerifyResult.sql
@@ -0,0 +1,5 @@
+CREATE TABLE [dbo].[tVerifyResult]
+(
+ [cCuid] BIGINT NOT NULL PRIMARY KEY,
+ [cResult] NCHAR(20) NOT NULL
+)
diff --git a/Projects/SystemX.Core/SystemX.Core.DB/VPKI_DataDB/Context/VPKI_DataDBContext.cs b/Projects/SystemX.Core/SystemX.Core.DB/VPKI_DataDB/Context/VPKI_DataDBContext.cs
new file mode 100644
index 0000000..62b8ca6
--- /dev/null
+++ b/Projects/SystemX.Core/SystemX.Core.DB/VPKI_DataDB/Context/VPKI_DataDBContext.cs
@@ -0,0 +1,91 @@
+using System;
+using System.Collections.Generic;
+using Microsoft.EntityFrameworkCore;
+
+namespace SystemX.Core.DB;
+
+public partial class VPKI_DataDBContext : DbContext
+{
+ public VPKI_DataDBContext(DbContextOptions options)
+ : base(options)
+ {
+ }
+
+ public virtual DbSet tCertificates { get; set; }
+
+ public virtual DbSet tOcsps { get; set; }
+
+ public virtual DbSet tTbscsrs { get; set; }
+
+ public virtual DbSet tVerifyResults { get; set; }
+
+ protected override void OnModelCreating(ModelBuilder modelBuilder)
+ {
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.cCuid).HasName("PK__tCertifi__2AA00D94D7A91CE3");
+
+ entity.ToTable("tCertificate");
+
+ entity.Property(e => e.cCuid).ValueGeneratedNever();
+ entity.Property(e => e.cBrandCode).HasMaxLength(20);
+ entity.Property(e => e.cCert).HasMaxLength(2048);
+ entity.Property(e => e.cCsr).HasMaxLength(2048);
+ entity.Property(e => e.cCsrsignature).HasMaxLength(1024);
+ entity.Property(e => e.cLocalCode).HasMaxLength(20);
+ entity.Property(e => e.cMessage).HasMaxLength(250);
+ entity.Property(e => e.cTierCode).HasMaxLength(20);
+ entity.Property(e => e.cUnitCode).HasMaxLength(20);
+ entity.Property(e => e.cVehicleCode).HasMaxLength(20);
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.cCuid).HasName("PK__tOcsp__2AA00D94489D8AA6");
+
+ entity.ToTable("tOcsp");
+
+ entity.Property(e => e.cCuid).ValueGeneratedNever();
+ entity.Property(e => e.cStatus).HasMaxLength(20);
+ entity.Property(e => e.cVerify).HasMaxLength(20);
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.cCuid).HasName("PK__tTbscsr__2AA00D9463096B25");
+
+ entity.ToTable("tTbscsr");
+
+ entity.Property(e => e.cCertType).HasMaxLength(20);
+ entity.Property(e => e.cDc).HasMaxLength(20);
+ entity.Property(e => e.cDn).HasMaxLength(250);
+ entity.Property(e => e.cHashedTbscsr).HasMaxLength(1024);
+ entity.Property(e => e.cIdType).HasMaxLength(10);
+ entity.Property(e => e.cIftid).HasMaxLength(100);
+ entity.Property(e => e.cMacaddr).HasMaxLength(100);
+ entity.Property(e => e.cOriginTbscsr).HasMaxLength(4000);
+ entity.Property(e => e.cPcid).HasMaxLength(50);
+ entity.Property(e => e.cPublickey).HasMaxLength(1024);
+ entity.Property(e => e.cSupplierId).HasMaxLength(10);
+ entity.Property(e => e.cTierCode).HasMaxLength(20);
+ entity.Property(e => e.cUnitCode).HasMaxLength(20);
+ entity.Property(e => e.cWmi).HasMaxLength(20);
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.cCuid).HasName("PK__tVerifyR__2AA00D94B21AB01E");
+
+ entity.ToTable("tVerifyResult");
+
+ entity.Property(e => e.cCuid).ValueGeneratedNever();
+ entity.Property(e => e.cResult)
+ .HasMaxLength(20)
+ .IsFixedLength();
+ });
+
+ OnModelCreatingPartial(modelBuilder);
+ }
+
+ partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
+}
diff --git a/Projects/SystemX.Core/SystemX.Core.DB/VPKI_DataDB/Tables/tCertificate.cs b/Projects/SystemX.Core/SystemX.Core.DB/VPKI_DataDB/Tables/tCertificate.cs
new file mode 100644
index 0000000..6455d76
--- /dev/null
+++ b/Projects/SystemX.Core/SystemX.Core.DB/VPKI_DataDB/Tables/tCertificate.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+
+namespace SystemX.Core.DB;
+
+public partial class tCertificate
+{
+ public long cCuid { get; set; }
+
+ public string cCsrsignature { get; set; } = null!;
+
+ public string cTierCode { get; set; } = null!;
+
+ public string cUnitCode { get; set; } = null!;
+
+ public string cVehicleCode { get; set; } = null!;
+
+ public string cLocalCode { get; set; } = null!;
+
+ public string cBrandCode { get; set; } = null!;
+
+ public string cCsr { get; set; } = null!;
+
+ public string cCert { get; set; } = null!;
+
+ public string cMessage { get; set; } = null!;
+
+ public int cIssueCount { get; set; }
+
+ public DateTime cDateTime { get; set; }
+}
diff --git a/Projects/SystemX.Core/SystemX.Core.DB/VPKI_DataDB/Tables/tOcsp.cs b/Projects/SystemX.Core/SystemX.Core.DB/VPKI_DataDB/Tables/tOcsp.cs
new file mode 100644
index 0000000..8cb62aa
--- /dev/null
+++ b/Projects/SystemX.Core/SystemX.Core.DB/VPKI_DataDB/Tables/tOcsp.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+
+namespace SystemX.Core.DB;
+
+public partial class tOcsp
+{
+ public long cCuid { get; set; }
+
+ public string cStatus { get; set; } = null!;
+
+ public string cVerify { get; set; } = null!;
+
+ public string? cOcsp { get; set; }
+
+ public DateTime cDateTime { get; set; }
+}
diff --git a/Projects/SystemX.Core/SystemX.Core.DB/VPKI_DataDB/Tables/tTbscsr.cs b/Projects/SystemX.Core/SystemX.Core.DB/VPKI_DataDB/Tables/tTbscsr.cs
new file mode 100644
index 0000000..6e48f21
--- /dev/null
+++ b/Projects/SystemX.Core/SystemX.Core.DB/VPKI_DataDB/Tables/tTbscsr.cs
@@ -0,0 +1,39 @@
+using System;
+using System.Collections.Generic;
+
+namespace SystemX.Core.DB;
+
+public partial class tTbscsr
+{
+ public long cCuid { get; set; }
+
+ public string cIftid { get; set; } = null!;
+
+ public string cMacaddr { get; set; } = null!;
+
+ public string cWmi { get; set; } = null!;
+
+ public string cIdType { get; set; } = null!;
+
+ public string cSupplierId { get; set; } = null!;
+
+ public string cDc { get; set; } = null!;
+
+ public string cTierCode { get; set; } = null!;
+
+ public string cUnitCode { get; set; } = null!;
+
+ public string cPublickey { get; set; } = null!;
+
+ public string cCertType { get; set; } = null!;
+
+ public string cOriginTbscsr { get; set; } = null!;
+
+ public string cHashedTbscsr { get; set; } = null!;
+
+ public string cPcid { get; set; } = null!;
+
+ public string cDn { get; set; } = null!;
+
+ public DateTime cDateTime { get; set; }
+}
diff --git a/Projects/SystemX.Core/SystemX.Core.DB/VPKI_DataDB/Tables/tVerifyResult.cs b/Projects/SystemX.Core/SystemX.Core.DB/VPKI_DataDB/Tables/tVerifyResult.cs
new file mode 100644
index 0000000..d95dc98
--- /dev/null
+++ b/Projects/SystemX.Core/SystemX.Core.DB/VPKI_DataDB/Tables/tVerifyResult.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+
+namespace SystemX.Core.DB;
+
+public partial class tVerifyResult
+{
+ public long cCuid { get; set; }
+
+ public string cResult { get; set; } = null!;
+}
diff --git a/Projects/SystemX.Core/SystemX.Core.sln b/Projects/SystemX.Core/SystemX.Core.sln
index de82dab..799e5ae 100644
--- a/Projects/SystemX.Core/SystemX.Core.sln
+++ b/Projects/SystemX.Core/SystemX.Core.sln
@@ -13,6 +13,8 @@ Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "SystemX.DB.AccountDB", "DB\
EndProject
Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "SystemX.DB.UniqueKeyDB", "DB\SystemX.DB.UniqueKeyDB\SystemX.DB.UniqueKeyDB.sqlproj", "{C67F3F97-1D52-4C75-A04F-16ED41822CCD}"
EndProject
+Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "SystemX.DB.VPKI_DataDB", "DB\SystemX.DB.VPKI_DataDB\SystemX.DB.VPKI_DataDB.sqlproj", "{5D374F06-D9FA-4159-BC84-1F3CA506F50E}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -39,6 +41,12 @@ Global
{C67F3F97-1D52-4C75-A04F-16ED41822CCD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C67F3F97-1D52-4C75-A04F-16ED41822CCD}.Release|Any CPU.Build.0 = Release|Any CPU
{C67F3F97-1D52-4C75-A04F-16ED41822CCD}.Release|Any CPU.Deploy.0 = Release|Any CPU
+ {5D374F06-D9FA-4159-BC84-1F3CA506F50E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5D374F06-D9FA-4159-BC84-1F3CA506F50E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5D374F06-D9FA-4159-BC84-1F3CA506F50E}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
+ {5D374F06-D9FA-4159-BC84-1F3CA506F50E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5D374F06-D9FA-4159-BC84-1F3CA506F50E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5D374F06-D9FA-4159-BC84-1F3CA506F50E}.Release|Any CPU.Deploy.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -46,6 +54,7 @@ Global
GlobalSection(NestedProjects) = preSolution
{B44C85FA-BD31-419F-8481-477E166A5753} = {C8D5274F-AC00-46C7-1F8D-E88E81087A52}
{C67F3F97-1D52-4C75-A04F-16ED41822CCD} = {C8D5274F-AC00-46C7-1F8D-E88E81087A52}
+ {5D374F06-D9FA-4159-BC84-1F3CA506F50E} = {C8D5274F-AC00-46C7-1F8D-E88E81087A52}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {A26A3BD0-2161-41FA-949A-DEA966E8F798}