Cryptography Lab Reference Manual

Zhang Luduo (张鲁夺) <support@zhangluduo.com>

Copyright (C) 2019 zhangluduo.com. All Rights Reserved.


Cryptography Lab Reference Manual                               May 2020
                                                            Version: 2.0
                         Author: Zhang Luduo, < support@zhangluduo.com >

Table of Contents
  1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . .  1
    1.1 What is CryptographyLab . . . . . . . . . . . . . . . . . . .  1
    1.2 Compile and test environment of Crypto module . . . . . . . .  2
    1.3 Getting started . . . . . . . . . . . . . . . . . . . . . . .  2
  2. Data type . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
    2.1 struct BinaryData . . . . . . . . . . . . . . . . . . . . . .  2
    2.2 struct FileData . . . . . . . . . . . . . . . . . . . . . . .  2
    2.3 struct StringData . . . . . . . . . . . . . . . . . . . . . .  2
    2.4 enum CharacterSet . . . . . . . . . . . . . . . . . . . . . .  2
    2.5 enum ConvertFlag . . . . . . . . . . . . . . . . . . . . . . . 2
    2.6 enum CipherDataType . . . . . . . . . . . . . . . . . . . . .  2
    2.7 union struct CipherData . . . . . . . . . . . . . . . . . . .  2
    2.8 struct RsaKey . . . . . . . . . . . . . . . . . . . . . . . .  3
    2.9 enum CipherMode . . . . . . . . . . . . . . . . . . . . . . .  3
    2.10 enum PaddingMode . . . . . . . . . . . . . . . . . . . . . .  3
    2.11 enum CipherDirection . . . . . . . . . . . . . . . . . . . .  3
    2.12 int . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
    2.13 string . . . . . . . . . . . . . . . . . . . . . . . . . . .  3
    2.14 bool . . . . . . . . . . . . . . . . . . . . . . . . . . . .  3
    2.15 byte* . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
  3. Constant . . . . . . . . . . . . . . . . . . . . . . . . . . . .  3
    3.1 NULL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
  4. Operator overload . . . . . . . . . . . . . . . . . . . . . . . . 3
    4.1 operator + . . . . . . . . . . . . . . . . . . . . . . . . . . 3
    4.2 operator - . . . . . . . . . . . . . . . . . . . . . . . . . . 3
    4.3 operator * . . . . . . . . . . . . . . . . . . . . . . . . . . 3
    4.4 operator / . . . . . . . . . . . . . . . . . . . . . . . . . . 3
    4.5 operator % . . . . . . . . . . . . . . . . . . . . . . . . . . 3
    4.6 operator -> . . . . . . . . . . . . . . . . . . . . . . . . .  3
  5. Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
    5.1 $Inc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
    5.2 $RsaCreateKey . . . . . . . . . . . . . . . . . . . . . . . .  4
    5.3 $RsaSetKey . . . . . . . . . . . . . . . . . . . . . . . . . . 4
    5.4 $RsaKeyToString . . . . . . . . . . . . . . . . . . . . . . .  4
    5.5 $RsaCheckPrivKey . . . . . . . . . . . . . . . . . . . . . . . 4
    5.6 $RsaCheckPubKey . . . . . . . . . . . . . . . . . . . . . . .  4
    5.7 $RsaesEncrypt . . . . . . . . . . . . . . . . . . . . . . . .  4
    5.8 $RsaesDecrypt . . . . . . . . . . . . . . . . . . . . . . . .  4
    5.9 $RsassaSignature . . . . . . . . . . . . . . . . . . . . . . . 4
    5.10 $RsassaVerify . . . . . . . . . . . . . . . . . . . . . . . . 5
    5.11 $Caesar . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
    5.12 $BlockCipher . . . . . . . . . . . . . . . . . . . . . . . .  5
    5.13 $StreamCipher . . . . . . . . . . . . . . . . . . . . . . . . 5
    5.14 $Encoding . . . . . . . . . . . . . . . . . . . . . . . . . . 5
    5.15 $Decoding . . . . . . . . . . . . . . . . . . . . . . . . . . 6
    5.16 $Hash . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
    5.17 $HMAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
    5.18 $Checksum . . . . . . . . . . . . . . . . . . . . . . . . . . 7
    5.19 $FileData . . . . . . . . . . . . . . . . . . . . . . . . . . 7
    5.20 $BinaryData . . . . . . . . . . . . . . . . . . . . . . . . . 7
    5.21 $StringData . . . . . . . . . . . . . . . . . . . . . . . . . 7
    5.22 $BinaryToHexString . . . . . . . . . . . . . . . . . . . . .  7
    5.23 $TruncatedBinary . . . . . . . . . . . . . . . . . . . . . .  7
    5.24 $BinaryToString . . . . . . . . . . . . . . . . . . . . . . . 7
    5.25 $GetStringBytes . . . . . . . . . . . . . . . . . . . . . . . 7
    5.26 $ReadFile . . . . . . . . . . . . . . . . . . . . . . . . . . 7
    5.27 $WriteFile . . . . . . . . . . . . . . . . . . . . . . . . .  7
    5.28 $WriteNewFile . . . . . . . . . . . . . . . . . . . . . . . . 8
    5.29 $ShowBits . . . . . . . . . . . . . . . . . . . . . . . . . . 8
    5.30 $And . . . . . . . . . . . . . . . . . . . . . . . . . . . .  8
    5.31 $Or . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
    5.32 $Not . . . . . . . . . . . . . . . . . . . . . . . . . . . .  8
    5.33 $Xor . . . . . . . . . . . . . . . . . . . . . . . . . . . .  8
    5.34 $HexStringFormat . . . . . . . . . . . . . . . . . . . . . .  8
    5.35 $Rand . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
    5.36 $IntToString . . . . . . . . . . . . . . . . . . . . . . . .  8
    5.37 $MorseEncode . . . . . . . . . . . . . . . . . . . . . . . .  8
    5.38 $MorseDecode . . . . . . . . . . . . . . . . . . . . . . . .  8
    5.39 $PlayMorseCode . . . . . . . . . . . . . . . . . . . . . . .  8
    5.40 $PBKDF2 . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
    5.41 $BLAKE2sMAC . . . . . . . . . . . . . . . . . . . . . . . . . 9
    5.42 $BLAKE2bMAC . . . . . . . . . . . . . . . . . . . . . . . . . 9
    5.43 $Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
  6. BUG report technical support and feedback . . . . . . . . . . . . 9
  Appendix A. Test case in CryptographyLab . . . . . . . . . . . . . . 9
  Appendix B. Test vector in CryptographyLab . . . . . . . . . . . . .10
  Appendix C. Performance of Crypto module . . . . . . . . . . . . . .10
  Appendix D. Third party code . . . . . . . . . . . . . . . . . . . .10
  Appendix E. Source code of Crypto module . . . . . . . . . . . . . .10
  Appendix F. Frequently asked questions . . . . . . . . . . . . . . .10


                   Cryptography Lab Reference Manual

