#include "usbkey.h"
int BeepInfo(int length,int time){
int nRet;
char CMD_BUFFER[CMD_MAX_LEN]={0};
sprintf(CMD_BUFFER,"beep -f 4000 -l %d -d 500 -r %d",length,time);
nRet = system(CMD_BUFFER);
return nRet;
}
int sound_special(int long_times, int short_times){
if(long_times != 0){
BeepInfo(100000,long_times);
}
if(short_times != 0){
BeepInfo(1000,short_times);
}
}
static int log_console = 0;
void
enable_console_log(void) {
log_console = 1;
}
void
log_message(const int facility, const char *format, ...)
{
va_list args;
char buf[256];
va_start(args, format);
vsnprintf(buf, sizeof(buf), format, args);
va_end(args);
if (log_console) {
fprintf(stderr, "%s\n", buf);
}
syslog(facility, "%s", buf);
printf("%s",buf);
}
void data_dump(u8 *prompt, u8 *data, int len)
{
int i;
int prev;
int curr;
fprintf(stderr, "[%s] [length = %d]\n", prompt, len);
prev = curr = 0;
for (i = 0; i < len; i++) {
if (i == (prev + 16)) {
i = prev;
curr = prev + 16;
fprintf(stderr, " | ");
for (; i < curr; i++)
if (isprint(data[i]))
fprintf(stderr, "%c", data[i]);
else
fprintf(stderr, " ");
fprintf(stderr, "\n");
prev = curr;
}
fprintf(stderr, "%02x ", data[i]);
}
if (i != curr) {
curr = i;
for (; i < (prev + 16); i++)
fprintf(stderr, " ");
fprintf(stderr, " | ");
for (i = prev ; i < curr; i++) {
if (isprint(data[i]))
fprintf(stderr, "%c", data[i]);
else
fprintf(stderr, " ");
}
}
fprintf(stderr, "\n");
fflush(stderr);
}
LONG InitBackUpKey( BYTE *strNewPwd )
{
unsigned short nRet;
LONG rev = 0;
BYTE sysPasswd[ICARD_PWD_LEN], userPasswd[ICARD_PWD_LEN], lenTmp[4];
unsigned long fd;
int len = 0, pwdlen = ICARD_PWD_LEN;
memcpy(sysPasswd, "11111111", 8);
memcpy(userPasswd, "11111111", 8);
nRet = UK_InitToken(pwdlen, sysPasswd);
if( nRet != 0 )
{
log_message(LOG_DEBUG,"%s(): sys user Login Fail !rv = %d \n", __func__, nRet);
rev = IPSEC_FAIL;
goto end;
}
nRet = UK_Open( &fd );
if( nRet != 0 )
{
log_message(LOG_DEBUG,"%s(): Key Open Fail !rv = %d \n", __func__, nRet);
return IPSEC_FAIL;
}
nRet = UK_LoginSys( fd, pwdlen, sysPasswd);
if( nRet != 0 )
{
log_message(LOG_DEBUG,"%s(): sys user Login Fail !rv = %d \n", __func__, nRet);
rev = IPSEC_FAIL;
goto end;
}
if(strNewPwd != NULL)
{
/* 設置用戶PIN */
nRet = UK_InitPIN(fd, pwdlen, userPasswd );
if( nRet != 0 )
{
log_message(LOG_DEBUG,"%s(): Init User Pin Fail !rv = %d \n", __func__, nRet);
rev = IPSEC_FAIL;
goto end;
}
nRet = UK_LogOut(fd);
if( nRet != 0 )
{
log_message(LOG_DEBUG,"%s(): Logout Fail !rv = %d \n", __func__, nRet);
rev = IPSEC_FAIL;
}
nRet = UK_LoginUser( fd, pwdlen, userPasswd);
if( nRet != 0 )
{
log_message(LOG_DEBUG,"%s(): user Login Fail !rv = %d \n", __func__, nRet);
rev = IPSEC_FAIL;
goto end;
}
nRet = UK_SetPIN(fd, pwdlen, userPasswd, pwdlen, strNewPwd);
if( nRet != 0 )
{
log_message(LOG_DEBUG,"%s(): Set User New Pin Fail !rv = %d \n", __func__, nRet);
rev = IPSEC_FAIL;
goto end;
}
}
/* 創建長度文件 */
nRet = UK_CreateDataObject(fd, strlen(IPSEC_BACKUP_KEY_LEN_NAME), IPSEC_BACKUP_KEY_LEN_NAME);
if( nRet != 0 )
{
log_message(LOG_DEBUG,"%s(): Create Len File File Fail !rv = %d \n", __func__, nRet);
rev = IPSEC_FAIL;
goto end;
}
memset(lenTmp, 0x00, sizeof(lenTmp));
memcpy(lenTmp, (BYTE *)&len, 4);
#ifdef IPSEC_DUMP
data_dump("lenTmp",lenTmp,4);
#endif
nRet = UK_WriteDataObjectValue(fd, strlen(IPSEC_BACKUP_KEY_LEN_NAME), IPSEC_BACKUP_KEY_LEN_NAME,
4, lenTmp);
if( nRet != 0 )
{
log_message(LOG_DEBUG,"%s(): Set len File File Fail !rv = %d \n", __func__, nRet);
rev = IPSEC_FAIL;
goto end;
}
#if 0
/* 創建備份文件 */
nRet = UK_CreateDataObject(fd, strlen(IPSEC_BACKUP_KEY_NAME), IPSEC_BACKUP_KEY_NAME);
if( nRet != 0 )
{
log_message(LOG_DEBUG,"%s(): Create Bakcup key File Fail !rv = %lu \n", __func__, nRet);
rev = IPSEC_FAIL;
goto end;
}
#endif
end:
nRet = UK_LogOut(fd);
if( nRet != 0 )
{
log_message(LOG_DEBUG,"%s(): Logout Fail !rv = %d \n", __func__, nRet);
rev = IPSEC_FAIL;
}
UK_Close(fd);
if( rev != 0 )
return rev;
return 0;
}
LONG ReadBackUpKey( BYTE *sUserPwd,LONG *iDataLen, BYTE *sData )
{
LONG nRet, rev = 0;
unsigned long fd;
int pwdlen = ICARD_PWD_LEN;
BYTE keyLen[4];
int iTotalLen, iRsaNum, iIndex;
log_message(LOG_DEBUG,"\n******************* %s *************\n", __func__);
nRet = UK_Open( &fd );
if( nRet != 0 )
{
log_message(LOG_DEBUG,"%s(): Key Open Fail !rv = %d \n", __func__, nRet);
return IPSEC_FAIL;
}
#ifdef IPSEC_DUMP
data_dump("sUserPwd", sUserPwd, pwdlen);
#endif
nRet = UK_LoginUser( fd, pwdlen, sUserPwd);
if( nRet != 0 )
{
log_message(LOG_DEBUG,"%s(): user Login Fail !rv = %d \n", __func__, nRet);
rev = IPSEC_FAIL;
goto end;
}
memset(keyLen, 0x00, sizeof(keyLen));
/* 讀取檢測長度文件 */
nRet = UK_ReadDataObjectValue(fd, strlen(IPSEC_BACKUP_KEY_LEN_NAME),IPSEC_BACKUP_KEY_LEN_NAME, 4, keyLen);
if( nRet != 0 )
{
log_message(LOG_DEBUG,"%s(): Read key Len Fail !rv = %d \n", __func__, nRet);
rev = IPSEC_FAIL;
goto end;
}
#if IPSEC_DUMP
data_dump("keyLen",keyLen,4);
#endif
memcpy((BYTE *)iDataLen, keyLen, 4);
printf("*iDataLen=%d\n",*iDataLen);
// memset(sData, 0xff, *iDataLen );
memset(sData, 0xff, BUFF_MAX_LEN);
// bzero(sData,BUFF_MAX_LEN);
// memset(sData, 0x00, *iDataLen);
/* 讀取檢測密鑰備份文件 */
nRet = UK_ReadDataObjectValue(fd, strlen(IPSEC_BACKUP_KEY_NAME),IPSEC_BACKUP_KEY_NAME, *iDataLen, sData );
if( nRet != 0 )
{
log_message(LOG_DEBUG,"%s(): Read key backup file Fail !rv = %d ,*iDataLen=%d\n", __func__, nRet,*iDataLen);
rev = IPSEC_FAIL;
goto end;
}
printf("sangerhoo---------------\n");
#if IPSEC_DUMP
data_dump("Read Data", sData, *iDataLen);
#endif
end:
nRet = UK_LogOut(fd);
if( nRet != 0 )
{
log_message(LOG_DEBUG,"%s(): Logout Fail !rv = %d \n", __func__, nRet);
rev = IPSEC_FAIL;
}
UK_Close(fd);
if( rev != 0 )
{
//HSM_BEEP_ERR();
return rev;
}
//HSM_BEEP_SUCC();
return 0;
}
LONG WriteBackUpKey( BYTE *sUserPwd, LONG iDataLen, BYTE *sData )
{
unsigned short nRet, i = 0;
LONG rev = 0;
BYTE lenTmp[4];
unsigned long fd;
int pwdlen = ICARD_PWD_LEN;
int iTotalLen, iRsaNum;
if(sData == NULL){
log_message(LOG_ERR,"%s(): sData is null\n", __func__);
return IPSEC_FAIL;
}
nRet = UK_Open( &fd );
if( nRet != 0 )
{
log_message(LOG_DEBUG,"%s(): Key Open Fail !rv = %d \n", __func__, nRet);
return IPSEC_FAIL;
}
nRet = UK_LoginUser( fd, pwdlen, sUserPwd);
if( nRet != 0 )
{
log_message(LOG_DEBUG,"%s(): user Login Fail !rv = %d \n", __func__, nRet);
rev = IPSEC_FAIL;
goto end;
}
memset(lenTmp, 0x00, sizeof(lenTmp));
memcpy(lenTmp, (BYTE *)&iDataLen, 4);
nRet = UK_WriteDataObjectValue(fd, strlen(IPSEC_BACKUP_KEY_LEN_NAME), IPSEC_BACKUP_KEY_LEN_NAME,
4, lenTmp);
if( nRet != 0 )
{
log_message(LOG_DEBUG,"%s(): Set len File File Fail !rv = %d \n", __func__, nRet);
rev = IPSEC_FAIL;
goto end;
}
#if IPSEC_DUMP
data_dump("lenTmp",lenTmp,4);
#endif
log_message(LOG_DEBUG,"write len file succ****************************iDataLen=%d\n",iDataLen);
/* 創建備份文件 */
nRet = UK_CreateDataObject(fd, strlen(IPSEC_BACKUP_KEY_NAME), IPSEC_BACKUP_KEY_NAME);
if( nRet != 0 )
{
log_message(LOG_DEBUG,"%s(): Create Rsa Bakcup File(%d) Fail !rv = %d \n", __func__, i, nRet);
rev = IPSEC_FAIL;
goto end;
}
/* 寫備份文件 */
nRet = UK_WriteDataObjectValue(fd, strlen(IPSEC_BACKUP_KEY_NAME), IPSEC_BACKUP_KEY_NAME, iDataLen , sData );
if( nRet != 0 )
{
log_message(LOG_DEBUG,"%s(): Set keyBackup File Failed !rv = %d \n", __func__,nRet);
rev = IPSEC_FAIL;
goto end;
}
log_message(LOG_DEBUG,"Write %s Succ \n\n", IPSEC_BACKUP_KEY_NAME);
end:
log_message(LOG_DEBUG,"%s(): Logout \n", __func__);
nRet = UK_LogOut(fd);
if( nRet != 0 )
{
log_message(LOG_DEBUG,"%s(): Logout Fail !rv = %d \n", __func__, nRet);
rev = IPSEC_FAIL;
}
UK_Close(fd);
log_message(LOG_DEBUG,"%s(): UK_Close \n", __func__);
if( rev != 0 )
{
return rev;
}
return 0;
}
int GetFileContent(const char *fileName, LONG *iDataLen, BYTE *sData )
{
FILE* pFile;
long lSize;
char* buffer;
size_t result;
log_message(LOG_DEBUG,"%s(): fileName=%s\n", __func__,fileName);
if(fileName == NULL){
log_message(LOG_ERR,"%s(): fileName is null\n", __func__);
return IPSEC_FAIL;
}
pFile = fopen(fileName,"rb");
if (pFile == NULL) {
log_message(LOG_ERR,"%s(): fopen failed \n", __func__,strerror(errno));
goto end;
}
fseek(pFile , 0 , SEEK_END);
lSize = ftell(pFile);
printf("lSize=%d\n",lSize);
if(lSize>BUFF_MAX_LEN){
log_message(LOG_ERR,"%s(): file%s size is larger than BUFF_MAX_LEN %d \n", __func__,fileName,BUFF_MAX_LEN);
goto end;
}
rewind(pFile);
result = fread(sData, 1, lSize, pFile); // 返回值是讀取的內容數量
if (result != lSize) {
log_message(LOG_ERR,"%s(): Reading error result=%ld ,lSize=%ld\n", __func__,result,lSize);
goto end;
} // 返回值如果不和文件大小,讀錯誤
*iDataLen=lSize;
fclose(pFile);
return IPSEC_SUCC;
end:
*iDataLen=0;
fclose(pFile);
return IPSEC_FAIL;
}
int WriteFileContent(const char *fileName, LONG iDataLen, BYTE *sData ){
FILE* pFile;
long lSize;
char* buffer;
//char linBuffer[MAX_LIN_LEN];
size_t result;
log_message(LOG_DEBUG,"%s(): fileName =%s\n", __func__,fileName);
if(sData == NULL||fileName==NULL){
log_message(LOG_ERR,"%s(): sData or fileName is null\n", __func__);
return IPSEC_FAIL;
}
log_message(LOG_ERR,"%s(): iDataLen=%d\n", __func__,iDataLen);
pFile = fopen(fileName,"wb+");
if (pFile == NULL) {
log_message(LOG_ERR,"%s(): fopen file %s failed (%s)\n", __func__,fileName,strerror(errno));
goto end;
}
#ifdef IPSEC_DUMP
data_dump("sData",sData,iDataLen);
#endif
result = fwrite(sData,1,iDataLen,pFile);
printf("result=%d,iDataLen=%d\n",result,iDataLen);
if (result != iDataLen) {
log_message(LOG_ERR,"%s(): write recover file failed (%s--%d)\n", __func__,strerror(errno),errno);
goto end;
}
fclose(pFile);
return IPSEC_SUCC;
end:
// free(sData);
if(pFile != NULL)
{
fclose(pFile);
}
return IPSEC_FAIL;
}
LONG CheckKeyStat(void)
{
LONG nRet, nCounter;
nCounter = 0;
while(nCounter != IPSEC_MAX_CONUTER)
{
if((nRet = UK_CheckKeyIn()) == IPSEC_SUCC)
{
nCounter = IPSEC_MAX_CONUTER;
}
else
{
IPSEC_BEEP_PROMPT();
nCounter ++;
sleep(1);
}
}
if(nRet != IPSEC_SUCC)
{
log_message(LOG_ERR,"%s(): Check UsbKey Insert TimeOut \n", __func__);
return IPSEC_ERR_KEY;
}
return 0;
}
int BackupIpsecKey()
{
int nRet;
LONG iDataLen;
BYTE sData[BUFF_MAX_LEN]={0};
nRet = CheckKeyStat(); /* 檢測Key */
if( nRet != IPSEC_SUCC )
{
printf("checkkeystate failed\n");
IPSEC_BEEP_ERROR();
return nRet;
}
nRet = InitBackUpKey(WST_KEY_PWD);
if( nRet != IPSEC_SUCC )
{
printf("init backupkey failed\n");
IPSEC_BEEP_ERROR();
return IPSEC_FAIL;
}
nRet = GetFileContent(BACKUP_KEY_FILE,&iDataLen,sData);
if( nRet != IPSEC_SUCC )
{
printf("get file content failed nRet=%d\n",nRet);
IPSEC_BEEP_ERROR();
return IPSEC_FAIL;
}
if(iDataLen == 0)
{
printf("the backup key is empty\n");
IPSEC_BEEP_ERROR();
return IPSEC_ERR_EMTY_KEY;
}
nRet = WriteBackUpKey(WST_KEY_PWD,iDataLen,sData );
if( nRet != IPSEC_SUCC )
{
printf("write Backupkey failed nRet=%d\n",nRet);
IPSEC_BEEP_ERROR();
return IPSEC_FAIL;
}
IPSEC_BEEP_SUCC();
return IPSEC_SUCC;
}
int RecoverIpsecKey()
{
int nRet;
LONG rDataLen;
BYTE rData[BUFF_MAX_LEN]={0};
nRet = CheckKeyStat(); /* 檢測Key */
if( nRet != IPSEC_SUCC )
{
printf("check key failed\n");
IPSEC_BEEP_ERROR();
return nRet;
}
nRet=ReadBackUpKey(WST_KEY_PWD,&rDataLen,rData);
if( nRet != IPSEC_SUCC )
{
printf("read key failed\n");
IPSEC_BEEP_ERROR();
return IPSEC_FAIL;
}
nRet=WriteFileContent(RECOVER_KEY_FILE,rDataLen,rData);
if( nRet != IPSEC_SUCC )
{
printf("write content failed\n");
IPSEC_BEEP_ERROR();
return IPSEC_FAIL;
}
}
int main(int argc,char **argv)
{
int nRet,ch;
opterr=0;
char *opt;
char optFile[FILE_NAME_LEN]={0};
if(argc < 2)
{
goto usage;
}
opt = argv[1];
if(strcmp(opt,"-r") == 0){
nRet = RecoverIpsecKey();
return nRet;
}else if(strcmp(opt,"-b") == 0){
nRet = BackupIpsecKey();
return nRet;
}else{
goto usage;
}
usage:
printf("usage:%s -b|-r\n",argv[0]);
return IPSEC_FAIL;
}
******************* ReadBackUpKey *************
[sUserPwd] [length = 8]
31 31 31 31 31 31 31 31 | 11111111
sangerhoo---1
[keyLen] [length = 4]
64 06 00 00 | d
*iDataLen=1636
sangerhoo---1
sangerhoo---------------
[Read Data] [length = 1636]
2d 2d 2d 2d 2d 42 45 47 49 4e 20 52 53 41 20 50 | -----BEGIN RSA P
52 49 56 41 54 45 20 4b 45 59 2d 2d 2d 2d 2d 0d | RIVATE KEY-----
0a 4d 49 49 45 76 41 49 42 41 44 41 4e 42 67 6b | MIIEvAIBADANBgk
71 68 6b 69 47 39 77 30 42 41 51 45 46 41 41 53 | qhkiG9w0BAQEFAAS
43 42 4b 59 77 67 67 53 69 41 67 45 41 41 6f 49 | CBKYwggSiAgEAAoI
42 41 51 43 49 73 38 65 33 79 6f 6b 32 4d 35 39 | BAQCIs8e3yok2M59
58 44 39 49 4d 46 67 77 6c 68 2b 6b 33 0a 63 6a | XD9IMFgwlh+k3 cj
48 58 4b 6e 6c 76 77 4d 50 38 5a 77 4f 66 79 4a | HXKnlvwMP8ZwOfyJ
31 6e 2f 54 67 66 67 75 64 4c 31 79 62 52 47 4c | 1n/TgfgudL1ybRGL
42 6d 54 7a 6f 42 2f 39 69 47 78 66 69 54 63 6e | BmTzoB/9iGxfiTcn
4b 6d 55 67 67 56 2f 43 48 6a 41 66 5a 6f 2b 65 | KmUggV/CHjAfZo+e
6a 72 54 56 44 56 49 73 77 4a 0a 38 51 35 42 38 | jrTVDVIswJ 8Q5B8
4b 6d 6a 4d 55 54 6b 62 67 6e 34 4c 79 78 75 31 | KmjMUTkbgn4Lyxu1
72 65 6e 4e 37 67 75 67 31 35 55 44 4b 56 32 4f | renN7gug15UDKV2O
53 57 75 37 4c 62 58 42 74 54 52 49 56 32 4a 5a | SWu7LbXBtTRIV2JZ
56 66 52 59 6e 4a 61 56 32 4a 49 2b 48 77 73 52 | VfRYnJaV2JI+HwsR
70 43 4c 48 57 4c 6c 0a 43 33 38 59 77 2b 47 66 | pCLHWLl C38Yw+Gf
38 64 79 73 7a 49 47 6a 71 78 2f 35 65 49 49 61 | 8dyszIGjqx/5eIIa
51 4a 2f 48 76 43 5a 2b 6d 77 79 53 6f 77 61 54 | QJ/HvCZ+mwySowaT
69 37 77 62 34 79 67 2b 7a 43 39 76 7a 6a 65 49 | i7wb4yg+zC9vzjeI
35 30 77 48 57 52 6f 79 35 58 77 5a 39 39 70 64 | 50wHWRoy5XwZ99pd
56 6e 71 47 0a 75 59 2f 78 2b 62 50 7a 7a 53 4b | VnqG uY/x+bPzzSK
5a 6d 36 7a 68 35 56 78 6f 51 4f 75 61 72 6f 2b | Zm6zh5VxoQOuaro+
65 70 6f 41 39 2f 68 30 6e 4b 6c 55 4d 65 54 66 | epoA9/h0nKlUMeTf
64 49 77 64 4c 41 2b 6a 44 44 32 4f 56 57 55 59 | dIwdLA+jDD2OVWUY
39 53 65 70 6e 2f 62 59 33 41 52 57 46 6c 50 59 | 9Sepn/bY3ARWFlPY
68 0a 57 52 79 35 4a 43 66 52 46 41 57 39 41 67 | h WRy5JCfRFAW9Ag
4d 42 41 41 45 43 67 67 45 41 4e 63 65 38 76 39 | MBAAECggEANce8v9
4b 2f 6a 6f 4a 61 6f 6f 37 48 7a 52 64 7a 61 65 | K/joJaoo7HzRdzae
53 42 58 4e 33 68 4f 38 77 72 41 45 73 76 44 34 | SBXN3hO8wrAEsvD4
4b 62 69 32 59 4b 66 78 6e 41 31 61 7a 54 0a 51 | Kbi2YKfxnA1azT Q
43 51 42 30 6d 74 4c 49 73 54 79 68 6b 7a 59 4b | CQB0mtLIsTyhkzYK
35 57 42 43 4d 6b 53 7a 39 6f 66 38 6a 35 43 4f | 5WBCMkSz9of8j5CO
71 50 51 42 46 61 6c 53 73 55 64 45 75 7a 67 70 | qPQBFalSsUdEuzgp
74 79 65 42 6c 55 65 39 2b 50 76 50 59 73 4a 41 | tyeBlUe9+PvPYsJA
77 6e 55 43 6a 73 51 2f 34 6c 4e 0a 4a 34 56 31 | wnUCjsQ/4lN J4V1
45 59 79 6d 2f 50 78 67 62 78 4f 56 70 4e 59 52 | EYym/PxgbxOVpNYR
54 75 59 32 57 7a 32 4b 42 36 57 49 37 5a 5a 69 | TuY2Wz2KB6WI7ZZi
6d 6b 33 6b 64 6a 2b 79 57 46 30 67 4d 64 30 33 | mk3kdj+yWF0gMd03
76 44 71 61 31 56 35 74 41 32 65 6d 48 5a 57 68 | vDqa1V5tA2emHZWh
2b 2b 64 41 4b 71 42 7a 0a 73 66 59 39 4a 2b 53 | ++dAKqBz sfY9J+S
69 47 75 50 77 34 76 75 47 76 32 77 53 4c 61 4e | iGuPw4vuGv2wSLaN
4f 79 79 4c 54 34 77 46 32 69 64 75 50 51 65 79 | OyyLT4wF2iduPQey
67 47 35 34 77 6a 4a 49 52 57 48 31 4c 64 30 50 | gG54wjJIRWH1Ld0P
79 73 53 32 6d 49 51 4b 42 67 51 44 55 57 6c 32 | ysS2mIQKBgQDUWl2
71 79 55 71 35 0a 46 44 2f 64 74 4c 63 61 30 54 | qyUq5 FD/dtLca0T
77 68 68 30 78 61 4b 33 71 39 2f 77 55 57 56 6f | whh0xaK3q9/wUWVo
64 69 44 48 75 34 65 41 4c 33 49 72 64 69 76 6f | diDHu4eAL3Irdivo
48 70 55 41 73 4e 5a 64 68 59 73 36 65 70 75 47 | HpUAsNZdhYs6epuG
38 2f 7a 48 31 43 49 4a 64 62 34 51 73 52 46 76 | 8/zH1CIJdb4QsRFv
6a 41 0a 71 4b 63 48 63 30 4e 51 47 4e 38 49 2b | jA qKcHc0NQGN8I+
41 36 52 4e 76 56 65 48 61 50 63 42 67 7a 50 41 | A6RNvVeHaPcBgzPA
4e 52 59 34 4b 56 47 49 4d 43 57 4b 53 66 56 53 | NRY4KVGIMCWKSfVS
75 59 72 73 5a 65 73 63 75 74 6b 32 55 50 33 6b | uYrsZescutk2UP3k
68 54 4a 42 71 57 6a 42 55 59 39 58 6a 31 4e 0a | hTJBqWjBUY9Xj1N
64 45 54 71 71 50 6a 4a 65 51 4b 42 67 51 43 6b | dETqqPjJeQKBgQCk
7a 4d 37 2b 5a 64 42 32 66 47 4c 33 75 35 66 46 | zM7+ZdB2fGL3u5fF
6b 6a 62 2b 33 6e 43 32 71 52 69 6e 4e 37 38 49 | kjb+3nC2qRinN78I
49 6d 6e 4b 33 43 43 64 4c 4e 38 45 48 66 33 51 | ImnK3CCdLN8EHf3Q
77 64 43 57 70 56 30 6c 4b 58 78 79 0a 47 37 30 | wdCWpV0lKXxy G70
77 31 41 64 65 78 74 39 6a 45 61 62 64 64 30 6b | w1Adext9jEabdd0k
68 38 41 2f 55 4c 39 6f 45 42 74 58 30 53 48 6a | h8A/UL9oEBtX0SHj
79 37 36 74 38 30 38 2b 67 75 32 74 79 58 6b 53 | y76t808+gu2tyXkS
62 2f 39 71 41 32 69 6e 7a 71 41 30 43 32 2b 72 | b/9qA2inzqA0C2+r
6c 56 4e 68 36 74 55 70 55 0a 58 30 56 54 4c 4a | lVNh6tUpU X0VTLJ
51 66 41 55 66 76 34 4a 4d 57 66 63 65 48 61 31 | QfAUfv4JMWfceHa1
62 79 68 58 78 71 62 6f 65 52 5a 51 4b 42 67 43 | byhXxqboeRZQKBgC
4a 67 45 6f 4f 67 48 44 47 44 76 71 62 30 4a 79 | JgEoOgHDGDvqb0Jy
50 33 4e 51 57 30 63 6a 36 79 68 53 63 57 6a 6b | P3NQW0cj6yhScWjk
74 45 62 4a 77 4a 0a 71 30 6c 38 57 2f 61 48 72 | tEbJwJ q0l8W/aHr
79 6f 54 37 74 48 47 2f 46 4d 4a 35 70 44 4e 58 | yoT7tHG/FMJ5pDNX
46 6e 55 47 6d 59 34 67 78 70 65 54 6b 49 34 56 | FnUGmY4gxpeTkI4V
75 4e 49 56 62 4a 53 57 74 2b 51 34 42 65 71 50 | uNIVbJSWt+Q4BeqP
77 69 6a 70 7a 41 49 74 6f 57 71 78 4b 6a 4d 62 | wijpzAItoWqxKjMb
65 78 67 0a 6c 50 39 69 4e 6a 37 34 39 46 51 61 | exg lP9iNj749FQa
69 33 45 79 73 37 6e 6c 41 4d 6d 51 76 4e 78 52 | i3Eys7nlAMmQvNxR
63 33 67 7a 4e 4a 77 71 4d 45 77 49 67 59 74 54 | c3gzNJwqMEwIgYtT
6f 78 62 54 75 49 68 49 48 43 58 35 41 6f 47 41 | oxbTuIhIHCX5AoGA
45 47 58 55 6e 74 6d 51 6f 59 6d 45 36 33 4e 2b | EGXUntmQoYmE63N+
0a 43 59 6d 66 38 55 49 2b 34 74 33 32 64 77 55 | CYmf8UI+4t32dwU
44 2f 42 49 34 68 70 66 61 6f 75 6b 4a 45 38 62 | D/BI4hpfaoukJE8b
4d 4c 34 35 70 61 2b 50 75 58 62 6c 41 43 62 61 | ML45pa+PuXblACba
61 33 35 58 70 57 64 50 64 2f 47 53 51 50 75 38 | a35XpWdPd/GSQPu8
55 6c 73 7a 6c 4e 6b 37 41 6d 61 2f 34 0a 63 41 | UlszlNk7Ama/4 cA
4d 61 44 63 6f 74 50 52 46 79 55 6d 4c 7a 73 51 | MaDcotPRFyUmLzsQ
43 53 51 52 64 33 4c 57 55 48 30 5a 66 43 47 36 | CSQRd3LWUH0ZfCG6
75 34 4e 72 4e 33 69 74 59 70 48 44 59 53 6c 74 | u4NrN3itYpHDYSlt
45 54 74 2f 59 50 71 31 32 6b 4a 52 50 45 32 38 | ETt/YPq12kJRPE28
4f 68 64 69 59 30 46 2f 38 42 0a 66 45 55 43 67 | OhdiY0F/8B fEUCg
59 42 57 64 4b 4b 72 6d 6a 43 64 70 7a 2b 2b 68 | YBWdKKrmjCdpz++h
42 65 6b 78 36 31 58 32 4c 48 71 44 6d 79 6a 6e | Bekx61X2LHqDmyjn
45 75 52 49 53 30 4f 79 6a 4f 46 56 6f 63 46 4e | EuRIS0OyjOFVocFN
5a 33 31 7a 41 74 4e 72 72 71 74 43 55 77 75 32 | Z31zAtNrrqtCUwu2
43 31 38 61 47 7a 69 0a 6a 71 67 6b 67 51 47 72 | C18aGzi jqgkgQGr
31 37 62 32 4f 6f 49 4e 6e 63 37 4e 55 6d 62 75 | 17b2OoINnc7NUmbu
6e 51 32 43 78 7a 61 55 4b 57 67 42 76 77 4e 34 | nQ2CxzaUKWgBvwN4
43 7a 53 33 49 59 53 69 76 58 32 38 58 52 63 46 | CzS3IYSivX28XRcF
4d 54 38 34 30 62 2f 44 49 6f 46 6b 77 31 44 2b | MT840b/DIoFkw1D+
48 34 46 55 0a 77 74 6f 48 6a 2b 6d 6b 39 4a 4e | H4FU wtoHj+mk9JN
62 37 4b 57 43 36 6a 6b 32 73 61 6e 67 65 72 68 | b7KWC6jk2sangerh
6f 6f 3d 3d 0a 2d 2d 2d 2d 2d 45 4e 44 20 52 53 | oo== -----END RS
41 20 50 52 49 56 41 54 45 20 4b 45 59 2d 2d 2d | A PRIVATE KEY---
2d 2d 0d 0a | --
WriteFileContent(): fileName =/sslvpn/conf/sslx_certs/myserver.key.pem
WriteFileContent(): iDataLen=1636
[sData] [length = 1636]
2d 2d 2d 2d 2d 42 45 47 49 4e 20 52 53 41 20 50 | -----BEGIN RSA P
52 49 56 41 54 45 20 4b 45 59 2d 2d 2d 2d 2d 0d | RIVATE KEY-----
0a 4d 49 49 45 76 41 49 42 41 44 41 4e 42 67 6b | MIIEvAIBADANBgk
71 68 6b 69 47 39 77 30 42 41 51 45 46 41 41 53 | qhkiG9w0BAQEFAAS
43 42 4b 59 77 67 67 53 69 41 67 45 41 41 6f 49 | CBKYwggSiAgEAAoI
42 41 51 43 49 73 38 65 33 79 6f 6b 32 4d 35 39 | BAQCIs8e3yok2M59
58 44 39 49 4d 46 67 77 6c 68 2b 6b 33 0a 63 6a | XD9IMFgwlh+k3 cj
48 58 4b 6e 6c 76 77 4d 50 38 5a 77 4f 66 79 4a | HXKnlvwMP8ZwOfyJ
31 6e 2f 54 67 66 67 75 64 4c 31 79 62 52 47 4c | 1n/TgfgudL1ybRGL
42 6d 54 7a 6f 42 2f 39 69 47 78 66 69 54 63 6e | BmTzoB/9iGxfiTcn
4b 6d 55 67 67 56 2f 43 48 6a 41 66 5a 6f 2b 65 | KmUggV/CHjAfZo+e
6a 72 54 56 44 56 49 73 77 4a 0a 38 51 35 42 38 | jrTVDVIswJ 8Q5B8
4b 6d 6a 4d 55 54 6b 62 67 6e 34 4c 79 78 75 31 | KmjMUTkbgn4Lyxu1
72 65 6e 4e 37 67 75 67 31 35 55 44 4b 56 32 4f | renN7gug15UDKV2O
53 57 75 37 4c 62 58 42 74 54 52 49 56 32 4a 5a | SWu7LbXBtTRIV2JZ
56 66 52 59 6e 4a 61 56 32 4a 49 2b 48 77 73 52 | VfRYnJaV2JI+HwsR
70 43 4c 48 57 4c 6c 0a 43 33 38 59 77 2b 47 66 | pCLHWLl C38Yw+Gf
38 64 79 73 7a 49 47 6a 71 78 2f 35 65 49 49 61 | 8dyszIGjqx/5eIIa
51 4a 2f 48 76 43 5a 2b 6d 77 79 53 6f 77 61 54 | QJ/HvCZ+mwySowaT
69 37 77 62 34 79 67 2b 7a 43 39 76 7a 6a 65 49 | i7wb4yg+zC9vzjeI
35 30 77 48 57 52 6f 79 35 58 77 5a 39 39 70 64 | 50wHWRoy5XwZ99pd
56 6e 71 47 0a 75 59 2f 78 2b 62 50 7a 7a 53 4b | VnqG uY/x+bPzzSK
5a 6d 36 7a 68 35 56 78 6f 51 4f 75 61 72 6f 2b | Zm6zh5VxoQOuaro+
65 70 6f 41 39 2f 68 30 6e 4b 6c 55 4d 65 54 66 | epoA9/h0nKlUMeTf
64 49 77 64 4c 41 2b 6a 44 44 32 4f 56 57 55 59 | dIwdLA+jDD2OVWUY
39 53 65 70 6e 2f 62 59 33 41 52 57 46 6c 50 59 | 9Sepn/bY3ARWFlPY
68 0a 57 52 79 35 4a 43 66 52 46 41 57 39 41 67 | h WRy5JCfRFAW9Ag
4d 42 41 41 45 43 67 67 45 41 4e 63 65 38 76 39 | MBAAECggEANce8v9
4b 2f 6a 6f 4a 61 6f 6f 37 48 7a 52 64 7a 61 65 | K/joJaoo7HzRdzae
53 42 58 4e 33 68 4f 38 77 72 41 45 73 76 44 34 | SBXN3hO8wrAEsvD4
4b 62 69 32 59 4b 66 78 6e 41 31 61 7a 54 0a 51 | Kbi2YKfxnA1azT Q
43 51 42 30 6d 74 4c 49 73 54 79 68 6b 7a 59 4b | CQB0mtLIsTyhkzYK
35 57 42 43 4d 6b 53 7a 39 6f 66 38 6a 35 43 4f | 5WBCMkSz9of8j5CO
71 50 51 42 46 61 6c 53 73 55 64 45 75 7a 67 70 | qPQBFalSsUdEuzgp
74 79 65 42 6c 55 65 39 2b 50 76 50 59 73 4a 41 | tyeBlUe9+PvPYsJA
77 6e 55 43 6a 73 51 2f 34 6c 4e 0a 4a 34 56 31 | wnUCjsQ/4lN J4V1
45 59 79 6d 2f 50 78 67 62 78 4f 56 70 4e 59 52 | EYym/PxgbxOVpNYR
54 75 59 32 57 7a 32 4b 42 36 57 49 37 5a 5a 69 | TuY2Wz2KB6WI7ZZi
6d 6b 33 6b 64 6a 2b 79 57 46 30 67 4d 64 30 33 | mk3kdj+yWF0gMd03
76 44 71 61 31 56 35 74 41 32 65 6d 48 5a 57 68 | vDqa1V5tA2emHZWh
2b 2b 64 41 4b 71 42 7a 0a 73 66 59 39 4a 2b 53 | ++dAKqBz sfY9J+S
69 47 75 50 77 34 76 75 47 76 32 77 53 4c 61 4e | iGuPw4vuGv2wSLaN
4f 79 79 4c 54 34 77 46 32 69 64 75 50 51 65 79 | OyyLT4wF2iduPQey
67 47 35 34 77 6a 4a 49 52 57 48 31 4c 64 30 50 | gG54wjJIRWH1Ld0P
79 73 53 32 6d 49 51 4b 42 67 51 44 55 57 6c 32 | ysS2mIQKBgQDUWl2
71 79 55 71 35 0a 46 44 2f 64 74 4c 63 61 30 54 | qyUq5 FD/dtLca0T
77 68 68 30 78 61 4b 33 71 39 2f 77 55 57 56 6f | whh0xaK3q9/wUWVo
64 69 44 48 75 34 65 41 4c 33 49 72 64 69 76 6f | diDHu4eAL3Irdivo
48 70 55 41 73 4e 5a 64 68 59 73 36 65 70 75 47 | HpUAsNZdhYs6epuG
38 2f 7a 48 31 43 49 4a 64 62 34 51 73 52 46 76 | 8/zH1CIJdb4QsRFv
6a 41 0a 71 4b 63 48 63 30 4e 51 47 4e 38 49 2b | jA qKcHc0NQGN8I+
41 36 52 4e 76 56 65 48 61 50 63 42 67 7a 50 41 | A6RNvVeHaPcBgzPA
4e 52 59 34 4b 56 47 49 4d 43 57 4b 53 66 56 53 | NRY4KVGIMCWKSfVS
75 59 72 73 5a 65 73 63 75 74 6b 32 55 50 33 6b | uYrsZescutk2UP3k
68 54 4a 42 71 57 6a 42 55 59 39 58 6a 31 4e 0a | hTJBqWjBUY9Xj1N
64 45 54 71 71 50 6a 4a 65 51 4b 42 67 51 43 6b | dETqqPjJeQKBgQCk
7a 4d 37 2b 5a 64 42 32 66 47 4c 33 75 35 66 46 | zM7+ZdB2fGL3u5fF
6b 6a 62 2b 33 6e 43 32 71 52 69 6e 4e 37 38 49 | kjb+3nC2qRinN78I
49 6d 6e 4b 33 43 43 64 4c 4e 38 45 48 66 33 51 | ImnK3CCdLN8EHf3Q
77 64 43 57 70 56 30 6c 4b 58 78 79 0a 47 37 30 | wdCWpV0lKXxy G70
77 31 41 64 65 78 74 39 6a 45 61 62 64 64 30 6b | w1Adext9jEabdd0k
68 38 41 2f 55 4c 39 6f 45 42 74 58 30 53 48 6a | h8A/UL9oEBtX0SHj
79 37 36 74 38 30 38 2b 67 75 32 74 79 58 6b 53 | y76t808+gu2tyXkS
62 2f 39 71 41 32 69 6e 7a 71 41 30 43 32 2b 72 | b/9qA2inzqA0C2+r
6c 56 4e 68 36 74 55 70 55 0a 58 30 56 54 4c 4a | lVNh6tUpU X0VTLJ
51 66 41 55 66 76 34 4a 4d 57 66 63 65 48 61 31 | QfAUfv4JMWfceHa1
62 79 68 58 78 71 62 6f 65 52 5a 51 4b 42 67 43 | byhXxqboeRZQKBgC
4a 67 45 6f 4f 67 48 44 47 44 76 71 62 30 4a 79 | JgEoOgHDGDvqb0Jy
50 33 4e 51 57 30 63 6a 36 79 68 53 63 57 6a 6b | P3NQW0cj6yhScWjk
74 45 62 4a 77 4a 0a 71 30 6c 38 57 2f 61 48 72 | tEbJwJ q0l8W/aHr
79 6f 54 37 74 48 47 2f 46 4d 4a 35 70 44 4e 58 | yoT7tHG/FMJ5pDNX
46 6e 55 47 6d 59 34 67 78 70 65 54 6b 49 34 56 | FnUGmY4gxpeTkI4V
75 4e 49 56 62 4a 53 57 74 2b 51 34 42 65 71 50 | uNIVbJSWt+Q4BeqP
77 69 6a 70 7a 41 49 74 6f 57 71 78 4b 6a 4d 62 | wijpzAItoWqxKjMb
65 78 67 0a 6c 50 39 69 4e 6a 37 34 39 46 51 61 | exg lP9iNj749FQa
69 33 45 79 73 37 6e 6c 41 4d 6d 51 76 4e 78 52 | i3Eys7nlAMmQvNxR
63 33 67 7a 4e 4a 77 71 4d 45 77 49 67 59 74 54 | c3gzNJwqMEwIgYtT
6f 78 62 54 75 49 68 49 48 43 58 35 41 6f 47 41 | oxbTuIhIHCX5AoGA
45 47 58 55 6e 74 6d 51 6f 59 6d 45 36 33 4e 2b | EGXUntmQoYmE63N+
0a 43 59 6d 66 38 55 49 2b 34 74 33 32 64 77 55 | CYmf8UI+4t32dwU
44 2f 42 49 34 68 70 66 61 6f 75 6b 4a 45 38 62 | D/BI4hpfaoukJE8b
4d 4c 34 35 70 61 2b 50 75 58 62 6c 41 43 62 61 | ML45pa+PuXblACba
61 33 35 58 70 57 64 50 64 2f 47 53 51 50 75 38 | a35XpWdPd/GSQPu8
55 6c 73 7a 6c 4e 6b 37 41 6d 61 2f 34 0a 63 41 | UlszlNk7Ama/4 cA
4d 61 44 63 6f 74 50 52 46 79 55 6d 4c 7a 73 51 | MaDcotPRFyUmLzsQ
43 53 51 52 64 33 4c 57 55 48 30 5a 66 43 47 36 | CSQRd3LWUH0ZfCG6
75 34 4e 72 4e 33 69 74 59 70 48 44 59 53 6c 74 | u4NrN3itYpHDYSlt
45 54 74 2f 59 50 71 31 32 6b 4a 52 50 45 32 38 | ETt/YPq12kJRPE28
4f 68 64 69 59 30 46 2f 38 42 0a 66 45 55 43 67 | OhdiY0F/8B fEUCg
59 42 57 64 4b 4b 72 6d 6a 43 64 70 7a 2b 2b 68 | YBWdKKrmjCdpz++h
42 65 6b 78 36 31 58 32 4c 48 71 44 6d 79 6a 6e | Bekx61X2LHqDmyjn
45 75 52 49 53 30 4f 79 6a 4f 46 56 6f 63 46 4e | EuRIS0OyjOFVocFN
5a 33 31 7a 41 74 4e 72 72 71 74 43 55 77 75 32 | Z31zAtNrrqtCUwu2
43 31 38 61 47 7a 69 0a 6a 71 67 6b 67 51 47 72 | C18aGzi jqgkgQGr
31 37 62 32 4f 6f 49 4e 6e 63 37 4e 55 6d 62 75 | 17b2OoINnc7NUmbu
6e 51 32 43 78 7a 61 55 4b 57 67 42 76 77 4e 34 | nQ2CxzaUKWgBvwN4
43 7a 53 33 49 59 53 69 76 58 32 38 58 52 63 46 | CzS3IYSivX28XRcF
4d 54 38 34 30 62 2f 44 49 6f 46 6b 77 31 44 2b | MT840b/DIoFkw1D+
48 34 46 55 0a 77 74 6f 48 6a 2b 6d 6b 39 4a 4e | H4FU wtoHj+mk9JN
62 37 4b 57 43 36 6a 6b 32 73 61 6e 67 65 72 68 | b7KWC6jk2sangerh
6f 6f 3d 3d 0a 2d 2d 2d 2d 2d 45 4e 44 20 52 53 | oo== -----END RS
41 20 50 52 49 56 41 54 45 20 4b 45 59 2d 2d 2d | A PRIVATE KEY---
2d 2d 0d 0a | --
result=0,iDataLen=1636
WriteFileContent(): write recover file failed (Bad address--14)
write content failed
sh: beep: command not found