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

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

?? rijndael_api_ref.pas

?? Rijndael algorithm修正了CBC下BUG的版本(有源代碼)工作在:D5。作者:Sergey Kirichenko。
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
{* rijndael-api-ref.c   v2.0   August '99 *}
(* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *                ---------------------------------                *
 *                            DELPHI                               *
 *                         Rijndael API                            *
 *                ---------------------------------                *
 *                                                   December 2000 *
 *                                                                 *
 * Authors: Paulo Barreto                                          *
 *          Vincent Rijmen                                         *
 *                                                                 *
 * Delphi translation by Sergey Kirichenko (ksv@cheerful.com)      *
 * Home Page: http://rcolonel.tripod.com                           *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *)

unit rijndael_api_ref;

interface

uses rijndael_alg_ref;

const
  MAXBC     = (256 div 32);
  MAXKC     = (256 div 32);
  MAXROUNDS = 14;

  DIR_ENCRYPT   = 0;    { Are we encrpyting? }
  DIR_DECRYPT   = 1;    { Are we decrpyting? }
  MODE_ECB      = 1;    { Are we ciphering in ECB mode? }
  MODE_CBC      = 2;    { Are we ciphering in CBC mode? }
  MODE_CFB1     = 3;    { Are we ciphering in 1-bit CFB mode? }
  rTRUE         = 1;    { integer(true) }
  rFALSE        = 0;    { integer(false) }
  BITSPERBLOCK	= 128;	{ Default number of bits in a cipher block }

{ Error Codes - CHANGE POSSIBLE: inclusion of additional error codes }
  BAD_KEY_DIR         = -1;  { Key direction is invalid, e.g., unknown value }
  BAD_KEY_MAT         = -2;  { Key material not of correct length }
  BAD_KEY_INSTANCE    = -3;  { Key passed is not valid }
  BAD_CIPHER_MODE     = -4;  { Params struct passed to cipherInit invalid }
  BAD_CIPHER_STATE    = -5;  { Cipher in wrong state (e.g., not initialized) }
  BAD_CIPHER_INSTANCE = -7;

{  CHANGE POSSIBLE:  inclusion of algorithm specific defines  }
  MAX_KEY_SIZE	= 64;                   { # of ASCII char's needed to represent a key }
  MAX_IV_SIZE	= (BITSPERBLOCK div 8);   { # bytes needed to represent an IV }

type
{ Typedef'ed data storage elements.  Add any algorithm specific
  parameters at the bottom of the structs as appropriate. }

  word8      = byte;        // unsigned 8-bit
  word16     = word;        // unsigned 16-bit
  word32     = longword;    // unsigned 32-bit
  TByteArray = array [0..MaxInt div sizeof(Byte)-1] of Byte;
  PByte      = ^TByteArray;

{ The structure for key information }
  PkeyInstance = ^keyInstance;
  keyInstance = packed record
    direction: Byte;    { Key used for encrypting or decrypting? }
    keyLen: integer;    { Length of the key }
    keyMaterial: array [0..MAX_KEY_SIZE+1-1] of char;  { Raw key data in ASCII, e.g., user input or KAT values }
    { The following parameters are algorithm dependent, replace or add as necessary }
    blockLen: integer;  { block length }
    keySched: TArrayRK; { key schedule }
  end;  {* keyInstance *}
  TkeyInstance = keyInstance;

{ The structure for cipher information }
  PcipherInstance = ^cipherInstance;
  cipherInstance = packed record
    mode: Byte;         // MODE_ECB, MODE_CBC, or MODE_CFB1
    IV: array [0..MAX_IV_SIZE-1] of Byte; // A possible Initialization Vector for ciphering
    { Add any algorithm specific parameters needed here }
    blockLen: integer;  // Sample: Handles non-128 bit block sizes (if available)
  end;  {* cipherInstance *}
  TcipherInstance = cipherInstance;

{ Function prototypes }
function makeKey(key: PkeyInstance; direction: Byte; keyLen: integer; keyMaterial: pchar): integer;
function cipherInit(cipher: PcipherInstance; mode: Byte; IV: pchar): integer;
{sergey has corrected it}
function blocksEnCrypt(cipher: PcipherInstance; key: PkeyInstance; input: PByte;
		      inputLen: integer; outBuffer: PByte): integer;
{sergey has corrected it}
function blocksDeCrypt(cipher: PcipherInstance; key: PkeyInstance; input: PByte;
                      inputLen: integer; outBuffer: PByte): integer;
{ cipherUpdateRounds:

  Encrypts/Decrypts exactly one full block a specified number of rounds.
  Only used in the Intermediate Value Known Answer Test.

  Returns:
    TRUE - on success
    BAD_CIPHER_STATE - cipher in bad state (e.g., not initialized) }
function cipherUpdateRounds(cipher: PcipherInstance; key: PkeyInstance; input: PByte;
                      inputLen: integer; outBuffer: PByte; iRounds: integer): integer;

implementation

{ StrLCopy copies at most MaxLen characters from Source to Dest and returns Dest. }
function StrLCopy(Dest: PChar; const Source: PChar; MaxLen: Cardinal): PChar; assembler;
asm
        PUSH    EDI
        PUSH    ESI
        PUSH    EBX
        MOV     ESI,EAX
        MOV     EDI,EDX
        MOV     EBX,ECX
        XOR     AL,AL
        TEST    ECX,ECX
        JZ      @@1
        REPNE   SCASB
        JNE     @@1
        INC     ECX
@@1:    SUB     EBX,ECX
        MOV     EDI,ESI
        MOV     ESI,EDX
        MOV     EDX,EDI
        MOV     ECX,EBX
        SHR     ECX,2
        REP     MOVSD
        MOV     ECX,EBX
        AND     ECX,3
        REP     MOVSB
        STOSB
        MOV     EAX,EDX
        POP     EBX
        POP     ESI
        POP     EDI
end;

function makeKey(key: PkeyInstance; direction: Byte; keyLen: integer; keyMaterial: pchar): integer;
var
  k: TArrayK;
  i, j, t: integer;
begin
  if not assigned(key) then
    begin
      result:= BAD_KEY_INSTANCE;
      exit;
    end;

  if ((direction = DIR_ENCRYPT) or (direction = DIR_DECRYPT)) then
    key.direction:= direction
  else
    begin
      result:= BAD_KEY_DIR;
      exit;
    end;

  if ((keyLen = 128) or (keyLen = 192) or (keyLen = 256)) then
    key.keyLen:= keyLen
  else
    begin
      result:= BAD_KEY_MAT;
      exit;
    end;

  if (keyMaterial^ <> #0) then
    StrLCopy(key.keyMaterial, keyMaterial, keyLen div 4);  // strncpy

  { initialize key schedule: }
  for i:= 0 to (key.keyLen div 8)-1 do
    begin
      t:= integer(key.keyMaterial[2*i]);
      if ((t >= ord('0')) and (t <= ord('9'))) then
        j:= (t - ord('0')) shl 4
      else
        if ((t >= ord('a')) and (t <= ord('f'))) then
          j:= (t - ord('a') + 10) shl 4
        else
          if ((t >= ord('A')) and (t <= ord('F'))) then
            j:= (t - ord('A') + 10) shl 4
          else
            begin
              result:= BAD_KEY_MAT;
              exit;
            end;

      t:= integer(key.keyMaterial[2*i+1]);
      if ((t >= ord('0')) and (t <= ord('9'))) then
        j:= j xor (t - ord('0'))
      else
        if ((t >= ord('a')) and (t <= ord('f'))) then
          j:= j xor (t - ord('a') + 10)
        else
          if ((t >= ord('A')) and (t <= ord('F'))) then
            j:= j xor (t - ord('A') + 10)
          else
            begin
              result:= BAD_KEY_MAT;
              exit;
            end;

      k[i mod 4][i div 4]:= word8(j);
    end;
  rijndaelKeySched(k, key.keyLen, key.blockLen, key.keySched);
  result:= rTRUE;
end;

function cipherInit(cipher: PcipherInstance; mode: Byte; IV: pchar): integer;
var
  i, j, t: integer;
begin
  if ((mode = MODE_ECB) or (mode = MODE_CBC) or (mode = MODE_CFB1)) then
    cipher.mode:= mode
  else
    begin
      result:= BAD_CIPHER_MODE;
      exit;
    end;

  if assigned(IV) then
    for i:= 0 to (cipher.blockLen div 8)-1 do
      begin
        t:= integer(IV[2*i]);
        if ((t >= ord('0')) and (t <= ord('9'))) then
          j:= (t - ord('0')) shl 4
        else
          if ((t >= ord('a')) and (t <= ord('f'))) then
            j:= (t - ord('a') + 10) shl 4
          else
            if ((t >= ord('A')) and (t <= ord('F'))) then
              j:= (t - ord('A') + 10) shl 4

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品一区二区三区老鸭窝| 91麻豆国产精品久久| 91久久国产综合久久| 亚洲欧美日韩精品久久久久| 欧美在线观看一区| 久草在线在线精品观看| 亚洲欧洲在线观看av| 91精品国产一区二区三区香蕉 | 国产精品伦一区二区三级视频| 99久久综合精品| 欧美精品一区二区三区高清aⅴ| 日韩电影在线看| 成人深夜视频在线观看| 成人免费高清在线| 国产精品久久久久久久久久免费看| 欧美在线综合视频| 欧美日韩国产首页| 色妞www精品视频| 狠狠色伊人亚洲综合成人| 亚洲免费观看高清完整版在线| 亚洲男同1069视频| 人人超碰91尤物精品国产| 亚洲免费高清视频在线| 性感美女久久精品| **网站欧美大片在线观看| 亚洲高清免费视频| 中文字幕五月欧美| 国产精品一区一区| 激情欧美一区二区三区在线观看| 免费精品99久久国产综合精品| 国产麻豆成人精品| 国产一区不卡视频| 一本到一区二区三区| 日韩欧美的一区| 亚洲麻豆国产自偷在线| 九色综合狠狠综合久久| 色综合久久综合网| 26uuu国产在线精品一区二区| 欧美乱妇一区二区三区不卡视频| 欧美中文字幕不卡| 国产日韩精品一区二区三区在线| 国产校园另类小说区| 精品国产sm最大网站免费看| 久久久99精品免费观看| 婷婷亚洲久悠悠色悠在线播放| 亚洲国产精品久久不卡毛片 | 欧美激情资源网| 中文欧美字幕免费| 蜜桃久久av一区| 国产一区二区三区美女| 欧美另类变人与禽xxxxx| 久久人人爽人人爽| 国产亚洲综合在线| 日韩电影免费在线观看网站| 色婷婷综合五月| 国产亚洲制服色| 蜜桃av一区二区三区| 欧洲一区在线观看| 国产精品进线69影院| 久久国产夜色精品鲁鲁99| 国产乱一区二区| 日韩一区二区视频| 国产精品九色蝌蚪自拍| 久久精品二区亚洲w码| 视频一区国产视频| 91一区一区三区| 欧美一区二区三区在线观看视频| 国产精品麻豆网站| 国产成人午夜精品影院观看视频 | 久久久久久久性| 热久久一区二区| 51精品国自产在线| 日韩亚洲欧美在线| 视频在线观看国产精品| 欧美日韩日日摸| 欧美国产精品一区二区三区| 美女免费视频一区二区| 日韩午夜中文字幕| 美女尤物国产一区| 久久夜色精品国产噜噜av| 国产综合久久久久影院| 久久精品水蜜桃av综合天堂| 国产美女视频91| 国产精品精品国产色婷婷| av一区二区三区四区| 国产一区二区三区免费在线观看| 国产成人综合在线观看| 欧美伊人精品成人久久综合97| 亚洲一级片在线观看| 欧美经典一区二区| 亚洲第一在线综合网站| 97精品久久久午夜一区二区三区| 国产伦理精品不卡| 91久久精品一区二区| 色婷婷一区二区三区四区| 91国产成人在线| 亚洲高清免费视频| 日韩一级大片在线| 成人综合日日夜夜| 亚洲欧美激情视频在线观看一区二区三区 | 最新日韩av在线| 欧美男男青年gay1069videost| 另类小说色综合网站| 中文字幕第一页久久| 欧美三区在线视频| 国产精品69久久久久水密桃| 亚洲三级在线看| 麻豆精品国产91久久久久久| 久久免费美女视频| 欧美日韩在线观看一区二区 | 成人白浆超碰人人人人| 精品不卡在线视频| av高清不卡在线| 日韩黄色片在线观看| 久久综合九色综合97婷婷女人| 成人18视频在线播放| 亚洲大片在线观看| 国产婷婷一区二区| 欧美美女视频在线观看| eeuss鲁片一区二区三区| 日韩—二三区免费观看av| 亚洲人成人一区二区在线观看| 日韩午夜精品电影| 欧美综合在线视频| 处破女av一区二区| 美女视频黄 久久| 亚洲国产欧美另类丝袜| 中文字幕一区二| 久久综合精品国产一区二区三区| 欧美午夜理伦三级在线观看| 成人精品鲁一区一区二区| 老司机免费视频一区二区三区| 亚洲精品你懂的| 欧美情侣在线播放| 色综合天天性综合| 五月婷婷久久综合| 一区二区三区四区激情| 91精品国产综合久久小美女| 一本大道久久a久久精品综合| 国产传媒欧美日韩成人| 激情亚洲综合在线| 免费看精品久久片| 免费成人av在线播放| 午夜成人免费视频| 亚洲国产aⅴ天堂久久| 艳妇臀荡乳欲伦亚洲一区| 亚洲欧美另类综合偷拍| 综合av第一页| 一区二区三区小说| 一区二区三区视频在线观看| 中文字幕在线免费不卡| 综合久久久久综合| 一区二区三区不卡视频| 一区二区三区在线视频播放| 亚洲免费观看在线观看| 一区二区三区在线免费视频| 一区二区三区视频在线看| 亚洲成人激情自拍| 日本欧美在线观看| 麻豆精品国产91久久久久久| 久久福利视频一区二区| 激情丁香综合五月| 国产不卡视频一区二区三区| 午夜精品久久久久久久| 日本sm残虐另类| 韩国女主播成人在线观看| 国产.精品.日韩.另类.中文.在线.播放| 国产一区二区三区免费| 成人app在线| 91官网在线免费观看| 欧美精品 日韩| 久久欧美一区二区| 综合网在线视频| 亚洲国产日产av| 麻豆传媒一区二区三区| 高清视频一区二区| 色婷婷综合久久| 欧美成人精品福利| 欧美一区二区免费观在线| 精品国产免费人成电影在线观看四季| 久久久久99精品一区| 亚洲免费在线电影| 日本成人在线网站| 国产不卡视频在线播放| 欧美丝袜自拍制服另类| 欧美精品一区二区三区很污很色的| 欧美激情中文不卡| 日本成人在线电影网| 成人手机电影网| 91精品国产综合久久婷婷香蕉| 久久久久久久免费视频了| 亚洲人成在线观看一区二区| 亚洲高清在线精品| 国产区在线观看成人精品 | 在线日韩av片| 欧美天堂一区二区三区| 久久久精品tv| 首页综合国产亚洲丝袜| 成人免费va视频| 日韩精品影音先锋|