1. Introduction

    1.1 What is CryptographyLab

      CryptographyLab is a cryptographic analysis and learning tool for 
      programmers and fans. The CryptographyLab has built-in a lots of 
      cryptography algorithms. Including classical cipher algorithms 
      (such as Caesar cipher), HASH algorithm, block cipher algorithm, 
      stream cipher algorithm, public key cryptosystems, MAC, DSA and
----------------------------------------------------------------[page 1]
      key derivation functions etc.

      In addition, it has built-in some tool functions, including file 
      reading and writing functions, bit operation functions, 
      hexadecimal functions, digital certificate functions, Morse code 
      etc.

      The program contains follwing 3 modules:

        * Crypto: It encapsulates all cryptography algorithms used by 
          CryptographyLab. And the Crypto module is open source, it is 
          written in standard C language and can be run on Windows and 
          Linux operating systems.
        
        * Exp: This module is used to grammar analyze for user input 
          function expressions.
        
        * UI: It's a simple MFC application. It provides two text 
          boxes, one is for user input, and an other one is for output
          the calculate result.

    1.2 Compile and test environment of Crypto module

      - Ubuntu 16.04-i386 & gcc 5.4.0 & cmake 2.8
      - CentOS 6.4-x64 & gcc 4.4.7  & cmake 2.8
      - Windows8.1 64 bit version  & Visual studio 2013

    1.3 Getting started

      Here is a simple example, type following expression:

      $BinaryToHexString($Hash("SHA1", $StringData("zhangluduo", 
        MBCS)), U);

      The expression call $Hash function to calculate SHA1 digest of 
      "zhangluduo", and then call $BinaryToHexString function to 
      convert binary byte to a hex string.

      The output result is "13 56 06 51 9C 59 45 4C BE 7A 1D 17 C7 F8 
      E6 03 79 81 D9 3D "

