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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? rsa.c

?? 一個測試DES加密算法和測試程序
?? C
字號:
/* RSA.C - RSA routines 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"
#include "nn.h"

static int RSAPublicBlock PROTO_LIST 
  ((unsigned char *, unsigned int *, unsigned char *, unsigned int,
    R_RSA_PUBLIC_KEY *));
static int RSAPrivateBlock PROTO_LIST 
  ((unsigned char *, unsigned int *, unsigned char *, unsigned int,
    R_RSA_PRIVATE_KEY *));

/* RSA public-key encryption, according to PKCS #1.
 */
int RSAPublicEncrypt
  (output, outputLen, input, inputLen, publicKey, randomStruct)
unsigned char *output;                                      /* output block */
unsigned int *outputLen;                          /* length of output block */
unsigned char *input;                                        /* input block */
unsigned int inputLen;                             /* length of input block */
R_RSA_PUBLIC_KEY *publicKey;                              /* RSA public key */
R_RANDOM_STRUCT *randomStruct;                          /* random structure */
{
  int status;
  unsigned char byte, pkcsBlock[MAX_RSA_MODULUS_LEN];
  unsigned int i, modulusLen;
  
  modulusLen = (publicKey->bits + 7) / 8;
  if (inputLen + 11 > modulusLen)
    return (RE_LEN);
  
  pkcsBlock[0] = 0;
  /* block type 2 */
  pkcsBlock[1] = 2;

  for (i = 2; i < modulusLen - inputLen - 1; i++) {
    /* Find nonzero random byte.
     */
    do {
      R_GenerateBytes (&byte, 1, randomStruct);
    } while (byte == 0);
    pkcsBlock[i] = byte;
  }
  /* separator */
  pkcsBlock[i++] = 0;
  
  R_memcpy ((POINTER)&pkcsBlock[i], (POINTER)input, inputLen);
  
  status = RSAPublicBlock
    (output, outputLen, pkcsBlock, modulusLen, publicKey);
  
  /* Zeroize sensitive information.
   */
  byte = 0;
  R_memset ((POINTER)pkcsBlock, 0, sizeof (pkcsBlock));
  
  return (status);
}

/* RSA public-key decryption, according to PKCS #1.
 */
int RSAPublicDecrypt (output, outputLen, input, inputLen, publicKey)
unsigned char *output;                                      /* output block */
unsigned int *outputLen;                          /* length of output block */
unsigned char *input;                                        /* input block */
unsigned int inputLen;                             /* length of input block */
R_RSA_PUBLIC_KEY *publicKey;                              /* RSA public key */
{
  int status;
  unsigned char pkcsBlock[MAX_RSA_MODULUS_LEN];
  unsigned int i, modulusLen, pkcsBlockLen;
  
  modulusLen = (publicKey->bits + 7) / 8;
  if (inputLen > modulusLen)
    return (RE_LEN);
  
  if (status = RSAPublicBlock
      (pkcsBlock, &pkcsBlockLen, input, inputLen, publicKey))
    return (status);
  
  if (pkcsBlockLen != modulusLen)
    return (RE_LEN);
  
  /* Require block type 1.
   */
  if ((pkcsBlock[0] != 0) || (pkcsBlock[1] != 1))
   return (RE_DATA);

  for (i = 2; i < modulusLen-1; i++)
    if (pkcsBlock[i] != 0xff)
      break;
    
  /* separator */
  if (pkcsBlock[i++] != 0)
    return (RE_DATA);
  
  *outputLen = modulusLen - i;
  
  if (*outputLen + 11 > modulusLen)
    return (RE_DATA);

  R_memcpy ((POINTER)output, (POINTER)&pkcsBlock[i], *outputLen);
  
  /* Zeroize potentially sensitive information.
   */
  R_memset ((POINTER)pkcsBlock, 0, sizeof (pkcsBlock));
  
  return (0);
}

/* RSA private-key encryption, according to PKCS #1.
 */
