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

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

?? r_enhanc.c

?? 一個測試DES加密算法和測試程序
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* R_ENHANC.C - cryptographic enhancements for RSAREF
 */

/* Copyright (C) RSA Laboratories, a division of RSA Data Security,
     Inc., created 1991. All rights reserved.
 */

#include "global.h"
#include "rsaref.h"
#include "r_random.h"
#include "rsa.h"

/* DigestInfo encoding is DIGEST_INFO_A, then 2 or 5 (for MD2/MD5),
   then DIGEST_INFO_B, then 16-byte message digest.
 */

static unsigned char DIGEST_INFO_A[] = {
  0x30, 0x20, 0x30, 0x0c, 0x06, 0x08, 0x2a, 0x86, 0x48, 0x86, 0xf7,
  0x0d, 0x02
};
#define DIGEST_INFO_A_LEN sizeof (DIGEST_INFO_A)

static unsigned char DIGEST_INFO_B[] = { 0x05, 0x00, 0x04, 0x10 };
#define DIGEST_INFO_B_LEN sizeof (DIGEST_INFO_B)

#define DIGEST_INFO_LEN (DIGEST_INFO_A_LEN + 1 + DIGEST_INFO_B_LEN + 16)

static unsigned char *PADDING[] = {
  (unsigned char *)"", (unsigned char *)"\001", (unsigned char *)"\002\002",
  (unsigned char *)"\003\003\003", (unsigned char *)"\004\004\004\004",
  (unsigned char *)"\005\005\005\005\005",
  (unsigned char *)"\006\006\006\006\006\006", 
  (unsigned char *)"\007\007\007\007\007\007\007",
  (unsigned char *)"\010\010\010\010\010\010\010\010"
};

#define MAX_ENCRYPTED_KEY_LEN MAX_RSA_MODULUS_LEN

static void R_EncodeDigestInfo PROTO_LIST
  ((unsigned char *, int, unsigned char *));
static void EncryptPEMUpdateFinal PROTO_LIST
  ((R_ENVELOPE_CTX *, unsigned char *, unsigned int *, unsigned char *,
    unsigned int));
static int DecryptPEMUpdateFinal PROTO_LIST
  ((R_ENVELOPE_CTX *, unsigned char *, unsigned int *, unsigned char *,
    unsigned int));
static int CipherInit PROTO_LIST
  ((R_ENVELOPE_CTX *, int, unsigned char *, unsigned char *, int));
static void CipherUpdate PROTO_LIST
  ((R_ENVELOPE_CTX *, unsigned char *, unsigned char *, unsigned int));
static void CipherRestart PROTO_LIST ((R_ENVELOPE_CTX *));

int R_DigestInit (context, digestAlgorithm)
R_DIGEST_CTX *context;                                       /* new context */
int digestAlgorithm;                            /* message-digest algorithm */
{
  context->digestAlgorithm = digestAlgorithm;

  switch (digestAlgorithm) {
  case DA_MD2:
    MD2Init (&context->context.md2);
    break;

  case DA_MD5:
    MD5Init (&context->context.md5);
    break;
  
  default:
    return (RE_DIGEST_ALGORITHM);
  }

  return (0);
}

int R_DigestUpdate (context, partIn, partInLen)
R_DIGEST_CTX *context;                                           /* context */
unsigned char *partIn;                                    /* next data part */
unsigned int partInLen;                         /* length of next data part */
{
  if (context->digestAlgorithm == DA_MD2)
    MD2Update (&context->context.md2, partIn, partInLen);
  else
    MD5Update (&context->context.md5, partIn, partInLen);
  return (0);
}

int R_DigestFinal (context, digest, digestLen)
R_DIGEST_CTX *context;                                           /* context */
unsigned char *digest;                                    /* message digest */
unsigned int *digestLen;                        /* length of message digest */
{
  *digestLen = 16;
  if (context->digestAlgorithm == DA_MD2)
    MD2Final (digest, &context->context.md2);
  else
    MD5Final (digest, &context->context.md5);

  return (0);
}

int R_SignInit (context, digestAlgorithm)
R_SIGNATURE_CTX *context;                                    /* new context */
int digestAlgorithm;                            /* message-digest algorithm */
{
  return (R_DigestInit (&context->digestContext, digestAlgorithm));
}

int R_SignUpdate (context, partIn, partInLen)
R_SIGNATURE_CTX *context;                                        /* context */
unsigned char *partIn;                                    /* next data part */
unsigned int partInLen;                         /* length of next data part */
{
  return (R_DigestUpdate (&context->digestContext, partIn, partInLen));
}