2 Data type

  2.1 struct BinaryData

    struct BinaryData
    {
      [private] byte* Data;
      [private] int Size;
    };

  2.2 struct FileData

    struct FileData
    {
      [public] string FileName;
    };

  2.3 struct StringData

    struct StringData
    {
      [public] string TheString;
      [private] CharacterSet TheCharacterSet;
    };

  2.4 enum CharacterSet

    enum CharacterSet
    {
      UTF8,
      UNICODE,
      MBCS,
    };

  2.5 enum ConvertFlag

    enum ConvertFlag
    {
      U, // To Uppercase
      L, // To Lowercase
    };

  2.6 enum CipherDataType

    enum CipherDataType
    {
      BINRAY,
      FILE,
      STRING
    };

  2.7 union struct CipherData

    union struct CipherData
    {
      [public] FileData   f;
      [public] BinaryData b;
      [public] StringData s;
----------------------------------------------------------------[page 2]
      [hidden] CipherDataType Type;
    };

  2.8 struct RsaKey

    struct RsaKey
    {
      [hidden] int bits;
      [hidden] BinaryData  n; 
      [hidden] BinaryData  e; 
      [hidden] BinaryData  d; 
      [hidden] BinaryData  p; 
      [hidden] BinaryData  q; 
      [hidden] BinaryData dp; 
      [hidden] BinaryData dq; 
      [hidden] BinaryData qp;
    };

  2.9 enum CipherMode

    enum CipherMode
    {
      ECB,
      CBC,
      CFB,
      OFB,
      CTR,
    };

  2.10 enum PaddingMode

    enum PaddingMode
    {
      NONE,
      PKCS7,
      ZEROS,
      ANSIX923,
      ISO10126,
    };

  2.11 enum CipherDirection

    enum CipherDirection
    {
      ENCRYPT,
      DECRYPT,
    };

  2.12 int

    int

  2.13 string

    string

  2.14 bool

    bool (true || false)

  2.15 byte*

    byte*

3 Constant

  3.1 NULL

    NULL

4 Operator overload

  4.1 operator +

    int operator + (int, int);
    string operator + (string, string);
    BinaryData operator + (BinaryData, BinaryData);

  4.2 operator -

    int operator - (int, int);

  4.3 operator *

    int operator * (int, int);

  4.4 operator /

    int operator / (int, int);

  4.5 operator %

    int operator % (int, int);

  4.6 operator ->

    < Type > operator -> ();