int RSAPrivateEncrypt (output, outputLen, input, inputLen, privateKey)
unsigned char *output;                                      /* output block */
unsigned int *outputLen;                          /* length of output block */
unsigned char *input;                                        /* input block */
unsigned int inputLen;                             /* length of input block */
R_RSA_PRIVATE_KEY *privateKey;                           /* RSA private key */
{
  int status;
  unsigned char pkcsBlock[MAX_RSA_MODULUS_LEN];
  unsigned int i, modulusLen;
  
  modulusLen = (privateKey->bits + 7) / 8;
  if (inputLen + 11 > modulusLen)
    return (RE_LEN);
  
  pkcsBlock[0] = 0;
  /* block type 1 */
  pkcsBlock[1] = 1;

  for (i = 2; i < modulusLen - inputLen - 1; i++)
    pkcsBlock[i] = 0xff;

  /* separator */
  pkcsBlock[i++] = 0;
  
  R_memcpy ((POINTER)&pkcsBlock[i], (POINTER)input, inputLen);
  
  status = RSAPrivateBlock
    (output, outputLen, pkcsBlock, modulusLen, privateKey);

  /* Zeroize potentially sensitive information.
   */
  R_memset ((POINTER)pkcsBlock, 0, sizeof (pkcsBlock));

  return (status);
}

/* RSA private-key decryption, according to PKCS #1.
 */
int RSAPrivateDecrypt (output, outputLen, input, inputLen, privateKey)
unsigned char *output;                                      /* output block */
unsigned int *outputLen;                          /* length of output block */
unsigned char *input;                                        /* input block */
unsigned int inputLen;                             /* length of input block */
R_RSA_PRIVATE_KEY *privateKey;                           /* RSA private key */
{
  int status;
  unsigned char pkcsBlock[MAX_RSA_MODULUS_LEN];
  unsigned int i, modulusLen, pkcsBlockLen;
  
  modulusLen = (privateKey->bits + 7) / 8;
  if (inputLen > modulusLen)
    return (RE_LEN);
  
  if (status = RSAPrivateBlock
      (pkcsBlock, &pkcsBlockLen, input, inputLen, privateKey))
    return (status);
  
  if (pkcsBlockLen != modulusLen)
    return (RE_LEN);
  
  /* Require block type 2.
   */
  if ((pkcsBlock[0] != 0) || (pkcsBlock[1] != 2))
   return (RE_DATA);

  for (i = 2; i < modulusLen-1; i++)
    /* separator */
    if (pkcsBlock[i] == 0)
      break;
    
  i++;
  if (i >= modulusLen)
    return (RE_DATA);
    
  *outputLen = modulusLen - i;
  
  if (*outputLen + 11 > modulusLen)
    return (RE_DATA);

  R_memcpy ((POINTER)output, (POINTER)&pkcsBlock[i], *outputLen);
  
  /* Zeroize sensitive information.
   */
  R_memset ((POINTER)pkcsBlock, 0, sizeof (pkcsBlock));
  
  return (0);
}

/* Raw RSA public-key operation. Output has same length as modulus.

   Assumes inputLen < length of modulus.
   Requires input < modulus.
 */
