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

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

?? kmul.c

?? flint庫 RSA算法
?? C
字號:
/******************************************************************************//*                                                                            *//* Functions for arithmetic and number theory with large integers in C        *//* Software supplement to the book "Cryptography in C and C++"                *//* by Michael Welschenbach, published by Apress Berkeley CA, 2005             *//*                                                                            *//* Module kmul.c           Revision: 19.12.2000                               *//*                                                                            *//*  Copyright (C) 1998-2005 by Michael Welschenbach                           *//*  Copyright (C) 2001-2005 by Springer-Verlag Berlin, Heidelberg             *//*  Copyright (C) 2001-2005 by Apress L.P., Berkeley, CA                      *//*  Copyright (C) 2002-2005 by Wydawnictwa MIKOM, Poland                      *//*  Copyright (C) 2002-2005 by PHEI, P.R.China                                *//*  Copyright (C) 2002-2005 by InfoBook, Korea                                *//*  Copyright (C) 2002-2005 by Triumph Publishing, Russia                     *//*                                                                            *//*  All Rights Reserved                                                       *//*                                                                            *//*  The software may be used for noncommercial purposes and may be altered,   *//*  as long as the following conditions are accepted without any              *//*  qualification:                                                            *//*                                                                            *//*  (1) All changes to the sources must be identified in such a way that the  *//*      changed software cannot be misinterpreted as the original software.   *//*                                                                            *//*  (2) The statements of copyright may not be removed or altered.            *//*                                                                            *//*  (3) The following DISCLAIMER is accepted:                                 *//*                                                                            *//*  DISCLAIMER:                                                               *//*                                                                            *//*  There is no warranty for the software contained in this distribution, to  *//*  the extent permitted by applicable law. The copyright holders provide the *//*  software `as is' without warranty of any kind, either expressed or        *//*  implied, including, but not limited to, the implied warranty of fitness   *//*  for a particular purpose. The entire risk as to the quality and           *//*  performance of the program is with you.                                   *//*                                                                            *//*  In no event unless required by applicable law or agreed to in writing     *//*  will the copyright holders, or any of the individual authors named in     *//*  the source files, be liable to you for damages, including any general,    *//*  special, incidental or consequential damages arising out of any use of    *//*  the software or out of inability to use the software (including but not   *//*  limited to any financial losses, loss of data or data being rendered      *//*  inaccurate or losses sustained by you or by third parties as a result of  *//*  a failure of the software to operate with any other programs), even if    *//*  such holder or other party has been advised of the possibility of such    *//*  damages.                                                                  *//*                                                                            *//******************************************************************************/#include <memory.h>#include "flint.h"#include "kmul.h"#define NO_ASSERTS#ifdef FLINT_DEBUG#undef NO_ASSERTS#define ASSERT_LOG_AND_QUIT#include "_assert.h"#include "_alloc.h"#ifdef COVERAGE#include "utclog.h"#endif#endif#ifdef NO_ASSERTS#define Assert(a) (void)0#endifstatic void kmul (clint *, clint *, int, int, CLINT);static void ksqr (clint *, int, CLINT);static void shiftadd (CLINT a_l, CLINT b_l, int l, CLINT s_l);static void addkar (clint *a_l, clint *b_l, int len_arg, CLINT s_l);#define MUL_THRESHOLD 40#define SQR_THRESHOLD 40CLINTD tmp_l;/******************************************************************************//*                                                                            *//*  Function:  Interface to Karatsuba multiplication                          *//*  Syntax:    void kmul_l (CLINT a_l, CLINT b_l, CLINT c_l);                 *//*  Input:     aa_l, bb_l (Factors)                                           *//*  Output:    p_l (Product)                                                  *//*  Returns:   E_CLINT_OK if everything is O.K.                               *//*             E_CLINT_OFL in case of Overflow                                *//*                                                                            *//******************************************************************************/int __FLINT_APIkmul_l (CLINT a_l, CLINT b_l, CLINT p_l){  CLINT aa_l, bb_l;  CLINTD pp_l;  int OFL = E_CLINT_OK;  cpy_l (aa_l, a_l);  cpy_l (bb_l, b_l);  kmul (LSDPTR_L(aa_l), LSDPTR_L(bb_l), DIGITS_L (aa_l), DIGITS_L (bb_l), pp_l);  if (DIGITS_L (pp_l) > (USHORT) CLINTMAXDIGIT)                /* Overflow ? */    {      ANDMAX_L (pp_l);                            /* Reduction modulo Nmax+1 */      OFL = E_CLINT_OFL;    }  cpy_l (p_l, pp_l);  ZEROCLINT_L (aa_l);  ZEROCLINT_L (bb_l);  ZEROCLINTD_L (pp_l);  ZEROCLINTD_L (tmp_l);  return OFL;}/******************************************************************************//*                                                                            *//*  Function:  Interface to Karatsuba squaring                                *//*  Syntax:    void ksqr_l (CLINT a_l, CLINT c_l);                            *//*  Input:     aa_l (Factor)                                                  *//*  Output:    p_l (Square)                                                   *//*  Returns:   E_CLINT_OK if everything is O.K.                               *//*             E_CLINT_OFL in case of overflow                                *//*                                                                            *//******************************************************************************/int __FLINT_APIksqr_l (CLINT a_l, CLINT p_l){  CLINT aa_l;  CLINTD pp_l;  int OFL = E_CLINT_OK;  cpy_l (aa_l, a_l);  ksqr (LSDPTR_L(aa_l), DIGITS_L (aa_l), pp_l);  if (DIGITS_L (pp_l) > (USHORT) CLINTMAXDIGIT)                /* Overflow ? */    {      ANDMAX_L (pp_l);                            /* Reduction modulo Nmax+1 */      OFL = E_CLINT_OFL;    }  cpy_l (p_l, pp_l);  ZEROCLINT_L (aa_l);  ZEROCLINTD_L (pp_l);  ZEROCLINTD_L (tmp_l);  return OFL;}/******************************************************************************//*                                                                            *//*  Function:  Karatsuba multiplication of two factors a_l and b_l            *//*             with 2k digits to base B                                       *//*  Syntax:    void kmul (clint *aptr_l, clint *bptr_l,                       *//*                        int len_a, int len_b, CLINT p_l);                   *//*  Input:     aptr_l (Pointer to least significant digit of a_l)             *//*             bptr_l (Pointer to least significant digit of b_l)             *//*             len_a (Number of digits of a_l)                                *//*             len_b (Number of digits of b_l)                                *//*  Output:    p_l (Product)                                                  *//*  Returns:   -                                                              *//*                                                                            *//******************************************************************************/static voidkmul (clint *aptr_l, clint *bptr_l, int len_a, int len_b, CLINT p_l){  CLINT c01_l, c10_l;  clint c0_l[CLINTMAXSHORT + 2], c1_l[CLINTMAXSHORT + 2], c2_l[CLINTMAXSHORT + 2];  clint *a1ptr_l, *b1ptr_l;  int l2;  if ((len_a == len_b) && (len_a >= MUL_THRESHOLD) && (0 == (len_a & 1)))    {      l2 = len_a/2;      a1ptr_l = aptr_l + l2;      b1ptr_l = bptr_l + l2;      kmul (aptr_l, bptr_l, l2, l2, c0_l);      kmul (a1ptr_l, b1ptr_l, l2, l2, c1_l);      addkar (a1ptr_l, aptr_l, l2, c01_l);      addkar (b1ptr_l, bptr_l, l2, c10_l);      kmul (LSDPTR_L (c01_l), LSDPTR_L (c10_l), DIGITS_L (c01_l), DIGITS_L (c10_l), c2_l);      sub (c2_l, c1_l, tmp_l);      sub (tmp_l, c0_l, c2_l);      shiftadd (c1_l, c2_l, l2, tmp_l);      shiftadd (tmp_l, c0_l, l2, p_l);    }  else /* Fallback to nonrecursive multiplication */    {      memcpy (LSDPTR_L (c1_l), aptr_l, len_a * sizeof (clint));      memcpy (LSDPTR_L (c2_l), bptr_l, len_b * sizeof (clint));      SETDIGITS_L (c1_l, len_a);      SETDIGITS_L (c2_l, len_b);      mult (c1_l, c2_l, p_l);    }  ZEROCLINT_L (c01_l);  ZEROCLINT_L (c10_l);  ZEROCLINT_L (c0_l);  ZEROCLINT_L (c1_l);  ZEROCLINT_L (c2_l);}/******************************************************************************//*                                                                            *//*  Function:  Karatsuba squaring of a factor a_l                             *//*             with 2k digits to base B                                       *//*  Syntax:    void kmul (clint *aptr_l, int len_a, CLINT p_l);               *//*  Input:     aptr_l (Pointer to least significant digit of a_l)             *//*             len_a (Number of digits of a_l)                                *//*  Output:    p_l (Square)                                                   *//*  Returns:   -                                                              *//*                                                                            *//******************************************************************************/static voidksqr (clint *aptr_l, int len_a, CLINT p_l){  CLINT c01_l;  clint c0_l[CLINTMAXSHORT + 2], c1_l[CLINTMAXSHORT + 2], c2_l[CLINTMAXSHORT + 2];  clint *a1ptr_l;  int l2;  if ((len_a >= SQR_THRESHOLD) && (0 == (len_a & 1)))    {      l2 = len_a/2;      a1ptr_l = aptr_l + l2;      ksqr (aptr_l, l2, c0_l);      ksqr (a1ptr_l, l2, c1_l);      addkar (a1ptr_l, aptr_l, l2, c01_l);      ksqr (LSDPTR_L (c01_l), DIGITS_L (c01_l), c2_l);      sub (c2_l, c1_l, tmp_l);      sub (tmp_l, c0_l, c2_l);      shiftadd (c1_l, c2_l, l2, tmp_l);      shiftadd (tmp_l, c0_l, l2, p_l);    }  else /* Fallback to nonrecursive squaring */    {      memcpy (LSDPTR_L (c1_l), aptr_l, len_a * sizeof (clint));      SETDIGITS_L (c1_l, len_a);      sqr (c1_l, p_l);    }  ZEROCLINT_L (c01_l);  ZEROCLINT_L (c0_l);  ZEROCLINT_L (c1_l);  ZEROCLINT_L (c2_l);}/******************************************************************************//*                                                                            *//*  Function:  Addition of two arguments                                      *//*             Parameters are pointers to LSD of arguments                    *//*  Syntax:    void addkar (clint *a_l, clint *b_l, int dgts, CLINT s_l);     *//*  Input:     a_l, b_l (Arguments with equal number of digits)               *//*  Output:    s_l (Sum)                                                      *//*  Returns:   -                                                              *//*                                                                            *//******************************************************************************/static voidaddkar (clint *a_l, clint *b_l, int dgts, CLINT s_l){  clint *msdptra_l;  clint *aptr_l, *bptr_l, *sptr_l = LSDPTR_L (s_l);  ULONG carry = 0L;  aptr_l = a_l;  bptr_l = b_l;  msdptra_l = a_l + dgts - 1;  SETDIGITS_L (s_l, dgts);  while (aptr_l <= msdptra_l)    {      *sptr_l++ = (USHORT) (carry = (ULONG) * aptr_l++ + (ULONG) * bptr_l++                            + (ULONG) (USHORT) (carry >> BITPERDGT));    }  if (carry & BASE)    {      *sptr_l = 1;      INCDIGITS_L (s_l);    }}/******************************************************************************//*                                                                            *//*  Function:  Addition of two arguments combined with shift of first         *//*             argument, w/o check for leading zeros                          *//*  Syntax:    void shiftadd (CLINT a_l, CLINT b_l, int dgts, CLINT s_l);     *//*  Input:     a_l, b_l (arguments)                                           *//*             dgts (Exponent to base 2)                                      *//*             Assumption: DIGITS_L (a_l) + dgts >= DIGITS_L (b_l))           *//*  Output:    s_l (Sum = (2^dgts)*a_l + b_l)                                 *//*  Returns:   -                                                              *//*                                                                            *//******************************************************************************/static voidshiftadd (CLINT a_l, CLINT b_l, int dgts, CLINT s_l){  clint *msdptra_l, *msdptrb_l;  clint *aptr_l, *bptr_l, *sptr_l = LSDPTR_L (s_l);  ULONG carry = 0L;  aptr_l = LSDPTR_L (a_l);  bptr_l = LSDPTR_L (b_l);  msdptra_l = MSDPTR_L (a_l);  msdptrb_l = MSDPTR_L (b_l);  SETDIGITS_L (s_l, DIGITS_L (a_l) + dgts);  while (bptr_l <= MIN (msdptrb_l, b_l + dgts))    {      *sptr_l++ = *bptr_l++;    }  while (sptr_l <= s_l + dgts)    {      *sptr_l++ = 0;    }  while (bptr_l <= msdptrb_l)    {      *sptr_l++ = (USHORT) (carry = (ULONG) * aptr_l++ + (ULONG) * bptr_l++                            + (ULONG) (USHORT) (carry >> BITPERDGT));    }  while (aptr_l <= msdptra_l)    {      *sptr_l++ = (USHORT) (carry = (ULONG) * aptr_l++                            + (ULONG) (USHORT) (carry >> BITPERDGT));    }  if (carry & BASE)    {      *sptr_l = 1;      INCDIGITS_L (s_l);    }  RMLDZRS_L (s_l);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
3d动漫精品啪啪1区2区免费| 亚洲精品国产无套在线观| 欧美综合天天夜夜久久| 免费观看在线综合色| 亚洲欧美另类在线| 中文一区在线播放| 久久蜜桃av一区二区天堂| 91精品国产品国语在线不卡| 欧美在线不卡一区| 成人午夜短视频| 国产精品一区二区在线看| 麻豆一区二区三| 日韩制服丝袜av| 日本欧美加勒比视频| 天天综合网天天综合色| 亚洲国产精品一区二区久久| 1000精品久久久久久久久| 精品国产凹凸成av人网站| 91精品视频网| 日韩午夜电影在线观看| 911精品产国品一二三产区| 欧美男生操女生| 欧美剧情电影在线观看完整版免费励志电影 | 欧美日韩成人一区二区| 欧美性做爰猛烈叫床潮| 欧美日韩综合色| 4438x亚洲最大成人网| 日韩三级视频中文字幕| 欧美日韩精品二区第二页| 欧美日韩一区二区三区四区五区| 欧美在线免费播放| 欧美日韩1234| 日韩欧美你懂的| 久久先锋资源网| 2022国产精品视频| 国产免费观看久久| 亚洲人成影院在线观看| 亚洲二区在线视频| 全国精品久久少妇| 国产成人综合网站| 99国产精品视频免费观看| 欧美在线观看18| 欧美一区二区在线播放| 欧美大片拔萝卜| 久久精品亚洲一区二区三区浴池 | www日韩大片| 国产精品系列在线| 一区二区三区在线视频观看58| 五月天精品一区二区三区| 五月婷婷综合激情| 国内久久精品视频| 99久久婷婷国产综合精品电影| 欧美亚洲图片小说| 在线电影一区二区三区| 久久久久久久久久久久电影| 国产精品国产自产拍在线| 亚洲成人自拍偷拍| 国产精品一区二区三区99| 91麻豆蜜桃一区二区三区| 日本道在线观看一区二区| 欧美一区二区三区公司| 国产欧美一二三区| 视频一区二区欧美| 精品一区二区日韩| 91视频观看免费| 日韩欧美电影在线| 国产精品动漫网站| 亚洲一区二区精品3399| 国产一区二区三区在线观看免费视频 | 91免费看片在线观看| 欧美一区二区三区在线看| 日韩一区二区三区观看| 中文字幕日韩一区| 美女视频网站黄色亚洲| 99久久精品免费看国产| 欧美久久久久久久久久 | 免费一级片91| 色综合天天综合网天天看片| 欧美色国产精品| 欧美不卡视频一区| 亚洲午夜精品17c| 国产v综合v亚洲欧| 7777女厕盗摄久久久| 一区二区三区日韩欧美| www..com久久爱| 国产精品理论在线观看| 国产成人欧美日韩在线电影| 精品国内片67194| 免费人成精品欧美精品| 91精品国产一区二区三区香蕉| 一区二区三区在线看| 色综合天天在线| 亚洲日本va午夜在线影院| 大白屁股一区二区视频| 国产女人aaa级久久久级| 国产大陆精品国产| 欧美高清在线一区二区| 国产成人精品免费网站| 中文字幕不卡三区| 成人午夜免费视频| 综合欧美亚洲日本| 99精品视频免费在线观看| 国产精品美女久久久久久| 成人app在线观看| 国产丶欧美丶日本不卡视频| 26uuu国产在线精品一区二区| 激情综合网最新| 久久久五月婷婷| 国产99精品视频| 国产精品久久三| 日本精品裸体写真集在线观看| 亚洲综合色区另类av| 在线观看免费一区| 香蕉久久一区二区不卡无毒影院| 在线播放国产精品二区一二区四区 | 亚洲日本欧美天堂| 欧美性欧美巨大黑白大战| 天堂av在线一区| 欧美v日韩v国产v| 国产精品一级片在线观看| 国产亚洲欧洲997久久综合| 成人国产精品视频| 一区二区三区在线观看网站| 欧美精品丝袜中出| 激情综合色综合久久综合| 精品成人免费观看| 成人理论电影网| 亚洲一区二区欧美日韩| 91精品国产综合久久精品麻豆| 久久99久久久欧美国产| 国产日韩欧美精品在线| 99视频超级精品| 丝袜美腿成人在线| 久久精品无码一区二区三区| 91影院在线免费观看| 亚洲不卡一区二区三区| 欧美精品一区二区三区在线播放 | 日韩限制级电影在线观看| 国产一区二区三区久久悠悠色av | 麻豆freexxxx性91精品| 国产精品三级电影| 欧美日韩一区二区三区四区| 久久97超碰国产精品超碰| 成人欧美一区二区三区在线播放| 欧美三级欧美一级| 国产激情一区二区三区四区| 艳妇臀荡乳欲伦亚洲一区| 精品动漫一区二区三区在线观看| 91亚洲精华国产精华精华液| 蜜桃av一区二区| 亚洲欧美在线观看| 日韩欧美成人激情| 色乱码一区二区三区88| 捆绑调教一区二区三区| 亚洲欧美乱综合| 久久先锋影音av鲁色资源| 欧美三级电影在线观看| 成人午夜电影网站| 美女一区二区视频| 一区二区三区四区乱视频| 久久久久久久综合日本| 9191国产精品| 91丨九色丨尤物| 国产精品资源在线观看| 日韩精品福利网| 亚洲精品第一国产综合野| 久久嫩草精品久久久精品| 欧美久久久久久久久久| 91亚洲资源网| 国产福利91精品一区| 日韩综合一区二区| 亚洲精品一卡二卡| 中文一区二区在线观看| 日韩精品在线看片z| 欧美日韩一区二区三区不卡| 成人福利电影精品一区二区在线观看| 久久精品国产77777蜜臀| 亚洲国产成人高清精品| 亚洲色欲色欲www| 国产人妖乱国产精品人妖| 欧美mv日韩mv国产网站| 欧美一区二区成人6969| 欧洲色大大久久| 91色porny蝌蚪| 北条麻妃一区二区三区| 国产999精品久久久久久| 久久av资源站| 奇米影视一区二区三区| 五月婷婷综合在线| 亚洲成人高清在线| 亚洲二区视频在线| 亚洲精品videosex极品| 综合久久久久综合| 中文字幕在线不卡视频| 国产精品色哟哟| 中文av一区二区| 国产精品久久久久国产精品日日| 中文在线一区二区| 中文字幕一区二区三区四区不卡| 久久美女艺术照精彩视频福利播放|