5 Functions
----------------------------------------------------------------[page 3]

  5.1 $Inc

    BinaryData $Inc(BinaryData _Binary
    );

    BinaryData $Inc(BinaryData _Binary, 
      int LoopCount
    );

  5.2 $RsaCreateKey

    RsaKey $RsaCreateKey(int KeyBits
    );

    Remarks
      This function supports following RSA key bits, 512, 1024, 1536, 
      1792, 2048, 2560, 3072, 4096. To quickly generate random RSA key
      use the 64-bit version of CryptographyLab.

  5.3 $RsaSetKey

    RsaKey $RsaSetKey(string nHex, 
      string eHex
    ); 

    RsaKey $RsaSetKey(string nHex, 
      string eHex, 
      string dHex, 
      string pHex, 
      string qHex, 
      string dpHex, 
      string dqHex, 
      string qpHex
    );

    RsaKey $RsaSetKey(BinaryData n, 
      BinaryData e
    ); 

    RsaKey $RsaSetKey(string n, 
      BinaryData e, 
      BinaryData d, 
      BinaryData p, 
      BinaryData q, 
      BinaryData dp, 
      BinaryData dq, 
      BinaryData qp
    );

    Remarks
      n  - modulus INTEGER                         ,
      e  - publicExponent INTEGER                  ,
      d  - privateExponent INTEGER                 ,
      p  - prime1 INTEGER                          ,
      q  - prime2 INTEGER                          ,
      dp - exponent1 INTEGER d mod (p-1)           ,
      dq - exponent2 INTEGER d mod (q-1)           ,
      qp - coefficient INTEGER (inverse of q) mod p,

  5.4 $RsaKeyToString

    string $RsaKeyToString(RsaKey key
    );

  5.5 $RsaCheckPrivKey

    bool $RsaCheckPrivKey(RsaKey key
    );

  5.6 $RsaCheckPubKey

    bool $RsaCheckPubKey(RsaKey key
    );

  5.7 $RsaesEncrypt

    CipherData $RsaesEncrypt(string Scheme /* "OAEP" || "PKCS1_V15" */, 
      RsaKey Key, 
      CipherData Input, 
      CipherData Output, 
      [string Hash, [CipherData Label]]
    );

  5.8 $RsaesDecrypt

    CipherData $RsaesDecrypt(
      string Scheme /* "OAEP" || "PKCS1_V15" */, 
      RsaKey Key, 
      CipherData Input, 
      CipherData Output, 
      [string Hash, [CipherData Label]]
    );

  5.9 $RsassaSignature

    CipherData $RsassaSignature(
      string Scheme /* "PSS"  || "PKCS1_V15" */, 
      RsaKey Key,
----------------------------------------------------------------[page 4]
      CipherData Input, 
      CipherData Output, 
      string Hash
    );

  5.10 $RsassaVerify

    bool $RsassaVerify(string Scheme /* "PSS"  || "PKCS1_V15" */, 
      RsaKey Key, 
      CipherData InputData, 
      CipherData SignatureData, 
      string Hash
    );

  5.11 $Caesar

    string $Caesar(string s, 
      int Key, 
      CipherDirection d
    );

    Remarks
      This function supports following characters, a-z, A-Z, 0-9, 0x20 
      and ~ ! @ # $ % ^ & * ( ) _ + - = [ ] \ { } | ; ' : " , . / < > ? 

  5.12 $BlockCipher

    CipherData $BlockCipher(string Algorithm,
      CipherData Key, 
      CipherData Iv, 
      CipherMode _Mode, 
      Padding _Padding, 
      CipherData Input, 
      CipherData Output, 
      CipherDirection _Direction
    );

    Remarks
      This function supports following algorithms  (case insensitive),
      "aes",
      "des",
      "blowfish",
      "sm4" || "sm-4",
      "twofish",
      "camellia",
      "cast-128" || "cast128",
      "cast-256" || "cast256",
      "tea",
      "xtea",
      "3des" || "3-des" || "des3" || "des-3",
      "idea",
      "seed",
      "safer-k64",
      "safer-k128",
      "serpent",
      "mars",
      "rc2",
      "rc5",
      "rc6",
      "3way" || "3-way" || "three-way" || "threeway",

  5.13 $StreamCipher

    CipherData $StreamCipher(string Algorithm, 
      CipherData Key, 
      CipherData Input, 
      CipherData Output, 
      CipherDirection _Direction
    );

    CipherData $StreamCipher(string Algorithm, 
      CipherData Key, 
      CipherData Iv, 
      CipherData Input, 
      CipherData Output, 
      CipherDirection _Direction
    );

    Remarks
      This function supports following algorithms (case insensitive),
      "arc4", "salsa20", "xsalsa20".

  5.14 $Encoding

    CipherData $Encoding(string Algorithm, 
      CipherData Input, 
      CipherData Output
    );

    CipherData $Encoding(string Algorithm, 
      CipherData Input, 
      CipherData Output, 
      string Param
    ); 

    Parameters
      Param - "LineSize:%d".

    Remarks