static int RSAPublicBlock (output, outputLen, input, inputLen, publicKey)
unsigned char *output;                                      /* output block */
unsigned int *outputLen;                          /* length of output block */
unsigned char *input;                                        /* input block */
unsigned int inputLen;                             /* length of input block */
R_RSA_PUBLIC_KEY *publicKey;                              /* RSA public key */
{
  NN_DIGIT c[MAX_NN_DIGITS], e[MAX_NN_DIGITS], m[MAX_NN_DIGITS],
    n[MAX_NN_DIGITS];
  unsigned int eDigits, nDigits;

  NN_Decode (m, MAX_NN_DIGITS, input, inputLen);
  NN_Decode (n, MAX_NN_DIGITS, publicKey->modulus, MAX_RSA_MODULUS_LEN);
  NN_Decode (e, MAX_NN_DIGITS, publicKey->exponent, MAX_RSA_MODULUS_LEN);
  nDigits = NN_Digits (n, MAX_NN_DIGITS);
  eDigits = NN_Digits (e, MAX_NN_DIGITS);
  
  if (NN_Cmp (m, n, nDigits) >= 0)
    return (RE_DATA);
  
  /* Compute c = m^e mod n.
   */
  NN_ModExp (c, m, e, eDigits, n, nDigits);

  *outputLen = (publicKey->bits + 7) / 8;
  NN_Encode (output, *outputLen, c, nDigits);
  
  /* Zeroize sensitive information.
   */
  R_memset ((POINTER)c, 0, sizeof (c));
  R_memset ((POINTER)m, 0, sizeof (m));

  return (0);
}

/* Raw RSA private-key operation. Output has same length as modulus.

   Assumes inputLen < length of modulus.
   Requires input < modulus.
 */
