Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/SoftEtherVPN/SoftEtherVPN_Stable.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/Cedar/Command.c')
-rw-r--r--src/Cedar/Command.c130
1 files changed, 129 insertions, 1 deletions
diff --git a/src/Cedar/Command.c b/src/Cedar/Command.c
index 8b299b10..d2f08f13 100644
--- a/src/Cedar/Command.c
+++ b/src/Cedar/Command.c
@@ -922,6 +922,7 @@ void PtMain(PT *pt)
{
{"About", PsAbout},
{"MakeCert", PtMakeCert},
+ {"MakeCert2048", PtMakeCert2048},
{"TrafficClient", PtTrafficClient},
{"TrafficServer", PtTrafficServer},
{"Check", PtCheck},
@@ -2542,7 +2543,7 @@ UINT PtTrafficClient(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
return ret;
}
-// Certificate easy creation tool
+// Certificate easy creation tool (1024 bit)
UINT PtMakeCert(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
{
LIST *o;
@@ -2668,6 +2669,131 @@ UINT PtMakeCert(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
return ret;
}
+// Certificate easy creation tool (2048 bit)
+UINT PtMakeCert2048(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
+{
+ LIST *o;
+ UINT ret = ERR_NO_ERROR;
+ X *x = NULL;
+ K *pub = NULL;
+ K *pri = NULL;
+ NAME *n;
+ X_SERIAL *x_serial = NULL;
+ BUF *buf;
+ UINT days;
+ X *root_x = NULL;
+ K *root_k = NULL;
+ // Parameter list that can be specified
+ CMD_EVAL_MIN_MAX minmax =
+ {
+ "CMD_MakeCert_EVAL_EXPIRES",
+ 0,
+ 10950,
+ };
+ PARAM args[] =
+ {
+ {"CN", CmdPrompt, _UU("CMD_MakeCert_PROMPT_CN"), NULL, NULL},
+ {"O", CmdPrompt, _UU("CMD_MakeCert_PROMPT_O"), NULL, NULL},
+ {"OU", CmdPrompt, _UU("CMD_MakeCert_PROMPT_OU"), NULL, NULL},
+ {"C", CmdPrompt, _UU("CMD_MakeCert_PROMPT_C"), NULL, NULL},
+ {"ST", CmdPrompt, _UU("CMD_MakeCert_PROMPT_ST"), NULL, NULL},
+ {"L", CmdPrompt, _UU("CMD_MakeCert_PROMPT_L"), NULL, NULL},
+ {"SERIAL", CmdPrompt, _UU("CMD_MakeCert_PROMPT_SERIAL"), NULL, NULL},
+ {"EXPIRES", CmdPrompt, _UU("CMD_MakeCert_PROMPT_EXPIRES"), CmdEvalMinMax, &minmax},
+ {"SIGNCERT", NULL, NULL, CmdEvalIsFile, NULL},
+ {"SIGNKEY", NULL, NULL, CmdEvalIsFile, NULL},
+ {"SAVECERT", CmdPrompt, _UU("CMD_MakeCert_PROMPT_SAVECERT"), CmdEvalNotEmpty, NULL},
+ {"SAVEKEY", CmdPrompt, _UU("CMD_MakeCert_PROMPT_SAVEKEY"), CmdEvalNotEmpty, NULL},
+ };
+
+ // Get the parameter list
+ o = ParseCommandList(c, cmd_name, str, args, sizeof(args) / sizeof(args[0]));
+ if (o == NULL)
+ {
+ return ERR_INVALID_PARAMETER;
+ }
+
+ if (IsEmptyStr(GetParamStr(o, "SIGNCERT")) == false && IsEmptyStr(GetParamStr(o, "SIGNKEY")) == false)
+ {
+ root_x = FileToXW(GetParamUniStr(o, "SIGNCERT"));
+ root_k = FileToKW(GetParamUniStr(o, "SIGNKEY"), true, NULL);
+
+ if (root_x == NULL || root_k == NULL || CheckXandK(root_x, root_k) == false)
+ {
+ ret = ERR_INTERNAL_ERROR;
+
+ c->Write(c, _UU("CMD_MakeCert_ERROR_SIGNKEY"));
+ }
+ }
+
+ if (ret == ERR_NO_ERROR)
+ {
+ buf = StrToBin(GetParamStr(o, "SERIAL"));
+ if (buf != NULL && buf->Size >= 1)
+ {
+ x_serial = NewXSerial(buf->Buf, buf->Size);
+ }
+ FreeBuf(buf);
+
+ n = NewName(GetParamUniStr(o, "CN"), GetParamUniStr(o, "O"), GetParamUniStr(o, "OU"),
+ GetParamUniStr(o, "C"), GetParamUniStr(o, "ST"), GetParamUniStr(o, "L"));
+
+ days = GetParamInt(o, "EXPIRES");
+ if (days == 0)
+ {
+ days = 3650;
+ }
+
+ RsaGen(&pri, &pub, 2048);
+
+ if (root_x == NULL)
+ {
+ x = NewRootX(pub, pri, n, days, x_serial);
+ }
+ else
+ {
+ x = NewX(pub, root_k, root_x, n, days, x_serial);
+ }
+
+ FreeXSerial(x_serial);
+ FreeName(n);
+
+ if (x == NULL)
+ {
+ ret = ERR_INTERNAL_ERROR;
+ c->Write(c, _UU("CMD_MakeCert_ERROR_GEN_FAILED"));
+ }
+ else
+ {
+ if (XToFileW(x, GetParamUniStr(o, "SAVECERT"), true) == false)
+ {
+ c->Write(c, _UU("CMD_SAVECERT_FAILED"));
+ }
+ else if (KToFileW(pri, GetParamUniStr(o, "SAVEKEY"), true, NULL) == false)
+ {
+ c->Write(c, _UU("CMD_SAVEKEY_FAILED"));
+ }
+ }
+ }
+
+ if (ret != ERR_NO_ERROR)
+ {
+ // Error has occurred
+ CmdPrintError(c, ret);
+ }
+
+ // Release of the parameter list
+ FreeParamValueList(o);
+
+ FreeX(root_x);
+ FreeK(root_k);
+
+ FreeX(x);
+ FreeK(pri);
+ FreeK(pub);
+
+ return ret;
+}
// Client management tool main
void PcMain(PC *pc)
@@ -2754,6 +2880,7 @@ void PcMain(PC *pc)
{"KeepSet", PcKeepSet},
{"KeepGet", PcKeepGet},
{"MakeCert", PtMakeCert},
+ {"MakeCert2048", PtMakeCert2048},
{"TrafficClient", PtTrafficClient},
{"TrafficServer", PtTrafficServer},
};
@@ -6866,6 +6993,7 @@ void PsMain(PS *ps)
{"AcAdd6", PsAcAdd6},
{"AcDel", PsAcDel},
{"MakeCert", PtMakeCert},
+ {"MakeCert2048", PtMakeCert2048},
{"TrafficClient", PtTrafficClient},
{"TrafficServer", PtTrafficServer},
{"LicenseAdd", PsLicenseAdd},