----------------------------------------------------------------[page 5]
      This function supports following algorithms (case insensitive),
      "base32", "base64", "base58".

  5.15 $Decoding

    CipherData $Decoding(string Algorithm, 
      CipherData Input, 
      CipherData Output
    );

    Remarks
      This function supports following algorithms (case insensitive),
      "base32", "base64".

  5.16 $Hash

    BinaryData $Hash(string Algorithm, 
      CipherData Input, 
      int IterateCount
    );

    BinaryData $Hash(string Algorithm, 
      CipherData Input
    );

    BinaryData $Hash(String Algorithm, 
      CipherData Input
      [, CipherData Key 
      [, int IterateCount]
      ]
    );

    Remarks
      This function supports following algorithms (case insensitive),
      "md2",
      "md4",
      "md5",
      "ed2k",
      "sha1",
      "sha224" || "sha-224" || "sha2-224",
      "sha256" || "sha-256" || "sha2-256",
      "sha384" || "sha-384" || "sha2-384",
      "sha512" || "sha-512" || "sha2-512",
      "sha3-224",
      "sha3-256",
      "sha3-384",
      "sha3-512",
      "md6-224",
      "md6-256",
      "md6-384",
      "md6-512",
      "tiger",
      "whirlpool",
      "ripemd128" || "ripemd-128",
      "ripemd160" || "ripemd-160",
      "ripemd256" || "ripemd-256",
      "ripemd320" || "ripemd-320",
      "sm3",
      "blake2s-128",
      "blake2s-160",
      "blake2s-224",
      "blake2s-256",
      "blake2b-160",
      "blake2b-256",
      "blake2b-384",
      "blake2b-512"

  5.17 $HMAC

    BinaryData $HMAC(string Hash, 
      CipherData Key, 
      CipherData Input
    );

    Remarks
      This function supports following hash algorithms, 
      (case insensitive),
      "md2",
      "md4",
      "md5",
      "ed2k",
      "sha1",
      "sha224" || "sha-224" || "sha2-224",
      "sha256" || "sha-256" || "sha2-256",
      "sha384" || "sha-384" || "sha2-384",
      "sha512" || "sha-512" || "sha2-512",
      "sha3-224",
      "sha3-256",
      "sha3-384",
      "sha3-512",
      "md6-224",
      "md6-256",
      "md6-384",
      "md6-512",
      "tiger",
      "whirlpool",
      "ripemd128" || "ripemd-128",
      "ripemd160" || "ripemd-160",
      "ripemd256" || "ripemd-256",
----------------------------------------------------------------[page 6]
      "ripemd320" || "ripemd-320",
      "sm3",
      "blake2s-128",
      "blake2s-160",
      "blake2s-224",
      "blake2s-256",
      "blake2b-160",
      "blake2b-256",
      "blake2b-384",
      "blake2b-512"

  5.18 $Checksum

    BinaryData $Checksum(string Algorithm, 
      CipherData Input, 
      int IterateCount
    );

    BinaryData $Checksum(string Algorithm, 
      CipherData Input
    );

    Remarks
      This function supports following checksum algorithms, 
      (case insensitive),
      "adler32" || "adler-32",
      "crc32" || "crc-32",

  5.19 $FileData

    CipherData $FileData(string FileName
    );

  5.20 $BinaryData

    CipherData $BinaryData(
    );

    CipherData $BinaryData(byte* _Data
    );

  5.21 $StringData

    CipherData $StringData(CharacterSet _Set
    );

    CipherData $StringData(string s, 
      CharacterSet _Set
    );

  5.22 $BinaryToHexString

    string $BinaryToHexString(BinaryData _Data, 
      ConvertFlag _Flag
    );

    string $BinaryToHexString(BinaryData _Data, 
      ConvertFlag _Flag, 
      int LineSize
    );

    string $BinaryToHexString(BinaryData _Data, 
      ConvertFlag _Flag, 
      int LineSize, 
      bool AddSpace
    );

  5.23 $TruncatedBinary

    BinaryData $TruncatedBinary(
      BinaryData _Data, int Offset
    );

    BinaryData $TruncatedBinary(
      BinaryData _Data, 
      int Offset, 
      int Counnt
    );

  5.24 $BinaryToString

    string $BinaryToString(BinaryData _Data, 
      CharacterSet _Set
    );

  5.25 $GetStringBytes

    Binary $GetStringBytes(StringData _stringData
    );

  5.26 $ReadFile

    BinaryData $ReadFile(string FileName, 
      int BytesToRead, 
      int Offset
    );

  5.27 $WriteFile 

----------------------------------------------------------------[page 7]
    bool $WriteFile(string FileName, 
      BinaryData _Data, 
      int Offset
    );

  5.28 $WriteNewFile

    bool $WriteNewFile(string FileName, 
      BinaryData _Data
    );

  5.29 $ShowBits

    string $ShowBits(BinaryData _Data
    );

  5.30 $And

    BinaryData $And(BinaryData _Data1, 
      BinaryData _Data2
    );

  5.31 $Or

    BinaryData $Or(BinaryData _Data1, 
      byte* _Data2
    );

  5.32 $Not

    BinaryData $Not(BinaryData _Data1
    );

  5.33 $Xor

    BinaryData $Xor(BinaryData _Data1, 
      BinaryData _Data2
    );

  5.34 $HexStringFormat

    string $HexStringFormat(string Hex
    );

  5.35 $Rand

    string $Rand(int Count, 
      string Option
    );

    Remarks
      This function supports one or more of following option,
      "N", 0-9
      "C", A-Z
      "c", a-z
      "H", 0-9 || A-F
      "h", 0-9 || a-f
      "O", ~ ! @ # $ % ^ & ( ) _ + - = { } [ ] ; , .

  5.36 $IntToString

    string $IntToString(int n
    );

    string $IntToString(int n, int Width
    );

  5.37 $MorseEncode

    string $MorseEncode(string s
    );

  5.38 $MorseDecode

    string $MorseDecode(string s
    );

  5.39 $PlayMorseCode

    string $PlayMorseCode(string s
    );

  5.40 $PBKDF2

    BinaryData $PBKDF2(string HMAC, 
      CipherData P, 
      CipherData S, 
      int c, 
      int 
      dkLen
    );

    Remarks
      This function supports following HMAC algorithms (case 
      insensitive):
      "hmac-md2"
      "hmac-md4"
      "hmac-md5"
      "hmac-ed2k"