int R_SignFinal (context, signature, signatureLen, privateKey)
R_SIGNATURE_CTX *context;                                        /* context */
unsigned char *signature;                                      /* signature */
unsigned int *signatureLen;                          /* length of signature */
R_RSA_PRIVATE_KEY *privateKey;                  /* signer's RSA private key */
{
  int status;
  unsigned char digest[MAX_DIGEST_LEN], digestInfo[DIGEST_INFO_LEN];
  unsigned int digestLen;

  do {
    if ((status = R_DigestFinal (&context->digestContext, digest, &digestLen))
        != 0)
      break;

    R_EncodeDigestInfo
      (digestInfo, context->digestContext.digestAlgorithm, digest);
    
    if (RSAPrivateEncrypt
        (signature, signatureLen, digestInfo, DIGEST_INFO_LEN, privateKey)
        != 0) {
      status = RE_PRIVATE_KEY;
      break;
    }

    /* Reset for another verification. Assume Init won't fail */
    R_DigestInit
      (&context->digestContext, context->digestContext.digestAlgorithm);
  } while (0);
  
  /* Zeroize potentially sensitive information.
   */
  R_memset ((POINTER)digest, 0, sizeof (digest));
  R_memset ((POINTER)digestInfo, 0, sizeof (digestInfo));

  return (status);
}

int R_VerifyInit (context, digestAlgorithm)
R_SIGNATURE_CTX *context;                                    /* new context */
int digestAlgorithm;                            /* message-digest algorithm */
{
  return (R_DigestInit (&context->digestContext, digestAlgorithm));
}

int R_VerifyUpdate (context, partIn, partInLen)
R_SIGNATURE_CTX *context;                                        /* context */
unsigned char *partIn;                                    /* next data part */
unsigned int partInLen;                         /* length of next data part */
{
  return (R_DigestUpdate (&context->digestContext, partIn, partInLen));
}

int R_VerifyFinal (context, signature, signatureLen, publicKey)
R_SIGNATURE_CTX *context;                                        /* context */
unsigned char *signature;                                      /* signature */
unsigned int signatureLen;                           /* length of signature */
R_RSA_PUBLIC_KEY *publicKey;                     /* signer's RSA public key */
{
  int status;
  unsigned char digest[MAX_DIGEST_LEN], digestInfo[DIGEST_INFO_LEN],
    originalDigestInfo[MAX_SIGNATURE_LEN];
  unsigned int originalDigestInfoLen, digestLen;
  
  if (signatureLen > MAX_SIGNATURE_LEN)
    return (RE_LEN);

  status = 0;
  do {
    if ((status = R_DigestFinal (&context->digestContext, digest, &digestLen))
        != 0)
      break;

    R_EncodeDigestInfo
      (digestInfo, context->digestContext.digestAlgorithm, digest);
    
    if (RSAPublicDecrypt
        (originalDigestInfo, &originalDigestInfoLen, signature, signatureLen, 
         publicKey) != 0) {
      status = RE_PUBLIC_KEY;
      break;
    }
    
    if ((originalDigestInfoLen != DIGEST_INFO_LEN) ||
        (R_memcmp 
         ((POINTER)originalDigestInfo, (POINTER)digestInfo,
          DIGEST_INFO_LEN))) {
      status = RE_SIGNATURE;
      break;
    }

    /* Reset for another verification. Assume Init won't fail */
    R_DigestInit
      (&context->digestContext, context->digestContext.digestAlgorithm);
  } while (0);
  
  /* Zeroize potentially sensitive information.
   */
  R_memset ((POINTER)digest, 0, sizeof (digest));
  R_memset ((POINTER)digestInfo, 0, sizeof (digestInfo));
  R_memset ((POINTER)originalDigestInfo, 0, sizeof (originalDigestInfo));

  return (status);
}

/* Caller must ASCII recode the encrypted keys if desired.
 */
int R_SealInit
  (context, encryptedKeys, encryptedKeyLens, iv, publicKeyCount, publicKeys,
   encryptionAlgorithm, randomStruct)