static int RSAPrivateBlock (output, outputLen, input, inputLen, privateKey)
unsigned char *output;                                      /* output block */
unsigned int *outputLen;                          /* length of output block */
unsigned char *input;                                        /* input block */
unsigned int inputLen;                             /* length of input block */
R_RSA_PRIVATE_KEY *privateKey;                           /* RSA private key */
{
  NN_DIGIT c[MAX_NN_DIGITS], cP[MAX_NN_DIGITS], cQ[MAX_NN_DIGITS],
    dP[MAX_NN_DIGITS], dQ[MAX_NN_DIGITS], mP[MAX_NN_DIGITS],
    mQ[MAX_NN_DIGITS], n[MAX_NN_DIGITS], p[MAX_NN_DIGITS], q[MAX_NN_DIGITS],
    qInv[MAX_NN_DIGITS], t[MAX_NN_DIGITS];
  unsigned int cDigits, nDigits, pDigits;
  
  NN_Decode (c, MAX_NN_DIGITS, input, inputLen);
  NN_Decode (n, MAX_NN_DIGITS, privateKey->modulus, MAX_RSA_MODULUS_LEN);
  NN_Decode (p, MAX_NN_DIGITS, privateKey->prime[0], MAX_RSA_PRIME_LEN);
  NN_Decode (q, MAX_NN_DIGITS, privateKey->prime[1], MAX_RSA_PRIME_LEN);
  NN_Decode 
    (dP, MAX_NN_DIGITS, privateKey->primeExponent[0], MAX_RSA_PRIME_LEN);
  NN_Decode 
    (dQ, MAX_NN_DIGITS, privateKey->primeExponent[1], MAX_RSA_PRIME_LEN);
  NN_Decode (qInv, MAX_NN_DIGITS, privateKey->coefficient, MAX_RSA_PRIME_LEN);
  cDigits = NN_Digits (c, MAX_NN_DIGITS);
  nDigits = NN_Digits (n, MAX_NN_DIGITS);
  pDigits = NN_Digits (p, MAX_NN_DIGITS);

  if (NN_Cmp (c, n, nDigits) >= 0)
    return (RE_DATA);
  
  /* Compute mP = cP^dP mod p  and  mQ = cQ^dQ mod q. (Assumes q has
     length at most pDigits, i.e., p > q.)
   */
  NN_Mod (cP, c, cDigits, p, pDigits);
  NN_Mod (cQ, c, cDigits, q, pDigits);
  NN_ModExp (mP, cP, dP, pDigits, p, pDigits);
  NN_AssignZero (mQ, nDigits);
  NN_ModExp (mQ, cQ, dQ, pDigits, q, pDigits);
  
  /* Chinese Remainder Theorem:
       m = ((((mP - mQ) mod p) * qInv) mod p) * q + mQ.
   */
  if (NN_Cmp (mP, mQ, pDigits) >= 0)
    NN_Sub (t, mP, mQ, pDigits);
  else {
    NN_Sub (t, mQ, mP, pDigits);
    NN_Sub (t, p, t, pDigits);
  }
  NN_ModMult (t, t, qInv, p, pDigits);
  NN_Mult (t, t, q, pDigits);
  NN_Add (t, t, mQ, nDigits);

  *outputLen = (privateKey->bits + 7) / 8;
  NN_Encode (output, *outputLen, t, nDigits);

  /* Zeroize sensitive information.
   */
  R_memset ((POINTER)c, 0, sizeof (c));
  R_memset ((POINTER)cP, 0, sizeof (cP));
  R_memset ((POINTER)cQ, 0, sizeof (cQ));
  R_memset ((POINTER)dP, 0, sizeof (dP));
  R_memset ((POINTER)dQ, 0, sizeof (dQ));
  R_memset ((POINTER)mP, 0, sizeof (mP));
  R_memset ((POINTER)mQ, 0, sizeof (mQ));
  R_memset ((POINTER)p, 0, sizeof (p));
  R_memset ((POINTER)q, 0, sizeof (q));
  R_memset ((POINTER)qInv, 0, sizeof (qInv));
  R_memset ((POINTER)t, 0, sizeof (t));

  return (0);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品天美传媒沈樵| 欧美高清视频不卡网| 国产午夜精品福利| 国产一区二三区好的| 欧美电影免费提供在线观看| 日韩电影在线一区| 91精品国产综合久久小美女| 日韩在线观看一区二区| 在线观看91精品国产麻豆| 性做久久久久久久久| 欧美美女一区二区在线观看| 午夜天堂影视香蕉久久| 欧美日韩精品欧美日韩精品一综合| 亚洲精品国产一区二区三区四区在线| 99精品国产热久久91蜜凸| 1000部国产精品成人观看| 97超碰欧美中文字幕| 亚洲视频免费观看| 91久久国产综合久久| 亚洲最大成人综合| 欧美日韩二区三区| 日韩电影在线免费| 精品国产3级a| 国产精品123区| 国产精品久久久久9999吃药| 97久久精品人人爽人人爽蜜臀| 亚洲男女毛片无遮挡| 欧美亚洲国产一区在线观看网站| 亚洲一区二区三区四区中文字幕| 欧美日韩综合一区| 美腿丝袜亚洲色图| 日本一区二区三区电影| 成人av在线看| 一区二区三区四区精品在线视频| 欧美美女喷水视频| 精品一区二区综合| 欧美亚一区二区| 色噜噜狠狠一区二区三区果冻| 成人av手机在线观看| 豆国产96在线|亚洲| 久久99国产精品久久99| 亚洲h精品动漫在线观看| 亚洲精品日韩一| 经典三级视频一区| 日韩不卡一区二区三区| 136国产福利精品导航| 欧美国产一区二区| 亚洲成人黄色影院| 不卡av在线免费观看| 亚洲综合激情网| 日韩欧美一级特黄在线播放| 国产成人精品在线看| 一区二区三区中文字幕| 欧美一区二区三区爱爱| 国产成人av自拍| 亚洲一区二区免费视频| 欧美成人女星排名| 99久久久国产精品免费蜜臀| 亚洲小少妇裸体bbw| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 91成人国产精品| 免费成人你懂的| 国产精品第五页| 7777精品久久久大香线蕉| 国产+成+人+亚洲欧洲自线| 亚洲午夜在线观看视频在线| 久久精品一区二区| 欧美性受xxxx黑人xyx性爽| 极品少妇xxxx精品少妇偷拍| 亚洲精品免费一二三区| 精品久久久网站| 欧美性生活大片视频| 国产精品2024| 图片区小说区国产精品视频| 国产精品婷婷午夜在线观看| 欧美日韩精品综合在线| 丁香激情综合国产| 免费国产亚洲视频| 一区二区三区在线高清| 久久久久亚洲综合| 欧美精品在线视频| 99久久99久久久精品齐齐| 久久成人18免费观看| 亚洲午夜av在线| 国产精品久久午夜夜伦鲁鲁| 日韩午夜在线观看视频| 色妞www精品视频| 国内精品写真在线观看| 亚洲午夜激情网站| 18涩涩午夜精品.www| 高清在线成人网| 欧美精选一区二区| 亚洲国产精品欧美一二99| 国产精品亚洲一区二区三区妖精 | 国产精品视频在线看| 一区二区在线观看视频| 精品在线亚洲视频| 99re热视频这里只精品| 国产拍欧美日韩视频二区| 91精品国产综合久久小美女| 福利一区福利二区| 久久福利视频一区二区| 偷窥少妇高潮呻吟av久久免费| 成人免费在线视频| 中文字幕乱码日本亚洲一区二区| 日韩欧美国产麻豆| 欧美性xxxxxx少妇| 色网站国产精品| 99久久精品国产导航| 国产精品一区二区你懂的| 麻豆精品一区二区三区| 日本色综合中文字幕| 亚洲成人在线免费| 亚洲国产精品一区二区久久 | 国产精品欧美久久久久无广告| 精品久久久久久久久久久久久久久久久 | 制服丝袜亚洲色图| 欧美三级电影在线观看| 欧美在线一二三四区| 91丨九色丨蝌蚪丨老版| 99久久婷婷国产综合精品电影 | 日韩一级片网站| 欧美剧在线免费观看网站| 日本精品一级二级| 91丨porny丨国产入口| 成人美女视频在线观看| 国产99一区视频免费| 国产黄色精品网站| 国产成人精品亚洲日本在线桃色| 国产一区二区三区四区五区入口 | 欧美美女bb生活片| 欧美日韩国产乱码电影| 欧美日韩精品久久久| 欧美日韩亚洲综合在线 | 大陆成人av片| 成人v精品蜜桃久久一区| 成人黄色一级视频| av在线不卡电影| 色综合天天综合网天天看片| 91在线观看成人| 色欧美日韩亚洲| 欧美日韩卡一卡二| 欧美一区二区精品久久911| 欧美一级片在线看| 精品久久久久香蕉网| 久久久久久久久久久黄色| 久久精品欧美一区二区三区不卡 | 欧美一区二区福利在线| 日韩午夜精品电影| 久久综合狠狠综合| 中文字幕在线播放不卡一区| 国产精品美日韩| 一区二区三区精品视频| 日韩一区精品字幕| 国模少妇一区二区三区| 成人av综合在线| 在线观看不卡视频| 日韩欧美另类在线| 亚洲国产成人在线| 亚洲精品精品亚洲| 日本不卡高清视频| 高清不卡一二三区| 欧美制服丝袜第一页| 91精品国产综合久久久久久漫画| 久久综合色综合88| 国产精品白丝在线| 五月天一区二区| 国产九色sp调教91| 日本黄色一区二区| 日韩片之四级片| 国产精品私房写真福利视频| 亚洲男人电影天堂| 美女视频一区在线观看| 成人av在线影院| 欧美精品xxxxbbbb| 国产亚洲成aⅴ人片在线观看| 亚洲品质自拍视频| 美女国产一区二区| 91影院在线免费观看| 555www色欧美视频| 国产精品视频观看| 日韩不卡手机在线v区| 成人黄色小视频| 欧美一区三区四区| 亚洲欧洲色图综合| 免播放器亚洲一区| k8久久久一区二区三区 | 亚洲精品一线二线三线无人区| 国产精品电影一区二区三区| 日韩av网站在线观看| 成a人片亚洲日本久久| 制服丝袜中文字幕一区| 亚洲欧洲精品一区二区三区| 日韩av电影免费观看高清完整版| 懂色av一区二区在线播放| 欧美福利视频一区| 日韩理论片一区二区| 久久99久久精品| 欧美视频一区在线观看| 国产精品私人自拍|