亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? simpleca.c

?? simpleca 比起正式的CA來說功能簡單
?? C
?? 第 1 頁 / 共 4 頁
字號:
  }  if(strcmp(left, "ext-key-usage")==0) {    process_semicolonlist(&ext_usage, right);    return;  }  if(strcmp(left, "key-size")==0) {    keysize = atoi(right);    if(keysize<=0)      die("Illegal key size.");    return;  }  if(strcmp(left, "password")==0) {    password = right;    return;  }  if(strcmp(left, "start-date")==0) {    validfrom = process_date(right);    return;  }  if(strcmp(left, "end-date")==0) {    validto = process_date(right);    return;  }  if(strcmp(left, "crl-next-update")==0) {    crl_next_update = process_date(right);    return;  }  if(strcmp(left, "crldp")==0) {    crldp = right;    return;  }  if(strcmp(left, "view")==0) {    inputfile = right;    check_no_action();    action = ACTION_VIEW;    return;  }  if(strcmp(left, "priv-key")==0) {    keyfile = right;    return;  }  if(strcmp(left, "crl-contents")==0) {    if(inputfile) {      die("Input file already specified.");    }    inputfile = right;    return;  }  if(strcmp(left, "request")==0) {    inputfile = right;    return;  }  if(strcmp(left, "create-new-ca")==0) {    outputfile = right;    check_no_action();    action = ACTION_CREATECA;    return;  }  if(strcmp(left, "create-keys")==0) {    outputfile = right;    check_no_action();    action = ACTION_CREATEKEYS;    return;  }  if(strcmp(left, "create-request")==0) {    outputfile = right;    check_no_action();    action = ACTION_CREATEREQUEST;    return;  }  if(strcmp(left, "create-cert")==0) {    outputfile = right;    check_no_action();    action = ACTION_CREATECERT;    return;  }  if(strcmp(left, "create-crl")==0) {    outputfile = right;    check_no_action();    action = ACTION_CREATECRL;    return;  }  if(strcmp(left, "cert-dup-dir")==0) {    cert_dup_dir = right;    return;  }  fprintf(stderr, "ERROR: Unrecognized command line option \"%s\" with argument\n", left);  print_help_text();  exit(EXIT_FAILURE);}/* Process a singleton option (an option with no equals sign). */void process_singleton(char *val){  if(strcmp(val, "show-values")==0) {    show_values = TRUE;    return;  }  if(strcmp(val, "version")==0) {    print_version_info();    exit(EXIT_SUCCESS);  }  if(strcmp(val, "values")==0) {    check_no_action();    action = ACTION_VALUES;    return;  }  if(strcmp(val, "help")==0 || strcmp(val, "-help")==0 || strcmp(val, "--help")==0     || strcmp(val, "-?")==0 || strcmp(val, "/h")==0 ) {    print_version_info();    print_help_text();    exit(EXIT_SUCCESS);  }  fprintf(stderr, "ERROR: Unrecognized singleton command line option \"%s\".\n", val);  exit(EXIT_FAILURE);}/* Given a certificate and list of strings, interpret   the list of strings as subject information and set   it in the certificate.  The strings must start   with subject field names like "cn", then have a colon,   then the data.*//* Take a DN string from cryptlib in the format:   cn=Nathan\, Inc., o=Whitehead and Sons, c=US   Return a nice SimpleCA formatted string with the same info.   cn:Nathan, Inc.;o:Whitehead and Sons*/char *prettify_subject(char *subj){  char *t;  /* First substitute colons for equals signs (but not escaped equals) */  t=subj;  while((t=strchr(t, '='))) if(*(t-1)!='\\') *t=':'; else    {      /* For escaped equals, unescape. */      *(t-1)='=';      memmove(t, t+1, strlen(t));      t++;    }  /* Next substitute semicolons for commas (but not escaped commas) */  t=subj;  while((t=strchr(t, ','))) if(*(t-1)!='\\') *t=';'; else     {      /* What do we do if we get an escaped comma? Unescape it. */      *(t-1)=',';      memmove(t, t+1, strlen(t));      t++;    }  return subj;}void set_cert_dn(CRYPT_CERTIFICATE cert, struct stringlist *subj, char *request_info){  int res;  char *data, *result;  char *left, *right, *p;  struct stringlist *ptr;  result = "";  result = string_cat(result, request_info);  if(strlen(request_info)>0)    result = string_cat(result, ", ");  for(ptr = subj; ptr; ptr = ptr->next) {    data = ptr->item;    p=strchr(data, ':');    if(!p) {      fprintf(stderr, "ERROR: Could not find colon in %s.\n", data);      exit(EXIT_FAILURE);    }    *p=0;    left=data;    right=p+1;    result = string_cat(result, left);    result = string_cat(result, "=");    result = string_cat(result, right);    result = string_cat(result, ", ");  }  if(result[strlen(result)-2]==',')    result[strlen(result)-2]=0;  if(strlen(result)>0) {    res = cryptSetAttributeString(cert, CRYPT_CERTINFO_DN, result, strlen(result));    if(res)      die("Could not set subject name.");  } else {    /* In this case the subject should be blank */    warn("Empty subject.");#ifdef SET_FAUX_BLANK_SUBJECT    res = cryptSetAttributeString(cert, CRYPT_CERTINFO_DN, "cn=[UNUSED]", 11);    if(res) die("Could not set faux-blank subject.");#endif  }}void set_cert_gn(CRYPT_CERTIFICATE cert, struct stringlist *subj){  int res;  char *data;  char *left, *right, *p;  char buffer[MAXBUF];  struct stringlist *ptr;  /* Process in reverse order so later ones get set first     (cryptlib does not allow overwriting of already set values) */  stringlist_reverse(&subj);  for(ptr = subj; ptr; ptr = ptr->next) {    data = ptr->item;    p=strchr(data, ':');    if(!p) {      fprintf(stderr, "ERROR: Could not find colon in %s.\n", data);      exit(EXIT_FAILURE);    }    *p=0;    left=data;    right=p+1;    /* Now actually interpret the left side */    if(strcasecmp(left, "email")==0) {      if(strlen(right)<8)	die("Email name must be 8 or more characters long.");      res = cryptSetAttributeString(cert, CRYPT_CERTINFO_RFC822NAME, right, strlen(right));      if(res) die("Could not set email name in alt-name.");      continue;    }    if(strcasecmp(left, "dns")==0) {      res = cryptSetAttributeString(cert, CRYPT_CERTINFO_DNSNAME, right, strlen(right));      if(res) die("Could not set DNS name in alt-name.");      continue;    }    if(strcasecmp(left, "ip")==0) {      int ip0, ip1, ip2, ip3;      res = sscanf(right, "%d.%d.%d.%d", &ip0, &ip1, &ip2, &ip3);      if(res!=4) die("Bad IP address format in alt-name.");      if(ip0<0 || ip1<0 || ip2<0 || ip3<0 || ip0>255 || ip1>255 || ip2>255 || ip3>255)	die("Bad IP address format in alt-name.");      buffer[0] = ip0;      buffer[1] = ip1;      buffer[2] = ip2;      buffer[3] = ip3;      buffer[4] = 0;      res = cryptSetAttributeString(cert, CRYPT_CERTINFO_IPADDRESS, buffer, 4);      if(res) die("Could not set IP in alt-name.");      continue;    }    fprintf(stderr, "WARNING: Unrecognized subj-alt field %s.\n", left);  }  stringlist_reverse(&subj);}/* Given a certificate, convert it into a string of   characters for output to a file or stdout. */char *export_cert(int cert){  int dataLength, res;  char *data;  res = cryptExportCert(NULL, &dataLength, CRYPT_CERTFORMAT_TEXT_CERTIFICATE, cert);  if(res) die("Certificate export failed.");  data = (char *)malloc(dataLength+FUDGE_FACTOR);  res = cryptExportCert(data, &dataLength, CRYPT_CERTFORMAT_TEXT_CERTIFICATE, cert);  if(res) die("Certificate export failed.");  return data;}/* Save a string to a file, but fail if the file already exists. */void save_nooverwrite(char *data, char *filename){  FILE *fp;  fp = fopen(filename, "rt");  if(fp) {    fclose(fp);    die("File already exists.");  }  fp = fopen(filename, "wt");  if(!fp) die("Unable to create file for writing.");  fprintf(fp, "%s", data);  fclose(fp);}/* Save a string to a file, but if the file already exists   then rename it to a time-stamped backup. */void save_carefully(char *data, char *filename){  FILE *fp;  char newfilename[MAXBUF];  struct tm *t;  time_t thetime;  fp = fopen(filename, "rt");  if(fp) {    fclose(fp);    thetime = time(NULL);    t = localtime(&thetime);    snprintf(newfilename, MAXBUF, "%s-%4d-%02d-%02d-%02d-%02d-%02d", filename, t->tm_year+1900, t->tm_mon+1,	     t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);    fprintf(stderr, "WARNING: Output file %s exists, renaming to %s.\n", filename, newfilename);    if(rename(filename, newfilename)) {      die("Renaming file failed.");    }  }  fp = fopen(filename, "wt");  if(!fp) die("Could not open file for writing.");  fprintf(fp, "%s", data);  fclose(fp);}/* Prompt for a password and return the user's answer. */char *get_pass(char *prompt){  char *p;#ifdef WIN32  char buffer[1024];  printf("%s", prompt);  fgets(buffer, 1024, stdin);  if(strlen(buffer)<MIN_PASSWORD_LENGTH) die("Password is too short.");  return strdup(buffer);#else  /* getpass() is deprecated, but simple to use */  /* The better UNIX way is to use termios stuff */  p=getpass(prompt);  if(strlen(p)<MIN_PASSWORD_LENGTH) die("Password is too short.");  return strdup(p);#endif}/* Display prompt and wait for input. */char *prompt(char *txt){  char buffer[BIGMAXBUF];  char *p;  printf("%s", txt);  fgets(buffer, BIGMAXBUF, stdin);  buffer[BIGMAXBUF-1]=0;  p=strchr(buffer, '\n');  if(p) *p=0;  return strdup(buffer);}/* Given information in the global variables,   create a pub/priv keypair and store to a file.*/void create_keys(void){  FILE *fp;  CRYPT_KEYSET keyset;  CRYPT_CONTEXT privkey;  int res;  if(!outputfile) die("There must be an output file specified.");  fp = fopen(outputfile, "rt");  if(fp) {    fclose(fp);    die("Output file already exists.");  }  res = cryptKeysetOpen(&keyset, 			CRYPT_UNUSED, 			CRYPT_KEYSET_FILE, 			outputfile, 			CRYPT_KEYOPT_CREATE);  if(res) die("Creating keyfile failed.");  res = cryptCreateContext(&privkey, CRYPT_UNUSED, CRYPT_ALGO_RSA);  if(res) die("Creating private key context failed.");  res = cryptSetAttributeString(privkey, CRYPT_CTXINFO_LABEL, "private", 7);  if(res) die("Setting label for private key failed.");  if(keysize<=0) {    warn("No keysize specified, using 1024 bits.\n");    keysize = 1024;  }  res = cryptSetAttribute(privkey, CRYPT_CTXINFO_KEYSIZE, keysize/8);  if(res) die("Setting key size failed.");  res = cryptGenerateKey(privkey);  if(res) die("Generation of private key failed.");  if(password==NULL) {    password = get_pass("Password for key being created: ");  }  res = cryptAddPrivateKey(keyset, privkey, password);  if(res) die("Adding private key to keyfile failed.");  res = cryptKeysetClose(keyset);  if(res) die("Closing keyfile failed.");  res = cryptDestroyContext(privkey);  if(res) die("Freeing private key failed.");}/* Given data in global variables, create   a certificate request. */void create_request(void){  CRYPT_KEYSET keyset;  CRYPT_CONTEXT privkey;  CRYPT_CERTIFICATE cert;  char *txt;  int res;  if(!outputfile) die("There must be an output file specified.");  /*  fp = fopen(outputfile, "rt");  if(fp) {    fclose(fp);    die("Output file already exists.");  }  */  if(keyfile==NULL) die("There must be a private key file specified.");  res = cryptKeysetOpen(&keyset, 			CRYPT_UNUSED, 			CRYPT_KEYSET_FILE, 			keyfile, 			CRYPT_KEYOPT_READONLY);  if(res) die("Opening private key file failed.");  if(password==NULL) {    password = get_pass("Password for private key: ");  }  res = cryptGetPrivateKey(keyset, &privkey, CRYPT_KEYID_NAME, "private", password);  if(res) die("Could not retrieve private key from private key file.");  res=cryptCreateCert(&cert, CRYPT_UNUSED, CRYPT_CERTTYPE_CERTREQUEST);  if(res) die("Creation of blank certificate failed.");  res=cryptSetAttribute(cert, CRYPT_CERTINFO_SUBJECTPUBLICKEYINFO, privkey);  if(res) die("Could not add public key to certificate request.");  res=cryptSetAttribute(cert, CRYPT_CERTINFO_SELFSIGNED, 1);  if(res) die("Could not set self-signed attribute for request.");  set_cert_dn(cert, subject, "");  set_cert_gn(cert, subject_alt);  res=cryptSignCert(cert, privkey);  if(res) die("Signing certificate request failed.");  txt=export_cert(cert);  /* Handle the case when outputfile is STDOUT as a special case     and output the text on stdout. */  if(strcmp(outputfile, "STDOUT")==0) {    printf("%s\n", txt);  } else {    save_carefully(txt, outputfile);  }  if(cert_dup_dir) {    char buffer[MAXBUF];    snprintf(buffer, MAXBUF, "%s/%s", cert_dup_dir, outputfile);    save_carefully(txt, buffer);  }  res = cryptDestroyContext(privkey);  if(res) die("Freeing private key failed.");  res = cryptKeysetClose(keyset);  if(res) die("Closing keyfile failed.");  res = cryptDestroyCert(cert);  if(res) die("Freeing certificate request failed.");}/* Import a certificate from a given filename.   If it fails the first time, turn down conformance level.*/CRYPT_CERTIFICATE import_cert(char *filename){  char buffer[BIGMAXBUF];  FILE *fp;  int res, length;  CRYPT_CERTIFICATE cert;  res=cryptSetAttribute( CRYPT_UNUSED, 			 CRYPT_OPTION_CERT_COMPLIANCELEVEL, 			 CRYPT_COMPLIANCELEVEL_STANDARD);  if(res) die("Could not set compliance level of Cryptlib.");  fp=fopen(filename, "rt");  if(!fp) die("Could not open file for certificate import.");  length = fread(buffer, 1, BIGMAXBUF, fp);  fclose(fp);  res = cryptImportCert(buffer, length, CRYPT_UNUSED, &cert);  if(res) {    warn("Importing certificate failed at STANDARD compliance level.");    res=cryptSetAttribute( CRYPT_UNUSED, 			   CRYPT_OPTION_CERT_COMPLIANCELEVEL, 			   CRYPT_COMPLIANCELEVEL_REDUCED);    if(res) die("Could not set compliance level of Cryptlib to reduced.");    res = cryptImportCert(buffer, length, CRYPT_UNUSED, &cert);    if(res) die("Importing certificate failed at REDUCED compliance level.");  }  return cert;}/* Given a certificate and two times (as seconds since 1970),   set the valid-from and valid-to dates on the certificate.*/void set_cert_valid_times(CRYPT_CERTIFICATE cert, int vfrom, int vto){  char buf[4];  int res;  /* Copy the 4 bytes of the integer directly into the buffer. */  memcpy(buf, &vfrom, 4);  /* Now consider the buffer as a string of length 4. */  res = cryptSetAttributeString(cert, CRYPT_CERTINFO_VALIDFROM, buf, 4);  if(res) die("Could not set valid-from time.");  memcpy(buf, &vto, 4);  res = cryptSetAttributeString(cert, CRYPT_CERTINFO_VALIDTO, buf, 4);  if(res) die("Could not set valid-to time.");}/* Given a certificate and time as seconds since 1970,   set the crl-next-update date on the certificate. */void set_crl_next_update(CRYPT_CERTIFICATE cert, int crltime){  char buf[4];  int res;  /* Copy the 4 bytes of the integer to the buffer. */  memcpy(buf, &crltime, 4);  /* Now consider the buffer as a string of length 4. */  res = cryptSetAttributeString(cert, CRYPT_CERTINFO_NEXTUPDATE, buf, 4);  if(res) die("Could not set CRL next-update time.");}/* Given a certificate and list of strings, set the key usage fields   on the certificate. */void set_key_usage(CRYPT_CERTIFICATE cert, struct stringlist *usage){  int i, flag;  int val, res;  struct stringlist *ptr;  val = 0;  for(ptr = usage; ptr; ptr=ptr->next) {    flag = FALSE;    for(i=0; i<NUM_USAGE; i++) {      if(strcasecmp(ptr->item, usagetable[i].txt)==0) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人不卡免费av| 国产精品一区二区三区四区| 欧美中文字幕一区二区三区亚洲| 国产精品乱码人人做人人爱| 97精品电影院| 亚洲综合色区另类av| 欧美二区乱c少妇| 日日摸夜夜添夜夜添精品视频| 91精品久久久久久久99蜜桃 | 国产一区二区三区四区在线观看| 欧美成人性战久久| 粉嫩av一区二区三区| 亚洲欧美激情小说另类| 欧美精品电影在线播放| 精品一区二区三区免费观看| 欧美激情综合在线| 日本丰满少妇一区二区三区| 日本美女一区二区| 中文字幕一区二区三区乱码在线| 欧美日韩一二三| 国产精品一区二区黑丝| 亚洲蜜臀av乱码久久精品| 8v天堂国产在线一区二区| 国产99久久久久久免费看农村| 一区二区三区精密机械公司| 日韩午夜激情av| a级精品国产片在线观看| 日日噜噜夜夜狠狠视频欧美人| 国产日韩欧美激情| 911精品国产一区二区在线| 国产成人精品免费| 天天综合色天天综合色h| 国产色婷婷亚洲99精品小说| 欧美视频在线播放| 丁香婷婷综合激情五月色| 亚洲国产精品久久久久秋霞影院 | 亚洲天堂中文字幕| 日韩精品中午字幕| 在线亚洲免费视频| 国产mv日韩mv欧美| 久久精品二区亚洲w码| 亚洲精品成人天堂一二三| 久久欧美一区二区| 欧美肥胖老妇做爰| 色婷婷国产精品综合在线观看| 久久精品国产澳门| 亚洲成人黄色小说| 亚洲精品国产视频| 欧美国产综合一区二区| 欧美成人一区二区| 在线91免费看| 欧美性三三影院| 95精品视频在线| 床上的激情91.| 经典三级视频一区| 日韩av电影一区| 爽爽淫人综合网网站| 一区二区三区四区在线| 国产精品网站在线播放| 国产午夜亚洲精品不卡| 日韩美女一区二区三区| 欧美一级理论片| 9191久久久久久久久久久| 欧美日韩高清一区二区不卡| 色婷婷国产精品久久包臀| 91在线你懂得| 欧美国产精品中文字幕| 精品欧美一区二区久久| 91精品国产综合久久久蜜臀粉嫩 | 国产成人自拍网| 国产美女在线精品| 国产乱码精品一区二区三| 国产一区二区三区久久久| 久久精品理论片| 精品亚洲欧美一区| 久久精品国产在热久久| 久久国产综合精品| 国产呦萝稀缺另类资源| 国产电影精品久久禁18| 国产高清视频一区| 国产91丝袜在线观看| 粉嫩av一区二区三区在线播放 | 午夜精彩视频在线观看不卡| 亚洲18女电影在线观看| 青娱乐精品视频在线| 青草av.久久免费一区| 久久99精品久久久久久国产越南| 麻豆成人综合网| 国产精一品亚洲二区在线视频| 国产精品456露脸| 成人av在线影院| 色婷婷综合久久久久中文一区二区 | 91视频一区二区三区| 一本久久a久久免费精品不卡| 91香蕉视频污| 欧美日本在线一区| 精品女同一区二区| 亚洲国产精品99久久久久久久久| 一区免费观看视频| 亚洲国产aⅴ天堂久久| 午夜国产不卡在线观看视频| 免费成人结看片| 国产麻豆视频一区二区| 99这里都是精品| 欧美喷潮久久久xxxxx| 精品乱码亚洲一区二区不卡| 国产精品久久久久久亚洲毛片 | 有坂深雪av一区二区精品| 青娱乐精品视频在线| 成人在线综合网站| 91福利视频在线| 日韩精品专区在线| 亚洲免费观看高清在线观看| 爽好多水快深点欧美视频| 国产精品资源在线看| 欧美综合视频在线观看| 欧美变态口味重另类| 亚洲伦理在线免费看| 久久成人免费网| 色婷婷狠狠综合| 久久久久99精品一区| 婷婷开心激情综合| 国产不卡一区视频| 欧美一区中文字幕| 国产精品不卡在线| 久久国产尿小便嘘嘘尿| 一本久久综合亚洲鲁鲁五月天| 精品久久国产字幕高潮| 一区二区三区波多野结衣在线观看| 日本在线观看不卡视频| 日韩欧美一区电影| 国产精品免费人成网站| 欧美aaaaaa午夜精品| 91视频观看视频| 久久亚洲一级片| 香蕉乱码成人久久天堂爱免费| 成人美女在线观看| 精品国产麻豆免费人成网站| 一个色在线综合| av一本久道久久综合久久鬼色| 欧美一区二区久久久| 亚洲大片免费看| 在线亚洲一区二区| 国产精品你懂的在线欣赏| 看片网站欧美日韩| 欧美日韩成人高清| 一区二区三区产品免费精品久久75| 粉嫩绯色av一区二区在线观看| 日韩精品一区在线| 日韩国产在线观看一区| 欧美日韩情趣电影| 亚洲综合av网| 在线精品亚洲一区二区不卡| 国产精品麻豆久久久| 国产精品一区二区三区网站| 精品福利在线导航| 男人的天堂久久精品| 欧美精品日韩综合在线| 亚洲成人动漫一区| 欧美日韩一区精品| 天天影视网天天综合色在线播放| 欧美日韩专区在线| 亚洲成人精品一区| 精品视频在线免费| 亚洲不卡一区二区三区| 欧美久久久久免费| 日韩国产欧美在线视频| 91精品国产福利在线观看| 日本亚洲电影天堂| 精品动漫一区二区三区在线观看| 久久99国内精品| 久久亚洲综合色一区二区三区| 精品一区二区三区免费观看| 精品国产一区二区在线观看| 国产乱码字幕精品高清av| 国产欧美日韩另类一区| 99久久精品国产麻豆演员表| 亚洲美女视频在线观看| 欧美性感一区二区三区| 天堂午夜影视日韩欧美一区二区| 91精品国产综合久久精品麻豆 | 亚洲午夜精品久久久久久久久| 欧美视频完全免费看| 日本不卡123| 国产欧美一区二区精品忘忧草| 成人午夜精品一区二区三区| 伊人婷婷欧美激情| 51精品视频一区二区三区| 经典三级一区二区| 亚洲日本韩国一区| 欧美男女性生活在线直播观看 | 成人黄色小视频| 一区二区三区丝袜| 日韩西西人体444www| 成人污污视频在线观看| 一区二区三区精品在线观看| 91精品视频网| 暴力调教一区二区三区| 五月激情综合婷婷| 亚洲国产精华液网站w|