R_ENVELOPE_CTX *context;                                     /* new context */
unsigned char **encryptedKeys;                            /* encrypted keys */
unsigned int *encryptedKeyLens;                /* lengths of encrypted keys */
unsigned char iv[8];                               /* initialization vector */
unsigned int publicKeyCount;                       /* number of public keys */
R_RSA_PUBLIC_KEY **publicKeys;                               /* public keys */
int encryptionAlgorithm;                       /* data encryption algorithm */
R_RANDOM_STRUCT *randomStruct;                          /* random structure */
{
  int status;
  unsigned char key[24];
  unsigned int keyLen, i;
  
  do {
    context->encryptionAlgorithm = encryptionAlgorithm;
    
    keyLen = (encryptionAlgorithm == EA_DES_CBC) ? 8 : 24;
    if ((status = R_GenerateBytes (key, keyLen, randomStruct)) != 0)
      break;
    if ((status = R_GenerateBytes (iv, 8, randomStruct)) != 0)
      break;

    if (encryptionAlgorithm == EA_DES_EDE2_CBC)
      /* Make both E keys the same */
      R_memcpy ((POINTER)(key + 16), (POINTER)key, 8);

    if ((status = CipherInit (context, encryptionAlgorithm, key, iv, 1)) != 0)
      break;

    for (i = 0; i < publicKeyCount; ++i) {
      if (RSAPublicEncrypt
          (encryptedKeys[i], &encryptedKeyLens[i], key, keyLen,
           publicKeys[i], randomStruct)) {
        status = RE_PUBLIC_KEY;
        break;
      }
    }
    if (status != 0)
      break;

    context->bufferLen = 0;
  } while (0);
  
  /* Zeroize sensitive information.
   */
  R_memset ((POINTER)key, 0, sizeof (key));

  return (status);
}

/* Assume partOut buffer is at least partInLen + 7, since this may flush
     buffered input.
 */