----------------------------------------------------------------[page 8]
      "hmac-sha1"
      "hmac-sha224"
      "hmac-sha256"
      "hmac-sha384"
      "hmac-sha512"
      "hmac-sha3-224"
      "hmac-sha3-256"
      "hmac-sha3-384"
      "hmac-sha3-512"
      "hmac-md6-224"
      "hmac-md6-256"
      "hmac-md6-384"
      "hmac-md6-512"
      "hmac-tiger"
      "hmac-whirlpool"
      "hmac-ripemd128" || "hmac-ripemd-128"
      "hmac-ripemd160" || "hmac-ripemd-160"
      "hmac-ripemd256" || "hmac-ripemd-256"
      "hmac-ripemd320" || "hmac-ripemd-320"
      "hmac-sm3"

    Parameters
      HMAC  - PRF.
      P     - password, an octet string.
      S     - salt, an octet string.
      c     - iteration count, a positive integer.
      dkLen - intended length in octets of the derived key, a positive 
              integer.

    For more information, see rfc2898.txt.

  5.41 $BLAKE2sMAC

    BinaryData $BLAKE2sMAC(int DigestSize, 
      CipherData Input, 
      CipherData Key
    );

  5.42 $BLAKE2bMAC

    BinaryData $BLAKE2bMAC(int DigestSize, 
      CipherData Input, 
      CipherData Key
    );

  5.43 $Help

    string $Help(string
    );

6 BUG report technical support and feedback


  In case you want to contact me PRIVATELY, here's my PGP Key

  -----BEGIN PGP PUBLIC KEY BLOCK-----
  Version: GnuPG v1.4.9 (MingW32)

  mQGhBE5h5S0RBACgDFUF5Pso4GwWrD968NVLZe3M9J2LG2PB/N0d7ceOa8fNvtaK
  FgGPCt4GOZcAsXbILoRTRKxfsGxBmGmrgw6TjeZam9yrkBeqvh82O0a7x5VI6s7h
  c2UpdqKK8tDIpsrqKDs20kkcKMnY9ga6B7c+fj2mtEIdLkGXigUgmp138wCgsTL0
  Ndzg/7nOQt0wwimpbJiElUUEAJ9emkJACmqJcauT02njezjoJGFqaDmmWBPw3TLN
  r011C118U3HbXHQPs26wYtNBlrIfdJRl1EcP2z3QRfyQ+lCKCkVL7Zx1pNxP7DHZ
  od2tXMO2h7y3c1VLKptS29SEkEMsEjnd/4Uac6q86tKvRt8gMzvNiE59fCZmag8w
  RP1RA/d5MumdMqujgyZ+1n0jB7rnJGwi+cInl1Cceh/lmcfrcYZfvCw0I+HG7LlG
  XTMtkpFRTqCXg8EjdggfVXgDLOgSbcrWjBk2oZg2Dd/mUGnWaYiR/PmjijmHw8iU
  rv8sRVeNVNtly96RxJKQdiAVQ00/Fzzk02QJqVTBBtgs2XEGtCBaaGFuZyBMdWR1
  byA8d3d3QHpoYW5nbHVkdW8uY29tPohgBBMRAgAgBQJOYeUtAhsDBgsJCAcDAgQV
  AggDBBYCAwECHgECF4AACgkQQNb4NRSlL6zgAACfYIoMrudr6c5HRb3idEvVanv3
  WIMAoKVc/bARu1zI4M+vt6dt/6gHIKDBuQQNBE5h5S0QEACvj4IHq1IlnG7BsM5l
  npHuTuMRdbz8K0jKtJ7jQFyuoT37uNcWBMP0ma18NgY4ScL602jIFrdJbTK0tr0Q
  t1cl3TqWlPdot9YSKSWHe8jQMOw453U775T4Cfu9FaiTG/rXJGI3c3hhHuuAGlqI
  34FgPupzHYXD4cYrQ9aIpPFcNa/gvUgyA6t8qsgSaLHuIBBbmPql7IAMMhydV07Q
  E4FDYAV4hYUERWOGY1Mfbfqg1/FNe4wsSa7z4WZKejZ6uDJ9RbdSM1LRvYK5ft95
  +QuWJaHYJwJ5ZQqcXyYt3UlrunHzrp76ONNxJVrv5fyfMQ18B9ZESV81hoNVUJgO
  kt/1Vxm7m5A9eoTR+gaDtHUiDg1OMjIP1a3jkwxV9CAxnpFwoezfvoHtyPHg/v6b
  a2dj2lRMCDPcmWiEkkSfVoj6vX7uVHQnh8MSfVKkTL3J/xxxJafbMBIiMWHJPOYc
  9OIpOkpam0mlMSgal3Zt/dykpHINw1QDdZNZSLs0INdBvZTWL/gs9kNuycI340kY
  iCrhFXh9Dgt/4p733eM5wy9qduhn9Ncowfr01VoTvFgNI3ONr9pOp1EcLGoElaOS
  meWisjtdzi7AmvqJnOjavrYxXF4Si/nqriXxMkw/5aQ53zUfqopEOklPsBHvr2I5
  EVBFPWR6wraDk06nE/qFq0pizwADBw/8CGOD5jBUmmNCIVS5L/QVOnqOaVK9rK/J
  4nt4glBRJIYk5koquf8OGYPEreFMP5QbjTdwL5ziRXTyJSKepc+CjlAe+YJYfxuo
  5+ScJLafFWaxOTCSv7TIbjWzFTW60VS3fyccFuwyk0Fm3E/JEBoitoUZa1/q/aOL
  OYF02irR4vUT6uWd4tZsldc3ZlDLHD8l1PCh4sFFXaqeqTEbWnxMKTEcbHl6GE11
  1Bw1gcy53on5oSTCbxQVhjCVAKtMLUj/uzmcsRCEd0Tu5S5l38jAc5R5G9axukiU
  5Ft5mPdX00dsRI73UzRalt8nSvSCccHK3d8eouCzOzqrGXVDjo+CuFGEc7wZGUI1
  533TXvujAkE7UCEJlbcEF0KxoPd6GFio85DlGN3xB8smoBC11nxc1qOBvUiFopon
  ILUrtRBN+pAr8SSEIp/19WVPZ1If2sT99ejWstzB51vDeQWlyfHAgI+Dl21leJRB
  zcn023H3K/UDhIv/A673MFtmB0IzNMDv6A+MVSaGGP3OzZFwLNJKOCcRMswTuzgH
  4EikHQ0yUiIRSM91thFolceLyKVv7dokMHkBJGBW+xBX9Q1dkHcrtN574mAkTt7I
  3LVp8oTnmyakyMAXZgMroG+QzwhzDlXx2ncjjVE8WfpfUMe/0sfvb5C51OYQz+ua
  ekxLCALrzHSISQQYEQIACQUCTmHlLQIbDAAKCRBA1vg1FKUvrFmSAJwNrsV3qt33
  /3RSIc0ij4Ol9YfMFQCgoFcVBhjuZ18n7QGYiWsAC0DvPfY=
  =HtCm
  -----END PGP PUBLIC KEY BLOCK-----

Appendix A. Test case in CryptographyLab

  http://zhangluduo.com/cryptographylab/testcase.html
----------------------------------------------------------------[page 9]

Appendix B. Test vector in CryptographyLab

  http://zhangluduo.com/cryptographylab/testvector.html

Appendix C. Performance of Crypto module

  http://zhangluduo.com/cryptographylab/performance.html

Appendix D. Third party code

  http://zhangluduo.com/cryptographylab/3rdcode.html

Appendix F. Source code of Crypto module

  http://zhangluduo.com/cryptographylab/cryptosource.html

Appendix G. Frequently asked questions

  http://zhangluduo.com/cryptographylab/faq.html















































































---------------------------------------------------------------[page 10]

Copyright © 2019 Zhang Luduo .

All rights reserved.