int R_SealUpdate (context, partOut, partOutLen, partIn, partInLen)
R_ENVELOPE_CTX *context;                                         /* context */
unsigned char *partOut;                         /* next encrypted data part */
unsigned int *partOutLen;             /* length of next encrypted data part */
unsigned char *partIn;                                    /* next data part */
unsigned int partInLen;                         /* length of next data part */
{
  unsigned int tempLen;

  tempLen = 8 - context->bufferLen;
  if (partInLen < tempLen) {
    /* Just accumulate into buffer.
     */
    R_memcpy
      ((POINTER)(context->buffer + context->bufferLen), (POINTER)partIn,
       partInLen);
    context->bufferLen += partInLen;
    *partOutLen = 0;
    return (0);
  }

  /* Fill the buffer and encrypt.
   */
  R_memcpy
    ((POINTER)(context->buffer + context->bufferLen), (POINTER)partIn,
     tempLen);
  CipherUpdate (context, partOut, context->buffer, 8);
  partIn += tempLen;
  partInLen -= tempLen;
  partOut += 8;
  *partOutLen = 8;

  /* Encrypt as many 8-byte blocks as possible.
   */
  tempLen = 8 * (partInLen / 8);
  CipherUpdate (context, partOut, partIn, tempLen);
  partIn += tempLen;
  partInLen -= tempLen;
  *partOutLen += tempLen;

  /* Length is now less than 8, so copy remainder to buffer.
   */
  R_memcpy
    ((POINTER)context->buffer, (POINTER)partIn,

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美日韩电影| 中文字幕中文字幕一区二区| 欧美日韩第一区日日骚| 欧美视频你懂的| 亚洲国产精品一区二区www | 欧洲一区二区三区在线| 亚洲视频你懂的| 在线不卡a资源高清| 久久99深爱久久99精品| 国产欧美日韩亚州综合| 99久久婷婷国产综合精品| 一区二区三区美女视频| 日韩欧美高清在线| av中文字幕不卡| 亚洲福利一区二区三区| 国产午夜精品一区二区三区四区 | 最新国产成人在线观看| 成人高清视频在线| 热久久一区二区| 亚洲少妇中出一区| 3d成人h动漫网站入口| 国产成人在线视频网站| 午夜免费久久看| 亚洲小说欧美激情另类| 亚洲国产精品v| 日韩视频国产视频| 欧美日韩一本到| a级精品国产片在线观看| 国产精一区二区三区| 亚洲成人av免费| 亚洲精品成人a在线观看| 欧美韩国日本一区| 久久亚洲二区三区| 日韩一区国产二区欧美三区| 色综合色综合色综合| 中文字幕在线一区二区三区| 国产成人小视频| 美美哒免费高清在线观看视频一区二区| 成人免费在线播放视频| 国产精品色一区二区三区| 久久久精品人体av艺术| 日韩欧美另类在线| 久久久久久久久久久久久夜| 久久久亚洲精品一区二区三区| 91精品国产手机| 26uuu国产电影一区二区| www精品美女久久久tv| 国产精品毛片a∨一区二区三区| 国产视频一区二区三区在线观看| 久久久国产精品午夜一区ai换脸| 久久精品在线免费观看| 自拍偷拍国产精品| 亚洲国产sm捆绑调教视频| 亚洲五月六月丁香激情| 久久99精品久久只有精品| 国产99精品在线观看| 94-欧美-setu| 久久综合五月天婷婷伊人| 亚洲欧美一区二区三区久本道91| 亚洲一二三区不卡| 国产成人亚洲综合色影视| 在线播放视频一区| 亚洲欧美偷拍卡通变态| 国内成人自拍视频| 欧美午夜片在线看| 亚洲男人电影天堂| 国产一区二区三区黄视频| 精品视频全国免费看| 日韩一区在线免费观看| 久久国产精品99精品国产 | 亚洲欧美日韩国产手机在线| 亚洲va欧美va国产va天堂影院| 一区二区三区四区五区视频在线观看 | 精品久久99ma| 亚洲图片有声小说| 欧美日韩免费视频| 亚洲黄色免费网站| 欧美日韩一级二级| 亚洲成人精品一区| 日韩一二三区视频| 老司机精品视频线观看86| 日韩欧美美女一区二区三区| 日韩在线播放一区二区| 日韩一区二区免费在线电影| 日韩高清国产一区在线| 日韩视频免费观看高清完整版 | 国产精品1区2区| 国产拍欧美日韩视频二区| 国产伦精品一区二区三区在线观看| 欧美一级日韩不卡播放免费| 韩国成人福利片在线播放| 久久亚洲综合色一区二区三区 | 国产福利不卡视频| 成人欧美一区二区三区1314| av综合在线播放| 日韩在线卡一卡二| 国产精品久久久久一区| 欧美美女bb生活片| 成人美女视频在线看| 亚洲电影中文字幕在线观看| 欧美精品一区二区三区蜜桃视频| 国产成人三级在线观看| 亚洲第一精品在线| 中文字幕一区二区三区四区不卡| 欧美日韩视频不卡| 色噜噜久久综合| 国产成人在线电影| 久久久久久久精| 欧美最猛性xxxxx直播| 国产丶欧美丶日本不卡视频| 亚洲成人一二三| 中文字幕在线一区二区三区| 亚洲精品一区二区三区福利| 在线观看视频一区| 99精品久久99久久久久| 久久精品国产99国产| 日韩国产一区二| 亚洲成人在线观看视频| 亚洲综合区在线| 亚洲成a人在线观看| 午夜欧美大尺度福利影院在线看| 一区二区三区蜜桃网| 一区二区三区.www| 午夜国产不卡在线观看视频| 亚洲成人自拍网| 青青草91视频| 成人精品鲁一区一区二区| 成人av电影在线网| 99国产精品视频免费观看| 亚洲伊人伊色伊影伊综合网| 亚洲.国产.中文慕字在线| 天天操天天综合网| 国产一区二区三区在线看麻豆| 久久激五月天综合精品| 成人做爰69片免费看网站| 91性感美女视频| 欧美xxxx在线观看| 国产精品久久综合| 日本女人一区二区三区| 成人丝袜高跟foot| 欧美日韩国产不卡| 中文天堂在线一区| 日本不卡一二三| 色偷偷88欧美精品久久久| 在线不卡一区二区| 亚洲精品中文在线观看| 老司机精品视频导航| 91丝袜国产在线播放| 久久久久久久久一| 久久精品99国产国产精| 欧亚洲嫩模精品一区三区| 久久久久久久av麻豆果冻| 欧美激情在线看| 亚洲综合在线视频| 99精品视频在线免费观看| 久久午夜免费电影| 国产sm精品调教视频网站| 日韩欧美一区二区不卡| 夜夜嗨av一区二区三区网页| 成人av网站在线观看免费| 国产精品区一区二区三| 国内精品伊人久久久久av一坑| 欧美一区二区三区在线观看| 亚洲五码中文字幕| 日韩无一区二区| 国产99久久久国产精品| 国产精品久久福利| 在线视频欧美精品| 午夜精品福利一区二区三区av| 欧美日韩国产经典色站一区二区三区| 亚洲欧美福利一区二区| 欧美午夜影院一区| 久久99精品久久久| 欧美高清在线一区| 国产成人精品亚洲777人妖| 亚洲欧美在线视频| 欧美日韩视频在线一区二区| 麻豆精品一区二区综合av| 欧美精品一区二区三区很污很色的| 国内精品视频666| 国产精品乱码一区二区三区软件 | 亚洲欧洲av在线| 7777精品伊人久久久大香线蕉经典版下载 | 中文字幕中文字幕一区| 69av一区二区三区| 91麻豆精品视频| 国产精品一区二区三区网站| 亚洲精品视频一区| 中文字幕一区二区三区在线不卡| 欧美日韩高清一区二区三区| 国产大陆a不卡| 老司机精品视频导航| 亚洲精品成人少妇| 亚洲欧美成aⅴ人在线观看| 日韩一区二区在线观看视频 | 91精品久久久久久久99蜜桃| 成人黄色综合网站| 国产成人免费在线观看不卡| 日韩高清中文字幕一区| 亚洲一区视频在线|