From f87701444b7b28e9aadd4e5a9f7367cce9c5f614 Mon Sep 17 00:00:00 2001 From: Niels Ferguson Date: Thu, 24 Oct 2019 01:49:21 +0000 Subject: [PATCH] Merged PR 3919453: Modularize RSA tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit First stage of modularizing the test code. I wrote new test code for RSA signing and RSA encryption. Added conditional compilation switches to remove the various implementations (RSA32, CNG, CAPI, Bignum, …) Old test code is still around, some in files called "old-*" and some commented out. We can remove it once we are happy with the new tests. Fixed one bug found by the new tests. Related work items: #15886191 --- inc/symcrypt.h | 27 +- lib/libmain.c | 8 +- lib/rsa_enc.c | 5 +- lib/rsa_padding.c | 6 +- lib/rsakey.c | 7 + scbuild/scbuild.cs | 4 + unittest/exe_Win7nLater/main_exe.cpp | 22 +- unittest/exe_Win8_1nLater/main_exe.cpp | 28 +- unittest/exe_legacy/main_exe.cpp | 22 +- unittest/exe_test/main_exe.cpp | 25 +- unittest/inc/algorithm_base.h | 191 +++ unittest/inc/cng_implementations.h | 31 + unittest/inc/msbignum_implementations.h | 8 + unittest/inc/{testRsa.h => old-testRsa.h} | 5 - unittest/inc/sc_implementations.h | 30 + unittest/inc/testInterop.h | 5 - unittest/inc/test_lib.h | 107 +- unittest/kat_rsaenc.dat | 1120 ++++++++++++++ unittest/kat_rsasign.dat | 822 ++++++++++ unittest/lib/callback.cpp | 10 +- unittest/lib/capi_implementations.cpp | 5 +- unittest/lib/cng_implementations.cpp | 1328 +++++++++++++++-- unittest/lib/main.cpp | 53 +- unittest/lib/main_exe_common.cpp | 54 +- unittest/lib/msbignum_implementations.cpp | 136 +- unittest/lib/{testRsa.cpp => old-testRsa.cpp} | 0 .../{testRsa_cng.cpp => old-testRsa_cng.cpp} | 0 ..._msbignum.cpp => old-testRsa_msbignum.cpp} | 0 .../{testRsa_sc.cpp => old-testRsa_sc.cpp} | 0 unittest/lib/ref_implementations.cpp | 5 +- unittest/lib/rsa32_implementations.cpp | 5 +- unittest/lib/sc_implementations.cpp | 1233 ++++++++++++--- unittest/lib/sources | 10 +- unittest/lib/testArithmetic.cpp | 11 +- unittest/lib/testRsaEnc.cpp | 970 ++++++++++++ unittest/lib/testRsaSign.cpp | 1028 +++++++++++++ unittest/symcryptunittest.rc | 3 +- 37 files changed, 6820 insertions(+), 504 deletions(-) rename unittest/inc/{testRsa.h => old-testRsa.h} (95%) create mode 100644 unittest/kat_rsaenc.dat create mode 100644 unittest/kat_rsasign.dat rename unittest/lib/{testRsa.cpp => old-testRsa.cpp} (100%) rename unittest/lib/{testRsa_cng.cpp => old-testRsa_cng.cpp} (100%) rename unittest/lib/{testRsa_msbignum.cpp => old-testRsa_msbignum.cpp} (100%) rename unittest/lib/{testRsa_sc.cpp => old-testRsa_sc.cpp} (100%) create mode 100644 unittest/lib/testRsaEnc.cpp create mode 100644 unittest/lib/testRsaSign.cpp diff --git a/inc/symcrypt.h b/inc/symcrypt.h index e116364..1e1cbd2 100644 --- a/inc/symcrypt.h +++ b/inc/symcrypt.h @@ -5745,18 +5745,23 @@ SymCryptRsaPssSign( SIZE_T cbSignature, _Out_ SIZE_T *pcbSignature ); // -// This function signs a message (its hash value is stored in pbHashValue) with -// the pkRsakey key using RSA PSS. The signature is stored in the pbSignature -// buffer and the number of bytes written in *pcbSignature. +// Sign a message using RSA-PSS +// - pkRsaKey: Key to sign with; must contain a private key +// - pbHashValue/cbHashValue: Value to sign +// - hashAlgorithm: Hash algorithm to use in the MGF of PSS +// - cbSalt: # bytes of salt to use (typically equal to size of hash value) +// - flags: must be 0 +// - nfSignature: Number format of signature. Typically SYMCRYPT_NUMBER_FORMAT_MSB_FIRST +// - pbSignature/cbSignature: buffer that receives the signature. +// If pbSignature == NULL< only *pcbSignature is returned. +// Note: pbSignature receives an integer, so if the buffer is larger than the modulus size +// it will be padded with zeroes. For MSB-first format the zeroes are at the start of the buffer. +// Typically this buffer is the same size as the RSA modulus. +// - pcbSignature: receives the size of the signature. // -// If pbSignature == NULL then only the *pcbSignature is output. -// -// nfSignature is the number format of the signature (i.e. the pbSignature buffer). Currently -// only SYMCRYPT_NUMBER_FORMAT_MSB_FIRST is supported. -// -// Requirement: -// - cbHashValue <= SymCryptRsakeySizeofModulus( pkRsakey ). Otherwise the function -// returns SYMCRYPT_INVALID_ARGUMENT. +// Return value: +// If cbHashValue + cbSalt is too large (abover modulus size minus 2 or 3 depending on details) then +// signature generation fails. // // Allowed flags: // None diff --git a/lib/libmain.c b/lib/libmain.c index b39482e..c8e050d 100644 --- a/lib/libmain.c +++ b/lib/libmain.c @@ -34,9 +34,9 @@ SymCryptLibraryWasNotInitialized() #endif -CHAR * SymCryptBuildString = - "v" SYMCRYPT_BUILD_INFO_VERSION - "_" SYMCRYPT_BUILD_INFO_BRANCH +const CHAR * SymCryptBuildString = + "v" SYMCRYPT_BUILD_INFO_VERSION + "_" SYMCRYPT_BUILD_INFO_BRANCH "_" SYMCRYPT_BUILD_INFO_COMMIT "_" SYMCRYPT_BUILD_INFO_TIMESTAMP; @@ -47,7 +47,7 @@ SymCryptInitEnvCommon( UINT32 version ) { UINT32 tmp; - CHAR * p; + const CHAR * p; // Assertion that verifies that the calling application was compiled with // the same version header files as the library. diff --git a/lib/rsa_enc.c b/lib/rsa_enc.c index f886455..8d91c27 100644 --- a/lib/rsa_enc.c +++ b/lib/rsa_enc.c @@ -913,6 +913,7 @@ SymCryptRsaOaepDecrypt( _Out_ SIZE_T *pcbDst ) { SYMCRYPT_ERROR scError = SYMCRYPT_NO_ERROR; + SIZE_T cbDstResult = 0; // We always return a value into *pcbDst PBYTE pbScratch = NULL; SIZE_T cbScratch = 0; @@ -997,7 +998,7 @@ SymCryptRsaOaepDecrypt( flags, pbDst, cbDst, - pcbDst, + &cbDstResult, pbScratch, cbScratch - cbTmp ); if (scError != SYMCRYPT_NO_ERROR) @@ -1014,6 +1015,8 @@ cleanup: SymCryptCallbackFree(pbScratch); } + *pcbDst = cbDstResult; + return scError; } diff --git a/lib/rsa_padding.c b/lib/rsa_padding.c index c491db8..5572e15 100644 --- a/lib/rsa_padding.c +++ b/lib/rsa_padding.c @@ -272,7 +272,11 @@ SymCryptRsaPkcs1RemoveEncryptionPadding( // Instead we rotate the buffer left (side-channel safe) so that the message appears at the front. // Rotation constant is such that the message appears at the start. SymCryptScsRotateBuffer( pbPkcs1Format, cbPkcs1Buffer, (iFirstZero + 1) & (cbPkcs1Buffer - 1) ); - SymCryptScsCopy( pbPkcs1Format, cbPlaintextResult, pbPlaintext, cbPlaintext ); + + // The ScsCopy function can copy the data to the destination buffer, but the input buffer must be + // as long as the output buffer. We can't just use cbPlaintext as the output buffer size, as it is + // unbounded. But we can limit it to cbPkcs1Format as that is the public key size and is public. + SymCryptScsCopy( pbPkcs1Format, cbPlaintextResult, pbPlaintext, min( cbPlaintext, cbPkcs1Format ) ); cleanup: // Update scError with the two error masks. Padding error given highest priority. diff --git a/lib/rsakey.c b/lib/rsakey.c index 9fd6da6..088abb3 100644 --- a/lib/rsakey.c +++ b/lib/rsakey.c @@ -257,6 +257,13 @@ SymCryptRsakeySizeofModulus( _In_ PCSYMCRYPT_RSAKEY pkRsakey ) return (pkRsakey->nBitsOfModulus + 7)/8; } +UINT32 +SYMCRYPT_CALL +SymCryptRsakeyModulusBits( _In_ PCSYMCRYPT_RSAKEY pkRsakey ) +{ + return pkRsakey->nBitsOfModulus; +} + UINT32 SYMCRYPT_CALL SymCryptRsakeySizeofPublicExponent( diff --git a/scbuild/scbuild.cs b/scbuild/scbuild.cs index 904f5c0..e17876b 100644 --- a/scbuild/scbuild.cs +++ b/scbuild/scbuild.cs @@ -644,6 +644,10 @@ class ScBuild command += " -savexmmnofail"; } string [] res = RunCmd( "", command ); + if( res.Length == 0 ) + { + Fatal( "No output detected from running SymCryptUnitTest" ); + } if( !Regex.IsMatch( res[ res.Length - 1 ], "...SymCrypt unit test done" ) ) { Fatal( "Did not detect that SymCrypt unit test succeeded" ); diff --git a/unittest/exe_Win7nLater/main_exe.cpp b/unittest/exe_Win7nLater/main_exe.cpp index bda4929..5658404 100644 --- a/unittest/exe_Win7nLater/main_exe.cpp +++ b/unittest/exe_Win7nLater/main_exe.cpp @@ -6,25 +6,9 @@ // #include "precomp.h" -#include "rsa32_implementations.h" -#include "capi_implementations.h" -#include "cng_implementations.h" -#include "sc_implementations.h" -#include "ref_implementations.h" SYMCRYPT_ENVIRONMENT_WINDOWS_USERMODE_WIN7_N_LATER; -const char * g_implementationNames[] = -{ - ImpSc::name, - ImpRsa32::name, - ImpRsa32b::name, - ImpCapi::name, - ImpCng::name, - ImpRef::name, - NULL, -}; - #include "main_exe_common.cpp" int __cdecl @@ -33,11 +17,7 @@ main( int argc, _In_reads_( argc ) char * argv[] ) initTestInfrastructure( argc, argv ); - addCapiAlgs(); - addRsa32Algs(); - addCngAlgs(); - addSymCryptAlgs(); - addRefAlgs(); + addAllAlgs(); if (g_profile) { diff --git a/unittest/exe_Win8_1nLater/main_exe.cpp b/unittest/exe_Win8_1nLater/main_exe.cpp index 80a0387..b32a20d 100644 --- a/unittest/exe_Win8_1nLater/main_exe.cpp +++ b/unittest/exe_Win8_1nLater/main_exe.cpp @@ -6,25 +6,9 @@ // #include "precomp.h" -#include "rsa32_implementations.h" -#include "capi_implementations.h" -#include "cng_implementations.h" -#include "sc_implementations.h" -#include "ref_implementations.h" SYMCRYPT_ENVIRONMENT_WINDOWS_USERMODE_WIN8_1_N_LATER; -const char * g_implementationNames[] = -{ - ImpSc::name, - ImpRsa32::name, - ImpRsa32b::name, - ImpCapi::name, - ImpCng::name, - ImpRef::name, - NULL, -}; - #include "main_exe_common.cpp" int __cdecl @@ -33,17 +17,7 @@ main( int argc, _In_reads_( argc ) char * argv[] ) initTestInfrastructure( argc, argv ); - // SGX mode cares about testing BCrypt functions in enclaves, so ignores CAPI and RSA32 tests - // which are identical to normal mode. SymCrypt provides implementations for all algs, - // so they must run because the test fails if there are algorithms where no implementations were tested. - if (!g_sgx) - { - addCapiAlgs(); - addRsa32Algs(); - } - addCngAlgs(); - addSymCryptAlgs(); - addRefAlgs(); + addAllAlgs(); if (g_profile) { diff --git a/unittest/exe_legacy/main_exe.cpp b/unittest/exe_legacy/main_exe.cpp index c651d9e..6e5becb 100644 --- a/unittest/exe_legacy/main_exe.cpp +++ b/unittest/exe_legacy/main_exe.cpp @@ -6,25 +6,9 @@ // #include "precomp.h" -#include "rsa32_implementations.h" -#include "capi_implementations.h" -#include "cng_implementations.h" -#include "sc_implementations.h" -#include "ref_implementations.h" SYMCRYPT_ENVIRONMENT_WINDOWS_USERMODE_LEGACY; -const char * g_implementationNames[] = -{ - ImpSc::name, - ImpRsa32::name, - ImpRsa32b::name, - ImpCapi::name, - ImpCng::name, - ImpRef::name, - NULL, -}; - #include "main_exe_common.cpp" int __cdecl @@ -33,11 +17,7 @@ main( int argc, _In_reads_( argc ) char * argv[] ) initTestInfrastructure( argc, argv ); - addCapiAlgs(); - addRsa32Algs(); - addCngAlgs(); - addSymCryptAlgs(); - addRefAlgs(); + addAllAlgs(); if (g_profile) { diff --git a/unittest/exe_test/main_exe.cpp b/unittest/exe_test/main_exe.cpp index 7c2ea36..510d036 100644 --- a/unittest/exe_test/main_exe.cpp +++ b/unittest/exe_test/main_exe.cpp @@ -6,27 +6,9 @@ // #include "precomp.h" -#include "msbignum_implementations.h" -#include "rsa32_implementations.h" -#include "capi_implementations.h" -#include "cng_implementations.h" -#include "sc_implementations.h" -#include "ref_implementations.h" SYMCRYPT_ENVIRONMENT_DEFS( Unittest ); -const char * g_implementationNames[] = -{ - ImpSc::name, - ImpRsa32::name, - ImpRsa32b::name, - ImpCapi::name, - ImpCng::name, - ImpMsBignum::name, - ImpRef::name, - NULL, -}; - #include "main_exe_common.cpp" int __cdecl @@ -38,12 +20,7 @@ main( int argc, _In_reads_( argc ) char * argv[] ) TestSaveXmmEnabled = TRUE; TestSaveYmmEnabled = TRUE; - addCapiAlgs(); - addRsa32Algs(); - addCngAlgs(); - addMsBignumAlgs(); - addSymCryptAlgs(); - addRefAlgs(); + addAllAlgs(); if (!g_profile) { diff --git a/unittest/inc/algorithm_base.h b/unittest/inc/algorithm_base.h index 519d91d..ce5a32e 100644 --- a/unittest/inc/algorithm_base.h +++ b/unittest/inc/algorithm_base.h @@ -486,7 +486,95 @@ private: public: }; +// We need an implementation-independent way to store RSA keys +// As RSA key gen is so expensive, we generate a bunch of keys up front and use +// them for all tests. + +#define RSAKEY_MAXKEYSIZE (1024) // 8192 bits = 1024 bytes +typedef struct _RSAKEY_TESTBLOB { + UINT32 nBitsModulus; + UINT64 u64PubExp; + UINT32 cbModulus; + UINT32 cbPrime1; + UINT32 cbPrime2; + BYTE abModulus[RSAKEY_MAXKEYSIZE]; + BYTE abPrime1[RSAKEY_MAXKEYSIZE]; + BYTE abPrime2[RSAKEY_MAXKEYSIZE]; + + // And some fields to make debugging easier + const char * pcstrSource; // Where did this key come from + INT64 u64Line; // line # of test vector file (if applicable) +} RSAKEY_TESTBLOB, *PRSAKEY_TESTBLOB; +typedef const RSAKEY_TESTBLOB * PCRSAKEY_TESTBLOB; + +class RsaSignImplementation: public AlgorithmImplementation +{ +public: + RsaSignImplementation() {}; + virtual ~RsaSignImplementation() {}; + +private: + RsaSignImplementation( const RsaSignImplementation & ); + VOID operator=( const RsaSignImplementation & ); + +public: + virtual NTSTATUS setKey( PCRSAKEY_TESTBLOB pcKeyBlob ) = 0; // Returns an error if this key can't be handled. + + // This is the abstraction that covers both PKCS1 and PSS. Both take a hash alg as parameter. + // We also add a salt size used for PSS. + virtual NTSTATUS sign( + _In_reads_( cbHash) PCBYTE pbHash, + SIZE_T cbHash, + PCSTR pcstrHashAlgName, + UINT32 u32Other, + _Out_writes_( cbSig ) PBYTE pbSig, + SIZE_T cbSig ) = 0; // cbSig == cbModulus of key + + virtual NTSTATUS verify( + _In_reads_( cbHash) PCBYTE pbHash, + SIZE_T cbHash, + _In_reads_( cbSig ) PCBYTE pbSig, + SIZE_T cbSig, + PCSTR pcstrHashAlgName, + UINT32 u32Other ) = 0; +}; + +class RsaEncImplementation: public AlgorithmImplementation +{ +public: + RsaEncImplementation() {}; + virtual ~RsaEncImplementation() {}; + +private: + RsaEncImplementation( const RsaEncImplementation & ); + VOID operator=( const RsaEncImplementation & ); + +public: + virtual NTSTATUS setKey( PCRSAKEY_TESTBLOB pcKeyBlob ) = 0; // Returns an error if this key can't be handled. + + // This is the abstraction that covers RAW, PKCS1 and OAEP. + virtual NTSTATUS encrypt( + _In_reads_( cbMsg ) PCBYTE pbMsg, + SIZE_T cbMsg, + PCSTR pcstrHashAlgName, + PCBYTE pbLabel, + SIZE_T cbLabel, + _Out_writes_( cbCiphertext ) PBYTE pbCiphertext, + SIZE_T cbCiphertext ) = 0; // == cbModulus of key + + virtual NTSTATUS decrypt( + _In_reads_( cbCiphertext ) PCBYTE pbCiphertext, + SIZE_T cbCiphertext, + PCSTR pcstrHashAlgName, + PCBYTE pbLabel, + SIZE_T cbLabel, + _Out_writes_to_(cbMsg,*pcbMsg) PBYTE pbMsg, + SIZE_T cbMsg, + SIZE_T *pcbMsg ) = 0; +}; + // RsaImplementation class is only used for performance measurements of RSA +/* class RsaImplementation: public AlgorithmImplementation { public: @@ -499,6 +587,7 @@ private: public: }; +*/ // DlImplementation class is only used for performance measurements of Discrete Log group algorithms class DlImplementation: public AlgorithmImplementation @@ -961,6 +1050,7 @@ public: static const String s_algName; }; +/* template< class Implementation, class Algorithm> class RsaImp: public RsaImplementation { @@ -977,6 +1067,7 @@ public: static const String s_modeName; static const String s_algName; }; +*/ template< class Implementation, class Algorithm> class DlImp: public DlImplementation @@ -995,6 +1086,90 @@ public: static const String s_algName; }; +template< class Implementation, class Algorithm > class RsaSignImpState; + +template< class Implementation, class Algorithm> +class RsaSignImp: public RsaSignImplementation +{ +public: + RsaSignImp(); + virtual ~RsaSignImp(); + +private: + RsaSignImp( const RsaSignImp & ); + VOID operator=( const RsaSignImp & ); + +public: + static const String s_algName; // Algorithm name + static const String s_modeName; + static const String s_impName; // Implementation name + + virtual NTSTATUS setKey( PCRSAKEY_TESTBLOB pcKeyBlob ); + + virtual NTSTATUS sign( + _In_reads_( cbHash) PCBYTE pbHash, + SIZE_T cbHash, + PCSTR pcstrHashAlgName, + UINT32 u32Other, + _Out_writes_( cbSig ) PBYTE pbSig, + SIZE_T cbSig ); + + virtual NTSTATUS verify( + _In_reads_( cbHash) PCBYTE pbHash, + SIZE_T cbHash, + _In_reads_( cbSig ) PCBYTE pbSig, + SIZE_T cbSig, + PCSTR pcstrHashAlgName, + UINT32 u32Other ); + + RsaSignImpState state; +}; + + + +template< class Implementation, class Algorithm > class RsaEncImpState; + +template< class Implementation, class Algorithm> +class RsaEncImp: public RsaEncImplementation +{ +public: + RsaEncImp(); + virtual ~RsaEncImp(); + +private: + RsaEncImp( const RsaEncImp & ); + VOID operator=( const RsaEncImp & ); + +public: + static const String s_algName; // Algorithm name + static const String s_modeName; + static const String s_impName; // Implementation name + + virtual NTSTATUS setKey( PCRSAKEY_TESTBLOB pcKeyBlob ); + + virtual NTSTATUS encrypt( + _In_reads_( cbMsg ) PCBYTE pbMsg, + SIZE_T cbMsg, + PCSTR pcstrHashAlgName, + PCBYTE pbLabel, + SIZE_T cbLabel, + _Out_writes_( cbCiphertext ) PBYTE pbCiphertext, + SIZE_T cbCiphertext ); // == cbModulus of key + + virtual NTSTATUS decrypt( + _In_reads_( cbCiphertext ) PCBYTE pbCiphertext, + SIZE_T cbCiphertext, + PCSTR pcstrHashAlgName, + PCBYTE pbLabel, + SIZE_T cbLabel, + _Out_writes_to_(cbMsg,*pcbMsg) PBYTE pbMsg, + SIZE_T cbMsg, + SIZE_T *pcbMsg ); + + RsaEncImpState state; +}; + + template< class Implementation, class Algorithm> class EccImp: public EccImplementation { @@ -1109,12 +1284,14 @@ const String ArithImp::s_algName = Algorithm::name; template< class Implementation, class Algorithm> const String ArithImp::s_modeName; +/* template< class Implementation, class Algorithm> const String RsaImp::s_impName = Implementation::name; template< class Implementation, class Algorithm> const String RsaImp::s_algName = Algorithm::name; template< class Implementation, class Algorithm> const String RsaImp::s_modeName; +*/ template< class Implementation, class Algorithm> const String DlImp::s_impName = Implementation::name; @@ -1130,6 +1307,20 @@ const String EccImp::s_algName = Algorithm::name; template< class Implementation, class Algorithm> const String EccImp::s_modeName; +template< class Imp, class Alg> +const String RsaSignImp::s_impName = Imp::name; +template< class Imp, class Alg> +const String RsaSignImp::s_algName = Alg::name; +template< class Imp, class Alg> +const String RsaSignImp::s_modeName; + +template< class Imp, class Alg> +const String RsaEncImp::s_impName = Imp::name; +template< class Imp, class Alg> +const String RsaEncImp::s_algName = Alg::name; +template< class Imp, class Alg> +const String RsaEncImp::s_modeName; + // // Template declaration for performance functions (for those implementations that wish to use them) // diff --git a/unittest/inc/cng_implementations.h b/unittest/inc/cng_implementations.h index d6374d7..1381184 100644 --- a/unittest/inc/cng_implementations.h +++ b/unittest/inc/cng_implementations.h @@ -128,3 +128,34 @@ public: // }; +template<> +class RsaSignImpState { +public: + BCRYPT_KEY_HANDLE hKey; +}; + +template<> +class RsaSignImpState { +public: + BCRYPT_KEY_HANDLE hKey; +}; + +template<> +class RsaEncImpState { +public: + BCRYPT_KEY_HANDLE hKey; +}; + +template<> +class RsaEncImpState { +public: + BCRYPT_KEY_HANDLE hKey; +}; + +template<> +class RsaEncImpState { +public: + BCRYPT_KEY_HANDLE hKey; +}; + + diff --git a/unittest/inc/msbignum_implementations.h b/unittest/inc/msbignum_implementations.h index 7c0f02c..dd8ecfc 100644 --- a/unittest/inc/msbignum_implementations.h +++ b/unittest/inc/msbignum_implementations.h @@ -10,6 +10,7 @@ #include +#include #include #include @@ -17,3 +18,10 @@ class ImpMsBignum{ public: static char * name; }; + +template<> +class RsaEncImpState { +public: + SIZE_T cbKey; // Size of modulus + RSA_PRIVATE_KEY key; +}; diff --git a/unittest/inc/testRsa.h b/unittest/inc/old-testRsa.h similarity index 95% rename from unittest/inc/testRsa.h rename to unittest/inc/old-testRsa.h index 99f7b2b..55967bb 100644 --- a/unittest/inc/testRsa.h +++ b/unittest/inc/old-testRsa.h @@ -4,14 +4,9 @@ // Copyright (c) Microsoft Corporation. Licensed under the MIT license. // -#include "sc_implementations.h" - -#include "msbignum_implementations.h" #include "bigpriv.h" #include "ms_rsa.h" -#include "cng_implementations.h" - #define TEST_RSA_MIN_NUMOF_BYTES (64) // Cng does not accept less than 512 bits (not even imported keys) #define TEST_RSA_MAX_NUMOF_BYTES (256) #define TEST_RSA_NUMOF_IMPS (3) // SymCrypt, MsBignum, Cng diff --git a/unittest/inc/sc_implementations.h b/unittest/inc/sc_implementations.h index 87095b8..1fc474f 100644 --- a/unittest/inc/sc_implementations.h +++ b/unittest/inc/sc_implementations.h @@ -272,3 +272,33 @@ class XtsImpState { public: SYMCRYPT_XTS_AES_EXPANDED_KEY key; }; + +template<> +class RsaSignImpState { +public: + PSYMCRYPT_RSAKEY pKey; +}; + +template<> +class RsaSignImpState { +public: + PSYMCRYPT_RSAKEY pKey; +}; + +template<> +class RsaEncImpState { +public: + PSYMCRYPT_RSAKEY pKey; +}; + +template<> +class RsaEncImpState { +public: + PSYMCRYPT_RSAKEY pKey; +}; + +template<> +class RsaEncImpState { +public: + PSYMCRYPT_RSAKEY pKey; +}; diff --git a/unittest/inc/testInterop.h b/unittest/inc/testInterop.h index 5eccb7b..95003ff 100644 --- a/unittest/inc/testInterop.h +++ b/unittest/inc/testInterop.h @@ -4,17 +4,12 @@ // Copyright (c) Microsoft Corporation. Licensed under the MIT license. // -#include "sc_implementations.h" - -#include "msbignum_implementations.h" #include "bigpriv.h" #include "ms_rsa.h" #include "cryptdsa.h" #include "cryptdh.h" -#include "cng_implementations.h" - #define IMPSC_INDEX (0) #define IMPMSBIGNUM_INDEX (1) #define IMPCNG_INDEX (2) diff --git a/unittest/inc/test_lib.h b/unittest/inc/test_lib.h index d528a1a..68c5b6b 100644 --- a/unittest/inc/test_lib.h +++ b/unittest/inc/test_lib.h @@ -412,6 +412,27 @@ extern "C" { #endif +#if !defined( INCLUDE_IMPL_RSA32 ) +#define INCLUDE_IMPL_RSA32 (1) +#endif + +#if !defined( INCLUDE_IMPL_MSBIGNUM ) +#define INCLUDE_IMPL_MSBIGNUM (1) +#endif + +#if !defined( INCLUDE_IMPL_CAPI ) +#define INCLUDE_IMPL_CAPI (1) +#endif + +#if !defined( INCLUDE_IMPL_CNG ) +#define INCLUDE_IMPL_CNG (1) +#endif + +#if !defined( INCLUDE_IMPL_REF ) +#define INCLUDE_IMPL_REF (1) +#endif + + // // Our own header info @@ -793,51 +814,26 @@ public: const static char * name; }; -class AlgRsaDecRaw{ -public: - const static char * name; -}; - class AlgRsaEncPkcs1{ public: const static char * name; }; -class AlgRsaDecPkcs1{ -public: - const static char * name; -}; - class AlgRsaEncOaep{ public: const static char * name; }; -class AlgRsaDecOaep{ -public: - const static char * name; -}; - class AlgRsaSignPkcs1{ public: const static char * name; }; -class AlgRsaVerifyPkcs1{ -public: - const static char * name; -}; - class AlgRsaSignPss{ public: const static char * name; }; -class AlgRsaVerifyPss{ -public: - const static char * name; -}; - class AlgDsaSign{ public: const static char * name; @@ -979,10 +975,34 @@ BOOL setContainsPrefix( const StringSet & set, const std::string & str ); extern const char * g_implementationNames[]; -//#include "sc_implementations.h" -//#include "rsa32_implementations.h" -//#include "capi_implementations.h" -//#include "cng_implementations.h" +// +// Include the info from the implementations we support on this compilation +// + +// We always include the SymCrypt implementation +#include "sc_implementations.h" + +#if INCLUDE_IMPL_CAPI +#include "capi_implementations.h" +#endif + +#if INCLUDE_IMPL_CNG +#include "cng_implementations.h" +#endif + +#if INCLUDE_IMPL_MSBIGNUM +#include "msbignum_implementations.h" +#endif + +#if INCLUDE_IMPL_REF +#include "ref_implementations.h" +#endif + +#if INCLUDE_IMPL_RSA32 +#include "rsa32_implementations.h" +#endif + + #include "printtable.h" #include "rndDriver.h" @@ -1102,6 +1122,12 @@ testRsa(); VOID testDl(); +VOID +testRsaSignAlgorithms(); + +VOID +testRsaEncAlgorithms(); + KatData * getCustomResource( _In_ PSTR resourceName, _In_ PSTR resourceType ); @@ -1141,6 +1167,9 @@ VOID verifyYmmRegisters(); +VOID +addAllAlgs(); + VOID addCapiAlgs(); @@ -1598,6 +1627,26 @@ runRsaAverageKeyGenPerf(); #define PERF_RSA_HASH_ALG_SC (SymCryptSha256Algorithm) #define PERF_RSA_HASH_ALG_CNG (BCRYPT_SHA256_ALGORITHM) #define PERF_RSA_HASH_ALG_SIZE (SYMCRYPT_SHA256_RESULT_SIZE) +#define PERF_RSA_HASH_ALG_OIDS_SC (SymCryptSha256OidList) +#define PERF_RSA_HASH_ALG_NOIDS_SC (SYMCRYPT_SHA256_OID_COUNT) #define PERF_RSA_OAEP_LESS_BYTES (2 + 2*SYMCRYPT_SHA256_RESULT_SIZE) + +#define MAX_RSA_TESTKEYS (50) +extern RSAKEY_TESTBLOB g_RsaTestKeys[ MAX_RSA_TESTKEYS ]; +extern UINT32 g_nRsaTestKeys; + +VOID +fprintHex( FILE * f, PCBYTE pbData, SIZE_T cbData ); + +VOID rsaTestKeysGenerate(); + +PSYMCRYPT_RSAKEY +rsaKeyFromTestBlob( PCRSAKEY_TESTBLOB pBlob ); + +PSYMCRYPT_RSAKEY +rsaTestKeyRandom(); + +PSYMCRYPT_RSAKEY +rsaTestKeyForSize( SIZE_T nBits ); diff --git a/unittest/kat_rsaenc.dat b/unittest/kat_rsaenc.dat new file mode 100644 index 0000000..6335788 --- /dev/null +++ b/unittest/kat_rsaenc.dat @@ -0,0 +1,1120 @@ +# +# DO NOT EDIT: Generated test vectors for RSA encryption +# + + +[RsaEncRaw] + +N = c8e00ad52e14b6d8dff4f32927b777fc06e8089f3084b8cdd58d64c6c33c20d46f22639b7ed7d7b1ec02bd026be6aadbb842fcd5b1e4c8669513c24cd5a222445ec529051b5b6d772b4d690605ba72454704d79ba82020c5a82bfe079f8ea2afa125a755ad67981981d4c31cf45b2821d496b4407d40c8e86337032524a967809a863a0fb62853fb9645f79089ded21d928eb8fcab6ef798b6dc191816fc7db14709e566ceac5c99ee8e339cd2a4cfd60cfdb8f4e6013d3c1d268b470144e662a510f8d3b116ac73cb2172c1a572fd3ccc204582a61b288ee60777a589c50add40e6a1d457579f5cdde923dfb85bf605bed2e8bd60edfe9c8586001aff12da5fbf9ee7b620e363517c427e705d41ca8d6867de87c9abe5d40181fa3277c45760b6011808212cc63388290dc3e8e997d7c6ea16a9931cabde0c5daf66820f3c9f9d8976b7fb8bef7ffd82d5bf71b73422a73c5cdd8f30dbfb40081b8a288c9671df559811b1e48decb54d1260cb372ac7ca506d59331f235d1bdf588f19ac14afdea94a88107ffa029db4de62f92d7427ef2e1eb227e896927bad2ae6a0e875f828dfffa87b80cee5d31e2a0c8322b51cef40c332b1cd26262af291d509c42514d278b69c821360f4523b49e1f83b13635823198715f6a143a9a51ddc057934e190bafc44649127d6242686728e64c25a1b3f478078037e7c5e0bb635125dee9d174d1a36705b5d789c55c240c453fe67ad7390fee12f728833aaabed6252327bda281dd1703410a22d0ff48237ec901fad3153dd25936f564392e4e83c5e41239d6d30fc2e75513cd27f8519e105d13fa2343d01b84e0335ce9504a9a91ce7fde94000979d4abac0ef8cdad1a9f8cb9a8555e331e3c0965c12d2ac4e99576186585eb2646e9d064383cb74b4eb06e3206457857d5c66415fe6bb6aac54452f9956b9c04b817000bdc3f6b08b84c89c68deb7961d2df13ec499fcbf6db9995f25cf76b8c43175664aeb03f961ef868d3c01493b1cd14124f663ae48d0075c691c8268f0126dc63ec6607e148eafb8937d397d40d6bc08e1e67c2cd6ed7f0383a81510e5f3d4e57d6e4fd515d4f2dde2092887feed2da7fd60949b5d8b67c80c6ff3730c9aa90a5cc3e2bda05eeae58a7e15e2b58a731fa6d619bcdd5f4bb715d0062125cab9d7a956acb6415ee79d2418644b4b9be08fc1df76e5bb32c5f755422bf5abf96755a7f86f654ceb73566d21539703a18d4c4085a5640743d389cd8c0b0dd741260feafc20c50a203eb3c4324277145f21a483fac83b3d4dc6b26511d1ff0c02021413704b23dfa42842b5a29dc6d110b1d9d1b48db42ba02ebe8516ee1343851da0c045f19798e8aed264778cbc501f251057693016eeb081e57cd4fd8ec5697748429380c33689ba5b84c230644fb0e402173fcb592f14466a52fd +e = 0919c3dfb507 +P1 = ca3a571ec9743ba1f6028df2fb34b11cf7e175a3b2ff62d31efbf52ae0f5db361c58deda318c97824dc099ce12d5b4a2a4927448ec4c4e9a43d4476f9b5f0eee13a87d917b73c2bfeebe6ffc3aaeb21e1bc25d41440ac0b16a61cf94cedb37a766bbbc9004d956791a56b6af1f112d17fdc74519f996932351408eb1f0e71d0a8b4f419fb8f04ba9df7bdfe5a71caa60e06a124b41cc99106789c1b16a9889f60a230d5c93570364d967f85f03162871f4b523950ed4efaf75aabc4ad26b0c0db6503c67b73f1b138029edca361170b21ba3e770dbbc03a356a9fd4fddba3bcf50d62c2ffc4169799c8789834e426624a983e3bd29e63d7c8d7eefe0d8602eee9daf75d3a5afc1777965afe0547ec85fb256be86a96b3e93acc6349b4cf5a994c8fc2963e7c12c8899b28a9fff92705ecbfa412368bbc514c14c5a52b3ea25889778729f1c11df692ed039b7443e4ddff418954aa9505a926a16ecfafbebc0780816d8b42ec336cb510af596988e1e8f7a55a501d34cf38287082580fa163743fb163b4cd3b22ec21b9a4ea561de924e5a449662f4d71da5f94a2d0eb7d9b9d77772f19b930960ddda4227359c38886b2826b61c1562d67b8fae30ecd6a6458d8ed3cb164912ee843ee8a09076eaee97831bb488f015b90e775ff5766a3b6b6bcf724bfb0238a5c905c105c5e1b94120654a4e24410b3a389cd4efc1c811b7bf +P2 = fe499f3212e238ad2c74ee15f87dae3aa38a70a1aa1f471b1c62c2b26c07564676a86cbd3e014723e163270da8d50f1effa6f7bdc7f054da4e7541ca4a0ce87036b68df65ec86282e3cdac5d3d76f11c36693f7303f69d46e67608f1d13c558e1bda77a123ac7499f0929f827b4cd6601836ef44114f9b323046a5430a8d85e249a999196659927277abbd17ebdb2245dabeaf7d2fe9277afa3989dd2a771835e3728611c1e7fd3f1678ac0b5a1793833f5bb2f6348ccf4bb7a554fd887fa883387b9a362897b9780e02879f5801c1f99d6a5b03725c4b31137d9edf75c07003338dd2c165482f9f5ba9d8b3fe1d88c966c4334ad677cecdc0f27710227af415df91d90857429458ce59385fe501ffb04d6c3de47a790512d0162fa8f52c7fc930b6deb1d54428510c126e68da8d9c8f8fb1e494239675849fb33af6d07340f67769f4bf540bc4efb007537bea47986e1449408ab653594200bff5540383d86798a2b541b8c8307bf4c9a951e145b63ec3327fb84215a54def615e9798448c8f28695625a5889240297a8941437d318ebbe3fb1cd98b62bf5ef586f62edfe21542869c84adbf773b2c02ddd67743345a78f6734c90167f10905c61d89c785ce579423c38926bafd891e6c7a428dc915c03c89e54cc39e82535b3478aa4a3173a451598f1ae24985d81c8890761dc2d2acb6cf77d5d51b9d1dc6075826527c443 +Msg = b3998f3a526def59be2e37068df54b1e8aa56701dd485b53d5ade49d187725731446d42fa04d596bd08c8544b49efa42ece428d3f11b770b0dd35e3baa0ce6179bf07564fbcfb6b96bc59e7fd3bbfb1e98b8571834ab4729e77edd879f76470161cb6ddac95a8d9a015c8ce8daf3dd59b652ec4c5be209b93b200dd1226f1d24a90d9b28ebf2258afba6eb55258b87ff77babb2e7d24d82d2e655379b82543920140d8beb9047efb9c087f9046a6e3a61d4bbaccd0cc4ae7ac7e5ff98d8cd31f94fc0d56ed07a8776a8233ffbddc820c6ea923fb0690d8afaecc5ed5872829ad5ad2d46092dbbfc7fd4e98db43a9ac6b19017dd064d6e6f0a7346851956d0343ba3cc777b9d0333cec7324616ddb60da16bb985e0ad18798d71b9d580f854b45fc1b6b871b2a1a2b79030d75d0efb8289e5be639bf0d7929c43e36f15ce030e265604d1cbcd4d807892819054b4cecdb29b91c517865343cb67f544e5edc298d8b1b5618fb81db454db6f8c7e1155e6f1ae4fab87b89756f8d28ea31a13b25a8b91489150d7813fcc2673cd76faadf3c9de710545c92e30e593ddec97aa724a4e12d888cbe81de20972593ac32c1d08276b23e7a3b581c1c8c8e0edece4be5ec1d2444d39b09419fe16b885ee562ad688481a35806e843f70b2681ad02b6ff9f39f140b7ab0d617459b4ad6ef578cada88126ffe77301f76b5585da2c9f399c6a0b8d6642098df8a2743544c8002050a6dae767b88a1e9bc2300f7c5680560bde6fcf3b49dcc21acc884b6e3c4cb7fb7119ad635c068df39d0e63b983167061348572faa0c3cd9cd36539af3360b5a5e1ce3ba5772a8a9fbb7efa1371d12e761a77252b05ec1e9d6790d1e43f65fb44ce3033ac164fc599d91f7517951cd3c8e1c01a6dbde362373c0c0cf414774921cdb082f3e29bf124b0c412353c756c30952c7c761221a9c6b96b968af25fe6567fac2171f22aa552da01e9f3e093449c4f297ac593c4c7d59bc7b0f4f7b11f2bbf897fc405b1b3afc57f681ef975b8a64a9e6cf6cce36744b8373e020513ff777c8ac0b683a1314eafffdd02a5600a7c13e5965811247b1a7c80a55f914cea2517a9b4dce0f4a5e8790bd16d68aaf09c2b718e6ee11c1a1cf9e8aae63ea7d035ad2c7bbc77a3bef0d937d714e04d3227e88ea01bd4f6525b65d2c91a339be71ccf698e4edde217854f0ad0233a8f2c9abe3614f391c00fbca41ae26085e603c79ac16a9a503b2e1f3cce4ee90f02666587bc7156fa7fc24a7a714978e7f9e759396898a77e450b8bbb003a07cd4f4c8d222223fec0246bd3d03b3b84725308e1efd6bd33ba32f5467fb3751c476f6a5929e58c3200fc86ec8ce4b945b67d3ab7e767c12861637bd7d41b3332744cbf10c23b020d86cc08e9c61a3c407df8a8f4786b5280e33f5fbde5466c393a1575c0b +Ciphertext = 14006c61278df65ee497482f95b602f8bb5362b8c4311f76b1289c7042f45995fd7fc3d5074961f1b5b1ef87f3c1879b91612a7497fef97360650ed5a2f360a5b93328a0af4331baf1dafb82ec6567f6165d311fc77d14e0ff8bc3e4a474b5adf4b46684914c3bed6cd79c2a450df5038e9a5017a23278991ffe6b63ae77d1f7d6f549037c38dc978709527d15e539050a89a0e7a64e4af159980e546665ac77b9ffaa0d0d9fd62ead6052a73e66d5d0defd313e920921583d79572a7a5df147aa2aa3882a2dbb868120bba96f634aa28aeff73592c056e775a81738664ff8b03ee301ab3e0b14d125ce4c29b7cc88163c6a6f6c95512413f668561283a49cfdd15eeea799d8ee3e6b8cdcf9aced42190e40080164b1c6631db4c30c45c2e58906fc0fde3e38a4e9d3b7ed0ba5223eec2ad4d765d920effc956effd39345afc354633cf87d0d6917d1cb55bb27e50255cfd000707dbc5753b2836dcb93efa0266f72df099c0290d837cfe13828a132462a5680f51db850065b1909be7ba86785248e08c147273c4aaa1ce7e1904727f93a987bba07b536b3b353d917f0323fd6380c11c1d9b3d6f6f9e7b65729bc0ff696754ea926d2263773c0e03d2b0796752c03127614802c98c936496f6ca9c1375a6f1d989a985f079232f909e347c6d02f8d0d083a74da384d13f191128713dac7baa69be6a9c579d31905a5a7870180ded2a24ea1c169d8100223580d31a0eb1b3c1191b72013866859d8a9467db5fa4fa9db436b7c3d630aad6e00aab6407341b8aee46e1a66f5a6f51e8fc32a5f61d61bb4b46107eae46f42c3eb5d421e3e3be6f7ea4e76a32e90be668744d236b4871213319c8fb1c7ef3897af5def2808e2af2c0f7db66e70ef4af13e84d9b2b3d0ea6a1209693e4f3eb172488cbb245101f5524626acd17383df53e13eb4fc8b21b5f3993cb9087f866469b5e8ae202ddb2a5dc7f01b5c6af264eea4f8901b480206ce2b4e45b32fd89bc941ec7fb505a9c2c5874cccb0f1d0c72a8f32102495091e1952b8f35483529bddd6ee91691695041f0e8f3b405d1e7ef898102f7e585383d386f29003768aef3ed99a37242ec605bae2b43ba24d94a6cdbc2bb1e82b7199ca792a35e4ef0e9beccbf05f9edd6651779e5de04f2b4ff4afaac39a8dbb0a59fe03892a49f3d2bdff246595834fe6e98f3dd37c16cdf344d8628d3f7c9a14426fb75071b628b6dfe7a7f6f0013d6b0074eac0187c7f05d68c07c378ebce30338b3ff30a2e89774e2335e2fc664811deab8784ccea718a174376fe4f7c11d1d6f7e026934d881487df1e33f6941749ef1e5732b7df45f5b6eeeb3f9e762d1786c4ca5672cdc2970816c737d40ccda33769c1367233981dddd963296d5e5ab131913cbb6328f5f3c8ded42ab255a15f9c622d5d2c723b4e22316545917a9f + +N = b70c0350dff1e424ed1690d62d5d197a56eeff27957732ba32ed00b299aa181c1900ba6ba473f3fc55f09cb9827bf8e77da3d2010080fb44b7e2ecfeb29a652469da38135bbc234a0b36ef885535ea3a4345fbe894bf149eb6b880742111ef03916390ff3d4709c049d67484ff41106cc2aaa3c71eafbe3e09d49c8381384c38f5e0d4c0e37792a7bd7ddaf8a3f43d35c7210a6baca193949a63658b18c0b72f1af30037478f3ad3e997720e15cebcadcd52fa48730707eec3806e3538a06508b2fe180f076f51420c348f80bed6d627735f58dcb67892f997326284a60fcb2a83194b8e79ba157d40461fa3a2734acc0231e15a126dc4ee21b5d2f92f8614acec6fdfe32d4a728d6f05e0e99a90ed051c8749e71d00374504df67e7438e1fa12e63c4e17d36501b4a05fba28ad0d98e5a812c3c2e69400215a541ca2f2aa846ba5387717604f92278c44c5a4e5dd1d33c2d311ecee58748272be2b52d617a644d60c650f90012a87011dc6121581c033deb68152e3ef0389b9dd125c77f2bb835d8e84c21ec71ca5b529126fb2bc053b517f1420b0b4fbfb8f40db2a811294f6345138309237b19368224d0d6bf8623e7afa376cbf04ac91377be1aeb7e7d60e4e644cf165be8a93e8a258ba3578ce4494a1b3d6ccc87a1d60435cb997d4e08f0cf8cf9014db15e42106e81a339e52091d876f05e852ee71c20a99be4d6122d +e = 01cb45 +P1 = c8e098cacbce5005a5c8a98c468616c2a1a4c1998f4451069a9c32c4e5ba1a7293a9a9e1cb5425624296307920525aeabbc7cd35b7e4e6e79ac53c1bbf27dcb617892a2d0246017b9525f9d00bba7d9552034ebedb2eee10240d62f4ac75da6650309a967d33b1302183c09e689ac3fb73925502390e470ccbe475a73b83af0955fa7065ab1362ffa8b141a516e7372f680b29ccda2b8af45c292be3ebdbe7951077a6fe63eecc9d0ac2a6eec68cc647e1c6ae8c42c9305e4292f06560be2a600428802d9bda7f65e7b11a23b612840331943e02ef848a5ed5873268b7cf869fee75c416e13571bbb5dba154453e648442d4e7b53b14d3707149e7340f4f974b +P2 = e946d9b7b10dfc7e837f414d31f028880aebf4eb5bc60a8600ef5bdbadf700f0df6b0c140619074b6d7a2f34676b6dce5590db466dc322b084bc1e142c78b764bd1a3a1723fd4e7e963909561df490afaf40d0885e4319729931770ea24a9d4ecd1b9f5705eb2db4bfa9ec6cac74ae369307da385503197535f185f64da3821004abfc7949897427d27a80a0c88f4adab48bc92580fd42876fe0ff0a601b5a4b95b096075d7dfbd96a85fc39345571329e20e6f50ec6479f65f7e606ad7b3613d42b2bb02e7f04a75b565445e73257d6b8fe540cdb7c867dd0384ebbb832a3e558d502386651ebf5d118407ccb4308d16d4a43413e450d7b6ccddc9bd291b967 +Msg = 806b41a339721e1054b4545de2088c801fd1be09ec4bb001476800f8a832f1c9776e7087e3547cecf0111e37acf4b1566f67c932d48aa06353e1f665e64493c5f4122b068145cf694d53429c0e78e6ca536d5d037fd8d044531672f5e5c74faf86af38b46316eb4d795367be2e073c5e24945ce9ea893d4aaa892685e4a7b1f9142db6b0dad4a4cbfc6d12d02dc0442b22d4a00bb5dcd110383dd0366dcd8aa67d760d560847bf3fcfcf2d4a695b3ca59bb8daa6e6b69e5d7631ddc3465d3c9fb951688946fbe995036ce44c913977020b843cbc387bf17c9778c1bcc833b7e33ab29a99c52691f3313ece988f26d7268081f477a83af2e1b3fc9771e2f3e596d75f1156d7b6456eb45ae818d27f993461ef64fef2180f10e1e2349c42bc0308c02f551124e61334a41fa0c1c6b28e9ca2db85091426b4ec2056128dab863bb005a1431342194de36fde10d578989a969a777757656c721b60ab6c449668e586f9b74f4afadd6b23639fc0d0e26f39b9a04deb71bee56b0041dd71de0b24c56c8e5b2925ca0f1368cd74180e2652191f7bfd20ed2d0902128c3d53c6a7aee03215f476c5c5fed509465bb8edbe6ce606c58ac9222f9a734140223253a97eec84ad19ffb569126de9eca81723f758f19009ed26a6e0faf1d0671c45696d7b48d7619f9df5d1d27057f71d2e4ca111a64d242b0440b963331980bf7b8cb021afb1 +Ciphertext = 5ceb167af2e8a770e091198e1dc38d98e198d9a20abb844c814796fb8f6c27a7d790efd058067ea40cce5f7501dd61441c3f8976d72b89109a5d8541f79a08ed79caa6cea1140494558cec1e2f247e0815b35487ed51952e54cd3fd524011b30abb59b53923792ca89beae8daa720ac766f9d1bf84fd718f64e5d53f4a0058ccf1f3fa2846fbae6425b0b7615ca56402014592cc080b815feb59615c7a5715c55e84478539126b5e19c7e6206fd4d698b81edd1e98ad0cd93e28bb69c7294a39c1709f893988a2b7a2b78aa114ad6311b8eed99c759953aee8235b6e63a73af81130c566b52faaeeb21b350e038f667a50f3ea50a25eaa598cd5ee88f64ebcc85953661c075c3ba18c446171b740a55f8169337558179c41bd50f74de71451cd4fd3832adebcce755655b4b4856dfe092ea5a262d47ddccd655b0b2dc44165f53c152c3eda02e95bdd1b545cb78500826502981109b7528797b7400ee6a363b0c2be061224a4a578f02ce1387d8f7570ce354dfa4757f05ffa168dbcab2c3f348388b689457a31f54f46c87106c98f4349b6fa0d6a984c849960b0ad52450accc93faa1b8ff8bf402ff4f75cab513e64c3978f48a7b45980c7e817d9d2061f1a5ec2b055de04974c2325f7082f0a8dea1484da77b54fe264787f1db0bf8d73f4538dadb1c1c61a51e7508b6c5fa7d0b14b3d2957eccfe18267ad0f2ddf1184a0 + +N = aacca1d9ed15b5cc7d423bed5f8e7fe6aece8eb0f89160f3634831946be1aac0225b488df33cef5c736b36109dbb3493f0666941adcba3e9dd114c0bbf8d0efe38fa1aa2dc57f65baa227839e96bd9812d534c09eb28f60c72ca58890c424c8ca4fd39401040e4a2c586f3f7c864f57e68bf810005de0c0cc99120a8a315670d743be8439a425c4476e3e607fa1328b7645c564dfe56f0fd85430bc48126d57d2592d4bc01a1e5f82cc83e5f8492737493346bd0c292e9493c6b758306b32e98f1871442d8e1c18ac32c9a3e60a711b8d71013eb79e81971f89153174f6d009bcc8ca0c651ba2b67a8add21d5fe19ac690e86d8feaf48672a197fdb658d0fa059de9802fc5b5fbd2d2e453833d886cfe0d4e1338e397db5d11e99a39b281bf94a331393daeadef4a44505c8e10941ff20327ed93a4b878a62aa5939a943cfa644d48ddd68542e432ac1b3b61e51bea876f78d298b4e2f0e232bf8189e11ec19d278259965e4c88f4c29e7549c4cdbfebd320a1ff9511211a469247e53c12568e9beca5b3c4eb0fe62554cb59a9f413f30bebda90db977fd61bc085abe299a4387cb47c1004fed4855f965f49e5e57ed2f18f80ec87b71d2673238e69156588f9f602e73b57a6a8c2063c51f12551be7e94cb76cd3251236483a1a3fe03c5a3fbd1fd3baca26dca05c0123303d12da505f590c405c949cbf1de1dbaf993432ac9 +e = 0b44d8c7dd +P1 = d6a1899d5196e1529aea80d344d23270d84a3e3a7477bdfef593cdb6badb5672a41e0e0d368e088e21359e8f099f6da38942cf1a3686248e741b7eec07b762a54db703a9e723072d9a971d76779ee1b3c450e8f058c1fc967881572efb6a1ea2db681790ffd9c837b56646deabc31fe30b6c89c6c6809146477ca8b53f84cfd5c7b218198deccdaaf3038b300fd45ec820a8a1370d2318718f6a4eb4f42a29ddaeb7f0437904cf3c5b0a183a8e7a6d82e0c86ad76d870dd7b06262c62036d186e956166b25ee1731c6403c2b7811bdd62f3178e2cd1a1ace06ae3dc996f8f10587e09a3bfdc7fc2e2674b0001a2bf199caf863049a78603b2367aa99ca3868fb +P2 = cbb8530a9b84ad817b117b32c2a7f2507508e656353d04bfbf8d4baee008692aca4561f48cc93e3f0148daf7d363e7a94f80adc31ad4e464865e7723ecc01ebb08b836ec5895b39ad625a96a192ab54d1ed4416eaaa0814fdbf46b60f296b83befe2c37b8d47281599b2f68a17506d33a7c131fe3b40e31ea703a787ffac17167c4c2f3aa66977524d56978ae3b4fbdc43047b1964827c697f92f7292f635453f45fc6f619c655aabf6542ff2bf4028178e3c021cdbf3e0d11a4c0e0de46210278ecac8538b3ead3de7ac73340c3dc87b24fb32022b709f8701834517146179e7b1f0bfbe8cc6d9f8e08f204f68e087726add21a441d4e5055ea2fc84513780b +Msg = 9cd44bbcccac0559b3f17cdd7b71b39537778ace0771bd15bf13e7b98a78314b5bbe1408daa8189a0ef3a183e39ee7e6ea7b126e0244761b9e85cebc9acbedd5334e10208b4b964dfa99e679a642736496881f4074f5ad85f5fcde74d7675d5114a7581306b102b3018abf09f6abd644f2a7a31984e5c29758f88db304fcdf796fa2661a17bcf87f91fe40a00112484efd8253e4c513d353c94a37c786a599fc8408d29764764cff8c36c226830f5becca7a03a8c59f0448162e62675846b1cde800ec74c9f30d4979c648dff8aa685d7e7e2854954b3ff9acb07e34736348d9cebe43b2547c6bdaa4cf6aaefb781591d1497a25ecb138ac4b3d153f94c19cf9d145fdd52331c2482df7c12614f59c05e66e11f2addfdb85bc37d771df562a1846aecc2f6bfa30e1842d98231b3fa8af6fcb8a962fb3465ab9a4f60909a0a8c3bec45b17238c2bd20472a164de425f09034c284b80a2b3cfb718ea7ea643e4ea9b3e52a8a1df4b84027237ab4b84eadd6ce2f2693688f582d3c53a12ca422c80d1f5faf037d91bfd28349d0c3c5791af9b96eb4186d92fde9304d8698faee345c801195a2249fa90275a86659a4db08bb6335ddb3e680929ce6c25fba81577c14a62efbfeff3943350b75d70ba2e2f5302a1029a0fda94961d61d623d66d33681e41f10230802755d50d3b96bc8f3b2c576ad0a8bd1edc8c723891906aaf91ba +Ciphertext = 4d94f73821501f591f1180a40c493e2f61e10da6c4aff473ae6cbac666af8bd2d1324346cb2353a99c2c136425f50bc260d63bc2ed509d15ea2c9fd68983a12cc78fdf106deabfabeb8d8bb102ffaef1b1825280eda3c1d02bdc77308552280528e329e794946cd58790bfab436b26da223c4852c884f44d5cc0266f447717597454929681bb9ebbe07a831cff8d4397ef60391f6f4860064b5c17fe592dd8d1a7962d21b797729ae6a033ee97a8cf36bc3cda4c43633e6427c2ee8d83cbe17a1d240ce5927beaffa5e9f34c17ef39618f1886ed8f643c1d9457e3234500d99f73dd078b4f49611aa1781d60ba630547bc4c4e410362d8d5b4ab71692366aa7bb90b3ae9771b0ab7f90ba3f6fdd6c07439c5005f53dc26da40b628542c5973754620f47240090b178b2a960fd418b35abe804d20a9d56fca7ae1982aaeeec4c6cd5b0531fbe82d607dcfa68dbd7afb4722d1ed4a4ffdd04681b368e30dad71736f37bd913705987c0c0444777de38ada312a96e745c9f9e0ebbd5b6b4ae3ed03be19eac0081e8098252712fbbf22816dece5e15f1e3a90401e9b26c9875c041dfe29c50a53d66d009ac18791d0227e5262db2d7d7b50674e83fe9531353f2589bf00776663c255d85d1095df86e194fb7c0fdc969408cc41889b9241021b642024c969fa9f474b41d4afe404cf84607f777f2a7c4b7861f7cf75eca9f61bca16 + +N = c6890b8bb2100b87c2226cfbcd99e1a86c65fe0472607814b7bf03098e090ce66555f1fb97f2cb50e9064c74615100f1788d9667235c32b42d366f1afc9b301017950693fc4b1d96300d12ad0527cb9e94c7aa2998343e275751f1990641b8d16dc3f47dd423f7e634a7e3c9ee40d7cb7cb28211a8aadbd10b2890927784e7a927e3c97308e476916990652dc4d67acb6dc746c2670c5cce9855d73a94efa3ed98d34b4610b8a4dec173965afa326f3301fdb1e53e235a3cfd822ed1e2b387c75a83e074a4a2bc5856574cc16f35278eef43be37259f8d5a5401736ed75a1639b91624ae55251b3144e09cd7ac811a8d51e3214928beb7a91c5d9920239c1d0a6d94c4bf72e14a6dc125e3d3bbdce32c606e3d71108d5d0de9bb649daa588724c754a344e37a2a26f688799a2283569d6fb0420f522eedc63bbcaee65f8571ab270565acc64f490a312e7f6f57273c1a8b70b867173c9f454c2e9ba092792aabd33bb9aa2614cfcdc9e9fe79d4829d6f9b12107e36c70befa7111d3ab6fd359d +e = 010001 +P1 = cfe3a7898d81712f1975a316d67ccca75f64c2f6ffa2d62899825a86a45adb1d557e1abf43e7720acb84ee6bfdddb3fd897ba83d5bf646db71565391bb35a1f6ca64293faacdd226c6cba1e0736dc05234f109a925f0c021c773c914aa6dd8c90d5eb124625167668ef553dc35f1235f60811d06d755fb686d732f3f3430872017f2fc1e59be1785d819bba204396aad041311db04a56b4784ee32a963f934142c120c9b552d99ce8b87fb2b7198542b4dcae745ded9e937c56e8eae74710607 +P2 = f47b3801982859cbf372051f3b53b2ea3c71ba3eb8b9a5916ee3630a2e59979ec9ed7100c93da245c00ffcd793c1fc746125495ad5b851f54ccf79dffbb68c507fe268b1875330c55397623bddf86645a90377b76f916d0d185dceb2a4e5be131b1b7672e64347c32c7b54df8a21430817309aba2190c7ef10575b9851e5b592af6681c0e3581dce187f224d5138f797fbffb78bac0918303ea8e839f70cce839f0ee4872627bfd9f96dc5facd11eee094210b124d521c542218b7dd9ce41e3b +Msg = 0a935bcc91836b1f1afcf90d50a38d6f13291363adec396e6cad6f4679b287556afa4b6092922e61027159fdf0c5d835dda9f046edc31ce6acd95c14e90fa4f295cbaec21855e9413fbca8becf3493c8c8bffa5c35a0e667d875254c70f34e5c6de495f49da0ce258cf4221c0d6dbb16e1eda378dd0b91e56ffd69debf557eb9965bc91f4c1a86a345caf0d9c1ecd97ff3e77d4a7c8878e90075862582aff0eb130a57da35b1b7af2171208f863e7714fbd8abfbcd8a9a203399f85d71020946585b6662a8991cc8c74b431457642a5254da0345ff1033d1819719fcb2d10f11109099b14e4ead5b4c904c811061260506989e3a81805db43323ec7043c14130a5c9ecc1133aa337123111a4949bcc4038af275c0599ab98a2973135d584ee4c26b7fc54daed6d1282ea954241a011ae64159b338f87f79859238abcc584fc53040c18f4d6e190b640da68026b826df4f5c312c7ea888d8cc3a7420ce301a97f6b962cd563c38fd249f2ed78fe7425bab79f2e6b68deee47f69edad7708fa622 +Ciphertext = 758c923d3b7107b8625878eeaf67e5b88d80c5d71d967eab8f0ea454397522daa1215dcce3c5e8c8969902c20ca491be5a806e87c456810dfe1022d9102f62f659ad195c0b3d6aa4f2ae34de5e73543b934742e7cbea99b4ab19806ebe6e26cd21857b02d3591f1b4b0864cb6f28bf0b6767549a8951179122f2316eaf524750926467b47b7be93ed7a68d361b3d9041a72e86847c444cd483ff1e5beb325abca87b961f09de22339d0e5e7532b29cb8b9cf6fb3dc275093e0c6ec9dcafe338af60eaddf3ee9680eab4ce852cae9b4313caf531750bee144d4eb58ec0e8bd1a4bc19fdafbfd573b635492b00f90db3225ac672b35f5b5b55319647a96c544d8150de14d7241ce77fdae6a144c03cff25419b8f62a793618ea89c63d04105a7eb37ae1fac9b7e85fddf55939c7b79b482e7db18024b74bfa30eeaf23c277a7417b06e5cab7f3fd2c87c78095cc068397aaa645ca1dd4741c766010a66d5c9c5204cc1ee1359bae189ae58780a4f0ea6249c78c9f0813ec43de1f5eeeafdde4781 + +N = df7a504ebec1abe0cca305952800363b9c351cf8a1ca8df43a51b19a563ce594a3b50c7f851995686fc770709b362e51bae1586ad9db7b6281d44b713390c36ad15f8158b971dd4633bd359d90fb749acbe765893671fcfa5b545be28aa0497894c57e95f6d060ac5461e6a6a956b081a305202ed5fa7e1e071a9b7f70b9fdae649b8fd3e2bb00115f9448a3ca8d79679f7193befd6963d6ed5254b62f729f696038c9bd7132d858ace7ea0033fc7050e09ef998503fcee194afd0cd1fa7b4bd01aa2dbc1fce2a69d435ea25a8911a3497aee314c7ebeb35efc6f377691ef8a18eedf72567aae76f6ceb67c99225117ec0be913003544d8e0f0a7297842e08983b6b8713190b8d221a8aaa784276e31344a2dbaf83fbcc0ea7829ce012ef51b745a8070415494124fb0740ddbf2aaf27f7b6e6ea066e693dab3a770b91199f509b5ef8953638a87671f62fa13a986d141359c05b9ffd0ba8aee7af53c669a299822b782b44939c1ea9eadde57e0a97af2f0cdea3e7c5e2f2662b121af79ef165 +e = 010001 +P1 = e4cd41cb4bcba4cb5094244f124f12f4de7978fb3458b1b51f0a53bb9b70e171802bfc14b4c293e4ee4aba005877a8856d24a8c45973af114504e8e000c79d11838c2e896be3da4a2821d87454e6a2b7d3a7122588fb73eefa1c27b08a1e25b868d926fb2feb65bb3b55a468775ed2bbbe9e8b2225349ce426f35658d2c9f291713c306e2ad5ebd7b174162b37872730b227bfb7b594ecd00d99aedcc1415f6652edcdd60747ed173975a8d5caf1ea11da1579f438ff01b9c96b9bbba830eeb7 +P2 = fa0b0a5572704851ae8f14d252b2144af9c3a97f0ce8f38149608a4ca8d2edc3197f17f5341c816f5cb50050e4833b9a1586ddfd9a892af0f2865c1bbcfea43540f701b3ce2765d4d0132c419706a7811e575d01e112b14b16900824b1d540d44f5016ce73516008444c0f8bcf07b912ea81723e9ff30139ae0e430e861a928834fac2b20f0c59dfa9b452f9a1fa44fb2ed1349028e6a4baeec6b3084ba7d737936e453ea84b4e8e35f41100b9772633e98eddd95e36dc0e8ac86366b413c4c3 +Msg = 70acaeea6dc6370b46c8c5a2ab7821e28cdc57d77373b896c592b054b2316f87111a82f5a8b14614830d4405c86a3b46751ea556bb787523cf8106f5c3c8002869a5786f381538b0438c15d16d95d149af393a796911a4464c7ec8437986c2ecd0948bf74822d49fd9d8bebefe315142e07d04f4e6d5d1fbca76d04a611e2a17adef6c5e6b6704dc145dc34de36933587a3c73fd9cc46896f948c6a311ea529fd04439cfae4b29877edeb9e01b2968c829c2c90b1bac658c061db272b425936b0b5ffeb9c50a6d1a6240485266d45503e265a6af1eea93c03efbee850f60be82e317721daa4fc2eb0a5ab944ec2ec5463713c20ccb2737060e8ee1ec8faf58263797467ee654e171d61a91635b6d28f728175e29ff55826b141fe9078e3429c5af58fcea0465021164d8a961d51f58180f2444f532a8c6e0669bc5d6b7ac10d3b9872de5d700a8e320bcb51d21924fb4d7fce2842ee70096dadf3d48a9d6151ffdda7000bdec20d9d2de1c778d57156718207827167adfbf1fb13a613b88ca20 +Ciphertext = 146b0c2954ca353c79573e5ed50f9c8e9fbc1eaca394adf77eccd3ae3a19c84de16afd51f937a1f719f7018263e698c8faca151b68a161dc4bf46867e8e3eaa5a10f963bdfa510314dac51f87056d5f4e11a57e49f64c372ee33f91f062d63097554bdfb0528f0ac14520f06119df1fe05159864f5b8a956b13bc297463bc76ec0da971bcaa3d59c1c9ea1eea359398506d4708e4377d3a42965c0a3c3431ca2900ea7c1c7f0b9c2bc1f95fe925f77aeba374a97b8c8bc68352290dcd9700be21d3057ba2e9c7e358c2525a61a8e5986d4b4f1d91e8130409f192cd36365fdae7b07630ff28b3774b49550970d54d20d90e1f7f673cf3e9af0217fe1d5e424175d29462713fe08d9cceb3b5dd345cbc81d5fae023e7985d2a3fa2dee507a4d81dd8407202f50740f9b0028b4c72f8eb1183125b91875cef7bb7dca8be64fb88c22630aa3dbe8306e586fb9254b41e2d83265544c0f5f9cf4e6aeb1065c78f7418472488827599025a8be7a9ae2631e0d5cfc36bdd157ec1061b11e5e8388207e + +N = bfecf53599b6017414e891d4526206310285d46f54bc742cecbfc841d026cb0f489cc2fe0b6c3095db8998c07a1a7988758d85e08eb97153a2461062e4c5ee6c685db36afa9ea2088193342031ece3bd76db5ad0b27d69cacc5c3d25cf571801904cec207058021d5a1327c8348de16ee58a3b789683d2678a3db074f16c81c120a7b8827f61a413ea42c229df1668566263e8c0058cbefb1be12e3cef1b612f7540f63eebe1741c68fe6618c171c0f79cccf72019c6533d213e96c7de369346be39073f2bac1463fd2ab88cc670fe5e55b2547d1eaecca7df00dda8aefd9af1c48b74e3560f2f1f911d56820f52fe88084aab61ec963f27c9d33f6847e62ac7797e409cf6410a5bc6407aa117dd2492b3be43b279a4a130c6e213417493e387e411cb3e00010fe2000ebc2ba1a1c151ba49d9877909938c473238f052581f83a7fc64253e7c1035bdc38889f00aa0e78e3457d088cb4e6b0c26f226c8a9045e221bf676e048a934d928829ba32d508776b288560702d088f370b8e351a0d33d +e = 010001 +P1 = e1cdda7b5c23e4e95599488008ef202dda379ad1a5593ee1acb0be43034eb2c174aaa8a6c28580ed3776029506942a9421916f0ba4ea585a163ede0095a8e408eb09a7370f27c44e9bf91e8843527b245965850e344e7a71fb994eafc910490bedd3097e6860522154badf4f2442d9a2b7b2c5ea824830c4f1462d1423f9a3b6125c29157f6cd1af82a14afaaa00979a07c888bffdae01b5a3e2be5d86e242103ebc7da0e24cdc1d0120d48bab92c31a63ede8a1103dfaecd7504acd67e70f47 +P2 = d9975007bf882f49478ccf245dca62aadb73bf510b5bbcacb92ae01ffbeb863b35ee0ff8f4d6953cf4062a0b5f7d79cb58c900c0e34cd4b1d91caedfebbeec2c8e15772afd2629d534f5b562f699c9420355f268649c2c675a0db13abc09ba07ca95793096bad4ad5ab72f38d10df200145e252faee92e4a3733d9bcdeeb4566df15d480e84cb93e6273e1dc2848dfa3b01fa0393a08a4563f11851dacbc240672150b6571d6c7ec5ee727e370573f68731b4c0957ed095fdf26f6562412f35b +Msg = 268004fcbc2acf83cbe0535244de0b39aad8b8651d7b7918166bf5b8756503c09ca5129de369757b3156d4b0790e14dc6e5be961ed5d09b63b0394b1c8d411490e99fbf99724b5c45f5aa845bd46880a7ef5842c321b83cb922bf871a638e87a515f6df50aabe5ee0d3433a274652de8e1f567003d661826ff3b54393a7d5c99e29cf0a9ffea8faaf9015e2408d106f35eb1acf6964106cd981460ae3e50cf93a8e03752e253f23ce0820859fc4301f2a0e3b426e52366000b73e6358af78ee624bdf0a611033734e57ec81849d5b7d013b51385b809e16288aa30789822a3a2587fc718faac0af17dd3cb0692b634d7661ffe6f02fc6afef865874031d074888f4726bd0c6504a5ade9dc8253b1997cce3839ec2d4c0797af8b4926db6f25fd6d48526eeadf7229a98bbea024e49b2e0103b15f604f41ae6271a277c0adb66d47cbc4827eb640bdb8bad755396a74abd334e5f3650cb3595eb26fb84112d8e09fad6ba0bba54f892633a725f24fbc963fa2b86f81d27fc7f7366d115cfa0e00 +Ciphertext = 53aa663211b20efbfcfc111d8848d8dfaa0ea40220766f0f4edfb8cc97d3a06c119f84064bc8cab6fb0620360cf6ee7fe6f55d199fdb51fe08059218bb0536c5eaf472abb51f20b2743e2aab29335734a56b13f34b3c0396da028b71ef6a9731ffce1510c9326bcd0de47e0f5971c9cbf3adb8423c9cf494044648dd0cb0a291df6a7b97c268a1e029b7df028fdf89a4cead005547a26088b00631e90569f0392a490b2d932c2c4dec7e2b88807617580638e01e9af951c73ff7dec42934b71803b887adf63671ae3a94a96a456f4be39d487a1c1c92c9304769d57344e9cee293ba01f2609b350a39f36ac4841aee3bc1bc17226e48d5521ab645b01959910e9a86ffae05061510fa4cca649d94bc09db5f55bb1ef968f8278e337a1ee696057e8f420f0106334b9a92f19c466921425c7190b50ddad68f904629721c28202a87e776aa83d461d0e98f2e18abcc291314879d4810eda48749baf94d9ebab8a295a7e4c98006b8444f94203458ec4340cd3713469d6ae5609446e2c874861743 + +N = cea80bd6d6bb75f0996be97d41cdbb0e272aa2a247dcba4b825dec42556cb6764356d85c3e60250e2aa6473990a2c81b4bf8aded67b5288a13d8d6939ff62c8fce32343efabfa70f306bd383472df1daedfb272ca9c391449909951f53de8be5fe9f21b9648b814d3d27b84a15fd849524245c4debf08f3c37b5fea230beac29a52d162e627753f0cad3089192494cda25de692881b77197af66f3755b86f749e0384da6a224563f2a96aeea52b92e7bae2020eabc8b25db17d110ab2c61caa7c7debff92b4e7e0d39647426ffb59e1a6636315a435bc9895f6980275dc560b1572e5e70aac5fea6eec7aa6890be7a3be840900754ff8a30383359f94d475a51 +e = 010001 +P1 = dabaabcc39ef74355bcc7e8ae74b50b3c7c05c9a9228afb21c838ccdf83b44939fdde31cbc4151bfd71b3bf6c3fff6f2a5e173f5ed7aea538c704dc0fc9267357c71720aae7a5e82df5584cded98f8f1e016a14b899fa7b255cb9a30fb05276af7fe402fad3e3a5543df53bb173f1bab7a70da79b411a5646c07c29826a0400f +P2 = f1debddf4a7db5e3922bdbe30152be7b550802a0af3c8677fb5991af98b05edb163aeebe31d1d72d6d91d7c04ec11a37f290ee4c58b7b8b383a3ccd30090005b5adf2bab4281d1d6daad41c86bd7ca4db05b4b745ecea0bc19271474884e031bd8ce6462335fcd71ac604eef064cb3331764739008646aecb896e21e8e665f9f +Msg = 41f2f3a86d32877e6c43e9f00061e5fcc527973eb965e5d953af5a40709812e93583a8538014ca4f4191b7b30aa5a3a252d2da75c5462f8b66d33718b6ffcba4661737ab7c11af1dd70b652af9fb9d497987b98abfc91401a08668b5b73c1e1cb26fb7a50bcc32bdd0e1b89bf6512cabff76e7b7c87e943a1201fb22e8c9f34fbd19492529d5432bcc5b3c54b1cf8926ef0bce4a5ba2716fa452991e1ce12fc393a971ec34e9c58e0931292fe15d2389227ad345186d2eabbcb92f0be975a229ced689719f220e0ee3b53e1d578470afaf7d07d8accdf6bbd5cc931334c5a6670d4a365844a72c8d7c5ccb9987825584eac04df5c8f4bb71c158af313bfe9a1d +Ciphertext = 4b2fe10fdbeea59ee40ebfb2a1507c43dd3f8da89e74ba9265dc1a6b1573d38026db600d6500df35e58da1dc7647228c313a9c2f4185dcd378909701b046d6fdcc405ad30ad85bc51340a99a752a6a2798f60fedd85196f2d09a6a4b13c42b02e9ed976f720ad6323658bdd24b37cc55175c0c78040ed4f61f078a1decddbbfaa3c0654355a95cd1661455461b9ae38986d0b50e8d3c6b456f5098fe839c49799c9f37aa906e3e8b16fc7f696db69d944f0bcdd481a4d9f73f9a573f3a055bdfb5a3c7a5a2efa1e301bb07ecb915cd0e4ab36c70dda7134cd3d46176cee424fd31a07b488bb074e0da04d0c645e5b0ff908cbe0edb11bb8f9ebaf421ce970c19 + +N = a77f16e4ec286d0e6dd7c98728d805e5fccef5760cda9208f76990cece67460ffa59d5ce41286464604902cc5777253b458c0b979b90a118f13ad0bae4eb1fd54ec6a3dfc42bd2ef95bb6dff8e9724dde4fd307b5b7c1ff34bb8c6bfe0535667cc7b3375daf15f814ef185a4074eae3d452b1221bf6a1ba5c70280468004bd5d57ea7108d4727fe6530b5b6d0b3ba43e48ad6a084c37e363e3709a001e63684734fa67012f4ecf45c814eb28cc8c99defc5dbfe2db236678104fef6078222a2b8f0d06245421c94b82417f0288051b904277d480e61e93aa7125cd7075e836363657597d3b5f4ff660bf047729e756e6955b796ba9117b4e4790705fafb38161 +e = 010001 +P1 = d1d109aac5beb310134bb788fc8bd82e143bb385dc2380b2d31f925ae8cbc5eea63571923482fc98e5788c111ea5f1fc449572e7fc60e42d2633d369daf0470e64888e55fa8a2e8f9d02cc6af2bd32cd55f1b605e325aa48e7900e0e1435a848fd6f5e7b40ad02077c9280a5bd505ed58fe5c36cba550657d5439942c7991bab +P2 = cc5d5a98508f64849e3f177cae51fad7765254061bbd8e85e108544c68599e898958a784813584a6e749c8becae9ee8e36bb8ce92ad06f1602a107f5683a1a1c0da6306e6bd7c396d2e86cb2db8c56b821d65272b654a6fd36f3514b3c6ffa9b5cd2575d0c292636730016c7b543b1fc084c42724132352d0404ebb0e35d2b23 +Msg = 8deaf572237873507b234ebeaca46816c2562304daefe541f4f77d2bd8b7c435a2c7894cca9fa8e1a25523cedbb719f250d88f38a9921751d174c847c9743e08ea8f75002ff7f73c02a0fd4e639e5623809f5f4c6692da2b7596d67404def5a7611434ff6d85863a1f81863d3219ac6cdfb7a71c03ba98fca1746fc96de1c4bb08ebfb26f5f8385cb15e70b8d2fafd37c1bcf68f566676837fdf8e4d159c4a319c8a97da3f5f0efa6e1cb40932fb151972d6a7fb9ec22375b5cec06f5c6b0b573cb9186eabc600dbd83d52c3cea5c6cad1bbccf309240883d137ed791d0b67c611e4bdbe3f048ce9a458fed8d571785c6df003853577c8aaa33375f07b87b282 +Ciphertext = 09219e74739a7d9e3e19fc8648fbc337ae6fbd967d383adffd1724e836607c0ad3666dd355e6d5aaf4d54e9b8607516c3caa40b6a794fa972acdedf097871c819b0c9796954e4fc229f8d5b66d693b3ffc64b93391df031fc373d1a50877669254b93fc33b05d3a41da016ffd492be7401afb40d5b68ccb4ffc5df109ef7566ea8ee34eda28ee8b7d0774ddf008174316802343afad5a7bf9524a29d298666358ca9264510bba8badc6fcdd593dfe28d485e5ccd2d6fad0cc869cf081d159b505a4913f4902abc4248b26e9bca2c9ab5b84578dd8436e4ae7e4e7a7b8618d4e8f143b17864c8fff3d9d80743b15807fafa58b36930c24f878d897b92f3cb63ae + +N = db8cffd925b19b18655fcb3b012228eb150dc7a6c119a9298e7d0683785f402a1595b56000d4461b700b5fe07d8974b09ccd371b1d9c78d8b1da8c7302e310d6fdb9990d74eccfe0110bd51204b8c848f2609c579086d6cfd02b8e70ab8fe0cd13209bf39941068f71ebe2eba3e101cb470ded2620660247de4d0eb39710ab0cbeb651ec3098e714e46bcbc58656a1a061cb50f9e47f2a81ed62c985d577861cdfd3ae57d2832b8092e546b5a6f172e0e5a4586f2bb15d027e4a29f5ef956c28f761aaa03893d27f87164bb5fe6418fe6b2bec913784417172e628051b8064d8f1748e5de2a2884afde873e5144e9fe8d80c6fefcaa2a5e011eea88ac40160c9 +e = 2565ea8e9298015d +P1 = eb8248979e0a7ec763229e7a0ba784515abfd1b35dc3f5a32a5b5991a59cf077b23485845c9c07824fe1ed333365051a04ac7324ea6464bfec0b60f583f9ef099faf4aa976523d1e15988aaa1e392fd452ffbae3d33b5e34624dccc7fb07e2530c6dea1485a26e86721ca57395735db1205881375b398a99b15765281265c2eb +P2 = eea743cc1285c532029da15462bb67bcf4c7ca3199465b8e04ea15192b91dd84dc7d902fc66936df11dc13da8595e7005f78f47b7ae25125898c49dd6579a25bbcdc8769c3a482e7d8cc146fbee0dac8848470391233605c10a1758ad47f6ecfd822b10e02fe88ee50a789bffd56c08329069ae70dd7af1afe4a4513efe8f61b +Msg = 8ae50033ad20048c3124bb064afe9d302583b89d397cf8f0f66572b8057946e6db2aeaae938c5a90b101db456ae8eb39848114a02852ba8401067f249c39fdfa561724bc09e8b353de13e55e1b29c25c334efb33287114b2951078c0f3d3f9663c006ddc8c7ed38a082e1dd7534d83626ab8e276375e405caba4ce8210890aa1778b4a9d5025b46f7f037f767848a3c7e3be14a143aad951f4cefb6515674846f43aeeef84be060dd3aa8532b7eba48d6beb0b5ba109d8678b968177eb6f1d799ffcaba0863ed55aebfa86c8cba56e0476e3aad2d1616b3156b2842175efca9c1179d2f7482975b21553e7249292dfa83381987b951be1c77cd7ee98e763c993 +Ciphertext = 733f1d210006d7e06b12611412177d063c86e0069c4dacd7e053063538782ae1839f344616d8d56c2b0abff29a3320b980d548a2684b1674c2e4f87dd1143e60378e87c9cf43c5c2a0ec11947578d76c09a68acaf7937817e71327bb5e68fc2b8f195de16a119f63c120bbddf49f6538adec3686ac3ada1fffafe9ba6fb6c5c1bedcf3fdbef2e146df176607e544e649fdd3bcb5794da14de9f3decd31622998158d0870e4f39c7b98910bf9bf4d3c94fe247065da751d6af9930baa7ff5df3655b0034a06416678e7132918dbebb43fbfca3f37b766b360ea34fca38058269b0f0fa600d3fcd9ed1fe7b19cb5cff89375afde98de711030c659db29b37cd24a + +N = caabdc1d71c7373a258fd2606f53d8d496f29009db3bdbda17f30e2de7fa3b52d5d9805548815413a1884f5959b567e75901942dc85ce17059edd7f8e434a4613cf4c45a2afcb010858c9e4d3b2f1485f7c6f0008c23aaef0ea5ba92f595a3ee224f384ec5b920696209fb85033fcc969dbda438b0e401a73bed098925478555ed8b672693623b94a96ef0ba70161f02e6a3eb308414e0b99d7ce64c5b305dff45f14c8ecfc3242166cbc2c5a16ed8c95d89dc03b5a9bb2e9a9856bcfbdce6690c41fb0306e1277c740be06f32d6300b815692181abb10162a376f5acd9bd158fea42b788a1def028cf595653e2c1c565ca5d147cd8c457fd7011e9f8b2c6afd +e = 02a5c8ad36a9 +P1 = f740657dcab38f35168d83af15c81d7dab05a3d30fff6567d2af209b1b21c208efdc4f984927835bd5c1f7748a603f6bf850efac55f3b7e5c9c475f42e9f1d51ee0ac5844de2462c5c0e0f55e02cf989406bafc444bdbea16efff537e660cd2938bff34c89f3d3ef67ebbf513ed25344f70ef8bb37e33d86400a3a814277eb37 +P2 = d1d7a7e97b084b98a619c7345e41ce37bbcf7f27556d3ff9a65eb14646d394e6598ad1749a441887a85c794c8c561e1bd647b3a8ea2986e18f3e5a313ceebd5443f60c3dadd5331c2a6a234b77b98dd70951598650ffd6fd316f744e97808e37397bf67ba5e49928334f364e06fd16d8641b3c616b5104b4b02155d30a873d6b +Msg = bcf45c628a8fd2facb3944cd1124e9cb1237e0314d5c50089ebe319cebe3a816d280d02de38cd049f6c1f6ac338a3fca032ee7b49ce7bab6ee9e2a14fc1c0532dd8704d6978ba7c04d55c3815eee9cff07e88201e494c872bae5320af8b88a8a4a582e1670d38f9115121914eed5c3e70d7446f4da449769b22f5116a1c22f5fb7f931b5820a9d2116530d87ac41cfd22ed188ed83827ce9d6fdd8879f1772cfb439e10d2b094dc37047e16f9a55ddec98895fe727092a4d96a34134d977c87ea7e6367e6f62e02a4bd51832d055fa4478c6262376820f46b05fd2418a8592a3f14581fe6263c52ab0ee3f9d56ec62bf9611b339f37fd4792cfa2eee987924fd +Ciphertext = 5e9581286f59bcb7736e5b63544c90203e334d82b0a102caec08f82c54c6b9c10d9ae5420edcc8760a01b3dd7f611430de9fbd246205c50b9cd9d1eb240b9c7aeb6aa0cfc6979858ba84887906a0370cf8b3d6a819bad93b126e861d08f951a150da45fc1ab42705b9a9661ed60cde6ebc2bb999bf56b3987e998345834dca02b91a3783efbb89e8af961438fb048212117114bacacd8db139de76009f6c55fe20b77fc7efa48d863ddf10d1a8df4dd673e3602edd669456dd888b7401bb57b703898244e6d66749ea2b10c9a5634b916f8fca7c48596af6163a9e5c90779a7b74b97ee99f03c505cf7ab9fbfe4c1d785c3728a75b649144adb99ba919137b09 + +N = 98c450c02a0b84eadd4b0638f2cb647fd75421be58aeec04f72cf7c4310e7c3fdaf05ab020d33a71e55423f29187f040c9af2a37ee537fc2ccc78dc98f041d109bff92703a2dd393a274e0de87dfeb8c6072c72322ea3003e1427f367b7ab94928badc9cc0f92e3f5f81c885d190927c892f1615503755b4b4aa9475c7b44434cb632ad7a791e13f35cf8488d29b3b7df02c1fefa6a23524474306096a1c366f440abeecb3548d372a7a48470708bd2ef2becd479699f66492a5c27c2f9240a167a5613990fd8c114b8aef598e1bf175893139ae7b7cd20205468993dab7cbbd8c47efc2de2731b50d1b840ee887400e6cdb44186bcef285de5d5be41f49b3b9 +e = d746139c67 +P1 = c7af2a48e5636afbb474b7d4ef0c1f7c5460148d7911ef3b7b95d3f2a066e5c075fe3e0fbd652b2fe481a2d377361dcabf6965b180f1248c83e8c7d4bda1f55e0fd44fb34ac84f21da84eb6bd9d28a8af3058fec9d75560a9cf5613c210d2c9192e4b4c185368ca48ba5daf7e4c659e0c2d5221a8a3e59cb055c42de4c0e0bab +P2 = c3d9cd33f491a21456b52c20ed1e6caccc3ccddc24716fd26248cd1f0811c13c6cd52c79568300821323a86dee94fa3f2bb5fe1ae9db7cf7c2a5b4a112008a6ed241228efc236933c71a358176c3b6663d9311b014a4e739297e743841ced231b0bc6ae78c467559f8c1668d61538a6a70a45403fe2105cdfcf59ba38ddb3a2b +Msg = 580f91312c360b3f02073aca21d491f3f2182a70214c29b60036fb43cf147cd00383fe7c347f8aa1cb6a7608c6f1d8dea4d8bade6631e453f4471a571307e2d5c8b9f8a4a2ecce71abd8dff9c95cbee2669ca6daf7b8e5dddfa1462fcd4439840d1727c967fbd8195b191c6fbc5b12058a3dd097d6b1cc1391587755ac8f377bd4a67291576ea85c8f4fa55e33968e0b000e9bc24b5be72d36e88e101610724f1dec5e2be75ff10698653d3ee9209bb8b52c6d22787c932fbb63d80ae163926a150e234db11b708968f6b99d77cf17a1a8e09941aa7d39c8ff9c3d6ce0fe7c3ee3b3a7823f94477c0d90070cf0b2e822b80fa195271b16e44adcdd8b302dad3a +Ciphertext = 2823fc4bc02b864ec1acfbb6e034516485ac935ed4cbef4773f0aca8d242a8b7165529304eca13a299171e79baa0b4a7560415b644d5a7794b3683866a4b93a7a9fa2b96a482f5952e2e2651f13f88c537d2ab3e33952d84bb6f0519b4504652f17627b4008b0691a67d0907fd73a4d153dcdce2ff08f114fb1ceac15d90203a01e31b8aa50f768d4602832b743eb5197106d57f4783063766720be74bfd0b4196ab044514b7b9e0fa1980a31a4037827941e4f52046a870f66ddc75e42f6611269f2ea817bcd8ae21b67e51db90a8ed8bb788486031eead67f5067e230c59d93fd8147ee959dfdd899b45420f705b1290175dea75ec11c0caaeccae78ba4803 + +N = 9fafa747c837dc4716530751db7c969a738b53f3e67e07204eff97726cbd85cef1a40da9e5c3bb7c838e1fba54607f4dc6e8e8eec97135ae473b29086462eabe1737894a0d3ccff0bc089bb5096fd91b2c6bacea6a0b9305e7ef23fa9e89f203fd271812d01eb60cb9c6740ad1565cbb9feca09c9588b5e0835c4bf9518055606ed8c4714ab3f7e00234b0fb3f9d8ed53e0ca868fd6f860eb8c38e54fd27b51c0b2c55afff79462ab9d4f166a5ef0c7ecf70806a12b5f65a087e2e16175d4199 +e = 03 +P1 = d469869aaa7efde3d2e6cfa9c7e5233997ff3d559a9218e5871f37f6073718ca0037a598bbbbd89a913fa9d6e6499428827ee9ca85f7ef08ef3183136af527b1592ce1b603ebad4b587dfaa6d2e868590c5957a402ca1882d3783bd9425cfa77 +P2 = c0745028c07bf4ea87f1508fd7101ef9437d05255f9509dbeb949dcc798fd77bab91e1b5b96f3aa2ed183ce7f12bbe8a1bb080856d1cc8077cc5f29c175ac99338a6b60712a3a820ae28d6812d218447ba4428b609df24de9faf44c285da986f +Msg = 3a66451684b9548915a8235417523a61788742a5fd72e634d8ec553ec0b1ede1aa0f12b88b74197a42b3218bdaac608ac4bf521b8fcaffa7d8bd89a50a3bdead06297c9781b9306ebaf053f34417a1526a95f9cd811a37dc570d2d0b8505c8a03d4cadfd922698b1c9e115f5447fa0eb8d29092626179a42cc4ae166ef4d0428672794c957a59b1db54ef660a1f76033b6999a7aa2c3c58e559faa04e3cbf5c39698655bb590c572cab51c0ed12f66a439300e522ef45f6b1113caa25ad9af90 +Ciphertext = 7e25b488a9cb0908c9824d4992a72af7a1445d3fb6213b8593e396439fd7a15839a6f09930ecf1827706c039900d58d32fc0b84a35ea8d1f07134029bbcd6be35912b1a64300ad6bae407ef9ebbc8dc6f099f9d1c97f22ccd7514ec117321603d5be10f8b34bf44ea938838dd98289333fbd4f048c62cb753cde244f804b9f460e5dc23a2e1434674b3f34ec150abd7f6f32bfebf0388e694dc182ac7a6a8c7f81dcf62b4d6ec762d28c82193610fb9f79db456c65d90894db5eefb62b09873e + +N = ce7a3f4032995397e03a0f2c166d4b0aa7cdaced4c7e9cf231756ca6abbdf15a406d1559ddcd9d2165d64418b1ba2bbb66ee2562cbe4a6f888ed63e9ab06070d8e25dc3f6a273b213f0848acb46546efbc95763ee71e0b0ce89cc005fee93c7e8898db281b4506820b76d86f395fef3b465f74b6262a782a31d1f3ec9b06a64c363b976aea8560722f13111b10584c4d25614b7db8640ea3d10af9de1f2ea3c6c4c23313a7b0b4d52fd48ec5b9c493bdbc49be14c534294606b2275dd4f13145 +e = 1057c5ba5457 +P1 = fc37ba9bcef42e263e3a2b0639eaf809adf5989f2fa80f883534e5e25454b0a5792a492c0238f74c46d155bb6bf1e3b7df16c396a36b15346eb2ee81583038e8ac5ddf36c6bdc5c6da2429f2a1b1a37e3be61f5e18893faae958c204fd3362eb +P2 = d192eb99aec15f1dab26cb11539c9c736e4ef634e11fd84885af61f4d628102f6694a6c01885dbb50e419a0760963b9a2ca6418b0e0f596bec42bc8c2f1642b5f98655e800019e7038f6702b7ecee5a84e046dba5dd2560a900593878b1ad08f +Msg = 664d258933a414286cfdaf8ea780bb7680ece113fc51cb9af973c56a1f70fa2d1b4bfd481e78a5a394c4e2286b9b5a9a92ee86a8306b88682fed8e842ab521409604f4e956c8427253bfa7a831abeda180dc3fc8004a0f84d0637e5b641a4dafeb634c02188171132f31dccd768ff96e8d972fbe3c29c9430d2b79339a690bbfb700f3ae406059ab4770c9d81a60eab2d76074fae079c267816cd33d34ebe5e7242517a5a4ab79bfb4de3476366efd547e8cc739c26fadf42b0dacc69a00d717 +Ciphertext = 0149facaca0b0e78c63c9ef995538db3524c7ba634aa16b2f7a48e058f4bf7946c48de5878aba3d539cd1559f81a483b10dcf3bab094ead204e67f19fa07908efaf266a4ffd373f17dd1e8065ed0bff57cc5fe7f2e7022da0ed7566a18339c96f0d7dbff63a41a3ed8e03f75345809db91af8bb9c23f1ade9ef407bb83ecb5aff8b543474299ef4c1feeb51ec89783278d7dc1b8af3476164e436131d99c69d184eafd5c168226b5be4acda2786b0be894d98851b4ea6baaa341fbdb02cd3db1 + +N = d887c0c4bbfc790b4233e05a6ce715c681232b07df6e49f9bb9be4450a3d74d1e4a2488b7b59cead1b4be2cc85196a74293cdc395437a0a6f6a64ffa1315142df4ff82ac90dca4e816be7000ec7a99879bd2ac586c08c59069daddee56223024adc9a5fa427fea55d1d3345f687defab83f94759e5b222d486b25625aa68a8f5 +e = 50223855d9 +P1 = f16a3d5483fd073a5de266b11ea20a70fb7b4976e41ae58f1fecbb3d33cbcba8f3cb2cc09bbf75e9b6e760c053fdd32abdc8768ed45400c0ba572fb58084ef0f +P2 = e59ca48a988c6ad90d5923f666e7326ebf057dbb1b95cbfff6416b7c183d5034c69f2c04bc2a40785e5fc2b27d582e7b39c9bc97467a84f965ac43e5c0f167bb +Msg = 8b503bb8caa71492f28437dabc997b0f7309bb50e78df536fe3b2d2bbe9656a73ffc74069f3d29b24cab127979cb3e57131b3006db0d0428e80531273fd72ce38b9db904dfdb89e5d8ae4daf645ba3c595f9c841525ae9399076ff26dbac0a3f124eb5bb0ae3c6580c21ac5ae13992eb07f47bbea30605c37d2d2c4aa6984a2d +Ciphertext = a2d0ea29e57df7bd94541e8f8c87544a884e36546d5a7f100d0ef2d69dc7eaa37066289edc8c24b14e780a5b82f67b0739dfe5a2936f0298a9a24c2c42f342240639738b635ef3c5a36ecfa7e4ce63ba4412da2802fef2d1c45d2de88be11ea12bdc203fad9f4162ffd3f85796b874361045a6c7773df60e790b3e78833b9d82 + +N = a33736e91b304f27e309841df5ef849c25749054d965762ce5feb8a028f2b4e3b7dea461121aee40e7aacb43003813c4000aa43952d0d030237eb2ee691b958a62409c9456bbd085051dce79963fd8d3afd61e75956c7baa35b0b407333c827e6458ec87356449daeeaa55e1f3e91fdda0e4d673c59a53a583b196cfeefe6b49 +e = 02ccddf37ac0c3 +P1 = c5b9baab3e4ea5270dabeac46e8b6ed08b0eb095651736feaf22b0f0b51228148d41c8464f984a9ff804060fa37f89bb328b94d9b45011725033b3a1a4554cbf +P2 = d351bd674b3ca1e20a7979e91767c9e42d4edfa63dc369cdebaf1ffdda2642023c4114a1db67be4bfcab32a19c304c7b03773dd56cf676d17f9201f90fa361f7 +Msg = 30312ca71d5062989d28527a147fece3c1d5760fde3116a2da605191d41c05d2b95e5548b673dc51e7509b2f7ef064d283a766147fda67bf67a7d02c38cc278b51a1c9cbe4a8a207204ab318d19c48d2917c83cf184a16f324a196abf3fbf108888d34f5befab3da383ff17524a40822a0e86ea0d3b4a0f9c82534e3ce04b530 +Ciphertext = 86cb5be06ee7541091872bb1585d297b3b16987d73057da712de132fa9e68a7013a647f87a364ffb757f0c2abdb74c7ee237a2e1217a45b6713d0bfd72271aded670023bf363e7f83333f0ffa39ac05ae2f6ca54a81d9e8242b93a67d66d58efe4341b9aa33a9e63b523bdbcd13c3a6a0ce54c43bb956c6b92609e631f3c480d + +N = aa48ca0576f4c9e2f0df51554898c88ae37d6d5748efefae7ef9d194df513fede53a6c9de0bb1aed7861b0b6bd7c02e66c5d183261028d110b86c1003076113af1158c7af908849e2ceedff6cdaff37a82fe3dd21c071b3ad61becf27048df7feb9c1660ba91ed268bc66170d71168a114cc1f26494c490725fdcc762a1d1c25 +e = 010001 +P1 = c63e6b6c7f705a131ba1c181f48d860136b38f58bac6bb4cc95bf86d229d80d400cfc6e9ff95583c530091b302221cda6516c28ed54560ea39eb1894be0f09ff +P2 = dbe5127324879bbe0cb24a4baea16f26596a921a4c38a828703312e192af72e5556395c4a9f495d20da076dfdc4b63f249229bc66a97ed3ec6315c2cb42a71db +Msg = 0570533fa35e2e1e8f60f7f7b0292baa64d244ba1ccc7cc2e1ed5d31a9992fdc9ec7a20e709f9e49d4367238ec827cd4fd24f099480543c584f7658f141bf6df0900030de9619e5899c3a99d2fa3366ba09fe4e969de7ea742ce6444a0298502d14376a5e42f65f4d2bbeff7e4e0cda7826a160c853b8d959f051951e93d2b84 +Ciphertext = 205de42cf3a521f08cb22f800ff9743510712c02d08a38998be24359cde856286021342f54dc8a7cf8da9795c690d1a3f71d9df4e7f8e9d582e2881fe2e005b2ebd910eef4218a87da1bc002a58d439f41d27d4245aa1d45623b0527b74426107ebb6b883a9d27cc2b0f9ccb4723aba44b45b75ec7cd13e18b349bad7a2a4563 + +N = b0412530d56dd00a1e1d90f75b1725eefe29e644e326bc36681d218e2f43a6b1c989ec8d7ac4745fae98fa308cb64d95c055b6ca5004d409a682f2dd4d618cc5ddb5e3199091c17b4956d89bcf126c8c456c55c63058507fdfda79c61056b8a58f7c38535c8240735eb981480b524607e7dc8f95ef700ea6368784a4456ee2f5 +e = 176a4739 +P1 = e814e45e0d8d6227a75a1e197d1c6f4c7aea3aa4bfe19e95758363f255f1c5c0a2056491a8d4275f290caaedc72ac8a3e9a94312d3ec5d2788ed4639e2b807f3 +P2 = c26b5794ec3b4c60a65e59fb37bab6b8a7023ab78b2c6ffb43beadb1a20e78294fd540703361b02a9369d44c25ec056043704fcf8b09fc468d35a6e134f54b77 +Msg = 58b2e68998b3c18c3441219f17087e74b53bb9d96d1b949c151073150c4fa7818295ff66fc47861920398a18aeac9f3fde465915a2a9110d79a745580dadacff13bd0e05412bc34deffcb550490c65a981d9d186f9bcea584a4b4c14eda782547468d38a7c5531d0033591e9c451f51d0bce054f08b2d29661fee6e54e541809 +Ciphertext = 59e9d0daf636d33791a18a578949326f60ca5f0d8ef910dccb278875c6e8d6fa1a1a5d4899b4425a93148724a44b50e6e93989825da00341e12c5ff01cdd6942786b15d644a271ffd4f6a517362b9cb90ccba60ed257b6c288725535b33cf997b116c131b9f4ec9db096d5fa0cf22991f4e24ade3bb864ab8b4df341ab127647 + +N = 94a98fdce949f555aad44e8dc43d6fa2fc1d5bd7940a59f1c8b28b8cb1c4dfd1499b898aaa594c791f084b1949006e37ee5eccbc28a8ce173891ea22083f4381e22776feabd40bb77fa553feabb3c67222a208ebf99c5a0fc0c2711569dd866bf55a063f17d03d9cea4ff715c071e1b329e66915150e10a3404a24de5c94e421 +e = 010001 +P1 = c0942dcf4f9050dd1cd5ac1cadec1209cf97af5e29f7677fc4908d14e37d9a86298a6fd84b51823d07ccdbfb634cbfbbad3ce0a81e4b8c3db917005a4e70b0e7 +P2 = c59ee62e7eb947599d6277090ddf1970c54bf1b9a8e04c51bdb9fcba2881ee196ef01d28e546b036894eb9362c84d784a7c4b53e7000843260b1309aece539b7 +Msg = 026c589c822cdc9e8dd89ba1d24a408b9c799d1279795ca281db0506e27c0d3ca318932bd82644ff5b96245f92bf572349d992f8a2c5a56e6a895906eb636136e5addb98d979f7d8b0577e06dd37558a91e5a3b39cc5d01e0a5bcd7eda19d1605e00406b24528622a95589a06a89def9177d1009d4911dd6f8005a6a6e58c021 +Ciphertext = 90b24bf2dbec2fb64494d451d192062708e0c2aa277530e8dc840224f31ed74f33bf30837de5e58c5b122cd93fc76f9a33bf2458e14a48e6a930c0c4cc157802e2120d14c866246bfc4e1d69700fd2848a3be36f84a6a823a63b9daa9aa32fdc9e65cde578d23b25a5b5077f7bee204acd4f1eeaec7474f34016c799ee02f245 + +N = c1ad299787323d56178601df7dda49eaafdd26d4d8c86cdf67e3705b05c8ff6c36bab576fb3242779ae86a3e8b6a731b5b667f7890b603cda13742db91617a551300280c80ae2e2ca65a6d3c65b2a839103ba6f4db577cf73fded88b9f6735fd +e = fdb9ba4b23bf +P1 = f726c3ea20fea75212190c10b48a01d26224115da760193b8da3dc8705a7ed8332e330cec8f17b64442b39ae3ad649df +P2 = c89c4760d32c5d95734961c5541f6dd5a1f2c35f3f5c6357c92f83d03d5aea890bd5b967699e42347f1bf683311973a3 +Msg = 33c0e198383761c028b2c51a855bd44a4e60d37efa140be782f2e9ea408e38332c7fbb8471cf9a7d2b3309a844f29e9d5e3e898e2260eeb5b37e68a2d8c9f180fc53a3f154588e91114cf86419b9c776543c4180b0a55e06ea01eaf9dedb1890 +Ciphertext = 03e8d87e67dd80fe734139bc87b02aa28d224d9fa0ec6f44ca5a35f7747987d5c360585db4a1177aaa83b0eb7879798478b5896b5a2bf45d6e322012fa8896a3eada71565557c8d80632e3e626ddedbbd61ea9f11d0336733271b064b9ecaa52 + +N = c57bd8a3d80b6c93688dc8eb24eec82294b50ea467cbe515728c2ceebdbbf3431bd9fc0bf65678498139e3a4bf9c8db6907c07bd17f2d29930b826e8a95c17773da560368ca3869fdb9634ddbf7cbd1d56b03681da5875c97aeb01101446c009 +e = 0e7505cf8da9 +P1 = d056e5186b75d0462545fef3d2fb701c41ef27e1d025602945a3df9da188cc73adef3d9514676f0addde912862d28dd7 +P2 = f2a9347ab7920c71633014cb1c4b8c7ac193a2e86ee093de8de9455aefdc8ae395e7768c68ca023fa3cfc36b5004a51f +Msg = 6a5a857f7289fd81d6c5c4304d6cfa9ae66140529443af45375e7d92045aa18e7257cc398f0da5edf31058a6b1d80938adba740f5842934637a0ff0c5576d5479e63cfc33fe4dedf3cc2f1d77e3aff743e63446307c034678e13b748832431aa +Ciphertext = 7d99e1bdaa68eac37026fc639b63500204d7942fbc522681109dffdd1317f58b16487a50cc91d22a6250cf37613c1bd41c61c465bf0092036d202ee61774dc6fd7475bf5d15353cca518098e320a3bd3132df97f692c2f0bc0c7a3824d9a344e + +N = a2655048f6ac40e4ee7d29f61bb0ab0ed1f240b942636a4082f5ec510a859d9618e594e1e7addd92922d2b8528a378c87dad0887930b435a96c987c4b427623d +e = 6a875dae83 +P1 = d3a1a8b9e5eef60ac32d420ad0d6b1d8e16939f1871b0fa1061a70d65e35cc53 +P2 = c471279cafd516d792780ec9048797a1e70febf1df00af787d8eb97b7c69c52f +Msg = 2d894050bc86edfa015fc1f45852c637077b5956d3d3ff8ea6729071d4d6a5a7cbd8c6448c36007a357dfbd9d74ac28a2e61f9a21a4ad3695a765fa9f92d108b +Ciphertext = a17a88675b84e7c1b614cfc467a09820a313e439fcf7be050f78f62c634e1371ea275484335f69753bb390f407c3b77fe2e1e9181c1b934010dd447f1d7ea0ef + +N = c364b4d3d53f98034ad658a92c1ee4f83118dbefa959729ac8a9f5bb26219a9d6c95dff5cea8e7b8af7d87f7dd1af29489482d3567fa00fb4db5e1da39842d11 +e = 0da9aa822b +P1 = cee261fbeba4e2b38e9ffedd5468a62bc760ad6def4eee1349d438c3a7073337 +P2 = f1c7f348893bd66b29bdb4b899b52b22838bfce9b13244e9caea68632033d5f7 +Msg = 1c23259ca5ef21c42b2c3ec3cef679b32268927fe04b82cb67dcc15ffd59e9fb2c7082bac8996f294d4371859cdaa616900d7232a0a11ec301427966b0070956 +Ciphertext = a81891e87ab801c64659a8226334fff59e20f355585750ba14f4b1c434ab9c80b1399d4584a587e0f57e11eca04682443dd1c53f90ccaa3f1f716307b6ea8026 + +N = 1857343231e79e427ce3f90182d54598688813612ea1bbe540ce311e5d26b40f3e8c8281b15fa6eade4a63890950254b47ccbf11516ed9e0f6a92c5201d423f90816c9834a7f6ccf85986589c3f1b6f3853dac8681d0098a606d7ef4e89b5095bec42aee4111d117fd1cb84fb0eb8d6bb56108ca399fb38080775dbede4250df37bfa8d0c697ba87d61c3613a4403dd38d62f998988cd6929790b863da451f82d157bcfbfe436e7f3b00a683dcacdd209f8785767abf47e9c912b94370c94fd9f589ed6c2e7f8671c85649f4ce630a81020f63c072467f6d0e129567b198848b71df0988c932f21889dc3edf07ec04fb9959 +e = 010001 +P1 = 6470a5af52f649afbf11f5a8803fb30fda7b4694941878294b4b468c00f9c5886e6312972c5a21e62018fc7b31e0422fda3c300f54a440dcf5395bf64b58e565f4751f3234483413587a0276c5c1877466110f1656bac62fdf1851f687a0091091528381289cae3138084d90ff0f669eae34188a99838412b7 +P2 = 3e09ff28051f6aa8007313eef5bb022a982b0aa8566439a200b0180531595560838975860bdb2e42b361fc7ba42fdba0a020744cf68736fd8799db6ff7caff238e5886090605c2625b28c2f2e20a88651eb13f37a7bb24eabd571e3faea036c2a7d814b0153c4b128438d3b066b14a49c206ad44774bd8646f +Msg = 02b1081bfd7f84dbb7bca3425b98c43b1f8f286f375ea2c1d4fbf90c18ff60c0be0329efcc45ae95ab0d92e91c2f42dee59aabe4f77d6bd04123cd35c19716fc8db033813a189036def9ef479c28d1ef085477705907857c256f6eb8000770d23e8b544946437e1cbe4117ba0e80a0a424757b01cbbf8ee59e6d4be7d695166071e13463ca3f9023e12786d9bda8766c4c0ce143d1353ab8596296d8ce49a25f2506bbcb9cba0ba05b75a06186a991ee64a0e0474f90b6bc54986ff81d088f62c6f19f50be22b2f20a9215b47cdcc8e6b6c13bc15aa3d901bf7a84a3aec604d4093fdb6457f105439b18469fccc3c700e79b +Ciphertext = 11bfd0276fd4b3ca23053daba8b5a30c30588d0e0b2ce48b5b19b063951246f0ac869f1b9091856676d21ed54ef602c6b410677b1a071da9398b18ac4247afd210453f58875d4396cec7e4e966cb551cf3972a641a8720893995914680530be0753940b672c95ad9e39c74ac0632132bc81a405b11bc8ab7426f41e61499496fa5c31d3a32913005a072c34c7329ef2cd62054caa398687890461785ea7156aba26089915763788140ee068212248cd9214c5e344bf48ae46482c3d546fb144e95864a8d7b0dc641a78707443976d76aa9550047455b9c815c62e2f0124f2d3ecba6eeca9234d1b600ac6b8cd617172b7f2c + +N = 019708cc109a205341a3d97fa8901e650b8cf8768af5d76def1b864c911ae5149dc52c8b806bb5415cae2f8b94efeedc30cab1b3b77502b00da93fcfa24b86550499dac2ad7a735de669e04741740ef31317351407367a3b9060058fb309ede4330cfb2594b39bda463da6adc35910af472d6c7036b84cfdd65ac4842e8ce0bc5722e859e38b940f6645be9f567e5b23ee8e7534c28e06f4010a72b17bc1188eee5ca9b2dc3d05cd3e990d5b785d3122f347f84f9b29d4112470ee9ef2cadcff8657596d11142973c35f1f5077388081088a9995d703e9ce40104a5b498c888b4d4496fcf38856ac82a39f74f6639704e653a3948b605aa6963ef4f2d05041 +e = 0153 +P1 = 01c66d61f6521d729e5f419b1a7afe2c452e3a81beb5d2664cf1fc34ff32a5f9da609c4a740c31abc84c4623af4fbcccc723a41f3367c8f37349c827b7d62bc99737ed5d8f3966d663462dbc3476ba8934591901ce9ac9fc0886c9ded1cd56753ae95e9c2331ac6713c41390a87052e5f9f86dde9797cb8a54554049cd0b8bc7 +P2 = e54d269bcc63d98d20c73452c666a0e65b0967fbe7130fca7810ebe4c4429a3f18e5eed2367a6774f9cd04c5aee625eecf93e1b85e80b238f54c48810a3ae3726a8da191b69402b67271e7fdc6939055eb0839e3f39b233ebd9c7c986c6da951a06f0714173283fe6aed588d310f76e97036c23d8ba41a57d73dc5b01373b7 +Msg = 003748febec22ac70fe94048aaadd03828f7d9b5b1081ac94826f14b32cc242c9921621eda890f7fb0b999102e098620e366ad55d2d1431bc4c9fd05c5f4e683e84a3aead03be85826371c94a2946bd603776dbd153a9e38c7ab38931d11db417bcce3d9aa553c424a340a4d087cedf5261ad5e88e3c7426ef4458072536ff26fecb5bc46c593f26b2bc415e0c5bb6bbf9ce557ed5bbea99883ddc7dc2e1ca0d344afa0f465961fd01a7038d257fa12c03702f5edb46b2a56bb6bc68111b70c5148f7a4057d2b42ca0e1da6a306b99414b09ac35e81667c12d9714317e0137aebe23268139bd2d88f64dfa8ab2a8fe7d8dfe4b0b413584837b57dc1c2195ed +Ciphertext = 000546b0729201db006e42d81302ba0681e70c9cfaaabf5f3240f8e312172ed8d71930966b19a403fdb5e1f33a26e61445b9d7e616992ca7ff6ae47181ec71f6fda1d8753e663608f33445aa787b308f51a9d364bb2fc9277e0e52b8612990acca25889ff8c2d03fe56926891e6bf0b9d032db11d1db75a92854e9c150c8813992a5661fe1ea77167a789360a20b56dbfa52f9d5cbdbc57d344e297ab4400bc7fd4b87a79b6aaac867c3c70ff6c6c6d0ca132d2bd2425803f62c6fab3cdad3c406fb57989b051ad856d3a01bced76e2860a401ebe03c2fc9f766185d4112d2cb64fa6ef161f7c3baea64b985e1ba21ff8889437f8ccc25e44ffe67b1d88c9b + +N = e0999768b24814b483208071d4367adcdea3be9d0036650395594fc474703cda498b3f4d2a94a52b27a455b83d0bb618a62da7e0cab17195f7b77fbbeda67d41bd37e3d6f22e76c908e01cb9d49a81581e88bdcd9a94afe16ae47b1757ca8bc454c82d89b90458d918507e00764d0e0ed7569b4cfcb5052d282325ea7f668f88ab9a7db68bd4542fc55069a0ef96f2021818af0b364107716c0c8da742cb0656d4d63d801758242c1b5c9f8739b6e774351b0c467f3297afc7d6e843af512b1594f56ca6b3b555a6a307dc1b4cbb09c12a6ce1 +e = 023bdcf5b6c87a15 +P1 = 0e89342e02373dba3f444f461c9cd3e69c4f70bd5ca5b7f7d7db60a2d8926858baa438d50e167dd51a2b92a00b6e151b503ec6870e398d7275802ddd55f574bb9dcd14a88f7df7e5b54b1f4e00b73e585dd1d35a0e0849902aed13b39b6539a8898becbac57d80e6f46f +P2 = 0f738b1f459a6e7c42950ef843cc461e205f1608aa1d02bc9bf6c7d23bcc4647d66e08e1c4520a1cd912bbf6c1c6a9f0ff82a2cd82d25a97883cb9db349e114cb723cd9a2ffb4f9711d3aab7cabca7f99a6f17c8856dc07a6170f23aba923db0b8d9540d89146da87baf +Msg = c02a4756b9a6c5218bc665cf6b717a306cede88c965781a290e0755430ea81c5d9b65605fa3f2501350a5c0d764a181de8f1c6644becd29f2da35c97061a1dcc0ef77da165681c170f018e44d398482d4172b6eab8c26891e04b89db3758f71935341e7f8b160f8d63819b8898ea8ea0f234f751ad2459f8d58cc971a4fde1e330cdcf363878b6992dba780e43c7604a5b8b39b08e36f45c8b369b8a2c1c6ef3c70160e5946833379bd5d0e8a129d9c77878214a92bb7751257a072c426cb0d6d142c180f4783c84cad0176a0469af35603a43 +Ciphertext = bb69d401a95a1c9ca2c31572637ab324724a8b97ae76f0828f3b1a749c7021d398a17e0d8d7cf1b3888698b5bd98c7c14718586e1e1c2a2a7e8e2f56f9e82a091ca0ce416675385e19224fb9d623913d855d322b404a8a6858ab964a652293e285e48f297db4a0d8da72d7be5438ac7bb22d919479c6ceda5203500a8a635732b98853c1d064c745ba04968485a3200d99eb23f2bd1a3dce8f6cadfa5235cd56a177794ca7cb86878f02d57e373dd4406e0b36391a19ca9cbe28a056025aedca190733c88d1e30837017fd8b279db0eb7c3e7d + +N = 076d1e3996a2eb7923716eb9486f39735d98370995977ae172142365dceb8688029bd1b97caef1496442500e22bdea6ebc3dc40b903d9899850f156303f8aae73c3839d5a2d410fec2b19d70b351f50e2a8bf44435c081b9ebd74f643b62053411110e4bea05aa51ee1a6bff6d3f360b605b1d8454574575e8bb5af246508988dfec2c3084644f9cbc13ae90e84ecb4ee55b578d +e = e3535fb0a710e063 +P1 = 3bbd45c3c21070d0e97afb5809618adb24b0c89f2ef8b10a812b0fbba81adf5dc5f5fdebeac1ae9633c050dd09e2bfd9903b0c6f05442374990b4086aca381afe0d60db15ed270bb8ab3 +P2 = 1fd2d42ec423093698f6fedd856889538630822cc127230dc672e43788d86b98d5f43427267c3e73f6ce3c9572c8a67442108cb250711cc004bfe5bc187ca165b08e64c1a0dcacf3b4bf +Msg = 034454aa7a1ae2dd5c61039e791b99ba168e3489fc6999046c149549aa44a714774d48f127d9d59a42d9a3c05e93accccab56fb5ea8d93c7d3af849e336b508585d923ee636e33e235b9612b7672ef65d55f0b8bd9b67b4927014effebc7c5c56b895989a9642b33ef442759f957cb0e74d3ac1b62778f432786cb011127b763b90428183a4bda6c593c0717ecd1d41b6b73ffb1 +Ciphertext = 0385817a3a14d9e17c856335a8e035c5b372aafabeec61cd7ce5ea4dc11cd8354bf0b6987e3daf1609beb45b7c33fbc886d4fbd6e525fcf73230eddf62347990923e90605d3745fbb36df16133ea23d881ccb430c5bc6ab30450625ef3b0576f132bebb70a76a9efb0ad86ff24f3572a2b47b2d40471e3a5daa16e803e7800d78bd37fd8c6919a14011738598b060149acc3ecfc + +N = c4a916c0333891e49b4ed03052f0b1d1e195d98431ae6af89729536cb4baf4a501c0c5d4c92b63797fc2635b1b47471868eb2b8a26f88658fd8a124fe37c4f95ee20a533f9393c4315966ffeb91ae01ba85de9e2a6b285c9c38b4c2b153fd06d66775e5b71d2d1db56c262a5f0b99505e88e3a1b3fd9b7a85471e50bdac26e224e36b4c2c157291437efcdc057d4f19309736045f2834eb844b9ce83fafccff675ea5f0b1ec8169e7904eb906494b36d +e = 010001 +P1 = ec4e98ee1b68f738044c095cbd79dc6714c9f1f23b2f28aa68a62ef23725c4d9003b09d29359c38ae0378a9597a5762c6672f309385762bb8191360341115ca3d1278e598d2847f70dfa6ba26479c0cbbdc260fceac71537 +P2 = d50caaf9f4059a087c2a4653535a2c80397e3d259e9c5877c997dc0696921e6b37013cdc5144105ee98b4e7b48c121d76d1d3ec1b57095e5c5aa0a91d2a4537f6e5f06a81beb24dfd5a6cf9ba84fa1eaf88215eae49f8e7b +Msg = 76bc9754904b4c93a3ec92a55199f5e5ed3eec4b59467d34f676c698f766c0ed39e6826552c0555bfc5f582d54f88b2bcee84d2950042a653ea2efe453b80c9f80693f3f339cc50dfe6d38afff231d646fcfc5b8bc84e74767f5b14399357d5e79f3f60cfe4e0f8a637de576adeca3287cc612c48be8b6785a268b71e89589f34b040d4b7769325349c46247d4ade88e47b37618639d051238d0824ba38a22c5949a2a89899b11c8463bea7445858ffa +Ciphertext = 6aa79fb0c8fd51d52f9974c6a505d27c7884ff040157ed106fef897095210734bcb1fc9615d8a246e5693e438516a07071ac3f5c073fea6535e3414766cddcaf830812603d8fc462c6d5d55a76af2efe0605befd0785ba7932a512328b8949860f0a3673d1a118745f9465840a12a6eed9ed45bd4c4c0ed96e09448e55e6bdaf9b5efb21d408ed42726f9837f6159c558db3d0e3dd987ab4ab79f1364bf9cb3220c19be8cf15e7b54c7964ed25d5af1d + +N = c4796c0208d54abfba2ba48ad3231a3e172a59db3d92efd8be91c652ada5aa8cb4ccadacf777f7efdd8de67f367dbdd4f9c63f47670326550f064ea12c61400c9eb2a3f6ec5f2869013467b77516a304c1e37e5f42bbdd1609bfc05ab7b4a9bb0992e6ca011d302d2960371338ef6a377d5ed3a0794211048e965e3956a291d4bd9081217af28782207a22de66ab946b7d5bc8b1a67cb7a32c028669 +e = 038779492034c413 +P1 = ec64b88d8b9f197311bebb288978f5b894fb608ee89d24361df4e18096683f94223e77dff13dbf9b3193d55dd4065246b4720f729cbf6a9b7a736b6404964d10551ef6d746d6fab643fcee3d06cf +P2 = d4c51bcbc84addfaaca03ee5db61f063200db94eb3b5544239b759676ca57caf49d6b1f925d92d6cce7e81c4d1e9f1a210fe09be61267f03e52deeb3690303350b373d4245a2bbb800803bb8ed47 +Msg = 1c660acf9cfccf580e43b57c7038066fdd0b13df167a6cbaa8f4e8dec768b9e22d767d4f0af1723347d851be4cb1a06b0f19025d0610a14b9b753d168d6bb640b2f9c0fbab4cb0a6df781c298b5bb6782dbee06fe54befb13a82c8c0bced325eb77e5a674283d733f57af6ba42fd68249e1e194c0f848e935afd386dd57f6ac862db34b0b28b2062693dba84c5e0857108fbef09ab3621ba4cdc44f0 +Ciphertext = befea433abfa188407deae8184ee7fd7099fd5398111c287a62964a68763f2f7b94a560bbaee664a71d46ff453d08a293a29782f451933f384afb13b5b2b4e4f76244b139b9bae3fa95357c2dbfd43170fc2cf9fd2928e58bcecb9496378840b622a1316faad7fc8696b09a9b6e68a86c1ccc671323619ba3f55e054857cd7683924fba671e76f5135325d33963ca20d0dda7a2fb82c63a20731b687 + +N = 616ccba74e44fc369ec96c2ddbce028298a0a52849d4bb08c646f7e5180dae9e16f28810b1466be543c5477cbaf6c1dd2b8cce2fce37bcc558981d42d1d0ce3880b078b0ef66528a358807ee3982d7897699d8f52c0ae4c33a2e7dc815db1eb7bcc6c62607020dac10a10c5f24395113a47a029007cf3b9ea8db95e3f59d71e6910b11f5af8f13942a72a28d88d1f83591d1a965166666bd693abe4a399dd51800b503d992ce8c58ddbe442600751a0a5ed48dac6f54850194940cce769c7c1f14c7f430f62aa9a42b3722ab663373ba659779a0fc574beaa46099f135d64532447bdd +e = 010001 +P1 = 0e515b1dcb5c9022cf947e3fe4d5259271dde42b047a010560f806a19a294c92b9618c42f10ab5e70938727cd8a872051d5fdb2857474500a9d709de221f6267f8a078b76d181736f0ece3b55572170f6001dde2c1b445a7519085a7649c58e8f5190698807db8b18c858e34cc79213f0973 +P2 = 06cdf19639d1336171e5b7cc535ed2061fcc76c59905c8dc1dc36aafb560bb9d8a8396ecf0ecee543c5e9e9ad5ccef193925a0ce2a6af9eb3fc030d0e994b29fa6f9171cece8072f6b22732c2871946a5426f1683ebb998555844b68bb110f5f2b8892a42bbca92fe824927c271a9dc6516f +Msg = 5d2c054c67bde148ba073f75094fa0d7e503f00bfa3593128fdeb42a27f50d63d7701c9312e483a89e969f83f61c9214778fd0065810d93e75fabaf158a48c146848ce5191550dcc1c94358a17d249ebbfdc0667c61c1a3ade9d6e5bf9cdfe8c42862302df03a6467906622bdfcae4079176a4f689cb178334d1fdedb6c4f217e99a89b9cff013f8429153390074f75c09dbf98a729a576501f7e62d3b86ccefc5af816bae2fdfee0ea384f58d2372141aadfdcec59146a55036f86425c01dd8dcc853ba6e064e3f97a7d6c5be7114498fc6ed1f1c2a3e030aee567030816632b75a93 +Ciphertext = 207d2f9aec0bdec8d5dc6197a413cc5ce8e8ff8ca770a24f66eba465d66996fc333b33fb9480524085bc4e49c928da9c8355c6854ce8691b7889d6df376850fe8dd6b583daf88d1036e38c21b53e58b46fb8ec54bbc426ba06cd4871802eac9a87e9bcef616c857bef4e37482824916729924e1676f630dfa634e5151b9372db42ecdb2980beebce98d5ca6ab398af54df6737a1614ad99803be3d7513d6da9132f9b2f3bdf95894ae1f8eab43a9b38958a24ddcb16fbdd17cbc90d5494c7a545333f564923a0406a864a1a0397e417b0efae8ee84c96e2d3665c4662c856a84e2e73a + +N = 0742b992942435c282671dfd9c31ba82b2c16393bff869d455b6adc48c98b2871d324be121951ce551e7723cb5b226ec1b901683a805e2d0f0d28a6b55faf44846a7e2ba7b3767cb2df66c6024feda8538258703b2d07fde734c3303402ff6663a584f727519365232177a217ba592787ce76b29f05e8dd7457fa59293df4c7b4a23a4fc9dbe00b357c8bcad4837580390475f14302a679595967f53a68c7d2e41fb90d8e8379551 +e = 03ff594607 +P1 = 3affe8e7f99fe441bb62a2fe31bec9881169b7cb6e077b80ae4579622d96f7b089b803c35a1603d51f6cc97aa121cad894f2f7f2addf177ab18ae442e2e313c65211b0dbbcacc50aa0924926d940205c7a06b7a3 +P2 = 1f8106234392ade6b822033e76ea376d666bece7556503f76a5f450e895061a3cb22e23dd9d39ec227dab8e9f007a731fccb7acbc51859a8b48783c64b36f605cdde669844b24dfd974ed2ca89dbf649912ade7b +Msg = 0637a05af9b5339dff819ee28962f28091c4b0637aa78f7ec80081c286a881bb0bd0833b1a5f3994c401949733349b05bbe987ed905350f5c1934496d7ea4d1829a73c0c280e9eb9b3bd758350eb70355019972f44519ef99a0bbe481e116c317e14c40f60080c286659e9f1fddeee4075b350410370c0c0809c08d607552c75c254e1fafc08e998782c081e5be93822795dbdbdb2d12ce802e01f590c45d3241631f67eeb43cf18 +Ciphertext = 0555fb55babea39463061d5164cf87cf556766280a9d2a26ac6f73d16370f6349685a5da618f788bee1fa065637eef3f23d0075549661c09dbe037176fff585ecdb4e39b4e22112467fe1dab9c4d4ac404729b52f1c3f760d62d8398bad4b3345b8b5045747cb4ba3bf854f942d8078ca9524601e383e298b7da56b29624032e6f7fd1ba9296b12517200be98a595c80e65307ef2d1e6602839036f74857286c2497441eae0084e4 + +N = 64d5ab078d0e29de220e3322946184b7b635efe27b71830a0238d965760620ffd7f6b7f5dada610158c4f60d3cba9f99b52610fcd0e782141421a4cc8d4f9fbbf3e1699a14be64cbfa6a67f941b9245fb50ce5c971d6976242b969b1575de196c0c8ad +e = 021c55c83d35 +P1 = 0eefd0e87391fd212a782b90e3f5640e89d41a5a324f72fb24b0f42a7cff19df268eee85acd7b67f4ce027e27da6d0bba56b +P2 = 06c031dec5fce2642857fbcec25377cc3b1f81f37ba6a9c833e17e44f396c3c15eaac6da4cf8e1c692810f4a4646feb3b847 +Msg = 5c22caa33680235e4c7ddc93e96fb9108c409907d8d8bde595a9571a7b3b2f0433cebccf0eab71180185ec81bd805f55bb3b0454774609089c5b9be4b1239c82938f142bfe9840c57fbe8aaba8a2688251b8a1a375b92ca190203ee459d6bec563bc81 +Ciphertext = 60e9eed29c82308eb2d0cbe9616e74562afff62b3a281c9c203cad33405ea612d1f780604a32189b6081895623520ef9ac51a40afb266ac7e27a7f02b89e1391460986fddf62c01c3641991a8f9ba825bb3dc7b261f4c433430ca11b6c2943638d151b + +N = 0f23465f3f1a32dc51a2cb935a15c803078912bb085b11ef3cac3c19375c2ad483a93661ba91b9150e8e2eacaef39281aa4f7cd7efed35dbfbf0e11bd2bc0b019dcfd41a5c21fc6e73fb752c3689136886677e77719605bdc5e464c10e017c728107e9d5e5bff7b57b1874b983864ae244fbcd9cfb01dbd865389fbc4cbda4cba04ea23d157cd079b55b75afba6925869e3f60ec71ac58f710258a552495946083857b6dd12a8641f1c994aa56ba074246e3a839c04ec6588a94f448e822817fd2d5519298cdc24d2b4c99a9a6f95123b72bfa3e9c30b1 +e = 4299 +P1 = 03fced4afe66a5c5fe1c68ff6c6ed06d9c65135c3d33c09356eba0d1c3274952c9b91636399c7a42ef34cec191a99a79a6567bfc01f2e9f76023b20d656868204b9bd902956e4ecf1b2bdece9397c00c09fc1e2b8aed1e0bd4c6588193d05abcb7a55aa2e876c794e37ac243 +P2 = 03cbbc257f14ae5259af4e3d3dcc0cbac4374b63451afa3beb16620ceb74afea2c37a86e2d794408b77dad0bef58d1d222e6965e5a1de84cd58a39d7385dc672de51985609627c58ec0995d210d105ea793a0e7950ed9b63015d787250297fb2fc172e2369c381747c6c53fb +Msg = 0be39af64160063ca3b1f63d4b4b2d126ff70422c6c7a7e843888132eacad8cc382ec376fb9867755557022259ed8780ed291d57ca3b36127b31a54030ecbb77061b2e24c3380d074177713eaac85634988a0b5a191a602f04a3a5fe0890ec772754998a9a02ff9516e6069408654eb68529cdebc301d2a9aee9cd33c75f0fae7d69e2a6f461f1a0a874b06b4e05dcbe0042d3ac814c0bac67b2204d4310f543766537f93fa3033a99b345f4f03722611b3278834813babc99be45b5345b3812efb7d4ba2bb9df067ddc26b597bf3fcc30a61f612f0192 +Ciphertext = 00a8b49e08c91377c6d7d546726ec3944f182cab6e12ef32a2143dbd9aa6d349fcb06f2ac36f13e9b7f23e5d4b5979ed50275c028465e7aa17d4cc2f180f9edc9cf8f8726c87e594b114b88d3d03c4d49e696c999117cb6d61a450932dfa26d0011079eea8611ed146e94a926c01f1044f948ec6af7c37b007a621d01d2b4850aad6f68c43a6443bec480c3371101f696317a4fb2ff71a2b339bbe5fcf3780c45bacec052248ced4041d1b187de4e083893311b0d728a50c05fe1a61ab7b4f312f28dca11aed1546bdc98dc90cefc16b24df9a1d6a060a + +N = 018e03e236e649598203067bc5e706d44552a4408110856fe30fecd2651288f597715ae13616708feb05e8e441bc72a90f4670d3e916135b6330192c2078d634c8645ca44d +e = bbffd82d +P1 = 0193371be3855347801110a4341e2adb5d4ff477260fa8b8dedce7a03d3f0e2f02137b +P2 = fcb2cf420480063341069b056852a8a8eb05b9aeecdfce8bf51f053308561f0458d7 +Msg = 00f480bc9a10e378119af0848d0cb38375a953ea7611676e890157b8198c7e128b0f1f3ce4f676c3c4396830680644daab9174bee630963500d19452649573404180a08b30 +Ciphertext = 00b6042b7f5bc495d2c460154462ae5ddfc20241f4e604f232019670dbcb29f805c5a1c0d8e446a7f444abb986f80ef07d23930e100b4813f2d17617a684dcb8809cb6d3f8 + +N = c61f63ed24a0ad2e398099df6e9178ba7d40638282a072077aa24c317b0d41a8e3bb91ce73e0a65479cf0291fb80ec86880d4b4108556fc43bbbc1191e44b5402bcfb355883930815c576c2fe30c6d2d186f053942e8cd6ed9457bb9195a20c4ccf1830d668e8f019e039241bf618977ceb2c7b6b49126ab8f3693878a6d364dc45a8bf7077fc17d8339d405406d4eca96f7526a4b71ae695dae44ca254c5686f16facdba269290675975490e3e6f20fe8b7972e09a638aed9b37d055b59f6c7c61031b73b4021374e21dd0fb7fa8285d7355ae52c61078c9a93e44544670d85d357ff3a19f22f0bff0fc23dc09334af4643771af059f5e00e13e2d3f56e15707dfb5023bfe44b968321fabb673bc9f410b118e3e0f247d6dadc04684e1aa15f37bc990831e30c46241bf92f965836323da5d5560d78ac320106219bb1f3f0176a402bc6fc79831f069e83a06e62dae963ac624be3e3196a4445df85bffed219bc9b731806c637c7c004ed53c2f293955c0ab3963c093c4c38981e583e5fe1fd8a3e1164ff1bf27d281be80c2ce3e50d689d0c135a513758eccc652434accdf376687f8624719eadd03bdd4be9e5b34d7578af0b9aac1e8170d226bca210222c813489c99ef113cdcd +e = d24501 +P1 = 0f48b724206adcd249da35e65123261b66c181942f2c76d7b9ec39d60272fd3a2a7fa9d599cb33ac0e979ef3bebb7d924ed3c603dc97c166e6883cee473b0895de752b579db2fc3bfe423e937825753e584ba56cd8ebd11a57efd975f34f90452216a617a317c68d70f20ffddab4e878789058ff8885b15d4a6171a57a180b87fc07b372a9e745d20bdfbb2ee3e2c6fb9d9acead7b8d04c1e994417e2a01c65aa78b145e6699d51a306307cbfbdd5877d4373ab2a73ce9fd6a75cdd52f8b6d3f98f39758717cde201a6d15a552a44fe1630237640ac163a079c9b8a2fd3993ec2aa96320eb +P2 = 0cf67415b7879213a40aba76d43771c8591b11fde99fbc8fc7bc5464cb2818546ae214e07f4e736a823e4a5137f8bcd09da0b019550ed7be1c28ae3bc30be6cd01251ff5c9653fbf25f0786dcb218db0a7ceca49821b1acfa3020e94d8a24b9e1f20ae9e63c5a2ee674de18f3ec445f2927f5341ae530ed89884df025bbddc32506d4d52784bb1583d25ccfd2c1926a2dfe8408def2955de1248437af61dcccb80920f562ee674168a0322d91f09f95e57acc8012ead811edd535896f9f6be2549273ce1e0bc751ee88fffbbba967b29722f4c5e439d7ce632fbda95db2a55fc54d9cade27 +Msg = 28b545e24d24b71c1087c332849f87d423ffd6dca714fff1fad9eb4579ea14bcbfbe964bdc3988cb730776d051a15f8e4497c462068d01e99ffd069c77f4d3be6da201a428332ce27459341ab7c70b9f56680a00ee775cd0edab311ecc7c8811cde8bd66e5c224ece2d15e5d9db2e22e369b812154a89c68a496cb18fd5f9d614063f25055c0eef7e70388ab07d5176472b1f078f28a6fb60f5e2ebebea3b2fdd87833148d9a0535613c3c4151d12fe9d66e09deebf8d4d89f5554f131d5c6c61b36c4708b1b771e043ae571ee0223cb5354d88d830ef88020410cbe4033e89637ac7ff3d556025a3940587fa4478006588113a6807953ee02e5eefeb387b4f372c0ef3a4c1c00c32c974a41d907dd833335256aad78d9881399ed0f6ca8aa5385c3c107582df0f0b1b1c92391e626bf678e9deaf9bbf29991860cb70a0d3594eb847cba1f71157b0ac3db0249b5057445774626fb78c883543dd8570420716d950fe6d5694e321587dfd14979df87401f5b049c0152586fb449cb4d1d5b91111a102dfb1bdd8ed890b6e96270194d3e022931509c075eed6f95d93268ee892138ea4a3dbbbd2ebe412b01caae55791eec7fb9cd75af3ca47e13b9218572bcbefe0a1eb61d61ad3035 +Ciphertext = a5695f620b1d053e6449eb8a524f59e1ef58ac663909e0b3ada62aa8c34b850a9c677e096208caedc3904093f2a436b95d5f0876cf2e5a1f73b4cdff8002577aa83bb653c07495d9597209ad293f2e7672c300dc4839a770e179bb44238c6d53388667145813cb890cf7951354637a16919f11fa6a1ae3069ba85163e407ec69dc2a60339c64091a42135e696631706a037bc3cd1b76b588cf9dd012546fb99a56173f338ec69ba6f1545c0a62ea92e89fe5ac3dc6eb169b760a268b915e92027c75e495bf4fb5efdf4ed586f76d202267fa8347ed9bdaf06bb55dfe306667bf17ef271733c5f5e02d37ba4adb6a36b842bdc2a609ae33bcd0859c44822b436e4172275f6345763845cf6a2f776995c707357b44ba172abc7ebfad9858052484a3c7978c246600c48aa03a7a20716373a9a4217f6e121118990f256aa974279135bdce7b7eb6227b30c7eb88934fa12d53f4e712046c9c9bd18d9db76c99b3bfe2dbd229c2ef20f3d4cc2afd4291e4d1fc447a3172d2735f9bce4ecb638209b147579214ceb71c48bd88a454fe2461cf06cf4e757b150a4dc6c6d9e80e49052f9baadcd8452e107c25444073bab15aa380031318078876e106596ca6f151f213f504e5584381c2076e + +N = 34051690934fbe5d980a7c3a8c3909750e2b21bf1c9ad9b2f68ea90000c4435b1ad43b225fe4e667760ec6124a8ce467cd704b2dffff20c03f64bbd4fb8345dab7bb02c4df49d2588f3a6618410aae51ac8d1afc3d1bc36643ef0aab7dee4bc039ded71489 +e = 010001 +P1 = 06ffac7b639e86a27aa6f1a565a82bc9d54d9fcf51c3cd961d03d0d3dd36c36625abe352435335b349e12f9fcbb2797710cf4f +P2 = 076ec99e84003bf0700d948c612d73f23c87d476799daf632f5b5e979b60bb0b7289dffb4d9b5b21c5252e4646c2e092eca8a7 +Msg = 0e45b4fa93fa49d4b7a3e0e3fa595ccf8f6f3546bd11d8bbea736923aabe996c666927eadd00c849df15dc503b339a202c303383c217074db32a46ab3d57806a4ae5c408cf1033752a90b9681af6c0231da7e09548314eeac8dc7d9e84e8c5a061ea540267 +Ciphertext = 0164243065e0bf36ad11d14884616807c280287d63e973d893f930679f7b70c9b1af4d8bd93961136a28a8e480317e0a26dd9e53d07db8f4c35b7a24248b658a6d51a8f38cb0f6ad9de984f12ae3d5420fcab35a5f3b1658d1767a3374c1f964ebbf549521 + +N = 02f0d971886f40fe69f012f02c4e34b765f67fcec95b2101786009eb3c5ff86ed0a74d9b16c3643d13f20f53b7123ec1a06d53782dceb0f4f605dffafb77d14c846ed8a2cdea53b32e77bf2cc0454b9e7995146abded8111c7aa44e68625db83eeab17d45c19cacaab7b78997eeeebed66d8fe23b616fa0bf0d133e81a3efc235c6f0793cfad896a9a75d639cbafb63b067b26c9ee889c19a698399791176b988915600797e371e794925bf27bd24b1b0f3b69002407f82c996cadd66bd10f35099cdbc2dc16f2dec95fd72e1a0656e1 +e = 010001 +P1 = 1f27afad0d3897e4c349e8908dc3fb099a9894020019e38860cf1a0327262981a9d163471bc9db8d862a6b553dc9615d26b2b2eefce3b94da19105e5043ee080955f97f47f5680ab29921aaaf8dcb69bf46113ab5ed5d303a946c55f8cac270c691227c79b0856a7 +P2 = 182a24abca0ea63452b08fe6807c7e8e788616a323a097dab4428763368f0c60c4ea2651e0581cd973424d9739c085a13302b171505e80278dface3d6f071ffe8bdd168916be0c80c7dc24c362fa2f11d45089f4ee885aacfc4221b5d755de06c4c063e3ee869f37 +Msg = 00b0829a9980680f8e9ce17a2b8230daeab42173e078b49efd40b079c4b43271c8fb9d573585c576f134f791024b494ae1a24d27e139bc159b401d586d67b3ba5167e2a5e36a2cdd55fcd3d876ba201d7b0108113d10d742fd26ab4604827ea0406a5df32dc116b2ccc5e6d1d9504eb2b1cbe3aeb5894912ce6d7091a4f74032e7067c10404d3f3b7209ec25df1f5ed5e80011fb9cb4c0b5926711cff16e864b8b534bb38b201db6ea19eb615f49e61695e494f6380c6c88142ecd4d0a14d4c98199889b9de099fc63cd81f531e09374 +Ciphertext = 0059269c9b26ab7a2c2c4b9e609faf4cd6d3b02ac2218159b8244de58219fcc4ee9e7ab6f04e72708a113c64c4235341855d1a250e89a492d1c0e4fb6cc1710aefd2f2fa3a26064fb32056e4e0ede1a94d6bd57f655344d1f0b7704e5edd8f0c9c2d7c37583c01e166f81695ef9db461ae8ddc96efa05fd5af9f01d49ff43fb26ee0735f528f571fb2ca5ff9b30077e97bf8b03e9e0a91d148b02e09288481586e8f89c8054ddf755d8bef6d59a492b2dc1680e5b37a2457ece3c6cc43d309e54585f7c8a1979750b6f8c1c0fb146ab9 + +N = 319c3c304dfad3af1e65a693cd65131ff4d5ac951469a7deed947102966a83a1383fa1b6d412574c307a9b4702a210092a8d83a362f32480bb01b927d243add5a8e03d9fe38cce1b91663f17576e77b355fc6bd1c3fba779bb856a05b04eb4cd59f142e46a3e893980dbc2dbb34e4231a56bcd8679189b3b68d35d5052ebb1874c94c6049b10f155fad7682a7ddab56a265e1b31142235d9061b2a9df04167f16dc798117182d3c22e8fba5191d8acb0d6184b251437a5 +e = 7d5f723263 +P1 = 0751fa0e206869215470f297e9bdafe900941ecb6e01b00f0d6f4bfdf7d3c2cca939c0590a7080f820d98a4349871bbe8419bc3cbb405db7ff2b5e59eb81a6fba61e778ee2a3dc06919871d37f86b51dcabb0eec34756e6fc2f4a463 +P2 = 06c6f3c54c2d5178e5d89dea2dc75c903d9f9dd0713eb06f5312b17ad2bb87cf1b0d4aa6b76fa4254aed9518694ebc11b5ac0e66793ecd5f64300f0c221e734aec2d971e4e4d16be5f9eb162daf8eb0355cd0dc84f3535afd45c5e57 +Msg = 0ea2a853f4a249b18cc6e8911a5647d344d4ae7d7fdceb6eac5cd4450abd6bc9502b1de9d89670858941d6d09b310a43b72e5c806d664c85118ef33af3fa9555824e2028e3e1daae86963049bc44651ec16c2e854ab352faecbe3be6cc0dc5fd64701b0aa367c47c53e10228badc1795623cc841580919229a8d17241f402b1d7cc0357228982d8b844ec76688c7972311111e9982676b0e601ba95110f2e88b8f7daef1590e28744d33ced1b666d485862bb79e44a375 +Ciphertext = 257e2c66e5064ebf3825d2d5f2b7c4ed36ba7a2c07889995681fbbff1d935cf67c127622729cff5f884b49837e7511213a3886792329182481c5df7da8cc26a78129aa294f22058e1607ba862050c2b202e254c089d6d3255340c77155b141a8b4b221d1a8a6aae298641f0d144dc7a4b1eaa0f94d640d769b4054d6ec9acde9f6f0d8eedc148b1989ce18edcbb2b3497554a60bacc34bb55870b3d5523b84c1674d343362329e4787635ce72cf871655f73bd0f7d6bc6 + +N = c2374d3cbb8c5c37483f8a1c8b3010b2f488b684a886c6e35c6360ba89c9be16633305c0b0533b4f7b665813b6a40348e9cf5c150bac31be0f07cc36ae4521b77efbd286a01daac5870718a755c7d706375dbb492521796802d9571154bd802edff94f360cf22207682ffb09d64de1b9919a49832b2a65d6c4be8d4011a2221dc67e421afbe36de2b28f23ce3dc355e33cd8d6d8d9411cc7504be0797f5e80541ebe5940f92efef7aa0bf260620d +e = 010001 +P1 = c6bec8788a79b8739c7d0b5aa8158825af358f73156cf0145a77129fc511c3c52904af1330b1ffaa5908b96737180e5a92d425b4ec8ab44c8218711339c60951d7461e801f7d3ddd1e9b417062de28f6f2d3158bc568df +P2 = fa2a7e71a46fb8f9a691a5c207f78a43aee93c867ccaf241ef9cb24af534ed4e979dcdb57a605005ea69fbc9cbd545ef43d7f22e1588262cd8c006146771a9539c5eada17d8da0fe4243c436c0635c9e355b590d3e1693 +Msg = 5f252486d8e6bf500d759f8e79fe0ccde0596fd184fa58288f376736d465acaa19a465595b5fd6542a411fee5577c75ffa786fcd0b25934ace258648c200e4ab8439958456dc1f7cab0c086f5040275bb12e81865adfbe00cb10ec4bfeb487709d25a530b3f0509510acf47977bb0ef0ffd0cc6ae0d6c33d8857633538750f488619e508b9462efc66ee55e7e14b4772f6ca1fb4eaa35770e1f9aeb2534da4b22ae5984bea00254a1c16803a06b4 +Ciphertext = 17e46222c24f9587bf335cf92fcee14154070245e38bab9b889d838a616b8067f9f14d3947cabd5dc0bc99f82e500d847bc84a0db24a9a0835d5bfd5933e41ccb1335742f2a0d947d3285ba5b3d7037f389419f4228d898289c02715df6d01b8e2a4124acdcd756e652f4e8ea6da937ddb6d8c22e6269fd1726e65fcd4a79f44cefb152c3f2a3361465029bcfb83f7e88486011e54ab0c289934d3d39d338af679d0a339a4f9fdb4994822c6d3f8 + +N = 050c4c8d5775258b20f06860f292d75c8163d814cdc48dd61c767f4e2f58291528baaf0cd7b98517cd18a3b52d4c41b370d2e02b61c79571eb719247837300e0bd9fe13052ee692125f071946f7d69017b422098321477766ee1c7a7eb6b54478abd6062441e359d32318e4ffebec5d803ce963934c941ab7169a5dbe44737e3d5d2c1304fca23b7624aaf988c49c54bc99c6192989cdd9c3f8aec4cf6533a662cbfaad60ba194db4f0b0553bddfba781fa09ade5353039de3c720756237968460a9d67290a2af3debf14301873096cfee095ec740fa1784f023d91707d0e515a901dcb04cbb83297960a62a3f986c921315f7ab964974465f33cc936473a12d1d813dc3b9cefa20ac3283a65d3e5e4b42899b9ca0a31beb5f40d31345db7fa763d6fa3f99da31ed20cf393a5f240510d51d906838e32403b0f59b59f992ef1189a6d8b0531e791c2fb2915335a505a26167b004176006d7b53efa3795d41e9c8aabab63ba29f23b7d16a051db2a334dae0e95636b6ed0fa4dd10be6f1a0e20f6819ce974dac34fd379e2b8a1b2985c7e3ebb5770df9b43ec2242dec722fa7d56da267848e414958fde91a761f28499bcd3525810b297626094d6c9291788e1a9f6ecb3d7bda9517e1f463a5e2c10943b820f8657347f8454afc3885b47f91c12270fbcf52c82634d98e4dafc2fb90576985c9b4f7ccbf93f4fe2afb14c92d80b5fae796056a487c8b8a67ed921b76c8ea8e6e81d0523f770b772952264fd7e2230a6dc0cf7ff2740a01f203f8c26adef9421f915af9f74aa49f468bd3313b0d7bfcdbe00b8cc9fd594e8046e8f6f9544afc8d7bb650023a1ace9ec560b279f3d18c013deb7cfbdf487fbb7f8aee576420435907d0c4babf4d1017a46e64ad05bd8a7c4addf88ecb1723b9629cdd0737822decc6a02c91e5e8e8b65eddaf5b63dfdb2f4c6bcb42bd44657cf754045c95ed51b102f250d07bf1a4e85cc44d7f1cc477859d549245985b9be7e65b502607403a89b5fde61e90991fac55bbf37780e2c40205ac597a1a5eb6e4882105efc781fd327f65e8c0b9f6cab8605cff98242a356303d76d9144acd3d86d5b40b18b199dfc5e53eb614b971d0d964f9a9bfacb4a22eb6eab2801a8e9cff0994fd847d8abf0cca0f2d223f27d67af08b5a414d07f0417aa9284ee20ab2dd2c31e664ccfe06c8de3304044a995232a2283192317ad046b169bc20c33b3ce6121923a9dee4c605980d07c83551cc1f1dffc6eb15435d21ecb890db29785d52d1d5bbfc86ea0ddb38e85cb254e6c834b5936b71bd5aaa989a8d1a15d6518c251602f8c6381334faeb681150796f1c4a2d3cea60308679f3967c3159fee921924ea33436b94588f377f6f78697f6ef28097f26b52cd2e15a0b95002a75eb535f109 +e = 010001 +P1 = 03179509295ec573d13c745f19b06d17c163a83e432ace923fc0bde6069845205f9bb6b0d12e14f013729bda33611210e0ba350e4a26b152367c958c29e42ba336013bcd45a8139742e577b6c363df2025809f84927b3a9d89118ac4ed19f88d85e3bf8b183bb222a99c9026b376ed7bc8bfefc77ee36a9c5f1f297163cd24e428e92bec796d4c6e8f59e10e6e2c82e6da82749ed5ff792d764eb0ac05a15aea7f5a8eb7d07930eae8c16a372768cc3d0c2c475e07d92f08dbc554a4cd1590b82f9c13f6d0baefea2939d32e198ddd0d99c08e9e13edee362ab9a1d85dde068993e357de59e1084bcc3f3c7b2548c2c550ebea7ee9999f422c052dde4a32d33a694fb753d1a846024215c5e4cc7731e0b944971bbdf8977013bd2027500cfdfc8d1bfd9e8df34338262b862f8aa390c2fb7fcacb0e4720494461d68dd6e777817f69a2db0e8a161b40258b5dfd2b50af807df75a972ce56318bfb1679cbc8989f7a1a9e5f93dc9332f6ff6274b376babf6ffe4a1b33d7d26f2553f20b7abf101e9df9ded8fc52f13d37c09578e34374763b970978b64c64731bc413ee0cf9665c1b4f86dbb7c879cde5ea691751a4b033420e5e142f860036331e93df36f380db3ad20d0ba60c5a6c9bdc8d37b0a01091681dd0f807621284117d3d454c6117b906b3849be3e336aac25ac5c4c682f171247f2ab862ae3 +P2 = 01a1eeed027358c4ca259771cf09308d0017a2cef9f04aa9f886bcfe624fe697623fb665c8c124521e751b67c4947d1c77007b6bca451e42af07da1769f8488b91753b3fc1a40447fb8a11c95568fcd456118ddb9e52c52c4f69bf79b7e7b0779debee81868c230e6452235aa97a8ab2de45fdc19367a8497f5f408e9343c026e8c9abfae815af4babb868a581e2d051fe691b4fef53ae5f5b0af376b7d5d84b8975c7885343619711dfe4f0784719996b97d7f71fc9aa6b21ba8b5a9c2c4c5081b7e1d41efb58cfb6cd3671fddcd6a3ca27de56b6b68c9d506338ab190bf1dddb878a8e18ec0da13a2ec023d6ece35e43accf5f5e4914084750bab674497d1b0c6ae023736eecafe588c4b80d53b241ce1f5c56b2adb360e733fd376400269b2502457d71024832d45bbbe0c0196eb6ffeff59a27b20a347414ccb40368ffb03d2a9dbacc125a242f24379d88d4297c68769cd7de22c6dc1a2b907845ac593455fb7b932bfea2cecf8f3ac9779ed246ed822f4c00a56b722dbfed0a3a72d968cb79be8b3a8e1529ba725230de4a17773b6269566db2c4c0da335fe203972a346fda169065df4a5c4a5dc41dc551c5c09926d69a1b1903bc0edac988f16fb37e9de5288628cf321e5b1ae6254febed2ca7d422d3f0a40b4ff2c26cd3f28ec5b100d2e074b2549d314e362f27630f3bec55ed328761dc23 +Msg = 017e8198c9ad9a2cdac6e4cf01a662614cbd57d0b4b177a52d000dded187fafa2adeb2b54b6fcefdc674407ec03f7b36896a5af08b5d55583a94dcf368075dff426d657aa8515d011d53deab3e3c1d4dfb81bccb3ba1faac854cbd8af06c114b828660944f4f0095ee1cd223d293781fbba147eb598020551337730974339f1e2dfb3d88bd0cc932514832a25143ab924b109062e6f96e1b0fe0dc1629457d12974733e907dd2b2fe84552070376f664475dd60620d773c55a97e18fcb648ed6d4d7bca96aca57d81a754916cc3e8781598712771f97b700468f2cc0a018dd5701ce7fa34e497fb2894e67affa2e2782d083c744bed1a8842c0c8e512c082b9f6b8099bba30e7eacccbb5d72ef20dd6c6f455a063a64feac1820cd84c5732b62715d3945412bb88aec8229b1e1a14bf19ba4be604211464d785e5b6f9ada929800fcf831e4b48ed7bfba617283fb1b54f26c492cea2ec87e59402862bda68f27d886c83e35285644f4d9d36311787d6f46cfd972d889162a402bc91d92a884d17dbf0be830494770c8d8d03cc2dbf19b901887d4fb295358840b05946ab956c461cca83e3aed1222485c971e643b268d9ca3ffa6987683cb97976b75a205ee6776cd255cbaa3349bd3d1e048a57c5f781169116562a1f262ebb2a0b1adc8611eb0ff678861eea425419ff612197f46fc313f5cb2affbc15460b853b50bc09c2bda25cbcc9d99f9c8d817af122b06afc3ae4cbbfa0ec0def935dec04a7caa221ea1ffef686052f92fafa5b3564322225de3832f56ede4a2b7fb9f1d3d3e8b44dc72b15ed6a298c1f57b3b82f1687dda9d4801cd06e3749c27e325d27a4128adb4aebb775a1305f2a6afb3f340d4aa96ecc40bdc4e6e8e36e840ad753b9700cbee0237ce62a48cb2b81540a31e17405d8a1d017758be85cf0eab297be0215277e2e48b3c7b68dd690971c2cfcad0990384b9c664d7e40f26d48b291550b623f6179e5bc53e91e7b85a6da333a0c870aff06a62e1846febf1818a392639f99cc9a8a5d805cf91bc40fa13d413552890abcb35eea4cc35872f137b2a4ab611a7bb105ca7c33f4311572008ed585255875347cfb251d2fec87e9ec0059f28573d0c649d071d138619ae6a6da1d3585a606efd0438c81ad3347e1876f9d9b853c0c9b7db904c4e79ab7f3082d6a993ceca075104f56e03717583ff74dbeacd12637f8d77f90483d88514d549d1686101e5ffab876765d4515d19cbbc85857bc093f30b22f5371767993f44a048f2357f5f16ff5a495ce62fceaf36b6c0caf30300129da4e392906fea94840cec2e65e2894b738a4af36b3e1a2c048baf16bb114158bf1319d06676482f9de3e84048344d6de4022a007d509d899c37efee7db0080c33e71062fcbee389e0631cc4075e +Ciphertext = 01a5220eb5f3b6f568a4b8b516017efdd4a37c2825c2a2bf66e8ba9c4d23cdf88336bb8a246f5a485e4b03a0943f791bcb5938041d356cdacc92c24205d4b552b3c43160124397a4dad722f75c21a7d84a2cd43dc049fc97bf8df4fb3f397ed3ef6c93e0922d32ff05c835841cab6dfcfd8d60c96ba3f9a605cba5b60a60dccf8c47fbc60d1a5145ab55b9c309f23048480f46b17e05c89f4d1c7d513ce0428b6e6aaa6714efb7958b2d8f90c9b6bb587559a1c6b9a8a1e2cf385a25f8d7106b38e1dc386b22a7073bd1ba96a84382e8be73849fe976e4b17f1375f1c5a682a32a557c45f37fdbe4bc3e3bbc2ddaafcaf23c5669f6f04733d4ee18c37031f3d7f2cabe09d117af5ffabefeb3f4dd9ebdd912dca066b5e4b6c0e7743bd18a63c0e8a0ecd277a0cff5b013536993b7a69d593666b5be45fe8bf8375014c2d317b15b3dee85535fe602fa84a4080164eee6be49689fe02e4daac55f92125c3d25a6c39f821644523e81943b5d1a76bf7256768e6b587e919962a8c0ef148033e1e4482753a6ae19114356909440c7a447a5e8c6fe9db5ea9cab7f0c18b92d2033c5461ce9666f80f199a6ce2f106432dcc7d358f3fa229d00c394e2c242602e61649b2899b10982c65087ec27b69fdce3e4295129f96eca4ba1991800691009f5a60df36ec0e9f1e5edccc5b2980be43a20e1dca8cab50717d56077ee980e66b541f26b4e68e3d4c2b31c2ea00c5ced21fadc07968a35ab5d33ab1b4de626f66e6c88b32182980466b4e2722fdff2ff37371ebc4ad3466521dd02d0bdcc298a13b9be75814c4b5f70e2e2705b203c1938d1526227fd60fea406f9fa9ce84f5691b5a26dcff49d5e6104294ae990efe3c57727d1446f900ac149ba1486f44af207248abeb016b8d3b90227aa6b0e5915fd77a1a2541ec8d1e167f839534f9d48e20f0ac4e43ac0b88f4253db7306307e1252b6d3c087a64b9c437af766abb3b45757e6b9cd36549d9c4f810c2a3147420f9e145e2d20b03fcb11b2bc0a4ee6c7c5d4bf559eecc23496b4a2030cdadf27a473deb7de0ff1f74602d7e61504f85e0a8d764202d79871c565f633d012f03e1be422db38c71c84a7dab666041765269da0c587f1f687ad63236dbf0eab722c99e466ee9ef0faf112622d9fb3379bbd53c45ffc517f90e745ea752f71ce4c21dda64230c99248a3d8f5e95f12017c893e4bfaf9a1ac7f3c77d1ce89086d2cd2d071e349762e0be257bcf911ecba7689cc3a0300bc111ef07f8186b4fb5c3032324e001a79968bca5a9d880da119f8c7130850d6fe88dba1de0197d56ed349c5cf50314cbd999f7995360d24881a094576efdb5e3d03d0b56dd1a32c4bd28b84254e04ef12687857635d448dc3a46e93e1c204c4d87088cef86494b593a2b8 + +N = d072e944707cacf733766a653c6218e841461480d005030352d305434b376325d2897244bec0dc1732b7b92399d99d6efa39604138b4e8328dd0a806624d3811d34f122fdbc7561379c329f83c6f2d38edebf22cfe5951ae9f59 +e = bcfe43 +P1 = d9a00585f759380718bfa99e5b317f66c73c8f8a6b07af0051b83fa407e19c2d55711326683f2b28f9d2524be3 +P2 = f534a8c6e91b4f436021fa73d06a7af47cbd72783f218662705f90caceb561998cb16e8b3be0dcb03947448493 +Msg = 0b3e736d57d3290e84f17e249f97b7071acb7c85c8c1a823dfcf8c732acd843eb9276b5dcf6d990c8c43d522fb7e0e3872827d16f2c0954830f5c0e993ee22e7e614b3b5e123e9be1e7c77073ce8c97f4253e9381cd51058b298 +Ciphertext = 0e247df91c1d1ec1baf46a15c1459b6304ba898bdb13c6ee1d7dfb4977329be06dae06d91c6b0edca54bb077346ca5e238d8277393259259c84017783ff7a053be9620faed04b4146467f40f993a48ae9dc628cb62f0a9cb81c7 + +N = 0b92af8d9a69c57c9bdd850fd188d592674ad4d0a4899b7f25f7dc076dd35c69664826eadca6a2de1c0516066fccf48b5bff11a0e2343a9f98b255a46e455621bf09ec7793bcdc341224b504011cbda180eef609fcb6e003b2685796763e72aa6498ddd6edef2ce3b57935613d19b9256bb39650a6f226457761ecbd85aa994915b014312d4532d65a2c328e226cb5dcb7624bfd4ed3956dd7ca2b7433ea8404e9a7e52a241baf7d1b826851ed +e = 4358b9d7e0f55243 +P1 = 03527d7085d3dd1767ae5bb4dd004ed96c5e80be5932abecff2b76d898fb9955ca952882b8477a4ccc32d046f5fe5fa7d0290c80060e02c8e4e99316dba52e9e63ad2a051ca52912dbad31c9089bce5b0b4154b905a207 +P2 = 037bc6f3cc3d702239ec57068613c9e3552b1b47ebe193f533255d24e2919224519860c4da701c7590958d5068472b100b7f491eccfb7b1f93fe89be8242d5804160102042e44dc6011a1aa122c5176f6654437b6b5f6b +Msg = 0248a42c7249802b8dfaadf95ffcdab6b3a8d3c6214fe721962c26b982dbdeb097b75f37546e8db1f5a5e1c009179be28ea91384e5ee74150a93cb49df99c3abef256f8c2dda4ce7f99e6ad9ceba09cfca30520f20bbc261f9f6883ee374c9b0e9b152fde3e42a3b33832779dee5b26265596a0fc8fa0581d84f80db0a2039089d3df71ac2307d926e33751e3b5d91e4564d3222a2b8765351b78d79fb6b47340eeb86ecc61054f9d4dd4da9d7 +Ciphertext = 0491bbc218660402e6144df188f9761302a2c4b9879730ba6582db8ef0509f1c0bfb006862928732b51862424cb7cfed612504dcae4b60faa4eab1375cb95cd68ef2f5d0303bce766f45fb0f172eccddfcfc3e915b75253c1d5fe4fe55eed898450c0e5dee4623f81840455a3a966d6db011824422aff2cf2880baee32224c0992374873d9166523473af7779e641f4d0e024e531e27f560d62eb8ea999bdc4b94547f65e330d2a99213e6b601 + +N = 55fd45b6ea85cc5ac1f918ef0d933b59ab98a45d0d82621b8549afbac7615c432ba7c5aadc60a5671ca6b2a99f6c85b7a6445fe719e232bab0ea2206edaa3f9f0602fdc4b739a4e7244358a36909e8574971bbed1e02da0b4b20b4dae66b9ebba15ca0e598aa5750932cdd0f0aea48e842d3f356885c755addce35b40a3b91dd755e682781aab4daf3ac2650d79a30c7de158b0498ffb85a1158d63acc3c4e025812eeb1e32311af904532a4a3e3e67dfe278526daaadaf6c3b91924e6b7a1e27ec1283fb5374a0870889ee7174cfbe99b591458c3c92f41fdaabf84ebb169e7441fdc6811d675234c5834806c2d50eaf442e9b615d330b18313d8789c425b7c9a0557515a4ec8452eb9fcbf672bfee57b38d7ab1755a4af9d4004291566ae41460e847b0b3a270dcb2f4e34a40338143e92d2b91cac611f978fb1f0fea9d30ebdb7fa2a753a94579a100433b33bcd40eb5f47d2d1752238724ab6bd74d6e9d64e56643e78d3d4a9fd1f28c1c5e522235f0082d95b5b973861ec15b78a9bc970c471cfc0e24e9f93b1dbd934ab7ca3816955420020028ff1007cbf0cd499a1358d366bececbf52c7eefece415f738986a506e85f366c7f008d32e7156d0a7120b0644fdb24b3c8ea664f7164f226be06ce0ad2db20ec3148015c44c39ca3139e4d +e = 010001 +P1 = 0d033e6518dd886106a0e22b957d1caa3a504341768d47ac9436be1bc01e30e7058b5f0f4ccda0b5d94c74cd5d0879863f30570811178fcf455d6fa55b02a82ebc9cee0c819178bced87b20c785f42f74e7e40c01d06df605f22fba8c85c7b494eaa73de36f00add71680d1d7828ab99779430c0f9b56407d1af83f7bc77c265cdc7e540fe704b1054801cf6dbdf9b290491f0c4f426939d9722b07b84e14827c20fd324815490836c08af121d54d2c9bacec4f8c398816e7429c027dcd7f8206c693f7a5184364486d27d5a5eff73a7227be9798f100cb2d7b4ab6f069e97155e1774cba9c2fd5199a8447b80bf000a1f +P2 = 069bae071ff52a366a996c9ea1ec8bec3699eb9fdb868f870b597ebd0b051137832dfcfa2e17ef3cf0f6085ce98818dcc77621c464419df975c0369f147446c64c95f8c36d2b69a28a02f070fdf18c6a7b945502f50a18715e86a2193a5d40ed573e525017f3105b4a2733cc3a11119f86a7e7752a548b8827030e3698f371ac349b7220d55ac466ff9493d4df2a974aa816b158f7343a573afad4ccd94f432ea88fdc0e24d221b54279f011c5d4659ab872a03f0c7850dd6c495e1359504f8e51c82c9567b6c63d24742f4aeb925a20f84d9303ee980bf2a5df44e3e81f85477a728eaef6804725eb02484ea57d6d6213 +Msg = 375a37df09174280c20226948beec35b16e10bc2092413b9409b8ee80748aa0fbc5fb0f2919adf08f4a70971bab07a5a53460d2d7f5a44b57d7b11ba43745cc178e70d6adca2282d18f8a5e49c198844d65feba0f647950c85e241ad9a3856ddf49bf9d502815f4eb2267ae04621599471467019fabc68a4f72e4f3a804aa4d88f8649f01da2e420facc89712c4b349e35077eb7569d8e2c78cce72b81c7e5a2086b53a73904a7e0ebfe11495abae69ff3302170971b0c826bac792204ef7d7eadf5237ee98d0754ea59632ec341237370281aa262326e5245f62ba135229a18955e1d551cb7a00502630e2deb3a1668532cae5e23b36c6dd952bd1fff281c93f017cfb75c8972e9c76297938c15faf5ba685b2498bc924c95f7925d5d4865f0c58064bbced27727022b6e5e12d7872e9da706e92fc1366ce75f58cdc91e28915c54a67ccff49e17b0d52db44a6104517a0525e1453e235f3b949adf846805c44befba96449e08447884bcd7e2ddb7944a9bb9e3cb42a7e5ba4b690f2cc8b3c60fbe7ec9653e6edf3dd6617f89ce8f2b6031bc44485452b8394626706bf7f9373e7bd0992d2edca11f7d3cefee927938272ee8bab5489b436072b9c3059e024cc344189e152aa567dade7fb28625082723c702d729bb92e5374eeccf8e8b396a09 +Ciphertext = 231c70000d0a75c838dbf2c41f65d4b0f9bf192207da83ad93432e9f0b269ca034c520617ae8b6f6c237f47bd6843fdff6a6cee6fe4a822e57986b9c19b13b568d7ad8329998514dff64abe1e01c7ff3eed0cbf2ec58c36c9e0d67fd66d46babe5f523519c2349c4dc3536556e70c82c2851f7bcb26e9110842f7d3d32f28314011ef8e2349935990d817601c244d63e5c05075748acdc0e5863692ecd4c859c0b2e28717a234217d89ee41e1bfd0e034f1d09d497d479149d4b98817fd07eb85d9ccd1e437c92ebf574b3853497cfe64933d2759c530364d52ebc66c4d739ec6d2b12171ee043fe12babf6855c2b84c848a95cbf49feb73bf76c3dc451be666e74335f87e5e5085bc14a1400eaddce7609d81256c375e17ac9ee0f6155c8b27205999bd69af1fe1980a854c99c5821b573b244572ffcba3cbe322d950e7f2a36fe11b7230718f5d08ef8e75e2ec5de6927bdab96502175c3ed1976da823b13e8571fac8afe870813ea56d1656ec1996f738472a6fb2a438b8ca53f3f906c10e0b2a62dbef82b81ce81cc2b069c332e4685fcd9359e9df227f665e2a43852c3fd8f63ebea9848913cea7f17606da91fbea2389a2f69759c206ec9315417110ded3030cc43c7c5051ac2d5e3def91da05094de4589cb792317ff5c0db383e961b56 + +N = 0542aa8a9159b6768c0cde060688a1a4f8758aaa16840201f9cfa2b22c1f49b740fe9834ba28934c05321612e9ce01d10db10e2cbc955394a5cbd36acc1ce09581983e7916d904b222a309 +e = 01ee215e2d1b6d +P1 = 033147353f7a17a4574a618113a67d95a2626ad7bfd59e8cc003e247f7022487c7441d1f613b +P2 = 01a5d2a17ff4a665b4264b032e254bd67b300db032512201bb69de4e3c89f83fef55743d088b +Msg = 0326ca47899c3861894bc8316e31689395902fce35570b24d22f482e3eada9234b41310b956bc8ce33d2036d61c2622e6ab6641a577e592f4c6afc9b7958222e397b6e9c5419c2a15ab548 +Ciphertext = 025da7fb404af6f3f94c805d147772c607e037a8843ab031e7068b8ed7a5b7f06679de37de3d0a5d77efb5dd2e2f2854b490fc487cccba052a32e9f580242a22e7fbe3804233963315cdfb + +N = 5ee95bf8def9725b5069058e7199bcf56a3acdf02599c3764a6fcdf0d851f2380b394f25a4f1517cfa6cbd8e2701c8f78572c4a6bfdf9e14cfedcfc8604f6a6b5e434b42a794f2fca8a88764968bc56ac6a3f193be66b56150321422a8c9fd58c6d3aa4040d6d45bfc7dbf1a3b67c84726f17ddc301e5a37d9a084f402367e003483d0a8034495add6dcbbd0453f3975 +e = 010001 +P1 = d32f3501852575f9f8da6bb98048a3ede7ae2d6b15205dad4071b7c108b0529fc3e45f5517391e3eac72ed14ff29d17f96193cc94ac705df2a866445610993bdef2f4be1a330624f +P2 = 730d850e82e07f411d8798d8cc09b1dfd07b3e209463a74d067e63404d62e7df4a3c28a6180ed5df41a7b9bf314fdc3a4a99096fe87ca92d5501ac5e66c948ed2ce35ba1cc5c4afb +Msg = 2c05775741175ceaad0f3502aa3a7095a80b8ea063dfe3d915c132d066b9d7f7ca3321b451c1f1b4acc7eaf9a4f824dac319515be11a9cddd8871083e344702c56d4c60903ffc927ed32080d580f1615ca37d9637a7c16077ec19bf390dd49622903371922231cdcb6c6a79b1b157919b561a681931b567ec5b61c908f47299648c9bea0cbeadceb58a85167ba126f49 +Ciphertext = 4310755da7bbc7667e7ac5f2720b838aa02299e4ccfa6ad140d0ffe88b0d88f677701f5ec19d0eb068ea83614a6aa9dc29049e9b5a6a42aeb1f3a685c8ada850ccf093ddb9b445954d0272832a112ab01d78db8454421210a1e33f38f6f8638eed598c7114a06f0da3af76cdd35f2ea7c9f5be939a601165ee607ee7acda5262712993bc6f934f7f77187578f328237b + +N = 1477feee24db2344ec03ea554bca5c2829bb5279b3108f2f97ee7595e02ab4b0dea5d1d8a56c5e4626bba4d815eea95614e34151498924cd5922ac7dfdf111512fc902068d7193f46effa704bb165167d1f957479b1f03b7b50d48c103347806d8b5a6e814ffa86260ad66b928cb01737a3a93da574b5572d1a000c9e88f0e32b4f0504ce39dfe4e259f212ba0144ce33d3658c262c75c5f57acb3435a6d7e987a6d9a268ad862f1845537689f9fdb26c0a470ec7377f6bc6bb54cc1 +e = 02c6ab73 +P1 = 62fc5645ddbf15127bb65dae2d187e0ecc636faf8b199ff2d5681afe5b65d9cfcc7852b5d0e13b808d1977048a2271fae9ba58a1003157211932c1053a1cd1b9871e231bb60a1fab6e653e0d51d2ac94c2728bc1a37041f67532a8f1d4bb +P2 = 34efd8cb0464dc4a730fdb27b23d45f155ec520a44ac40319621f92c94f7d63a248c7f2e56734c5b9948593fa52bd897e4236900e6758b344989c12a43919f81e3d09ef5edd4a6d22485ad8ca17022902514f7d2240853767617df26cab3 +Msg = 02480dab0de60d5ef7207436c7dd8148669d0165537989c040fb7ef53c06b87bbde0e7381cfc3d83b29613893c550bee9e296f916246088170f01e16edf83911af906d450fc6cee6c43ce5050654d388c9d3d57976768e4b718c47b497bfdf028dd314d110859b809a9d81ff1e43599f57842bea158f5b44034f427c2f3d9c7c76c03339b6df15db1579e8fcfc463f3116ae28cc855628efaec1decc6a9a937bd5e3da81036875f0defbc9e161c7ac2ce340ce1fafb275b9da79bccf +Ciphertext = 090feb0e27128756e6836c0138f5c1b516dd29a4da57c8e14d8f6a0d368310b9cc6bda2e25c345041fc00ccf513c9c585941fb3f284b3a8c400dbea18740ea999c204fcc2dcd39898cdb3e907f6454369855b872038e8c2b4946347e9e876ac480c89a555f4197f5630882631297b399ec52ec39bcffad57feb82466fc22f5a154853e837159a561041d92a277e77c7972e5dd255ca0a4f0509e6daf1f302fbb9b446096327765951b0fd6bc73aa1f12d566b64ae6785e892086e46c + +N = 1493044d4ce5529889fcd4c48e6a64b13fde52f3b46ce07d0608ec22da4970f4bdfcecc7f58b4afd5618c3976a4e443426dffaea8f751452c8017bc5677b8025755b4c99fdb058105b0c9176ff20402eed63fe08fd749bc69511ae93beb2fc53eea452f9b53f77b4a6f147094725cae85796242040da591adf5dc55bf54eae7748e991c3923e2e1530324fb91fe30841f6cd33492a4cb1da095c84b40e640f8e335004ae39f12ff7fa898f75123902fafe22be2ac513dc6d05a3340f295a5abb984a993a3b79bd15b2023e027e8bb5aed1f16bb2a7ee251c5ec835 +e = 03 +P1 = 0ccdb37e32438df76ed8a25dc954bcf29b0b6cb70033970a0e8085e4a01f87ec3fe043b50e5f64d0cd6c6613cd9a9f1865c2813f428e107516e578f036d23d6333a6df8094e94131a4dec51920a7a081221fc82d671b12be3898b6ae69fc080629039e1b4d0a96734a6f2a6929df3b2d0e08a1e32e16d8cf +P2 = 019b5f5feafea45e9d4ff3af500f978300bf441c0693e3ca63efdd5f7bf58408d00c80a2b6be9a97f20fe72f91b2c48866feaf3bf070a07c9797b6f91cd2e3cdd7afdb4dc149a6b0e4c73dc6dcbcd728aea8ddcb20aa808af94574adea6f97d964e347bb +Msg = 03d8a4461140c2a1dcba1b17f6fc52ac2a7bb1769b038c69e110d28cc911bb42f3bcd0c0d63504a5b2b9430f1ad5eeeb0fb92c59ff37ef5bfe9a07338b7bb6a74c08ba49d76e93d7b3f439333f3188b945378c0ad1b960cd056af257b43f0a97fb5525c544d9098e130f8014abb559031a366effc2ec07d463ebfa7bc7caa4094ab56fe50289714d129ef700f5866388c78118d375d8ffcb0513334544ff77c119ea1c60370ff28fea54bf322b7cade2374dd3418fd8d004e37f38935a39480ddcd0581c02d6eb9f66c5d6bfcd7d4f4f7d9bb974baaf6d6e4a50bc +Ciphertext = 0bdd5fa5e6d5e38fc685792fe1f5bd8f87cefe7db5402f0bb49ee96f2a2d2690d45c7134286ee2fcd0cc40f98e81f059560da3422d227fbb812c54235949c33fade149e695b67f6596df218807e73017b106e61e59558dbc778941be2ca7f84f894044a30549c9d13f6e9a01e6df5f9344a16f67e528bc215d36b42e377532eb9df96c8bde5b48cd67e4711e2170fa4602c6c1ee112018321dbd8507b719d965743139640e667e495f9e25f1aa707c064b62fc9e6ba8ec9710b9d60595ebe42ab0d650927690c35940c172065530ec7577b4547d9cce4cfabc9b5e + +N = 3bf7893ce45fa75f02795fe79bf12d06051dae363952e9c9efb7bde03ddea282315e788ab92598c4bc93bb87f7bf713ff2afb3a78a9ae658002fec710a45bb7006fcdb3947a5221b86f6306f7fcd95eee0a65f0d92f57390db1b4c36d43d1c05128d9452ec963cf5d29beebc20ae72a0bb8617af77f20a5e95e709fee08060c6d2411e391cf9428c2fb05ff4e47d65ffe99400bc03ea79ac5ab7ef590cb3db77dbdadb6a25357a4cd8a63188a6f770793751f00682204fdfb19062a13f87b9f3f48208a48b83e2780792edaa4d6ad67d9cff2916b96b2a5c416f4c2fc1a6febc4317e6601deade1a7b9f4f193c6aa87039ad63c562cdfa74ca1cf5f7420f5659020c11ecfe52fad0fe6628041da271cf21b19f0eb963d352f3fc241c0c94a985f5c44b6f33cb2f37606df6a6883f1b77fa740dc69cfd19b37fc7a2d430d76ed41c17e33bf00cb43565d6d8e2e3f27067b77d9379c2fbb459ef79 +e = 010001 +P1 = 3c2e83a1e449032ce7c676e54331d1489f974f62c21fd3e2ea9d6b7c4f183d1a37180c65b297e3288824a40dfad1ca1799256925c580da95549938d2bee985287fac9d69add0a1bda96cac6b4367060bf75c10e047c937e670b7d03d65d14287efe5b81cb81abc7f451705b6630d7a7186137da36c2ac26b1e39408729cf0d0293308e406920577bfd36697903a6aac4aba43fcff887e74d4414928bba41ecf556dc6851870f4e598856145168226012e15b94e5d6bcf34b440f7771ad047e288b789f +P2 = ff16228cfb9a0ceb897228b8eb2e85f4fef4a1f97ca037c35edcc5b212852aadb5aef070e71194cdc15b97a21c371d188816412e3f629bc4bd02fc0e27b322b83caabbd09efde0e1fa4d4ff718b41b0c8147fc2973780e8c5d43be0b0c3f580658e209a1c0aa1182cb164875c3abd8752015dfe058e95fbc0d61d837cc69e45558117b84f8e85f84c43a5079f46a1023e431d848d0e8e7 +Msg = 2e5fbc4017cd5b2958491f6871fb3020c74c1254da042fa1b3fe1937590d3f29e289f0a70f5a1f3dd33c15859f058ef607660863e9ca68afcd0e49f4c517270060f292172dbeec262f01c4c816081d5209ee51f91cc9f69f1f9a23b4e91cbc41a08213b4696604905fad3cdbf3242069489d59717b94ef3b75a2d7f3f14c2887191af06fadac733c33c9ca45b8109b1a07ec8c4eb3e963a4f744f712ff72ac4a14e4d5d488b5f842ba08f577565d4ceb20641189ba74cea9f116da5a6dfeec5d674d4de80b8369ef22f9c0e5d8459a48768f84b9a760f6379d4ee5d11ffdb71f4fc70072e1e7419955528286a44522c30335d58c675226fab9e9bbac3dee82a0cb5fed49efad3bbb3d1415c63312b591606d5520e03052b5f7512b2953b2e0a331bfb5141f676744d35431ab9732c99d46cc0cca98a9aad9a0560b9382c1b1daaeba65cdd5aefa415356a93301d6ee60ec6c89d5369bad8d8dfc +Ciphertext = 257f0fec383013bae18037cb38a461308fb6bc26532665d98d4cbeda165ad08ffe405e7679d8c3c21445b2348c20a12432ca4204851cf53f77796a17174c08cdd0e963dfcee3703c5490c331028d24c41c82544bbe3b297e1fa361d08d4e18bc3d1d61ebfe58d77e19e5bb261b877625d99440cdb4f7a172072b36095ffa4f86d05a562fe3e13e54abe439c4c6d8c64c81042b0a97c2051e54c924ca1df140105c11f859a4e83fce28a7b4763ed5971bae67b36aa00f02cb6569ed5265439baac15cc24c7bb12b07dc0521726ca29d3008df7e270ae805fffce450711fc084d9cc14312666727d4b9473220c596d2afe17f2cb8917286f823fecceb50c299444da2eda3cfd3cc5f1a505c672eb196906d3518dfd0e0bcaed7d8c49b5425b532f436551bbf573225825f6f93eea9101252c0e3c29beb12b31dc7c4cfbc2c463a055011e02ba40a979f185767dd7e853115327956616f79b31a729 + +N = 2200b50204efeb9b3ad839e1a1fc22fa61def5a6fb48db31bcbbcc4ecd77a4e9e496cf03aa0207bdf47d5478b6f8b91e1861f14234110038e5e93738d641bb39f85b5b16c730081fc64ee7da74ca24adaf867117b5ff29b48e555f210e654de24e912a8a4789a180f7315239d9ad6471a1ac85a0bd6f8f9cf4c727dde7f62e90e9ecd3f9eaf2fce0dd3ea574f220e13d7369f6e42eccea70856039ff75f6f061ce3a231236eeda1fe5db0856346d9fcb95083cbecbed9235189ffc1e919a18d3213a886df379bbda089307a0ef28eb2abedc9c7af9ec47742249760d6a2089a57530290ab8c985ba5f977e0f1ca182df95d70d2860e781be8736171c0b1a4c98c6adcec8ed340dc13e63e4c95fa0fc942932a99b3cc0d778a52778dc0c214ee01a877eaa37f9ff01b644285256c8e5bfbb556c08b20604ca00ae582170aabbf96e7539752b24a34d3b1f0f7a1dd8c430dab094f3ef335080303a5c76687bdf99a263721539ead202d006b9 +e = 03 +P1 = 2612fca4ab8c0efc0a059dc514a8435702ed18dcef7b9ed941203aeb8b4880e73b67c3d6667b6dc932482f1669d2bbcafaf9115617a830a9893385be5427892f486c675ef535396fd9204b3cc2e878e015a28c784083a27f3ff3b007d3ede86cd18ba85f51a71382f935e8b93f1f8fd7647d7d17 +P2 = e4a000e0f63a32d7d9d6e052dddffce132b597c0f2cc05d38541aed2dacbaf265c3908eea557a90222da8ae0d331b5917e61c641c198e78c3853e9c819881e99bfdb158a53a02d64b16631b85179aa15080e66d963e148d61d843ed185b13d0fb35c650d99b9aad9c0b90129309032ef9a0959de3e9b2596afcffb0e5d576abb1655add934de7bd50157476cacb2ea5d72f02fb4c45f05af13f1b85df3ffb89858ce0f71ce42826d05ec61d3bc21f853e9442873d45fe098a12c6c068251d940ee7f71eb62f7e55c109f5935f677b2a51fd783301a9ecef6a16a31431b007bc20b52471788e5ae02d7213c1c39e8d6af01186db50f1caf +Msg = 1722568f887fc129d4b4f58066a77d7f2c0b9c74e4717a699833d7e16e19ca8f7621bdc440694959ac8eb0d261643203431abdc90fb49d24762d4094ea2c9b3fd0aeccc3571dfca747d8a1ff0166d2324d62c2c53b4532791272aafae2e7d864d25496680d247448db8c65b9653855a620e72006637d37bc37f7605ecfd5b4e5c8c00f7d73dea4a83879eb2d7e5e6e93fd6cf2e445530ec622cec3cfc6c934eb08b7a9846f2f09fb63eec7d91142e2cbad683c6865b69d0c314625f17094256d448bb5ee16857e9b405974596635d868a281b1d5ed61d74430dce4b55c08d7c7df54ad4b19503c397c9d9e3f8898f93608a7262e173c4436eaf37b1f943a7cb9dc9984e513015d39b7ed1f49df5bed8b8a378b4d5b0540f63daf06ded045ff688a074c5cbeac177a851d51c925cd6c36eedb650cec8fb1247b60fa7f97cb8bf91d7b9d85891fda59e60bb58535922e68f8edb50095ff43bde458e2b8c8e3e7cc46f3f6e7f5bb9a7a5659aa +Ciphertext = 030c92212337c55e3aa6a238cdb1c464e118e87c5bc812ce136b122bdb6583b1f0c3adc388121f1117408dfcc1e1431608114cb07400382199c894ffe29ba44a0a07d3ecc597ca806c7a33c8bab15408241bd2413619ed72218423bbe562d5b9f4158af2461d818f4e19f2410c0b1820fd91aee71c9b42bfc300af8f352d01ad4b40f0f064f5ba282cd335f3db177fa78dba67b12583bdcb71c2da2a4a8ee890a4d7dcd12c364c077b7e1bc0cecbd6ef69028059bfe7334ac87892e3d4bbd98db6929c01eb4e1745235bca89b0cafe0de5a1815e1cfabb712232ad352f82e0f6304c55d96f65f7f487595d71f16c76ed269cc40ddf72865aaf0f6616768502e9f59d27eb29c5db71c08ff08b5318ba9fe508f7bbc224ddd57ad324606786fa810b8a9168a96f8841bb6eeee438f070970ffccdca22b2b393d1c0e94665944d11a58e05a32da182b3bfe4b9decc5dbf9cce080c6ff3f7fc1d89edf7942c9c4f77bea94bf5a7ad04500d3597 + +N = 8dd84b5bf8fc03f8531b34332d188c342121bbbee555bf67c36ba4856c4623cabf308aaa5e1bed7b2716b0130ff0eaf04e71333c94f71f21b03932778b394a1280434fc25901958082d36412e684e4fb7eaacce05cc1234cdfd513a9a75f918a6d16fb0b7a0951044832fb9b3acbbd78abb49b4a2f3ce83e1020fa981508ba2bd3a71234516870c2ba1a59a7d1f696cc05ab075855f8d0a602f520490c28d0371181bd31d0c1a60357964ad0c09f08bc8848f5307994312cb56ceeb16c24a962b3425807bc33a2cb7d08f9b21ba2d5b8fe792152238c025c2d5d2faf9e44cebd3a95126fbfe2d631c547002807537151e4e5a091a117d9eab6e537a27855149f3c6b3e1dbdcf9e931c71630571cd6f29b7c6e82bb6820947a8ac14e8634c5893823f74e0c018456b91b30ee28a97695fffa380865e8c038913cb923f471984f1d5c8182e241ea9c677a17b2f07708502d9532faacde939d1231fead2bd844e94b3225275 +e = 03 +P1 = 3a7ba348f648163edd3d915ee10265f58da8f2cd5d446334be254d85b5f2685c2fcede15b4f21bc373ff90c0a41b440dbce780dcd7b636b73a83e2c510d8b9b52a4888e972185254c2b387f1e90ce437eb11f4b25f4dc70c11643bdf4e7f8f24d4e321748489fc73ac698e433527c17c1d82978a330b6c41a445061e976fd4f8020c9fcacd6e270d36d05e59ce3dcf6caba59803 +P2 = 026ce761c9b6b5718def614c3fe9ac96643d290b866bc5a1727adfe578f10fd4adb9800362fdd98a3c014b5dd4131d8baa8bd6747c2581fd68baed6ee2c2a1810b8127d729e983d05cf2fdf79c6848fd0f441a6a381f2f643c9248cdcd8e117636900145676154fa3916aaed4a9f3f746b6938fc61f718cfca8fcd7f515bc84a12dd693c237204773d28af32c3f59e3f4212543321a9bdf27567c10f9171bb12ac537ec3a7d4015e0cd8f54dac60e33aa32c70c397dfc8a9f79a79cfa6f0124eee54bcbbdfc6bc771059a741163f880e27 +Msg = 53c699b690bbb6bbb8903d71cf1dfb6324424f5d7ef25c411c8d25503db571807c640c639cd23fc194122bce0cf31b377dbe6516e3bb0570ccb092cd899476d400e6572fe2b133060d3f0aeb402eea1de331d9c257c5ff1746d5718bf8b0d8e9fae281cb906581c4618ac262df6be090887d2c4b13561ee2e5d395624fdd8f1e2970bdf334c24b4fa3d1f3c2eaa27352f4773aa8a558c27ca9f89dc0416609702ab54ec03f80a2b3b7260e58fcf8f586d6cfe133faa244e7601b901567577510077f0975a3b0f7201bc75af0ee9544b195b44756f3e7920d3bd1464f6b641fb619272e6669d03ce12e99666902d64539a7ec8f20c1a1f90aa97a437684862d6482f9c70643ce9c8bcadbc1be9883cfcdd5288f3bd48b977a1b0a6df38d51186665c96cc3c4d825b653f59397873f7ec4e6d6f69c2327d80abff4b307960df8e19b488d1a97b01b17c133f00142fec451a7de8d328dd5e6476f4ef34e4b6164ba2b58c2a1 +Ciphertext = 2dc739a8a1c3fbef4fe78c0a9def98582c8574b456681a543107354b06b440b77c60bc05665fca3bc48d850f57391eec5ec2d97e93b6174eaf1c178cfcf843a3e63d8d925de37398f51869e9d1c4516d113d0adde7a14074e3f36138ddfd4ecb70113243d274c322ab58ac045ed30e33942ea501ad6e213960f54ba42a949fee8616839b34a4df733d6100bfdd5c9f56f5d206ca49cac5812017737ce52f0314350292a3c1eacab2bed7fba88d42f97f149353a6bdd07674a4cd621ca8a10635c4d7cc330539ec0a694e854b20ceec7f4caa319c87621e338f37e0e87f3f805abb059fe65fe5d856d0ddd276b4efdcd95215e831c0a183aedc0f54c369282bbbafc7783abbf5d022f7b95d4b3414bebd96ff3f3722d704c313462a78e70c0f3ee8eea0546303be51abcaa044e40e8b1de97682a7a83f6c8d34cb17e23f5b3c559c6b34ff87819a791e91da1524dc7783d054785084e80306d4ab6a0f833e67149c328926 + +N = 219103f38a3d476b4c3bb1eae6e913467296825c7a2801a343aacf9bee301f3b615c2370fb8e2a43605a89831e499fcac796d8e8870e494a2d6907d94dda1f5cd22a12f2b130f498729ca2e64fd94697092614d2fbc343fc7b10fef8223f33b6562512482a0c85eda7df2db37be90d338253d8a8b7a83a017b4955b7931ec8e48411c08af8de3a1e1d113b8e67528e7c1c55b2f4d85c166a70489c69fd3d72fa1cec5121118eccd16199be90d5e3841a7dbf907e45afffc18f99f24387546e30f52c180685c63f7d99588babcbb1d6cfb60faf6013b55709a6ac90ef54aed3b12ee875cd8721459aa7849287b3e7ebf261024afae9385bfa37a6f84dd33d0564615c7b2b1273cdb39aa2d5e31095ea30e320294cfc5e732e7bcfa7bf12c06a6962d2f0d37b3ecff45304d6bcb1e3ab1774692fa73ad3410fac5492ba97a37f4fca242f3d8e492d +e = 03 +P1 = 0267fc8de501e15c688cd7521ee2b1768bfb7e80a29603ba6e41f3a9e74524a00b6b8cd856ed182f42c2cf56f5eeb2476abd20eb957daf797c86ac3cea640277dcf03c209d777048ffe05025dcd0c50be06cfe28afc305a85fbd65a3a57d1ed56b984c78a7f866822e64cea718b902b9bf12380ed8587c786ad77a3bcc5cb9afb12ad4d7baf4b3202409ae90c8c8e2aa5ad176313e38de75f5738eeababcdf492d4c2d37f9ba16c0d203 +P2 = 0df3338a5abf3c1fea38f97020c65104ca1c11577e6cae58f37dcbf429e3edb77fb06721662b7746581363e6c6131be0bab0c4b99cd477c02df4bf41bb03eebcb52d85c1b4959ce4916384abe88e1868006d7caf1f958a90c5151f63e8217fe2a90c8b49a0686acc13d61e9d176ddf5a1a15f6b8c62d95c7930a88b20105e78dd6256c297c00cb702633ef7a2b7b621603d9bff7e9872120eba0788aa90f +Msg = 03ee8bf16cdc63e3fdb7a2a00d5b1872a38a0a9bd629f8030400db29085f48e65af44c506e43e2038319992a1af253505d2c944f7bbf1b023924edfc5ebae214197def4318ff6e998362b34a263ae6c516c73b12c80c138ab7b8145f5dcad5b93ccc7f73b1971bc618e88f31c3d45db7d996d300c0c321b29e5c896adee8cc20ea940d3fd87e10fd354bb2085ae1881fb665304e91aabaedf270d080047fa2018a295e3e5597b42cee1d09a3397a4424e3ff6496c9dc1efdfb569d166eb552f140379311f7a9013e0c11c7d697f47a1ed1ecf8f938471ecb79d5657335f81061957d202b5d27d35e63de600566ac6afaf9617a5ab4230d9e2143e4035a216aa34aafe58e8b7ebac0438e5d8114a4a3fc395212758b980d203c06e42c45d70cfd7a056677a2de204acc40e9793512ea43037f9d98fed63ab944edfb4cf6cb96d8d364f774231cd0 +Ciphertext = 074be3eb4ecda91960fac0bab46b62f5550204ac50f6359b4225cc900f3d104d9bd03e3a55ae37d5f1a635ce7f69bf99e6c78fcc33a462cb636c041ce12c4d80d5f9c8d88c548a9f53cba13259744b4d925c030b2470f796c873ccd35d71c2fc7a11b4bb534866115a3393f0876b3df65d70465534fda807bd87cd5833ce4ca62e8b4f2d03f1ea2f4b47148a22e57c3b9ea2dc6eeb05f18d9f10bed0a809c5d10712c818bdca6124e2fd273c9e586d3a19dbfd660e41860318a54e9cf3d5e29cf68cc27a0a7a1e3ce9af6b25aa80615c4c6e83aa5f3810f35b62a86b6d636f2d4ae356d0a2561e0a46e58a151b401af430ac3886b7f9d16c886b290caf28801eac292a4200d29f74600a6e8b3caf7928b90b721784d8621e3634cbd2c82abbef9cf3240f877c5c06067f479a9ccc116e0858397f0765ad7ca26717e6fd1d4a443e44e5eb0c872f + + + +rnd = 1 + + +[RsaEncPkcs1] + +N = c8e00ad52e14b6d8dff4f32927b777fc06e8089f3084b8cdd58d64c6c33c20d46f22639b7ed7d7b1ec02bd026be6aadbb842fcd5b1e4c8669513c24cd5a222445ec529051b5b6d772b4d690605ba72454704d79ba82020c5a82bfe079f8ea2afa125a755ad67981981d4c31cf45b2821d496b4407d40c8e86337032524a967809a863a0fb62853fb9645f79089ded21d928eb8fcab6ef798b6dc191816fc7db14709e566ceac5c99ee8e339cd2a4cfd60cfdb8f4e6013d3c1d268b470144e662a510f8d3b116ac73cb2172c1a572fd3ccc204582a61b288ee60777a589c50add40e6a1d457579f5cdde923dfb85bf605bed2e8bd60edfe9c8586001aff12da5fbf9ee7b620e363517c427e705d41ca8d6867de87c9abe5d40181fa3277c45760b6011808212cc63388290dc3e8e997d7c6ea16a9931cabde0c5daf66820f3c9f9d8976b7fb8bef7ffd82d5bf71b73422a73c5cdd8f30dbfb40081b8a288c9671df559811b1e48decb54d1260cb372ac7ca506d59331f235d1bdf588f19ac14afdea94a88107ffa029db4de62f92d7427ef2e1eb227e896927bad2ae6a0e875f828dfffa87b80cee5d31e2a0c8322b51cef40c332b1cd26262af291d509c42514d278b69c821360f4523b49e1f83b13635823198715f6a143a9a51ddc057934e190bafc44649127d6242686728e64c25a1b3f478078037e7c5e0bb635125dee9d174d1a36705b5d789c55c240c453fe67ad7390fee12f728833aaabed6252327bda281dd1703410a22d0ff48237ec901fad3153dd25936f564392e4e83c5e41239d6d30fc2e75513cd27f8519e105d13fa2343d01b84e0335ce9504a9a91ce7fde94000979d4abac0ef8cdad1a9f8cb9a8555e331e3c0965c12d2ac4e99576186585eb2646e9d064383cb74b4eb06e3206457857d5c66415fe6bb6aac54452f9956b9c04b817000bdc3f6b08b84c89c68deb7961d2df13ec499fcbf6db9995f25cf76b8c43175664aeb03f961ef868d3c01493b1cd14124f663ae48d0075c691c8268f0126dc63ec6607e148eafb8937d397d40d6bc08e1e67c2cd6ed7f0383a81510e5f3d4e57d6e4fd515d4f2dde2092887feed2da7fd60949b5d8b67c80c6ff3730c9aa90a5cc3e2bda05eeae58a7e15e2b58a731fa6d619bcdd5f4bb715d0062125cab9d7a956acb6415ee79d2418644b4b9be08fc1df76e5bb32c5f755422bf5abf96755a7f86f654ceb73566d21539703a18d4c4085a5640743d389cd8c0b0dd741260feafc20c50a203eb3c4324277145f21a483fac83b3d4dc6b26511d1ff0c02021413704b23dfa42842b5a29dc6d110b1d9d1b48db42ba02ebe8516ee1343851da0c045f19798e8aed264778cbc501f251057693016eeb081e57cd4fd8ec5697748429380c33689ba5b84c230644fb0e402173fcb592f14466a52fd +e = 0919c3dfb507 +P1 = ca3a571ec9743ba1f6028df2fb34b11cf7e175a3b2ff62d31efbf52ae0f5db361c58deda318c97824dc099ce12d5b4a2a4927448ec4c4e9a43d4476f9b5f0eee13a87d917b73c2bfeebe6ffc3aaeb21e1bc25d41440ac0b16a61cf94cedb37a766bbbc9004d956791a56b6af1f112d17fdc74519f996932351408eb1f0e71d0a8b4f419fb8f04ba9df7bdfe5a71caa60e06a124b41cc99106789c1b16a9889f60a230d5c93570364d967f85f03162871f4b523950ed4efaf75aabc4ad26b0c0db6503c67b73f1b138029edca361170b21ba3e770dbbc03a356a9fd4fddba3bcf50d62c2ffc4169799c8789834e426624a983e3bd29e63d7c8d7eefe0d8602eee9daf75d3a5afc1777965afe0547ec85fb256be86a96b3e93acc6349b4cf5a994c8fc2963e7c12c8899b28a9fff92705ecbfa412368bbc514c14c5a52b3ea25889778729f1c11df692ed039b7443e4ddff418954aa9505a926a16ecfafbebc0780816d8b42ec336cb510af596988e1e8f7a55a501d34cf38287082580fa163743fb163b4cd3b22ec21b9a4ea561de924e5a449662f4d71da5f94a2d0eb7d9b9d77772f19b930960ddda4227359c38886b2826b61c1562d67b8fae30ecd6a6458d8ed3cb164912ee843ee8a09076eaee97831bb488f015b90e775ff5766a3b6b6bcf724bfb0238a5c905c105c5e1b94120654a4e24410b3a389cd4efc1c811b7bf +P2 = fe499f3212e238ad2c74ee15f87dae3aa38a70a1aa1f471b1c62c2b26c07564676a86cbd3e014723e163270da8d50f1effa6f7bdc7f054da4e7541ca4a0ce87036b68df65ec86282e3cdac5d3d76f11c36693f7303f69d46e67608f1d13c558e1bda77a123ac7499f0929f827b4cd6601836ef44114f9b323046a5430a8d85e249a999196659927277abbd17ebdb2245dabeaf7d2fe9277afa3989dd2a771835e3728611c1e7fd3f1678ac0b5a1793833f5bb2f6348ccf4bb7a554fd887fa883387b9a362897b9780e02879f5801c1f99d6a5b03725c4b31137d9edf75c07003338dd2c165482f9f5ba9d8b3fe1d88c966c4334ad677cecdc0f27710227af415df91d90857429458ce59385fe501ffb04d6c3de47a790512d0162fa8f52c7fc930b6deb1d54428510c126e68da8d9c8f8fb1e494239675849fb33af6d07340f67769f4bf540bc4efb007537bea47986e1449408ab653594200bff5540383d86798a2b541b8c8307bf4c9a951e145b63ec3327fb84215a54def615e9798448c8f28695625a5889240297a8941437d318ebbe3fb1cd98b62bf5ef586f62edfe21542869c84adbf773b2c02ddd67743345a78f6734c90167f10905c61d89c785ce579423c38926bafd891e6c7a428dc915c03c89e54cc39e82535b3478aa4a3173a451598f1ae24985d81c8890761dc2d2acb6cf77d5d51b9d1dc6075826527c443 +Msg = b2afd2b0ac9cd10beefea4ffa04da33c61871e95e01748921c3fdec18fd15124b64ac0e0fd6889315a33790776fa36c52644dd0f7b591018d992d246ddf089908aaff59d461b6ea1f02eb0f92adc6c2f6734dd461ff50f0e3175630735d59bddcf9c33007a3d265aab9f5c96b226b35c3ab4a04478d3f7bdf03f7000c673e8518c1868d7f45f7292605318aac96bc7f27b409f62193ef9ea082e9557504b610446a49cda1c6d51a413250cbafc7ad33a49cc260c6d66c96e07f93a82df153fc440ca754c763e8620d37245b4d2fe2db88bb2747ab591d1c81cd380c8dbd0d1006967c6d4ffaefdf71b2eeecdd7f44587df26199b460b0d659eab8fd005555622bb13ac3c55ea7266e294e2dc232ab922a5b409df1e1185ebe20601f0dd5f632ab878ccc07723fd736858d90a830e21e2fa4b4833a49a3e79d8ca2e2775db86341a33b5924a710096d893dc6f7fb0b373d9f1de8f10f2e3d0a28ec1743f14c8f3d297d45f4219866539aaa599bb1b8cb056d62dbc4d9bcc0da391b8f727dc7d7ec36a24abe0633a76db5949a4ba2837d6f1d88c4d6d66097b31f338a6d58e3f728d5c990f560517a076c453c2f4f41ca6cbe8f4d12df55d00a3b5753dd1e3403f5c939c4e6659946bb4dd15780acc7ed9b59967608164607eb8828269d710196d4fc4633d3e3b7a16fa8112045ccddec49b414ce3839854e4892ed7ed72b8ab46791a9827bdbb4d4472cce2cbcf18bc64860a17b46d9459116ce2f195efd536e6724d242bbfcfdc24ae360bc929e449d9c0550d4d3b267741fe5d3678733269fd8f68c8e882799dd43a3550d6a0f649f141a9573ca5850062228ff305a477ea36c00a36b1536a024e524dc54949dab048dbf6245f8943dc7c0076eeff62c83e03734825bb7ca4198d1dc6af0ab08ece7a32f51273db80 +Ciphertext = 2932bfdf839539f2e80f112ce7d0f50888d393b54703be8468fb40f36acc7d3388e5ba4b2df856e51aae691c357b0d8b0ffeab58dbecfdca246c1334df5639291f6990789a6a07e3659210b7f5becaade5a9b5120660ce0a90c81e46ad566b3632ff32a10d9c8a4c49a9a323e3d3e2a5b617dd3cac8374ffa1510ec4bdafee8613b8e854c0c9515e41a57516b3b526733ffe42c37311bbc1a913775b1babfe4e47f79ef88275a97ee6c19bc9aab4a72a760fa3e0d5909702bc5f3cf60cbea565330aaefb6ac6be42d8793803231731dfdc7d5df942396edf05b1c64e0de33e819e4908a9a02205a1dc1af080fb7892f29ae56ed2e841de9bc76b3291537c86c5383c6009ba0f3e8308f9d21f5136163b81458396cad4bef77d8a380ac569a9f30c328841d756c9f1ae9a2fed8cc241819c1bfb0f5cb08f5b14335487b275227074743b6ae08327ce1b622cd78bda880e25dc68c50a80a91a87113ec7b4b503597ab1699d3ca376f33675f0e9ebc2806be0ccae10bc1fc0bd125389bc7a0594e7562b25dc9bdc850a74ee7e873ca664bca1fd06bc3487f1e9b0b01e239c8fb9a7c5c8e178d326345f591781e9d9c05cb9981e42b881fa7820c4a194c2721bf0de4ee1716c019db53f16266d29785333d6d5e8688bf4a9111f99a15d3bfc519360af54aa34fb96da9474ba61a565d0ca46da67609684ea1b158f167de10383720cdae2ce6e51aa7df08559419001936ecb1ca00d1e60a373a18dab88139d369c092f65665dd8014ac39f63cbeddf2ad3459f9eff06a36870ae295a2db0985174a5c2e211ad9776d0ae1901933280f91619ea1e9520fde0f1c80fac2f9fdf745bede75c456854426880edcea515001773f13f7f0fbe6e3f3229f7b3f01fda25335461562bad1d9c91edc22377a6f6c7e51249ab6dc88d8675418906498d7308d4b75a6a899f14172f6b4f53ba14b0616d227f122c4f1c469732bef14f0c380779a927957ad1de03c2540c2267a241992b38ee98cabe91e3e9a998515d6ee4d48aabf16321e961d6f668679d7da9d35f374b7b48bb95d34b2089ed482fe1b497cd3382d1e14a3c3ed7e5216c06e78b026b6aae39699205c37df8ac15d368ae1681d7a6af4d313b07a9c3ad621b7931c5ace9484de99dfb2c63d6e1f40253e6d49a784c087d3465bcc12c361ec03aed35daa482567e8440ba5a927aac7ce95278a515720b3cb99837fec490647a27e2d3f6cc494cb162d80aaba09be7bf9b15b7b97c71831f2645a615eddad829887a60a37f212bd7b20f61ca20c95eb8dbc8f0cd24c7b33006e4219795ccf22d5838a5dabf726bad67915d40028da5240cac76c191a0e2007c34b29007432de191936bdc894820b51d1383ad6529286136563c790b85e5ddebfad9880485083a6fef5642318cf88f0e99d1c9fa54a20519d896fc3d + +N = b70c0350dff1e424ed1690d62d5d197a56eeff27957732ba32ed00b299aa181c1900ba6ba473f3fc55f09cb9827bf8e77da3d2010080fb44b7e2ecfeb29a652469da38135bbc234a0b36ef885535ea3a4345fbe894bf149eb6b880742111ef03916390ff3d4709c049d67484ff41106cc2aaa3c71eafbe3e09d49c8381384c38f5e0d4c0e37792a7bd7ddaf8a3f43d35c7210a6baca193949a63658b18c0b72f1af30037478f3ad3e997720e15cebcadcd52fa48730707eec3806e3538a06508b2fe180f076f51420c348f80bed6d627735f58dcb67892f997326284a60fcb2a83194b8e79ba157d40461fa3a2734acc0231e15a126dc4ee21b5d2f92f8614acec6fdfe32d4a728d6f05e0e99a90ed051c8749e71d00374504df67e7438e1fa12e63c4e17d36501b4a05fba28ad0d98e5a812c3c2e69400215a541ca2f2aa846ba5387717604f92278c44c5a4e5dd1d33c2d311ecee58748272be2b52d617a644d60c650f90012a87011dc6121581c033deb68152e3ef0389b9dd125c77f2bb835d8e84c21ec71ca5b529126fb2bc053b517f1420b0b4fbfb8f40db2a811294f6345138309237b19368224d0d6bf8623e7afa376cbf04ac91377be1aeb7e7d60e4e644cf165be8a93e8a258ba3578ce4494a1b3d6ccc87a1d60435cb997d4e08f0cf8cf9014db15e42106e81a339e52091d876f05e852ee71c20a99be4d6122d +e = 01cb45 +P1 = c8e098cacbce5005a5c8a98c468616c2a1a4c1998f4451069a9c32c4e5ba1a7293a9a9e1cb5425624296307920525aeabbc7cd35b7e4e6e79ac53c1bbf27dcb617892a2d0246017b9525f9d00bba7d9552034ebedb2eee10240d62f4ac75da6650309a967d33b1302183c09e689ac3fb73925502390e470ccbe475a73b83af0955fa7065ab1362ffa8b141a516e7372f680b29ccda2b8af45c292be3ebdbe7951077a6fe63eecc9d0ac2a6eec68cc647e1c6ae8c42c9305e4292f06560be2a600428802d9bda7f65e7b11a23b612840331943e02ef848a5ed5873268b7cf869fee75c416e13571bbb5dba154453e648442d4e7b53b14d3707149e7340f4f974b +P2 = e946d9b7b10dfc7e837f414d31f028880aebf4eb5bc60a8600ef5bdbadf700f0df6b0c140619074b6d7a2f34676b6dce5590db466dc322b084bc1e142c78b764bd1a3a1723fd4e7e963909561df490afaf40d0885e4319729931770ea24a9d4ecd1b9f5705eb2db4bfa9ec6cac74ae369307da385503197535f185f64da3821004abfc7949897427d27a80a0c88f4adab48bc92580fd42876fe0ff0a601b5a4b95b096075d7dfbd96a85fc39345571329e20e6f50ec6479f65f7e606ad7b3613d42b2bb02e7f04a75b565445e73257d6b8fe540cdb7c867dd0384ebbb832a3e558d502386651ebf5d118407ccb4308d16d4a43413e450d7b6ccddc9bd291b967 +Msg = 7bd2f8c1f9dc59b2087485cdcce70d3ccf7646bfa3d1cc1a05becadff4508e73961a86f9ecbf333ccc1ec9e8ff17a34792000e9e5111feb44d5df490b1566c5bd6ddb7da37b51d0106a4 +Ciphertext = 9756de297819ff9e3568742a63c674692104a754fb24af4203d8e2fe5c78b31586e491ce657e9323527963c626af0391f068a88a1f47fac7604f5a806a2a7f693855272b5ecad9b8e6070683f92c88a5053fbeedb17d7f37b37acb02332ef74a5ba5fa7c64b5a38dfd1978f17fb5c431f3fe652daf9580ead3558a8a70875256eb546cc1a8ea597d9e381cfcf374ba1f8d3076239d90380ba7d712b39fa92fca41fc979b0f510bf7db0eaac508355645c717991f0efff107622e1c22f92aa6bb7ac29a48d3b9cfc8a5f1371b850a9e7b5f5a28d41ae5e2b2b62acf20ae45cd61298136c023e83380d1eaaa7daa2a07bbd0974a0f2391ca052cf8183e0549968a39a5fefc33aebbf9eb279e7d26d077ec329698e2185d44b6702802878722a18e96c74c57e806eed7275a540b008e49a7ad3bac0fe4d6ed7857ebb827d673ce72e49000e4a0a714fb4e822ab3cf4b2a42ef7a27f2fd6f871db4ca852843b635d6202808daff759ea22092ffcc1aa67aaeba6539b184725eaf6e96572bf671513c93590d395969b9c7824ac36e0aa929d32ad3f909c1c920c9e4e207003b7f5336e098a4b0358923723d0e409ec0f0442dfbc76bb73653071f2e93d0df4077cf0dcac14cafe5ab67bcf5d29c7864b0ae204b6204a3dc2b0d4169cf626f0d2676a09fe66b4c5329b37b22c8946485d59d40d3664f0e82270cf73826f9ec4cfc7061 + +N = aacca1d9ed15b5cc7d423bed5f8e7fe6aece8eb0f89160f3634831946be1aac0225b488df33cef5c736b36109dbb3493f0666941adcba3e9dd114c0bbf8d0efe38fa1aa2dc57f65baa227839e96bd9812d534c09eb28f60c72ca58890c424c8ca4fd39401040e4a2c586f3f7c864f57e68bf810005de0c0cc99120a8a315670d743be8439a425c4476e3e607fa1328b7645c564dfe56f0fd85430bc48126d57d2592d4bc01a1e5f82cc83e5f8492737493346bd0c292e9493c6b758306b32e98f1871442d8e1c18ac32c9a3e60a711b8d71013eb79e81971f89153174f6d009bcc8ca0c651ba2b67a8add21d5fe19ac690e86d8feaf48672a197fdb658d0fa059de9802fc5b5fbd2d2e453833d886cfe0d4e1338e397db5d11e99a39b281bf94a331393daeadef4a44505c8e10941ff20327ed93a4b878a62aa5939a943cfa644d48ddd68542e432ac1b3b61e51bea876f78d298b4e2f0e232bf8189e11ec19d278259965e4c88f4c29e7549c4cdbfebd320a1ff9511211a469247e53c12568e9beca5b3c4eb0fe62554cb59a9f413f30bebda90db977fd61bc085abe299a4387cb47c1004fed4855f965f49e5e57ed2f18f80ec87b71d2673238e69156588f9f602e73b57a6a8c2063c51f12551be7e94cb76cd3251236483a1a3fe03c5a3fbd1fd3baca26dca05c0123303d12da505f590c405c949cbf1de1dbaf993432ac9 +e = 0b44d8c7dd +P1 = d6a1899d5196e1529aea80d344d23270d84a3e3a7477bdfef593cdb6badb5672a41e0e0d368e088e21359e8f099f6da38942cf1a3686248e741b7eec07b762a54db703a9e723072d9a971d76779ee1b3c450e8f058c1fc967881572efb6a1ea2db681790ffd9c837b56646deabc31fe30b6c89c6c6809146477ca8b53f84cfd5c7b218198deccdaaf3038b300fd45ec820a8a1370d2318718f6a4eb4f42a29ddaeb7f0437904cf3c5b0a183a8e7a6d82e0c86ad76d870dd7b06262c62036d186e956166b25ee1731c6403c2b7811bdd62f3178e2cd1a1ace06ae3dc996f8f10587e09a3bfdc7fc2e2674b0001a2bf199caf863049a78603b2367aa99ca3868fb +P2 = cbb8530a9b84ad817b117b32c2a7f2507508e656353d04bfbf8d4baee008692aca4561f48cc93e3f0148daf7d363e7a94f80adc31ad4e464865e7723ecc01ebb08b836ec5895b39ad625a96a192ab54d1ed4416eaaa0814fdbf46b60f296b83befe2c37b8d47281599b2f68a17506d33a7c131fe3b40e31ea703a787ffac17167c4c2f3aa66977524d56978ae3b4fbdc43047b1964827c697f92f7292f635453f45fc6f619c655aabf6542ff2bf4028178e3c021cdbf3e0d11a4c0e0de46210278ecac8538b3ead3de7ac73340c3dc87b24fb32022b709f8701834517146179e7b1f0bfbe8cc6d9f8e08f204f68e087726add21a441d4e5055ea2fc84513780b +Msg = 328200f85e96f5fcb6f889de1a6f7edcfd8ef885102d28fe87e8b2a480b952d8100a8bb2bfe5a24d6e0daa30a3b3b870a54dc459222c488df8c320681d554b81014ee0eb93c3712492cc6a76528039e4f9745eaec7e2dc5befa197b22ae9858967084a4e51e6b3a7407942f99a9f5ba9e13bdf57f8a1abfdf8d5162c2e101320fbe9ada98c89be3f24 +Ciphertext = 508680845f6bea685d949272a691f0ec82feb4fe6935b88c84442308f1ee93a30fb36bb1ffc8f7f6213f07673837b83c45a2239b0591386fcc95b6af74b121fb925b25be4806932b2a021da0f60094c32b2fcee12ff8816e63a761e54281cb22bcd57db1ec0a0a331aa9ffc9255bde82e5471e6634565081c5ad99098de271c2c6690c467cd16c2e7d70f26d48fcd8845ecb1eb28045ab9666cd04309426d3b5ec092446896dbd7d2a852cf7b95e255b46e24a6d337586eebabab502adbf1809a9c8d303b1f8680101e53e285c6cc6aec8c393d557c50f3835485eec985a02d42a357214fe10def7156784c81115b8e300669a711637c70b0f0e87ad1e5b07bd45f8a70768ec6cbbd40eb36bfb05fce2ec7b292412ae7ec90c1870dfcfc22d5095afb5c768d6fa7135585ef79cba2211bed1bd2050b77b0988892ff849632075e13724207a4eb5b3022d3a93dce0504fda6872f9912709b94a1c7da9d19520d8435953f9f9bc834018808dccdee7246d95bf280d87ac815d2d7d9d45017ceaaf3ac1d75674e1181cbb9d6d1657b49b044a5f7570822843b23b894389987cde03c35165188bc75e200bd3cd775d779977c2ff88a9a02e7949cedcc27333718e625b644e735c035cd8ba789c6646626691f3cd031b3a0eaeaee12ebbac2aee82ceb25a2dee62ceccfc27e4853ea543c437c57299c91c5af0abb2dcb88bbb907bc1 + +N = c6890b8bb2100b87c2226cfbcd99e1a86c65fe0472607814b7bf03098e090ce66555f1fb97f2cb50e9064c74615100f1788d9667235c32b42d366f1afc9b301017950693fc4b1d96300d12ad0527cb9e94c7aa2998343e275751f1990641b8d16dc3f47dd423f7e634a7e3c9ee40d7cb7cb28211a8aadbd10b2890927784e7a927e3c97308e476916990652dc4d67acb6dc746c2670c5cce9855d73a94efa3ed98d34b4610b8a4dec173965afa326f3301fdb1e53e235a3cfd822ed1e2b387c75a83e074a4a2bc5856574cc16f35278eef43be37259f8d5a5401736ed75a1639b91624ae55251b3144e09cd7ac811a8d51e3214928beb7a91c5d9920239c1d0a6d94c4bf72e14a6dc125e3d3bbdce32c606e3d71108d5d0de9bb649daa588724c754a344e37a2a26f688799a2283569d6fb0420f522eedc63bbcaee65f8571ab270565acc64f490a312e7f6f57273c1a8b70b867173c9f454c2e9ba092792aabd33bb9aa2614cfcdc9e9fe79d4829d6f9b12107e36c70befa7111d3ab6fd359d +e = 010001 +P1 = cfe3a7898d81712f1975a316d67ccca75f64c2f6ffa2d62899825a86a45adb1d557e1abf43e7720acb84ee6bfdddb3fd897ba83d5bf646db71565391bb35a1f6ca64293faacdd226c6cba1e0736dc05234f109a925f0c021c773c914aa6dd8c90d5eb124625167668ef553dc35f1235f60811d06d755fb686d732f3f3430872017f2fc1e59be1785d819bba204396aad041311db04a56b4784ee32a963f934142c120c9b552d99ce8b87fb2b7198542b4dcae745ded9e937c56e8eae74710607 +P2 = f47b3801982859cbf372051f3b53b2ea3c71ba3eb8b9a5916ee3630a2e59979ec9ed7100c93da245c00ffcd793c1fc746125495ad5b851f54ccf79dffbb68c507fe268b1875330c55397623bddf86645a90377b76f916d0d185dceb2a4e5be131b1b7672e64347c32c7b54df8a21430817309aba2190c7ef10575b9851e5b592af6681c0e3581dce187f224d5138f797fbffb78bac0918303ea8e839f70cce839f0ee4872627bfd9f96dc5facd11eee094210b124d521c542218b7dd9ce41e3b +Msg = 7cfd06a411b19babf0faea569298b0a5624e2e39e7e9b87b3824778ccdc6579c5edb0afa46816f8be876ab1bb54cc70a718cf7cec57285d8f83c8e9ada20f8f1f3abb4da5e4095b8f1f1575c92d8071f1040f80abac91dd096c804819f +Ciphertext = 352d7e426c11fc9d869d91776663836533c046b39cae5ef0a64b9bd933ff6fbb55329cace35f240a3ebdc8a378e7ee08774b78dc4774e5109c3155877682e86c91fe669f8ad69e4caf61d3be9e880e12202c4eb037b84a224a98018aa38aa570ccf20c770fb3ea5c8abe0c84f06485939ae7fdf7081ec027935d8a6dd0dfbdacf5ddff2fdeb1d1205547fdd0672d5676a6d1093adf9a267363c95f05689c68f03c47762713db4cbb8d7af8609fa83b631f58749a28cb465f7adeb0ad929112ce12d5ddd92797416e61a36345ac3b7c099691ddcd2c3c45a69a33f0b22491e6ff2d6cdd360cbf9cf331a66700a7056b82a2b2a197bb64a8b0d18a28cb4948d731632edbc59f8e8f145bda8e664f58c0035ec24733013869439c1c0a3bfae4077a6247c755260279baa129407167d9fca4458ea17ae86e3745b0f6932ac2297302e444e4b55703e97f545e9a9c0e9711cb690f35ad57eed12162b57c4b9a2569cafb44afac889b2c16abde4651e9b00e2ca570bdcf8c7879acca075a6ced44af31 + +N = df7a504ebec1abe0cca305952800363b9c351cf8a1ca8df43a51b19a563ce594a3b50c7f851995686fc770709b362e51bae1586ad9db7b6281d44b713390c36ad15f8158b971dd4633bd359d90fb749acbe765893671fcfa5b545be28aa0497894c57e95f6d060ac5461e6a6a956b081a305202ed5fa7e1e071a9b7f70b9fdae649b8fd3e2bb00115f9448a3ca8d79679f7193befd6963d6ed5254b62f729f696038c9bd7132d858ace7ea0033fc7050e09ef998503fcee194afd0cd1fa7b4bd01aa2dbc1fce2a69d435ea25a8911a3497aee314c7ebeb35efc6f377691ef8a18eedf72567aae76f6ceb67c99225117ec0be913003544d8e0f0a7297842e08983b6b8713190b8d221a8aaa784276e31344a2dbaf83fbcc0ea7829ce012ef51b745a8070415494124fb0740ddbf2aaf27f7b6e6ea066e693dab3a770b91199f509b5ef8953638a87671f62fa13a986d141359c05b9ffd0ba8aee7af53c669a299822b782b44939c1ea9eadde57e0a97af2f0cdea3e7c5e2f2662b121af79ef165 +e = 010001 +P1 = e4cd41cb4bcba4cb5094244f124f12f4de7978fb3458b1b51f0a53bb9b70e171802bfc14b4c293e4ee4aba005877a8856d24a8c45973af114504e8e000c79d11838c2e896be3da4a2821d87454e6a2b7d3a7122588fb73eefa1c27b08a1e25b868d926fb2feb65bb3b55a468775ed2bbbe9e8b2225349ce426f35658d2c9f291713c306e2ad5ebd7b174162b37872730b227bfb7b594ecd00d99aedcc1415f6652edcdd60747ed173975a8d5caf1ea11da1579f438ff01b9c96b9bbba830eeb7 +P2 = fa0b0a5572704851ae8f14d252b2144af9c3a97f0ce8f38149608a4ca8d2edc3197f17f5341c816f5cb50050e4833b9a1586ddfd9a892af0f2865c1bbcfea43540f701b3ce2765d4d0132c419706a7811e575d01e112b14b16900824b1d540d44f5016ce73516008444c0f8bcf07b912ea81723e9ff30139ae0e430e861a928834fac2b20f0c59dfa9b452f9a1fa44fb2ed1349028e6a4baeec6b3084ba7d737936e453ea84b4e8e35f41100b9772633e98eddd95e36dc0e8ac86366b413c4c3 +Msg = 423718902ed04eb3452d6cecf258a4cbaeedb6b73e591831c7b19b10e925091b0b172dee4d929fd24609bf1458ab90cbb0c3b868b1b76e2c363f15d504a320dfcb399cd9df78da451ff1ca6a9d975a6ce9dabf40df1b511dd4670e0f47b8c1d06a81d1958939431e27e0e8139053ea4d2e3cac4cbdd279a30dac10f94b29c610bc7d68c29d3748d525bc3c241b2c3aca247e68f9c8082172a0f06bd6e7d72989587375417769417decb708eaa45f2817b3fa83898595267ec31891707e96a4073f5b32652303fabd99a97cd7e5e9ec45a4c2dcf89fbd3f46fa46a1fd66b86284809290a533998222492851713fe5a7290b561f8af490791549984986ca5759fc5cfe2f31f24d4201f1ac8a895510eb7e4321adf15f55cc9889a660995a50d024b6908e0fc77aa3f4d6632feafba91b4e4b8105811b81b3da9c876c1aeb8f7360e3675c7da679defb3f54c2d8 +Ciphertext = 55fdbb6fdfccf6f6f58a2273855380beab099e06ae859d452b57bacdd7f0c7eee69d8c8bf5dae57df799550e7d77802380d02a4caeb34297d30260fc1123c1f6c9c077a06d76590a531a99bf5fb1fffe09ac6a473a2b22fb9aaa119bf7c523e2ca6e6288df0b002515a839c959602d822d63e8f0e3f2c900ce6f78ae52b6d798207e95addddc915cfcb96d68cc70bc62159f2f9127397b0bfd53d4bc2ecd5ec5cbb9729e33b5ee97eae6798e751d12982d4448cd32c0b86cf0edd61220322c92dea72816fa62a957b74cd9a7bc385e0eba79ea34aad552258d960b5271c3f1077d171f1d4743062aaf59f46c9bfd1e59deb1acd4d7fdb120d9ce6853cb4f6a324b8b469daa145c9ffee3afb80aa4323c7291d0ad0c72b6343afdfdcb2a381381648facc09177a197eb6a548b41b1ed9f9bcf5907ce3bd5ab59fa7fcae6a106717462c7ab3edadf246e32b96767520c57aafccc2b51a723b9cfd44bcced89bb58ca39a4403026722db3cb33162755c1dad12af1824e15fc2346695ac3aeb52140 + +N = bfecf53599b6017414e891d4526206310285d46f54bc742cecbfc841d026cb0f489cc2fe0b6c3095db8998c07a1a7988758d85e08eb97153a2461062e4c5ee6c685db36afa9ea2088193342031ece3bd76db5ad0b27d69cacc5c3d25cf571801904cec207058021d5a1327c8348de16ee58a3b789683d2678a3db074f16c81c120a7b8827f61a413ea42c229df1668566263e8c0058cbefb1be12e3cef1b612f7540f63eebe1741c68fe6618c171c0f79cccf72019c6533d213e96c7de369346be39073f2bac1463fd2ab88cc670fe5e55b2547d1eaecca7df00dda8aefd9af1c48b74e3560f2f1f911d56820f52fe88084aab61ec963f27c9d33f6847e62ac7797e409cf6410a5bc6407aa117dd2492b3be43b279a4a130c6e213417493e387e411cb3e00010fe2000ebc2ba1a1c151ba49d9877909938c473238f052581f83a7fc64253e7c1035bdc38889f00aa0e78e3457d088cb4e6b0c26f226c8a9045e221bf676e048a934d928829ba32d508776b288560702d088f370b8e351a0d33d +e = 010001 +P1 = e1cdda7b5c23e4e95599488008ef202dda379ad1a5593ee1acb0be43034eb2c174aaa8a6c28580ed3776029506942a9421916f0ba4ea585a163ede0095a8e408eb09a7370f27c44e9bf91e8843527b245965850e344e7a71fb994eafc910490bedd3097e6860522154badf4f2442d9a2b7b2c5ea824830c4f1462d1423f9a3b6125c29157f6cd1af82a14afaaa00979a07c888bffdae01b5a3e2be5d86e242103ebc7da0e24cdc1d0120d48bab92c31a63ede8a1103dfaecd7504acd67e70f47 +P2 = d9975007bf882f49478ccf245dca62aadb73bf510b5bbcacb92ae01ffbeb863b35ee0ff8f4d6953cf4062a0b5f7d79cb58c900c0e34cd4b1d91caedfebbeec2c8e15772afd2629d534f5b562f699c9420355f268649c2c675a0db13abc09ba07ca95793096bad4ad5ab72f38d10df200145e252faee92e4a3733d9bcdeeb4566df15d480e84cb93e6273e1dc2848dfa3b01fa0393a08a4563f11851dacbc240672150b6571d6c7ec5ee727e370573f68731b4c0957ed095fdf26f6562412f35b +Msg = 60076f3fbeedae403f6b0f4aac071079f2e41d4a42cad50b608f2363046ed34ccfa9d9147b25b344298a283b7af12abf1fa89247d5f8efaaceaa2fee25e8cee4e173770c2cd8a3cb709d6399e5d8ce7f6553fa7c5ee55c +Ciphertext = 634a901b71725c6591b7277195ef40dabeb9c3e3ecb8efb798fd0194aeb306de23fbb0ee874fa72c7206d47d5ab24c435138eec03a1438a5c13cb0c27d88dd7dbf629768a84781d30bf2fdddb9506e03a87370b5f65a5e0526ae48306419e0ea86210a7954794a9f8041d1a4649fe903efd1f6c5ba27b875cc30ff987f1f1b07175c54e302eae96e611f51f2bd7e7fa3def26fc70d3489cad75b62f0e2358b0acb06ceeffb33c0463ab5260b249dcabe0e033a0a3f088c903006a927e8fa233e94442464d62ad74a5b73ae3a198f911a46ae764c884beca0c82b1e95905bb1c2f02881ef7013f4f77d6c4e9e7e92ef6c8d5462b89b005ff3cf3caaa25a252e7df5e9b1bb4e8ec2f3f75177c3f098a78cb5a4fc0ca0e53432b77ad95e73892ec9a621c65e3a85c9e63e0c784628a8d0403fb6284bc19936e7daf4f1472c7a825bbda4f937d96128db7f1fe2086f2860fdcff0a9e8dbba5415f8d6e572502c36db163999cb5789b28efff9e2f06abea74f8936e300a3b58272040460b0bb0d394e + +N = cea80bd6d6bb75f0996be97d41cdbb0e272aa2a247dcba4b825dec42556cb6764356d85c3e60250e2aa6473990a2c81b4bf8aded67b5288a13d8d6939ff62c8fce32343efabfa70f306bd383472df1daedfb272ca9c391449909951f53de8be5fe9f21b9648b814d3d27b84a15fd849524245c4debf08f3c37b5fea230beac29a52d162e627753f0cad3089192494cda25de692881b77197af66f3755b86f749e0384da6a224563f2a96aeea52b92e7bae2020eabc8b25db17d110ab2c61caa7c7debff92b4e7e0d39647426ffb59e1a6636315a435bc9895f6980275dc560b1572e5e70aac5fea6eec7aa6890be7a3be840900754ff8a30383359f94d475a51 +e = 010001 +P1 = dabaabcc39ef74355bcc7e8ae74b50b3c7c05c9a9228afb21c838ccdf83b44939fdde31cbc4151bfd71b3bf6c3fff6f2a5e173f5ed7aea538c704dc0fc9267357c71720aae7a5e82df5584cded98f8f1e016a14b899fa7b255cb9a30fb05276af7fe402fad3e3a5543df53bb173f1bab7a70da79b411a5646c07c29826a0400f +P2 = f1debddf4a7db5e3922bdbe30152be7b550802a0af3c8677fb5991af98b05edb163aeebe31d1d72d6d91d7c04ec11a37f290ee4c58b7b8b383a3ccd30090005b5adf2bab4281d1d6daad41c86bd7ca4db05b4b745ecea0bc19271474884e031bd8ce6462335fcd71ac604eef064cb3331764739008646aecb896e21e8e665f9f +Msg = 6c272e643d3475327d178442ae6250caa9b5176408621fb3eae16e45973318d5b8a00cb3fcc5e97a07dfb2e0906555b2903488b3f6a26ce8f844cdbf8ab431b2cd67946737d00847fe41fb3de18349fc75d6a30760a3ac8f7dc9258db8f1d0864760a92b5273093ed03d216bcdb579e0be23d39a7fc1d82846da0b302644cd +Ciphertext = 9d01b00bbd060921efc6f96298343dc8c015e49ccd1d8c62c6d99033979562ef2b8222cd384bc26d0fa1a8d7f86e9025f78b860a11b00fa89971538647165afd5920c0c7405d2f2448966c86086922658b16111352fda2b2b22454b6cae3c46df4b3ad05722ecd54bbe0e90e0498e429020e9f5521e7f183aa3b670e2765d3e0db243f1ffd5f7116f17f4414e4f48e1c0a2899dd734b7b91a37681a339b60aa42263b8ee4c3bd1e32cbafb236f561da5993f7273b4e901c2475d6b71cb6e8f3a5669eed69074d800f51c9f91db830fd3299c70248c1a005752b5cfc925c2739eddd3288f9ee0ed5776d064ec17d8c22cbfb9bcafbe7d8dda58e78e19623cd2bb + +N = a77f16e4ec286d0e6dd7c98728d805e5fccef5760cda9208f76990cece67460ffa59d5ce41286464604902cc5777253b458c0b979b90a118f13ad0bae4eb1fd54ec6a3dfc42bd2ef95bb6dff8e9724dde4fd307b5b7c1ff34bb8c6bfe0535667cc7b3375daf15f814ef185a4074eae3d452b1221bf6a1ba5c70280468004bd5d57ea7108d4727fe6530b5b6d0b3ba43e48ad6a084c37e363e3709a001e63684734fa67012f4ecf45c814eb28cc8c99defc5dbfe2db236678104fef6078222a2b8f0d06245421c94b82417f0288051b904277d480e61e93aa7125cd7075e836363657597d3b5f4ff660bf047729e756e6955b796ba9117b4e4790705fafb38161 +e = 010001 +P1 = d1d109aac5beb310134bb788fc8bd82e143bb385dc2380b2d31f925ae8cbc5eea63571923482fc98e5788c111ea5f1fc449572e7fc60e42d2633d369daf0470e64888e55fa8a2e8f9d02cc6af2bd32cd55f1b605e325aa48e7900e0e1435a848fd6f5e7b40ad02077c9280a5bd505ed58fe5c36cba550657d5439942c7991bab +P2 = cc5d5a98508f64849e3f177cae51fad7765254061bbd8e85e108544c68599e898958a784813584a6e749c8becae9ee8e36bb8ce92ad06f1602a107f5683a1a1c0da6306e6bd7c396d2e86cb2db8c56b821d65272b654a6fd36f3514b3c6ffa9b5cd2575d0c292636730016c7b543b1fc084c42724132352d0404ebb0e35d2b23 +Msg = 83970c4848cd2f951792834731f35ba63ca581006881297d67f770fefccfbb9b84b7d996e7ceb6461f64fd6d74332ac27df52888724951ec9e3c9ff5b5d4bdbe437b +Ciphertext = 4770fca6da83d7d74cfc21a1eb16b550a7462bc5570cc9a1b2de782fb140135819b86d34c316b76f8eff0862d283abf97d0887ff195595ac9106d9b55a623bd99295c43874c5d743b02627695fdabeb58d5c381160d69f2ba97eb63fb9a16c133365896792758514511c193506808c37a0426e6e582c9ffb2cab805ac1c06a5edec5a6a267d1ca2c226391453d2c2aeb589389fdd33d8324ae86353891a9550128cc35e168acf75dbe8a571a94c99d6d7ea27d129f20d12c26ba14b384756c3ef2bc8219f318eeb31d4f6bf5b9ccb17c802f16b2cd338f51d01afea2e62a6b2655b2d068366900b9b3c2e7944717fab24f3783ea2d5080d9a092e54c75e8086d + +N = db8cffd925b19b18655fcb3b012228eb150dc7a6c119a9298e7d0683785f402a1595b56000d4461b700b5fe07d8974b09ccd371b1d9c78d8b1da8c7302e310d6fdb9990d74eccfe0110bd51204b8c848f2609c579086d6cfd02b8e70ab8fe0cd13209bf39941068f71ebe2eba3e101cb470ded2620660247de4d0eb39710ab0cbeb651ec3098e714e46bcbc58656a1a061cb50f9e47f2a81ed62c985d577861cdfd3ae57d2832b8092e546b5a6f172e0e5a4586f2bb15d027e4a29f5ef956c28f761aaa03893d27f87164bb5fe6418fe6b2bec913784417172e628051b8064d8f1748e5de2a2884afde873e5144e9fe8d80c6fefcaa2a5e011eea88ac40160c9 +e = 2565ea8e9298015d +P1 = eb8248979e0a7ec763229e7a0ba784515abfd1b35dc3f5a32a5b5991a59cf077b23485845c9c07824fe1ed333365051a04ac7324ea6464bfec0b60f583f9ef099faf4aa976523d1e15988aaa1e392fd452ffbae3d33b5e34624dccc7fb07e2530c6dea1485a26e86721ca57395735db1205881375b398a99b15765281265c2eb +P2 = eea743cc1285c532029da15462bb67bcf4c7ca3199465b8e04ea15192b91dd84dc7d902fc66936df11dc13da8595e7005f78f47b7ae25125898c49dd6579a25bbcdc8769c3a482e7d8cc146fbee0dac8848470391233605c10a1758ad47f6ecfd822b10e02fe88ee50a789bffd56c08329069ae70dd7af1afe4a4513efe8f61b +Msg = 96c0da5e62e44c7f03e98ee83d056305691bef68de2e4b26a71bb6db12a7dacdd1c4511978d4d92e2a9e9076ce053574b0f5cdcd1d41eddedd7de03a0fb274028bb2b9c1553c21cbcf02d50bbe250f5b66c9bb7e769d7b4b85ade3970f21b424faa6dc451c81983f40fad06d70795b2ea91803bb2431dedc0e214f048fdcf286f99315af27cb896eef0077ce67b1bd1029d13a029f3d2d23b249b578b8e7b99f5f31d9e80503278ef3adc9ee42167937b40a2ea7a109145755630337d19b04a51ff1d4ab4f04b7 +Ciphertext = b034203f8078b4148aa926b042af25a914b7a5da983f7a31f99f3e4d98da3d5a9dee832a05bc93a509dd58bf34283a9f3e40697451a6316245d0795228bb752f9b6fd6ff8435dbd19d1e2ee40c88a9ee6804bb5b25bfea20a1f695cb8cf65687204a22720c5c212671f6b4a00f83abce0cff9e99ac938e21addef43b55092ab347fcd98e85ec758a881f6c5f504dcbfe47f2dadb943f6447670a1e51e6ff75e84e57f799eeebe3965f58397085eecf4ace410fa902cbe702620c15f5127543fe08d63f173bf778f67059a230895af0b5886957d79a6b0e3f5527a1064799a8902a127913a2a93efe3881d34a5a7ad8782ef67a8ca126ec479e202bddbd2381b0 + +N = caabdc1d71c7373a258fd2606f53d8d496f29009db3bdbda17f30e2de7fa3b52d5d9805548815413a1884f5959b567e75901942dc85ce17059edd7f8e434a4613cf4c45a2afcb010858c9e4d3b2f1485f7c6f0008c23aaef0ea5ba92f595a3ee224f384ec5b920696209fb85033fcc969dbda438b0e401a73bed098925478555ed8b672693623b94a96ef0ba70161f02e6a3eb308414e0b99d7ce64c5b305dff45f14c8ecfc3242166cbc2c5a16ed8c95d89dc03b5a9bb2e9a9856bcfbdce6690c41fb0306e1277c740be06f32d6300b815692181abb10162a376f5acd9bd158fea42b788a1def028cf595653e2c1c565ca5d147cd8c457fd7011e9f8b2c6afd +e = 02a5c8ad36a9 +P1 = f740657dcab38f35168d83af15c81d7dab05a3d30fff6567d2af209b1b21c208efdc4f984927835bd5c1f7748a603f6bf850efac55f3b7e5c9c475f42e9f1d51ee0ac5844de2462c5c0e0f55e02cf989406bafc444bdbea16efff537e660cd2938bff34c89f3d3ef67ebbf513ed25344f70ef8bb37e33d86400a3a814277eb37 +P2 = d1d7a7e97b084b98a619c7345e41ce37bbcf7f27556d3ff9a65eb14646d394e6598ad1749a441887a85c794c8c561e1bd647b3a8ea2986e18f3e5a313ceebd5443f60c3dadd5331c2a6a234b77b98dd70951598650ffd6fd316f744e97808e37397bf67ba5e49928334f364e06fd16d8641b3c616b5104b4b02155d30a873d6b +Msg = b3fdbd4969f2b7c2 +Ciphertext = aea6a8c60058af4f45e853ebcf1f7734582a120a093248ace98e6a0260f5cad928f1cc00c2aaf549e3fd20faa1e10ecdb7ba6f59520f2d92e7d0523fd2c9d86aef0089ca49941533aa311a324f81459edfb5e1418e59b4fca21b6bba3450e731859985d161a4164e5b962708c45ce5910836fb504014872d102b2d7cdc52a7a778eab52076940a3f2315084e7c85a12fd14b51605f806b674de1855bcd84a2e0bac5a7b5d038ff288470f115aaf19154a38aaf1dc5bf815901a18e3adb1c1f4fcbb8a860f3969c28c6fcef2329d95a54b86920201b87fe9d2788ce7b89e2b466ea283f10f9804d5d7d8658444e2f14a21f9a40968d4750638789870981dc9e20 + +N = 98c450c02a0b84eadd4b0638f2cb647fd75421be58aeec04f72cf7c4310e7c3fdaf05ab020d33a71e55423f29187f040c9af2a37ee537fc2ccc78dc98f041d109bff92703a2dd393a274e0de87dfeb8c6072c72322ea3003e1427f367b7ab94928badc9cc0f92e3f5f81c885d190927c892f1615503755b4b4aa9475c7b44434cb632ad7a791e13f35cf8488d29b3b7df02c1fefa6a23524474306096a1c366f440abeecb3548d372a7a48470708bd2ef2becd479699f66492a5c27c2f9240a167a5613990fd8c114b8aef598e1bf175893139ae7b7cd20205468993dab7cbbd8c47efc2de2731b50d1b840ee887400e6cdb44186bcef285de5d5be41f49b3b9 +e = d746139c67 +P1 = c7af2a48e5636afbb474b7d4ef0c1f7c5460148d7911ef3b7b95d3f2a066e5c075fe3e0fbd652b2fe481a2d377361dcabf6965b180f1248c83e8c7d4bda1f55e0fd44fb34ac84f21da84eb6bd9d28a8af3058fec9d75560a9cf5613c210d2c9192e4b4c185368ca48ba5daf7e4c659e0c2d5221a8a3e59cb055c42de4c0e0bab +P2 = c3d9cd33f491a21456b52c20ed1e6caccc3ccddc24716fd26248cd1f0811c13c6cd52c79568300821323a86dee94fa3f2bb5fe1ae9db7cf7c2a5b4a112008a6ed241228efc236933c71a358176c3b6663d9311b014a4e739297e743841ced231b0bc6ae78c467559f8c1668d61538a6a70a45403fe2105cdfcf59ba38ddb3a2b +Msg = d5f5e26690acbce99dce6dce62fad00ee3aa70084ade54769e39269f71678c38e2e3dc20490f4aa77e8e8edb842332eea6077fb52bca79ae6718faaa040d71951072c5b266730c15a07acfa9039e89c8203f20ad682914e68467ffeeb8a93fbf04d2a338e80140d5e913fd75c498857038690ce1841ce257ecc265022472023c35b47d246dc688aa22a953426a78b0bcd97f20df0d6046b6ca8489a80fc38f1d15805365e3fe648c3bdbf808d1bc +Ciphertext = 62a28b4b377ab6393f28314d65fb0f96a91f60a8a8b20442c4c3c07e0f1893d316e96b9e6d293a86e510fe100925afd3e630d2b821f8864b36abeb82d38f0fd9844db0f5e4cb98954f5487a14e03367ef8e10430a7395f0c23b3febd9ddd44e805c4508632bed61097baa0553a9720a4288985fd92496ec97e9a872c9e67baed86ee7e27f2d92d944826be07275bce5a94e1d158985deb4249fed95c8a4e407106ba59807f48e4d17c69151d4bb146341f9887fa2a9ca352020dbe8c6c48fb9476f85089b94e98181327ffd7f8d9c0ac28bf70268c2fed96c4b54368362f76955f47cb9303f89c3aea328b2678647584e84b3d4e3384494c2b5c8b79b0a07fe9 + +N = 9fafa747c837dc4716530751db7c969a738b53f3e67e07204eff97726cbd85cef1a40da9e5c3bb7c838e1fba54607f4dc6e8e8eec97135ae473b29086462eabe1737894a0d3ccff0bc089bb5096fd91b2c6bacea6a0b9305e7ef23fa9e89f203fd271812d01eb60cb9c6740ad1565cbb9feca09c9588b5e0835c4bf9518055606ed8c4714ab3f7e00234b0fb3f9d8ed53e0ca868fd6f860eb8c38e54fd27b51c0b2c55afff79462ab9d4f166a5ef0c7ecf70806a12b5f65a087e2e16175d4199 +e = 03 +P1 = d469869aaa7efde3d2e6cfa9c7e5233997ff3d559a9218e5871f37f6073718ca0037a598bbbbd89a913fa9d6e6499428827ee9ca85f7ef08ef3183136af527b1592ce1b603ebad4b587dfaa6d2e868590c5957a402ca1882d3783bd9425cfa77 +P2 = c0745028c07bf4ea87f1508fd7101ef9437d05255f9509dbeb949dcc798fd77bab91e1b5b96f3aa2ed183ce7f12bbe8a1bb080856d1cc8077cc5f29c175ac99338a6b60712a3a820ae28d6812d218447ba4428b609df24de9faf44c285da986f +Msg = 91374c23b582688c54a213714b5a64c27491319379a71034df72900550ed46545c39c7401ddc67f8457912d347 +Ciphertext = 023f01397aeccfdeb413f47ecb8fe6d9c357500eecc9251191fc17c90ddf16af9ebedc085da61de19311a39b0ad34be4842ab5326e0d648bb97900a5b41d4b7812de51929b763057cc3b02fceb3605df579fc9d5877e55207aa2e20d35cc5fb4663c9f7730f98fa844dde79a2d183b023638e023c192f9eb78878f9e7ff91634bec984a209ff18efac7f4d49b6bc5e1c542d8d334084ef939901db5d8ec3b23bf368daa42bb9ab6efd77d87a8e8e22f84f8dea2530c8170005fdd962143a8b26 + +N = ce7a3f4032995397e03a0f2c166d4b0aa7cdaced4c7e9cf231756ca6abbdf15a406d1559ddcd9d2165d64418b1ba2bbb66ee2562cbe4a6f888ed63e9ab06070d8e25dc3f6a273b213f0848acb46546efbc95763ee71e0b0ce89cc005fee93c7e8898db281b4506820b76d86f395fef3b465f74b6262a782a31d1f3ec9b06a64c363b976aea8560722f13111b10584c4d25614b7db8640ea3d10af9de1f2ea3c6c4c23313a7b0b4d52fd48ec5b9c493bdbc49be14c534294606b2275dd4f13145 +e = 1057c5ba5457 +P1 = fc37ba9bcef42e263e3a2b0639eaf809adf5989f2fa80f883534e5e25454b0a5792a492c0238f74c46d155bb6bf1e3b7df16c396a36b15346eb2ee81583038e8ac5ddf36c6bdc5c6da2429f2a1b1a37e3be61f5e18893faae958c204fd3362eb +P2 = d192eb99aec15f1dab26cb11539c9c736e4ef634e11fd84885af61f4d628102f6694a6c01885dbb50e419a0760963b9a2ca6418b0e0f596bec42bc8c2f1642b5f98655e800019e7038f6702b7ecee5a84e046dba5dd2560a900593878b1ad08f +Msg = 4762ec17e9400b0f04885c4b +Ciphertext = 457f04490ee1deb947b3e4c74c567e1e44c5d95f4bea7c0c8e3eda3585991dc35d5b92aebd482224c703df5517cf82ca3e401395f1cd72a25477d4b70a4a98f54a14fd9725b64829488cce1abe1ccb0da238da3ac8d4e64f5c1f1b332a919f14bcdff8a09315d3f023b842254ea1799506e805d1a389a2cb1e3c7d3cbfb85b6b5d6f6f2a205bde3ca916cf67939c08f25894b9ebb4ff023d262b952945ec2e4cd932a01a6aad4fbfab01f3af685f1fe01776dc021e00e263c06bcc12351005de + +N = d887c0c4bbfc790b4233e05a6ce715c681232b07df6e49f9bb9be4450a3d74d1e4a2488b7b59cead1b4be2cc85196a74293cdc395437a0a6f6a64ffa1315142df4ff82ac90dca4e816be7000ec7a99879bd2ac586c08c59069daddee56223024adc9a5fa427fea55d1d3345f687defab83f94759e5b222d486b25625aa68a8f5 +e = 50223855d9 +P1 = f16a3d5483fd073a5de266b11ea20a70fb7b4976e41ae58f1fecbb3d33cbcba8f3cb2cc09bbf75e9b6e760c053fdd32abdc8768ed45400c0ba572fb58084ef0f +P2 = e59ca48a988c6ad90d5923f666e7326ebf057dbb1b95cbfff6416b7c183d5034c69f2c04bc2a40785e5fc2b27d582e7b39c9bc97467a84f965ac43e5c0f167bb +Msg = ae629baa26f3a669b2 +Ciphertext = b850b21e3117dbfa501ae69ce83d73457b4d9b941e76a4e1de89f74bec72cfa064f04669436a0a08132b9e4b7a845a3f365361693a7671daec6b8de952f2a0355ff8d08f683c6cd4e8f8ca6785c188a05b26126c0903daa2800f40a6aac005860f7be3c5e5901b4ff8b609a435ede81446c116492a449af612867d38f0304245 + +N = a33736e91b304f27e309841df5ef849c25749054d965762ce5feb8a028f2b4e3b7dea461121aee40e7aacb43003813c4000aa43952d0d030237eb2ee691b958a62409c9456bbd085051dce79963fd8d3afd61e75956c7baa35b0b407333c827e6458ec87356449daeeaa55e1f3e91fdda0e4d673c59a53a583b196cfeefe6b49 +e = 02ccddf37ac0c3 +P1 = c5b9baab3e4ea5270dabeac46e8b6ed08b0eb095651736feaf22b0f0b51228148d41c8464f984a9ff804060fa37f89bb328b94d9b45011725033b3a1a4554cbf +P2 = d351bd674b3ca1e20a7979e91767c9e42d4edfa63dc369cdebaf1ffdda2642023c4114a1db67be4bfcab32a19c304c7b03773dd56cf676d17f9201f90fa361f7 +Msg = 910451798fa7b913b5cbc1a63913b2d720b835dbf36081f2e32c920d244c1204ee443bdca37d7c9181a8873b3a03e3a0e5961004fcac2f +Ciphertext = 62fe9d4894c12825bcd4685f6df007d80b8d7d11c770a513f7adada1a57961bbd2fe5f57d9b89c5c20f63c9e42cc6679c34a9ea35fb97a7628cd778969d584026bea9f25fd83a38347e7f7044be7ebcbe634b8d2c34e030802c1ebdf4d53b34c2446e7ef1643505c728aff2b43aceaef97dd59205a1c74e7f3de789885100234 + +N = aa48ca0576f4c9e2f0df51554898c88ae37d6d5748efefae7ef9d194df513fede53a6c9de0bb1aed7861b0b6bd7c02e66c5d183261028d110b86c1003076113af1158c7af908849e2ceedff6cdaff37a82fe3dd21c071b3ad61becf27048df7feb9c1660ba91ed268bc66170d71168a114cc1f26494c490725fdcc762a1d1c25 +e = 010001 +P1 = c63e6b6c7f705a131ba1c181f48d860136b38f58bac6bb4cc95bf86d229d80d400cfc6e9ff95583c530091b302221cda6516c28ed54560ea39eb1894be0f09ff +P2 = dbe5127324879bbe0cb24a4baea16f26596a921a4c38a828703312e192af72e5556395c4a9f495d20da076dfdc4b63f249229bc66a97ed3ec6315c2cb42a71db +Msg = 37d23300aeba96f778 +Ciphertext = 84dcf53fd48b636a775f2b9b852de5eaf02c08a799d85abb24bfd6621e6fa837283c7e0840cd1dc74b8af8ce94340804d0cbc6f71c11e5415e974b010679329aa9d658294d66939a60d17ed322337b2a983bf92593e4a6a8e7ce98b70d4e81d696f38a85c6e7454712e542150753b4456bfe56a59d2abf0e70e485a6c71ee118 + +N = b0412530d56dd00a1e1d90f75b1725eefe29e644e326bc36681d218e2f43a6b1c989ec8d7ac4745fae98fa308cb64d95c055b6ca5004d409a682f2dd4d618cc5ddb5e3199091c17b4956d89bcf126c8c456c55c63058507fdfda79c61056b8a58f7c38535c8240735eb981480b524607e7dc8f95ef700ea6368784a4456ee2f5 +e = 176a4739 +P1 = e814e45e0d8d6227a75a1e197d1c6f4c7aea3aa4bfe19e95758363f255f1c5c0a2056491a8d4275f290caaedc72ac8a3e9a94312d3ec5d2788ed4639e2b807f3 +P2 = c26b5794ec3b4c60a65e59fb37bab6b8a7023ab78b2c6ffb43beadb1a20e78294fd540703361b02a9369d44c25ec056043704fcf8b09fc468d35a6e134f54b77 +Msg = 245d553a05761271dfda73f894dffccdfdc5e66b6cc926e1fc9d1fd1bed53fe42cca16e0ed6ec900f4cce4c317f9872fa08c416d59c33d42fe8bf58586294aa184c45e5677134cbcd4c803b805dd880236a821d0b58ff244b050aa2391244f6df8c5e7701616a1f15043adec325c +Ciphertext = 95c812e3dc4557f4acbf0b55ea4655ce10c9ad3517abfa365cfb87e83a64fc6d7a238fad920ad9110ad6c2695c4490f6e7154ea5dbc0821092895adc16431f5555a9dd1556ca03fa367ec2b77a999a0803be10b73e15a0190ec26ecb1f5d0994497d03b55dd4029999250e6e8e7b2f1a572244ef2074f24b5e69f1fe14730267 + +N = 94a98fdce949f555aad44e8dc43d6fa2fc1d5bd7940a59f1c8b28b8cb1c4dfd1499b898aaa594c791f084b1949006e37ee5eccbc28a8ce173891ea22083f4381e22776feabd40bb77fa553feabb3c67222a208ebf99c5a0fc0c2711569dd866bf55a063f17d03d9cea4ff715c071e1b329e66915150e10a3404a24de5c94e421 +e = 010001 +P1 = c0942dcf4f9050dd1cd5ac1cadec1209cf97af5e29f7677fc4908d14e37d9a86298a6fd84b51823d07ccdbfb634cbfbbad3ce0a81e4b8c3db917005a4e70b0e7 +P2 = c59ee62e7eb947599d6277090ddf1970c54bf1b9a8e04c51bdb9fcba2881ee196ef01d28e546b036894eb9362c84d784a7c4b53e7000843260b1309aece539b7 +Msg = 1e101e80972487f2b7fb60e323a7 +Ciphertext = 30a8c11382077189f2f32389c30d11a2e8390ba98eb6f4f147cbac34adf36eb26b4a228ba9597979cebcdbc970178f6ace33fe7785f3b79c0ddbff0ea2c3134e26466e6ca67d40f734aabca3e58b2b5e97136fcebbfbc994326f40a3c35f0d2e4e55b1728d9fa9bf6e2acdc64c9c560c37d2a4089284b91507842f105cd8c7e7 + +N = c1ad299787323d56178601df7dda49eaafdd26d4d8c86cdf67e3705b05c8ff6c36bab576fb3242779ae86a3e8b6a731b5b667f7890b603cda13742db91617a551300280c80ae2e2ca65a6d3c65b2a839103ba6f4db577cf73fded88b9f6735fd +e = fdb9ba4b23bf +P1 = f726c3ea20fea75212190c10b48a01d26224115da760193b8da3dc8705a7ed8332e330cec8f17b64442b39ae3ad649df +P2 = c89c4760d32c5d95734961c5541f6dd5a1f2c35f3f5c6357c92f83d03d5aea890bd5b967699e42347f1bf683311973a3 +Msg = f3aa58b1d3f175fb9ae799d2043ee423f637aff28ec291 +Ciphertext = 33fba56b5c2ed3abfd3e2fdef5cdd24fbe2b14f2f4f03231d34486151a37d282c386be5ec31b05f9fd6a7488fabfc49deb26fde3f4156db54bc87e9e290538dad81583ae1cc3fb78db8abe6dae36adf9f2bde8c3fc23c969582f060d3d172bdd + +N = c57bd8a3d80b6c93688dc8eb24eec82294b50ea467cbe515728c2ceebdbbf3431bd9fc0bf65678498139e3a4bf9c8db6907c07bd17f2d29930b826e8a95c17773da560368ca3869fdb9634ddbf7cbd1d56b03681da5875c97aeb01101446c009 +e = 0e7505cf8da9 +P1 = d056e5186b75d0462545fef3d2fb701c41ef27e1d025602945a3df9da188cc73adef3d9514676f0addde912862d28dd7 +P2 = f2a9347ab7920c71633014cb1c4b8c7ac193a2e86ee093de8de9455aefdc8ae395e7768c68ca023fa3cfc36b5004a51f +Msg = ec044ff6c43b02c6415dade776306057b0a619a73e4b546e246df06168eb56a5fd926488fb92746274ff219e09470e78eaddd2 +Ciphertext = 14a76096466d781a9ab798e0a3137e059cd5d8391212bdaa97176d36154892ba2fcce3a81cebac0364fe4a45daa6992b57061118fdcac8656a6efb957af936a41c131f569ab86f879d069d7c5d8f223b4061132feb8e8175ec20039ac5a9bb4b + +N = a2655048f6ac40e4ee7d29f61bb0ab0ed1f240b942636a4082f5ec510a859d9618e594e1e7addd92922d2b8528a378c87dad0887930b435a96c987c4b427623d +e = 6a875dae83 +P1 = d3a1a8b9e5eef60ac32d420ad0d6b1d8e16939f1871b0fa1061a70d65e35cc53 +P2 = c471279cafd516d792780ec9048797a1e70febf1df00af787d8eb97b7c69c52f +Msg = d45bac +Ciphertext = 3f6f996dc851079fb0581eee5818c1f90c4b9852f36f14d209305a7128c0ca1b7c258fda7b27f336f655f538da7692813af566f3b0d0d324f1ef9443b1509a31 + +N = c364b4d3d53f98034ad658a92c1ee4f83118dbefa959729ac8a9f5bb26219a9d6c95dff5cea8e7b8af7d87f7dd1af29489482d3567fa00fb4db5e1da39842d11 +e = 0da9aa822b +P1 = cee261fbeba4e2b38e9ffedd5468a62bc760ad6def4eee1349d438c3a7073337 +P2 = f1c7f348893bd66b29bdb4b899b52b22838bfce9b13244e9caea68632033d5f7 +Msg = db83c8febd55e85e36141950e1ac1fc5f43c4d8af233 +Ciphertext = 862f92bfa4b35e1d7bfb7195ddc9a1775d82f05c854e9b715e3c344c5a172bf27cc5a9a8a4bbea7cf59262accc45fa087a31674a20321494d848964f8374ddcb + +N = 1857343231e79e427ce3f90182d54598688813612ea1bbe540ce311e5d26b40f3e8c8281b15fa6eade4a63890950254b47ccbf11516ed9e0f6a92c5201d423f90816c9834a7f6ccf85986589c3f1b6f3853dac8681d0098a606d7ef4e89b5095bec42aee4111d117fd1cb84fb0eb8d6bb56108ca399fb38080775dbede4250df37bfa8d0c697ba87d61c3613a4403dd38d62f998988cd6929790b863da451f82d157bcfbfe436e7f3b00a683dcacdd209f8785767abf47e9c912b94370c94fd9f589ed6c2e7f8671c85649f4ce630a81020f63c072467f6d0e129567b198848b71df0988c932f21889dc3edf07ec04fb9959 +e = 010001 +P1 = 6470a5af52f649afbf11f5a8803fb30fda7b4694941878294b4b468c00f9c5886e6312972c5a21e62018fc7b31e0422fda3c300f54a440dcf5395bf64b58e565f4751f3234483413587a0276c5c1877466110f1656bac62fdf1851f687a0091091528381289cae3138084d90ff0f669eae34188a99838412b7 +P2 = 3e09ff28051f6aa8007313eef5bb022a982b0aa8566439a200b0180531595560838975860bdb2e42b361fc7ba42fdba0a020744cf68736fd8799db6ff7caff238e5886090605c2625b28c2f2e20a88651eb13f37a7bb24eabd571e3faea036c2a7d814b0153c4b128438d3b066b14a49c206ad44774bd8646f +Msg = 5cbfc0dbb29d60e90ba79e5de03f6aa95652d9a6060e2a661bcfdc0cb9dd45e00d6dece3e5f5c1dc008d0a55693c228e8563b73e780e4225f5890aa3720ac7b9c8eef663d23f301a8fdb47d724a234dcdcc12b0887a9f87470d40ee0eb8d0b7657235be119bda89d644e3e6c5f2878ccf2 +Ciphertext = 0a135998b1164e250a8a127dc7cae81eef4259f0ad278f0d4e6d1c875fd3c66a6b15c2ec795fac55b1ff4d000f0698dd4ad865a263fe0ae365c5ac15b1d3e1aa3d3b70513fbf9dd12f29a1c6b86223c08d73938f3b40f83c004954d03a9813059438f7f929ecdf770aba06f0994850a5e45e6bb92216816060752b4275b4fda3ef1ccac1ae1fb16d4db621b1a8eff4164313c88a89d51ac01390d5a251532ae412b51d1753e18ddcc635002058d75016a08aebfc7ee1dc4a0a51fb9f43a71c367f02ef90f37810a36ecae98fc7e02ba3e620735d2043144e0fdaa60c11fc31d61ff4de06c2aa6ceafe4891d9d56a3875e2ac + +N = 019708cc109a205341a3d97fa8901e650b8cf8768af5d76def1b864c911ae5149dc52c8b806bb5415cae2f8b94efeedc30cab1b3b77502b00da93fcfa24b86550499dac2ad7a735de669e04741740ef31317351407367a3b9060058fb309ede4330cfb2594b39bda463da6adc35910af472d6c7036b84cfdd65ac4842e8ce0bc5722e859e38b940f6645be9f567e5b23ee8e7534c28e06f4010a72b17bc1188eee5ca9b2dc3d05cd3e990d5b785d3122f347f84f9b29d4112470ee9ef2cadcff8657596d11142973c35f1f5077388081088a9995d703e9ce40104a5b498c888b4d4496fcf38856ac82a39f74f6639704e653a3948b605aa6963ef4f2d05041 +e = 0153 +P1 = 01c66d61f6521d729e5f419b1a7afe2c452e3a81beb5d2664cf1fc34ff32a5f9da609c4a740c31abc84c4623af4fbcccc723a41f3367c8f37349c827b7d62bc99737ed5d8f3966d663462dbc3476ba8934591901ce9ac9fc0886c9ded1cd56753ae95e9c2331ac6713c41390a87052e5f9f86dde9797cb8a54554049cd0b8bc7 +P2 = e54d269bcc63d98d20c73452c666a0e65b0967fbe7130fca7810ebe4c4429a3f18e5eed2367a6774f9cd04c5aee625eecf93e1b85e80b238f54c48810a3ae3726a8da191b69402b67271e7fdc6939055eb0839e3f39b233ebd9c7c986c6da951a06f0714173283fe6aed588d310f76e97036c23d8ba41a57d73dc5b01373b7 +Msg = 585b6dbdf344775843602097c53f2ddc4dec +Ciphertext = 0122da0f693e36ec4b371e459f9efc6b6b991db229c1f1eb9600f22b66908039c08db7c5efc16c94d913add385e46dbec3b2fc86b439d12f6852cce77f371d11d319916eafd1aa224a8e8737f304ec3adc28e5d2418849faeb3bee1cbef636e185cf0e2ee2103147bb7105dd000111980482e58bcd7af19cf27f6aa7574833d7b5b4d2c9a0b41f7d47b3444d91c72827a1a1559b44bae770e4c33934ca070891cdfa783dee85eca015a11fef8a8028fd272692ca62b6995b6e234e04b17cde1ffd87c6798afe0842964d6a8bc29abf55171f3cfbfbbc20ad2bacd9ab627a6b6dd038659a5e0100e589f2560ebebe501db962ab550ac79dc8a02e81c898a7aa + +N = e0999768b24814b483208071d4367adcdea3be9d0036650395594fc474703cda498b3f4d2a94a52b27a455b83d0bb618a62da7e0cab17195f7b77fbbeda67d41bd37e3d6f22e76c908e01cb9d49a81581e88bdcd9a94afe16ae47b1757ca8bc454c82d89b90458d918507e00764d0e0ed7569b4cfcb5052d282325ea7f668f88ab9a7db68bd4542fc55069a0ef96f2021818af0b364107716c0c8da742cb0656d4d63d801758242c1b5c9f8739b6e774351b0c467f3297afc7d6e843af512b1594f56ca6b3b555a6a307dc1b4cbb09c12a6ce1 +e = 023bdcf5b6c87a15 +P1 = 0e89342e02373dba3f444f461c9cd3e69c4f70bd5ca5b7f7d7db60a2d8926858baa438d50e167dd51a2b92a00b6e151b503ec6870e398d7275802ddd55f574bb9dcd14a88f7df7e5b54b1f4e00b73e585dd1d35a0e0849902aed13b39b6539a8898becbac57d80e6f46f +P2 = 0f738b1f459a6e7c42950ef843cc461e205f1608aa1d02bc9bf6c7d23bcc4647d66e08e1c4520a1cd912bbf6c1c6a9f0ff82a2cd82d25a97883cb9db349e114cb723cd9a2ffb4f9711d3aab7cabca7f99a6f17c8856dc07a6170f23aba923db0b8d9540d89146da87baf +Msg = f82a34795ad2090cb5b5f06f088965449acf0656eb30c467a11c5e0a7f140b55da248a5db4261b34b053e691b0daddfeb332d6dff09e3ebf104c101319dc37d529cc13dd277ff4458e9956e51885b1956a559a3e273a0c3a133ca0aca8aac23b555a49a48d8d052c686601e950501e8b37224c2512515b3231026d88b992b74a0871c2d811db048bdabdf05015ca9f7437b65bc2ebc3c5520f3d9766eb8d67e2a5d8944972c059c817b30b90 +Ciphertext = 5726806ccc83fb1fd581c38b0b95a41208935d9bd5d6e1fd37fc30ffd9234b205976d3d5222aae4101760d751d61a3aeb1302bcdd7eae8548b731d5267a1e1570355a8437d289be6a711e886814f79f322c332e9c67ead41148541692f4ccae1b55e68e675cd67f5806689d69805710a90eed51f1312365b3c3897f0643cb4704460a6a8b93c99b683664725be93c7e0fe0eb0640243547ed1bb96dde345d1565a3a2e1663ca79ccde44bb819e985e7c1674e4690f628d1aedf2ba2f92cbc66fdc09d31a1565c5c99ebf68b1d4d60ee9126692 + +N = 076d1e3996a2eb7923716eb9486f39735d98370995977ae172142365dceb8688029bd1b97caef1496442500e22bdea6ebc3dc40b903d9899850f156303f8aae73c3839d5a2d410fec2b19d70b351f50e2a8bf44435c081b9ebd74f643b62053411110e4bea05aa51ee1a6bff6d3f360b605b1d8454574575e8bb5af246508988dfec2c3084644f9cbc13ae90e84ecb4ee55b578d +e = e3535fb0a710e063 +P1 = 3bbd45c3c21070d0e97afb5809618adb24b0c89f2ef8b10a812b0fbba81adf5dc5f5fdebeac1ae9633c050dd09e2bfd9903b0c6f05442374990b4086aca381afe0d60db15ed270bb8ab3 +P2 = 1fd2d42ec423093698f6fedd856889538630822cc127230dc672e43788d86b98d5f43427267c3e73f6ce3c9572c8a67442108cb250711cc004bfe5bc187ca165b08e64c1a0dcacf3b4bf +Msg = e03f58e23d458028d26f367b +Ciphertext = 036a96c5c9321ae5a525953b38c962d0263a0d5a0bd761cb2f6b5a6511dff4397a6db77533e2bafd3adf8ded94768c3e4bd6441cc107aea157a89bd5402146a3c9ee0936f10381bac3cdf1960f90158b94f1f8e29fce8fd2d3c248d388c6ef0c2641153710101c55b7669eb2aaf3a4137d8783efdb3313920b2f2f9f7585ebd81da36d57a55d6ba7e2869cc24797a86226f6a91c + +N = c4a916c0333891e49b4ed03052f0b1d1e195d98431ae6af89729536cb4baf4a501c0c5d4c92b63797fc2635b1b47471868eb2b8a26f88658fd8a124fe37c4f95ee20a533f9393c4315966ffeb91ae01ba85de9e2a6b285c9c38b4c2b153fd06d66775e5b71d2d1db56c262a5f0b99505e88e3a1b3fd9b7a85471e50bdac26e224e36b4c2c157291437efcdc057d4f19309736045f2834eb844b9ce83fafccff675ea5f0b1ec8169e7904eb906494b36d +e = 010001 +P1 = ec4e98ee1b68f738044c095cbd79dc6714c9f1f23b2f28aa68a62ef23725c4d9003b09d29359c38ae0378a9597a5762c6672f309385762bb8191360341115ca3d1278e598d2847f70dfa6ba26479c0cbbdc260fceac71537 +P2 = d50caaf9f4059a087c2a4653535a2c80397e3d259e9c5877c997dc0696921e6b37013cdc5144105ee98b4e7b48c121d76d1d3ec1b57095e5c5aa0a91d2a4537f6e5f06a81beb24dfd5a6cf9ba84fa1eaf88215eae49f8e7b +Msg = 898ac767226b9bd5074970d92b0d2760a367f45d07d6a3b7a401d6dee8038c867fa745d5967bc2ba1c26063c8d72b0c69058f9873716060d40db981b9cb7bc42d8050103b165920c2402236d18f695ff7b1aec6fa2f3d73e5c6bc252c6a70782ec6fd48728b767a098ab3ded2866958814ed18fd584bbe7a77d9f56bd6c8ff +Ciphertext = 7f5c8d6081b62ebb922ef06ee9ef65b0135eb9bd3f9e73f39fb0f27e1797751a2a7a661af0bb98c0754fd1882c4691cd47ad24a6f62e51f9c18ecbb66eb041eba608d8ff0fd447229742b51898ecdb4e5ca88aa18491c3201813014ebd4c27e119ecfb4509bde0778a807633f4899d4e33cc66460308ab4599a55f5c474841b74c240b9e1929d52259b3a2d2188e2e22db73a7482bcae224b8235b92d5d272e65c8faab65af0574d7c6f13c741fad10c + +N = c4796c0208d54abfba2ba48ad3231a3e172a59db3d92efd8be91c652ada5aa8cb4ccadacf777f7efdd8de67f367dbdd4f9c63f47670326550f064ea12c61400c9eb2a3f6ec5f2869013467b77516a304c1e37e5f42bbdd1609bfc05ab7b4a9bb0992e6ca011d302d2960371338ef6a377d5ed3a0794211048e965e3956a291d4bd9081217af28782207a22de66ab946b7d5bc8b1a67cb7a32c028669 +e = 038779492034c413 +P1 = ec64b88d8b9f197311bebb288978f5b894fb608ee89d24361df4e18096683f94223e77dff13dbf9b3193d55dd4065246b4720f729cbf6a9b7a736b6404964d10551ef6d746d6fab643fcee3d06cf +P2 = d4c51bcbc84addfaaca03ee5db61f063200db94eb3b5544239b759676ca57caf49d6b1f925d92d6cce7e81c4d1e9f1a210fe09be61267f03e52deeb3690303350b373d4245a2bbb800803bb8ed47 +Msg = 2deac400 +Ciphertext = b6e623a4ca69b68a649848267d312dac4059743d8e731b9055f982c2cbb70c238cb724f19746772124464b17303dc984d9b644e1023abbfc99e558674cb08d101847d4b61cf2b630dca9b78342711ef22c1aa49a3beab358e4bbda7f1c80d51c7be121ad25726d9ab1d480a137b034e5c2dece1e5dbe9825d3ed0cc7eea53581d747896fb76f56685d112d3b9f60591b9a5c20ae6571def5a6c9ce0a + +N = 616ccba74e44fc369ec96c2ddbce028298a0a52849d4bb08c646f7e5180dae9e16f28810b1466be543c5477cbaf6c1dd2b8cce2fce37bcc558981d42d1d0ce3880b078b0ef66528a358807ee3982d7897699d8f52c0ae4c33a2e7dc815db1eb7bcc6c62607020dac10a10c5f24395113a47a029007cf3b9ea8db95e3f59d71e6910b11f5af8f13942a72a28d88d1f83591d1a965166666bd693abe4a399dd51800b503d992ce8c58ddbe442600751a0a5ed48dac6f54850194940cce769c7c1f14c7f430f62aa9a42b3722ab663373ba659779a0fc574beaa46099f135d64532447bdd +e = 010001 +P1 = 0e515b1dcb5c9022cf947e3fe4d5259271dde42b047a010560f806a19a294c92b9618c42f10ab5e70938727cd8a872051d5fdb2857474500a9d709de221f6267f8a078b76d181736f0ece3b55572170f6001dde2c1b445a7519085a7649c58e8f5190698807db8b18c858e34cc79213f0973 +P2 = 06cdf19639d1336171e5b7cc535ed2061fcc76c59905c8dc1dc36aafb560bb9d8a8396ecf0ecee543c5e9e9ad5ccef193925a0ce2a6af9eb3fc030d0e994b29fa6f9171cece8072f6b22732c2871946a5426f1683ebb998555844b68bb110f5f2b8892a42bbca92fe824927c271a9dc6516f +Msg = b92c29ae0acf6a88aedfb1aac813e3e00d3610bfd722cc8cc5914e8f3ae261841abf1ddcd60cb2c8a56e41d7a469885a9f36597f4f5a8429cfbed6003e8e01472a6a16f5f055cd4e8d56d7486464fb07a9dbf7189f901075811c4476eb1f891e1ccd010f6a34ae2caaaf816f8043028138e48a6180f7515d1c2f2e1c4038773d4727e3550b4ced3ae180abee9376450dbe5712e66e9fae +Ciphertext = 43dc746a63127b36d3e03cab03600d79a9ad9784b254c732517034896c4fb40f8658be3f8eac236aebf8c3d1a8c873564cc5af9d8e5b508925f2794342d3769a2565024f01247e54375bdf772a7d340d7ff2afcd8ec42bb73668b58b408bf52b021fe5915616e53231f033e040945abd70a9834cc98fa601fbf076533cbd68c7d3749d9c9088248f50eeee17494064ad0aaf33be76d8eadfb77f6a2b102a069baa74a89d2b46afa57996ffa5ab1d0d5eaa059cf5e06e5c250af51f9c593c811a236a31197fe8146715ceed0ae08bb09ea1e067c6436264fffbd435fae45754b75fbd99 + +N = 0742b992942435c282671dfd9c31ba82b2c16393bff869d455b6adc48c98b2871d324be121951ce551e7723cb5b226ec1b901683a805e2d0f0d28a6b55faf44846a7e2ba7b3767cb2df66c6024feda8538258703b2d07fde734c3303402ff6663a584f727519365232177a217ba592787ce76b29f05e8dd7457fa59293df4c7b4a23a4fc9dbe00b357c8bcad4837580390475f14302a679595967f53a68c7d2e41fb90d8e8379551 +e = 03ff594607 +P1 = 3affe8e7f99fe441bb62a2fe31bec9881169b7cb6e077b80ae4579622d96f7b089b803c35a1603d51f6cc97aa121cad894f2f7f2addf177ab18ae442e2e313c65211b0dbbcacc50aa0924926d940205c7a06b7a3 +P2 = 1f8106234392ade6b822033e76ea376d666bece7556503f76a5f450e895061a3cb22e23dd9d39ec227dab8e9f007a731fccb7acbc51859a8b48783c64b36f605cdde669844b24dfd974ed2ca89dbf649912ade7b +Msg = 1bedc93512eadaeb416d4d7e090a1fe48ecf851b9c24f64d6ee80649c787bd97025b530c7167fe70e2391e1ffc1bcde567de58ded936 +Ciphertext = 00708f83a4bb7d6cafd21a986b1e4c04dd1cd8618e0646a8ec224b12273b3a17f80be455978283023940d1c43b21b475d3f648097a89f119fb0b165afe5cadc7b60e13ad3638e03f0c24e59b5dffd7f002b95038efe9d5bcc516a4670486da2b0bb8c47dc39e1a2c416e23f7679fed617fb358353f70370b3eb0e8b2db818a782ffcd31faafc97ec6e4076e63a2816adce1bcbad2e1edb2a5cd2afcdd1d3fca47b79740cbd409718 + +N = 64d5ab078d0e29de220e3322946184b7b635efe27b71830a0238d965760620ffd7f6b7f5dada610158c4f60d3cba9f99b52610fcd0e782141421a4cc8d4f9fbbf3e1699a14be64cbfa6a67f941b9245fb50ce5c971d6976242b969b1575de196c0c8ad +e = 021c55c83d35 +P1 = 0eefd0e87391fd212a782b90e3f5640e89d41a5a324f72fb24b0f42a7cff19df268eee85acd7b67f4ce027e27da6d0bba56b +P2 = 06c031dec5fce2642857fbcec25377cc3b1f81f37ba6a9c833e17e44f396c3c15eaac6da4cf8e1c692810f4a4646feb3b847 +Msg = dd8292298b7a8184b27d20819a9673729a17472c0171090abd8c380b6d7fbfeae59d3d6ddf +Ciphertext = 3c5eb5f1d3d4b1f9bcd69752889f047464137e38c9d50472b272a56c1f4559bebf983a6d17042e99ba3477fdb31537c591db5b16751fbf765f6317995ca158d32fd3a6d392a0a7cd65ff9739ca4dca14a3cb2f7f1379bb4e8ded14e0930a8bab4561eb + +N = 0f23465f3f1a32dc51a2cb935a15c803078912bb085b11ef3cac3c19375c2ad483a93661ba91b9150e8e2eacaef39281aa4f7cd7efed35dbfbf0e11bd2bc0b019dcfd41a5c21fc6e73fb752c3689136886677e77719605bdc5e464c10e017c728107e9d5e5bff7b57b1874b983864ae244fbcd9cfb01dbd865389fbc4cbda4cba04ea23d157cd079b55b75afba6925869e3f60ec71ac58f710258a552495946083857b6dd12a8641f1c994aa56ba074246e3a839c04ec6588a94f448e822817fd2d5519298cdc24d2b4c99a9a6f95123b72bfa3e9c30b1 +e = 4299 +P1 = 03fced4afe66a5c5fe1c68ff6c6ed06d9c65135c3d33c09356eba0d1c3274952c9b91636399c7a42ef34cec191a99a79a6567bfc01f2e9f76023b20d656868204b9bd902956e4ecf1b2bdece9397c00c09fc1e2b8aed1e0bd4c6588193d05abcb7a55aa2e876c794e37ac243 +P2 = 03cbbc257f14ae5259af4e3d3dcc0cbac4374b63451afa3beb16620ceb74afea2c37a86e2d794408b77dad0bef58d1d222e6965e5a1de84cd58a39d7385dc672de51985609627c58ec0995d210d105ea793a0e7950ed9b63015d787250297fb2fc172e2369c381747c6c53fb +Msg = ddc5f8139937a8cee455529fc6f33a7a042337d03a37baf1cb561380df18c8c1118970738c57ff33083bb983b7cccaac34659f98 +Ciphertext = 00ce91f60504236fab5db418f5029742fad01a9b382c8cb409087c552cc8508e0394315d3ed6a26df53cf6d209c3d3a4a019bf7a420799af5b1d1b25192b713196e5bc512447ef529e0bf1c8dba9132322da3abc895ea84ae53220950236c5068a81a614a0f44a3bd72a914c1c7ed52052b91474d5941a6a06ea77177473e955801b8f3929ce1001d7d6dfe98686be7f07ba30e76e2e7150f6702149c720ad5b65d8426f927b6b67027547e15e3411aa7bb38a3266cdee94e19535c16b9aafc92eb9d3817db8d11b18bca513d10baf7098dcbb5297266e + +N = 018e03e236e649598203067bc5e706d44552a4408110856fe30fecd2651288f597715ae13616708feb05e8e441bc72a90f4670d3e916135b6330192c2078d634c8645ca44d +e = bbffd82d +P1 = 0193371be3855347801110a4341e2adb5d4ff477260fa8b8dedce7a03d3f0e2f02137b +P2 = fcb2cf420480063341069b056852a8a8eb05b9aeecdfce8bf51f053308561f0458d7 +Msg = fd7e5f8b85 +Ciphertext = 00fa3a0a85856e709d6123a622aef61375ebc621a82c05755104050b70910f367bebda2cd5bc8f7c3fb8a564ebfcfed516ec27080f51e9b517f0db6982e9df185895b67417 + +N = c61f63ed24a0ad2e398099df6e9178ba7d40638282a072077aa24c317b0d41a8e3bb91ce73e0a65479cf0291fb80ec86880d4b4108556fc43bbbc1191e44b5402bcfb355883930815c576c2fe30c6d2d186f053942e8cd6ed9457bb9195a20c4ccf1830d668e8f019e039241bf618977ceb2c7b6b49126ab8f3693878a6d364dc45a8bf7077fc17d8339d405406d4eca96f7526a4b71ae695dae44ca254c5686f16facdba269290675975490e3e6f20fe8b7972e09a638aed9b37d055b59f6c7c61031b73b4021374e21dd0fb7fa8285d7355ae52c61078c9a93e44544670d85d357ff3a19f22f0bff0fc23dc09334af4643771af059f5e00e13e2d3f56e15707dfb5023bfe44b968321fabb673bc9f410b118e3e0f247d6dadc04684e1aa15f37bc990831e30c46241bf92f965836323da5d5560d78ac320106219bb1f3f0176a402bc6fc79831f069e83a06e62dae963ac624be3e3196a4445df85bffed219bc9b731806c637c7c004ed53c2f293955c0ab3963c093c4c38981e583e5fe1fd8a3e1164ff1bf27d281be80c2ce3e50d689d0c135a513758eccc652434accdf376687f8624719eadd03bdd4be9e5b34d7578af0b9aac1e8170d226bca210222c813489c99ef113cdcd +e = d24501 +P1 = 0f48b724206adcd249da35e65123261b66c181942f2c76d7b9ec39d60272fd3a2a7fa9d599cb33ac0e979ef3bebb7d924ed3c603dc97c166e6883cee473b0895de752b579db2fc3bfe423e937825753e584ba56cd8ebd11a57efd975f34f90452216a617a317c68d70f20ffddab4e878789058ff8885b15d4a6171a57a180b87fc07b372a9e745d20bdfbb2ee3e2c6fb9d9acead7b8d04c1e994417e2a01c65aa78b145e6699d51a306307cbfbdd5877d4373ab2a73ce9fd6a75cdd52f8b6d3f98f39758717cde201a6d15a552a44fe1630237640ac163a079c9b8a2fd3993ec2aa96320eb +P2 = 0cf67415b7879213a40aba76d43771c8591b11fde99fbc8fc7bc5464cb2818546ae214e07f4e736a823e4a5137f8bcd09da0b019550ed7be1c28ae3bc30be6cd01251ff5c9653fbf25f0786dcb218db0a7ceca49821b1acfa3020e94d8a24b9e1f20ae9e63c5a2ee674de18f3ec445f2927f5341ae530ed89884df025bbddc32506d4d52784bb1583d25ccfd2c1926a2dfe8408def2955de1248437af61dcccb80920f562ee674168a0322d91f09f95e57acc8012ead811edd535896f9f6be2549273ce1e0bc751ee88fffbbba967b29722f4c5e439d7ce632fbda95db2a55fc54d9cade27 +Msg = 5160db203caa6628eed790e12cb0511bdf9eb1879f1dafdd28e5d19cd6396d6a16dfff5ce7429ab5eb178375cdd91b90 +Ciphertext = 5e4b8c5a41540317865a3e05d3fb23ad62fba90d229f2f9cd99188129750c5983d19a556a7d694db5cf30cac1d3e016a9f18b9dca8ee1bfe03767d6fdebb700ebb266cfae9d81c161509b84556dc34c47afaea48622892807503c1a9908cdf232751a5ab70bc8ee40e1092cc137fe84d588869fd6acd74ed03e8f620f3a037cb7ae22db3b0681330d31b8defb495776acdb22b82215373c56437f26fbdee39a84c33d197468be5cd39b53bdf59b88db00e40a40c8ccb66270a10ab9f6730d70c8c71cded0826d52d144c35fe2ed9922d4359c64c9a306013a9e89078abd46c7f6eed083f11b9e23a7dd01a7c0c7a21e034e9d17f4ba99d572e9be2350d120d6ccfae319a20342a84b0b0d9a8e9785bd7671cf2767393fb9e609ffee63b964a683104a8d754926d4e84e6ef1ab6d2b67ea0a47f8d57c65f7b4feafb8732c9e3695f2a0a54115e686160d4a5d611022fb1be96617d4467e9c54d09ee9ac25b13db0929184a466a82653e1aff24c6fa36f2b528ef3c08a01d09861650ef1021b0a41843c3ace4de4568e9d1ba00aad7d90082c9a6c40efd2279deafc4329b754577ac4b107c994c2e63bb5e6c33358a1dba6e1d5eaeba1301d95bc57f12fe753e62e812ea734042575ecf + +N = 34051690934fbe5d980a7c3a8c3909750e2b21bf1c9ad9b2f68ea90000c4435b1ad43b225fe4e667760ec6124a8ce467cd704b2dffff20c03f64bbd4fb8345dab7bb02c4df49d2588f3a6618410aae51ac8d1afc3d1bc36643ef0aab7dee4bc039ded71489 +e = 010001 +P1 = 06ffac7b639e86a27aa6f1a565a82bc9d54d9fcf51c3cd961d03d0d3dd36c36625abe352435335b349e12f9fcbb2797710cf4f +P2 = 076ec99e84003bf0700d948c612d73f23c87d476799daf632f5b5e979b60bb0b7289dffb4d9b5b21c5252e4646c2e092eca8a7 +Msg = +Ciphertext = 069d6e3f7f33243e0a9ea5313cc84f8e2c0ba4770e6538111d172b8f0dfe7e74cbee4789a2fc1d670ff124204e7f04d39085e00b9e0c33dee927c312b87f51c9ccd118665e5d15d83b651f4fc08bb00d6b1e46eeeda3b4d85d1c6e0927453614a9b151683d + +N = 02f0d971886f40fe69f012f02c4e34b765f67fcec95b2101786009eb3c5ff86ed0a74d9b16c3643d13f20f53b7123ec1a06d53782dceb0f4f605dffafb77d14c846ed8a2cdea53b32e77bf2cc0454b9e7995146abded8111c7aa44e68625db83eeab17d45c19cacaab7b78997eeeebed66d8fe23b616fa0bf0d133e81a3efc235c6f0793cfad896a9a75d639cbafb63b067b26c9ee889c19a698399791176b988915600797e371e794925bf27bd24b1b0f3b69002407f82c996cadd66bd10f35099cdbc2dc16f2dec95fd72e1a0656e1 +e = 010001 +P1 = 1f27afad0d3897e4c349e8908dc3fb099a9894020019e38860cf1a0327262981a9d163471bc9db8d862a6b553dc9615d26b2b2eefce3b94da19105e5043ee080955f97f47f5680ab29921aaaf8dcb69bf46113ab5ed5d303a946c55f8cac270c691227c79b0856a7 +P2 = 182a24abca0ea63452b08fe6807c7e8e788616a323a097dab4428763368f0c60c4ea2651e0581cd973424d9739c085a13302b171505e80278dface3d6f071ffe8bdd168916be0c80c7dc24c362fa2f11d45089f4ee885aacfc4221b5d755de06c4c063e3ee869f37 +Msg = 9d3fedec2b08ae4b4ff3b636b909c33d945c2e680684481dc23a7d2cf93cd9d91131889fc308037ee33a6e45fe77cec9c1e62135246e81e07c516ef116d4d9a597b6cc31f1a53988787596e00c500cd4b7360b757c9ca268e69d85f7f2dcf5f292a06dc75badc2cc3220bd97398cef3e10c00460f63e4c492fea7997ae9e89260de22bad3fb5dcc237b8cf824dab5f31b9bc02736c60bbd0db5931f762da60955deef41e1b9ba559dd93883cf0e35377eba6 +Ciphertext = 02004a56fed0aa1cebbe8c950325af43e0a3da86ea5bf8b9ea18ac01ea3166f3aba0d65f42835d23aba8cc1a562b9e8921eef413982ec33d51cf7c02c6f3b78aaaf5791094836df1559037a5a146363889fab5cd2888b50fbee9649924c5600e33a8460f8cb089a54168e8b8fecf2845ceddc97ac49aad8652c23d6ab4a4c6a951cc471ff2cd25ba7b279fda38e6c234c535e590c35d03cbfc7f88bedfba561f95d9631b21fdfc24d8ffdb77720f1fb524c5c642ee21af34c8ed525eda0af5399da0d42e1364ab69b020f51ac87c4533 + +N = 319c3c304dfad3af1e65a693cd65131ff4d5ac951469a7deed947102966a83a1383fa1b6d412574c307a9b4702a210092a8d83a362f32480bb01b927d243add5a8e03d9fe38cce1b91663f17576e77b355fc6bd1c3fba779bb856a05b04eb4cd59f142e46a3e893980dbc2dbb34e4231a56bcd8679189b3b68d35d5052ebb1874c94c6049b10f155fad7682a7ddab56a265e1b31142235d9061b2a9df04167f16dc798117182d3c22e8fba5191d8acb0d6184b251437a5 +e = 7d5f723263 +P1 = 0751fa0e206869215470f297e9bdafe900941ecb6e01b00f0d6f4bfdf7d3c2cca939c0590a7080f820d98a4349871bbe8419bc3cbb405db7ff2b5e59eb81a6fba61e778ee2a3dc06919871d37f86b51dcabb0eec34756e6fc2f4a463 +P2 = 06c6f3c54c2d5178e5d89dea2dc75c903d9f9dd0713eb06f5312b17ad2bb87cf1b0d4aa6b76fa4254aed9518694ebc11b5ac0e66793ecd5f64300f0c221e734aec2d971e4e4d16be5f9eb162daf8eb0355cd0dc84f3535afd45c5e57 +Msg = 9c91008bdd1568c1ca272d99fedb8fa76fb8f4189edc2e88e61b9f656f837ad6ce3e0d4d +Ciphertext = 19f5669cf2a8228d88920a0f576cf14e7906d60b818244da41b6df6c1e8fe5a53ae68e87be06886725408013688e02ef430b2f82fc65ba25f82a3d5cac147a436371547dbafc47dfd34535cd22388476e710f9aac5b00a2c092d0260822f93f4ea0e3392e086230c6efeb5d862658291f5ea0729cfcbf793944a7cbc0964d8e57b0ae5e879cf0bd875b7637b2bc1445832476e653c8b9e4ce093cb678a2b3544ee0de6bb3ed6e9cfc40b5dcf44d090fd3ba56132328a66 + +N = c2374d3cbb8c5c37483f8a1c8b3010b2f488b684a886c6e35c6360ba89c9be16633305c0b0533b4f7b665813b6a40348e9cf5c150bac31be0f07cc36ae4521b77efbd286a01daac5870718a755c7d706375dbb492521796802d9571154bd802edff94f360cf22207682ffb09d64de1b9919a49832b2a65d6c4be8d4011a2221dc67e421afbe36de2b28f23ce3dc355e33cd8d6d8d9411cc7504be0797f5e80541ebe5940f92efef7aa0bf260620d +e = 010001 +P1 = c6bec8788a79b8739c7d0b5aa8158825af358f73156cf0145a77129fc511c3c52904af1330b1ffaa5908b96737180e5a92d425b4ec8ab44c8218711339c60951d7461e801f7d3ddd1e9b417062de28f6f2d3158bc568df +P2 = fa2a7e71a46fb8f9a691a5c207f78a43aee93c867ccaf241ef9cb24af534ed4e979dcdb57a605005ea69fbc9cbd545ef43d7f22e1588262cd8c006146771a9539c5eada17d8da0fe4243c436c0635c9e355b590d3e1693 +Msg = 437d7cf7a2ac60facbbd421a77d7af54fbc80d9ca1da6fe597a5f8b9c53e8170df64461436e4c038854fa0d7d307a4e0ecd1a79d3377b76fec3b43710e318bf1282f0ad7761bbd50 +Ciphertext = 950a98d34dc7c1d01510a9cbff3fdb507601d1434a1aa660bf833afa9b316e2786da25f6c8251af5efb6364707e370cfb0f9302a3a72331868998f79288f514ec2c9b408a58f29617907beab6438b425e759b415e12a542ab74c942eb5b3134d1a037f31fbef792b129c3f6817e6823828bf27a20fc6286e9822d830657eac7eb9ce55cb47d324845701c0ce23a4d405279a2a83e1009290462fccf7d825ad521d01bcb1d38a0b89c04a3adbd6d4 + +N = 050c4c8d5775258b20f06860f292d75c8163d814cdc48dd61c767f4e2f58291528baaf0cd7b98517cd18a3b52d4c41b370d2e02b61c79571eb719247837300e0bd9fe13052ee692125f071946f7d69017b422098321477766ee1c7a7eb6b54478abd6062441e359d32318e4ffebec5d803ce963934c941ab7169a5dbe44737e3d5d2c1304fca23b7624aaf988c49c54bc99c6192989cdd9c3f8aec4cf6533a662cbfaad60ba194db4f0b0553bddfba781fa09ade5353039de3c720756237968460a9d67290a2af3debf14301873096cfee095ec740fa1784f023d91707d0e515a901dcb04cbb83297960a62a3f986c921315f7ab964974465f33cc936473a12d1d813dc3b9cefa20ac3283a65d3e5e4b42899b9ca0a31beb5f40d31345db7fa763d6fa3f99da31ed20cf393a5f240510d51d906838e32403b0f59b59f992ef1189a6d8b0531e791c2fb2915335a505a26167b004176006d7b53efa3795d41e9c8aabab63ba29f23b7d16a051db2a334dae0e95636b6ed0fa4dd10be6f1a0e20f6819ce974dac34fd379e2b8a1b2985c7e3ebb5770df9b43ec2242dec722fa7d56da267848e414958fde91a761f28499bcd3525810b297626094d6c9291788e1a9f6ecb3d7bda9517e1f463a5e2c10943b820f8657347f8454afc3885b47f91c12270fbcf52c82634d98e4dafc2fb90576985c9b4f7ccbf93f4fe2afb14c92d80b5fae796056a487c8b8a67ed921b76c8ea8e6e81d0523f770b772952264fd7e2230a6dc0cf7ff2740a01f203f8c26adef9421f915af9f74aa49f468bd3313b0d7bfcdbe00b8cc9fd594e8046e8f6f9544afc8d7bb650023a1ace9ec560b279f3d18c013deb7cfbdf487fbb7f8aee576420435907d0c4babf4d1017a46e64ad05bd8a7c4addf88ecb1723b9629cdd0737822decc6a02c91e5e8e8b65eddaf5b63dfdb2f4c6bcb42bd44657cf754045c95ed51b102f250d07bf1a4e85cc44d7f1cc477859d549245985b9be7e65b502607403a89b5fde61e90991fac55bbf37780e2c40205ac597a1a5eb6e4882105efc781fd327f65e8c0b9f6cab8605cff98242a356303d76d9144acd3d86d5b40b18b199dfc5e53eb614b971d0d964f9a9bfacb4a22eb6eab2801a8e9cff0994fd847d8abf0cca0f2d223f27d67af08b5a414d07f0417aa9284ee20ab2dd2c31e664ccfe06c8de3304044a995232a2283192317ad046b169bc20c33b3ce6121923a9dee4c605980d07c83551cc1f1dffc6eb15435d21ecb890db29785d52d1d5bbfc86ea0ddb38e85cb254e6c834b5936b71bd5aaa989a8d1a15d6518c251602f8c6381334faeb681150796f1c4a2d3cea60308679f3967c3159fee921924ea33436b94588f377f6f78697f6ef28097f26b52cd2e15a0b95002a75eb535f109 +e = 010001 +P1 = 03179509295ec573d13c745f19b06d17c163a83e432ace923fc0bde6069845205f9bb6b0d12e14f013729bda33611210e0ba350e4a26b152367c958c29e42ba336013bcd45a8139742e577b6c363df2025809f84927b3a9d89118ac4ed19f88d85e3bf8b183bb222a99c9026b376ed7bc8bfefc77ee36a9c5f1f297163cd24e428e92bec796d4c6e8f59e10e6e2c82e6da82749ed5ff792d764eb0ac05a15aea7f5a8eb7d07930eae8c16a372768cc3d0c2c475e07d92f08dbc554a4cd1590b82f9c13f6d0baefea2939d32e198ddd0d99c08e9e13edee362ab9a1d85dde068993e357de59e1084bcc3f3c7b2548c2c550ebea7ee9999f422c052dde4a32d33a694fb753d1a846024215c5e4cc7731e0b944971bbdf8977013bd2027500cfdfc8d1bfd9e8df34338262b862f8aa390c2fb7fcacb0e4720494461d68dd6e777817f69a2db0e8a161b40258b5dfd2b50af807df75a972ce56318bfb1679cbc8989f7a1a9e5f93dc9332f6ff6274b376babf6ffe4a1b33d7d26f2553f20b7abf101e9df9ded8fc52f13d37c09578e34374763b970978b64c64731bc413ee0cf9665c1b4f86dbb7c879cde5ea691751a4b033420e5e142f860036331e93df36f380db3ad20d0ba60c5a6c9bdc8d37b0a01091681dd0f807621284117d3d454c6117b906b3849be3e336aac25ac5c4c682f171247f2ab862ae3 +P2 = 01a1eeed027358c4ca259771cf09308d0017a2cef9f04aa9f886bcfe624fe697623fb665c8c124521e751b67c4947d1c77007b6bca451e42af07da1769f8488b91753b3fc1a40447fb8a11c95568fcd456118ddb9e52c52c4f69bf79b7e7b0779debee81868c230e6452235aa97a8ab2de45fdc19367a8497f5f408e9343c026e8c9abfae815af4babb868a581e2d051fe691b4fef53ae5f5b0af376b7d5d84b8975c7885343619711dfe4f0784719996b97d7f71fc9aa6b21ba8b5a9c2c4c5081b7e1d41efb58cfb6cd3671fddcd6a3ca27de56b6b68c9d506338ab190bf1dddb878a8e18ec0da13a2ec023d6ece35e43accf5f5e4914084750bab674497d1b0c6ae023736eecafe588c4b80d53b241ce1f5c56b2adb360e733fd376400269b2502457d71024832d45bbbe0c0196eb6ffeff59a27b20a347414ccb40368ffb03d2a9dbacc125a242f24379d88d4297c68769cd7de22c6dc1a2b907845ac593455fb7b932bfea2cecf8f3ac9779ed246ed822f4c00a56b722dbfed0a3a72d968cb79be8b3a8e1529ba725230de4a17773b6269566db2c4c0da335fe203972a346fda169065df4a5c4a5dc41dc551c5c09926d69a1b1903bc0edac988f16fb37e9de5288628cf321e5b1ae6254febed2ca7d422d3f0a40b4ff2c26cd3f28ec5b100d2e074b2549d314e362f27630f3bec55ed328761dc23 +Msg = 62df71a04450e6154ca42b32c938a716a3a0b48501be6cec5bf2a3b9a3d2251a452f9bd1c2ded70c0228edd6211cf5277a7aa82b72ff2c7f1772816d5318d204f8578c6de0af5db66883d6bd6663e87ad326d36166e6975e11bb008dd136da9b8faf9645bb7f19b7b8c6a2843e7cd18a2acc0558d7cd8746c228b7388314fc838a97f31ecb4a7e38b4cd208b2909e5f2e187644f4853590849cc4dd7a8e935d925eda388635f96c76436afb8cb087850868a328cb36b182d574ffa2f748235e1f0c2fd2df23c2512c4c6cba3e92bb6dbe082ee8cde62ca6207f8e5841ab54d774722a8b29b773b74ee59bf86d633e6279ac6d1c1e9cf53dcd3e0553ff7b7ec695a2893737ad39c48745900d92537e24d0d85436a710d6bacb26afd81c154e22d2d1bd568 +Ciphertext = 0301a74e12fa907ee6bb0f1690e763880afe6b00998e04158fbecdf72c6b3b01631d1da24f8e46d03e3b8632fc8755c7c25490333cd0460171160af7e8dfd469c5e084d8829429804bef4bf4bedde7cf3882d55aa6f3c61db5c417a2dc12c750831e57220f92526a9146b60a531327cda830606a64e0a2db7547e7cba98f2b0273b9b9e9b802022024a89f46d55f91d4b8629ed2e133b710f3041d4b136875695b89ecc5c44c915d9a2ba350395936f8253f9da973bf409c498ad9ee20ab821ce6e34836a5b2112776c1972dfac753b027ee985238f5dc5c8a8822f38b20942796285b218c35606cc5dfc7f30170add12aba6a6fbc2c39ea21e349a2f59b5050f2dde343414923c984ff1cc15f46d3bdc5db4306d11c911048e58122e82eafe1a20266892e6d90c1bf0160a016c8a7a8ce848c7a451fc5697bac09ed4fb7f8b24fb69587bbdb3097214066a8672154bdc5de31c6e3758f9e3a478c19d37421ec219ede997d0600338b86e0c97e724f0e92fad8878169c77cd6470aa4764731468976273f3c179a8e561166437ffcec848f68c1640cadbb68003825c3e1884958f0ec4cffe587137d0c0b897e057cfa7aaab4e4aabd95ef39f10fca6a0fa7771c3ef771dd2fccb94da977787cba70bb0a304d4b35ff81b6b10b4e5ddd7e575e350279b5e464d7f98940f629d8518684ffa75dd9f03b98ae5120a289273a558c645d15ed37938103aa87b9358397d51870c107d988152be9622cac5653215c5f5393656af349be1f3c10aa0088830365c0830356836c43a26e0c6eacde15f13eb074354a7c0d73bde3743197b9eeca05d4a6d65944baa0cd4e3b5fe833b5de272c7ca36b8a91f715b4cdb9e7dec3e839ad41a1ee750fae0d9be7f1dc1a082e6a9b612f9562d0ea7688ebecac56f483194508b3058afa9d408ea8ed45bf917f2fd566415cd2f7ff6499de3c459097e648bb2a365fdad57c2b43b66391f1388276b2581a4494df14091097a50d5f0b5934d4b550e6f8e22c862aeaa3c7dfd82d101c2f982b7c56ef75fa5c98c69e522ece245d31bc5d3c1dcaa47a552e037b108569a850ff1eec33c302e1bb95ea8c8151144609e0bbf4e20a2bc907b875f6a55c216eb8a528f3febfb7c862850e1327027fe8cf7dcf662df9638e9ada3e7cd978a9077ed84c2e757e5a4a72ef53c5bdcd15be884df33d51c5ddea1202c0272b611b22d793761371ba9d628ab9515d2b1ada6c4fbb641dda11353c91a373da1d3c2eaad50b7c9ffa9a82cfd0d169fe0e3da9dad385d11b4fbf36685319acac5fd30356d3358c58d062b65ba0ccb8981476618738f1eb7876f59d7c6dabb8593a859f9ec49c1b47bb5904d72e5ba139fc9187ad1a9041f5aa967a077d3d15fce2b144f2809628a0b2b719c3592f888b + +N = d072e944707cacf733766a653c6218e841461480d005030352d305434b376325d2897244bec0dc1732b7b92399d99d6efa39604138b4e8328dd0a806624d3811d34f122fdbc7561379c329f83c6f2d38edebf22cfe5951ae9f59 +e = bcfe43 +P1 = d9a00585f759380718bfa99e5b317f66c73c8f8a6b07af0051b83fa407e19c2d55711326683f2b28f9d2524be3 +P2 = f534a8c6e91b4f436021fa73d06a7af47cbd72783f218662705f90caceb561998cb16e8b3be0dcb03947448493 +Msg = 3d647d409929d8402069709a4638d2db3c384f045885711923a7b7e7f0c386ce13c0dc7ed288608570299cb3abe4f3d27529746b +Ciphertext = bc3a791deb5c86ef9a66e0f2302e78189c2e18d48714514181e1dff564ca13b53fcd8cbe5b27496d7f28433f4d8b8db2fa653f27fe5c4ec26771df6cebf80d39fda116a007086f2c1ea88571fb630929acc4474a6f17284ba866 + +N = 0b92af8d9a69c57c9bdd850fd188d592674ad4d0a4899b7f25f7dc076dd35c69664826eadca6a2de1c0516066fccf48b5bff11a0e2343a9f98b255a46e455621bf09ec7793bcdc341224b504011cbda180eef609fcb6e003b2685796763e72aa6498ddd6edef2ce3b57935613d19b9256bb39650a6f226457761ecbd85aa994915b014312d4532d65a2c328e226cb5dcb7624bfd4ed3956dd7ca2b7433ea8404e9a7e52a241baf7d1b826851ed +e = 4358b9d7e0f55243 +P1 = 03527d7085d3dd1767ae5bb4dd004ed96c5e80be5932abecff2b76d898fb9955ca952882b8477a4ccc32d046f5fe5fa7d0290c80060e02c8e4e99316dba52e9e63ad2a051ca52912dbad31c9089bce5b0b4154b905a207 +P2 = 037bc6f3cc3d702239ec57068613c9e3552b1b47ebe193f533255d24e2919224519860c4da701c7590958d5068472b100b7f491eccfb7b1f93fe89be8242d5804160102042e44dc6011a1aa122c5176f6654437b6b5f6b +Msg = f9d85698543fa47edcc6d757aff2be4f50cdb5 +Ciphertext = 04806757cd9a0f09ccdffeac3f17e0896f9ac3a42174e004dac90e49b66f4a230b623d9c3993ca395f30f1037ea2799b21023015150721c02fad2c3b7e4e0af7b692a2ff42de4b25528213780c0e7ed341c79067a18df50be828a8b6ffd801c994c560181d44607ac43012b813ad9459fdb843a5f4e754722f13d338be4dbfee10963c3f53e1268b802bae8014ebf15f2a02746e16e1be48b515422fa320a0f0d1d6df39db4e9ddfdf50a34496 + +N = 55fd45b6ea85cc5ac1f918ef0d933b59ab98a45d0d82621b8549afbac7615c432ba7c5aadc60a5671ca6b2a99f6c85b7a6445fe719e232bab0ea2206edaa3f9f0602fdc4b739a4e7244358a36909e8574971bbed1e02da0b4b20b4dae66b9ebba15ca0e598aa5750932cdd0f0aea48e842d3f356885c755addce35b40a3b91dd755e682781aab4daf3ac2650d79a30c7de158b0498ffb85a1158d63acc3c4e025812eeb1e32311af904532a4a3e3e67dfe278526daaadaf6c3b91924e6b7a1e27ec1283fb5374a0870889ee7174cfbe99b591458c3c92f41fdaabf84ebb169e7441fdc6811d675234c5834806c2d50eaf442e9b615d330b18313d8789c425b7c9a0557515a4ec8452eb9fcbf672bfee57b38d7ab1755a4af9d4004291566ae41460e847b0b3a270dcb2f4e34a40338143e92d2b91cac611f978fb1f0fea9d30ebdb7fa2a753a94579a100433b33bcd40eb5f47d2d1752238724ab6bd74d6e9d64e56643e78d3d4a9fd1f28c1c5e522235f0082d95b5b973861ec15b78a9bc970c471cfc0e24e9f93b1dbd934ab7ca3816955420020028ff1007cbf0cd499a1358d366bececbf52c7eefece415f738986a506e85f366c7f008d32e7156d0a7120b0644fdb24b3c8ea664f7164f226be06ce0ad2db20ec3148015c44c39ca3139e4d +e = 010001 +P1 = 0d033e6518dd886106a0e22b957d1caa3a504341768d47ac9436be1bc01e30e7058b5f0f4ccda0b5d94c74cd5d0879863f30570811178fcf455d6fa55b02a82ebc9cee0c819178bced87b20c785f42f74e7e40c01d06df605f22fba8c85c7b494eaa73de36f00add71680d1d7828ab99779430c0f9b56407d1af83f7bc77c265cdc7e540fe704b1054801cf6dbdf9b290491f0c4f426939d9722b07b84e14827c20fd324815490836c08af121d54d2c9bacec4f8c398816e7429c027dcd7f8206c693f7a5184364486d27d5a5eff73a7227be9798f100cb2d7b4ab6f069e97155e1774cba9c2fd5199a8447b80bf000a1f +P2 = 069bae071ff52a366a996c9ea1ec8bec3699eb9fdb868f870b597ebd0b051137832dfcfa2e17ef3cf0f6085ce98818dcc77621c464419df975c0369f147446c64c95f8c36d2b69a28a02f070fdf18c6a7b945502f50a18715e86a2193a5d40ed573e525017f3105b4a2733cc3a11119f86a7e7752a548b8827030e3698f371ac349b7220d55ac466ff9493d4df2a974aa816b158f7343a573afad4ccd94f432ea88fdc0e24d221b54279f011c5d4659ab872a03f0c7850dd6c495e1359504f8e51c82c9567b6c63d24742f4aeb925a20f84d9303ee980bf2a5df44e3e81f85477a728eaef6804725eb02484ea57d6d6213 +Msg = 1e7538a04696e106f28453bfbb198f863e066d930ce9b5eb9eb681313b8714ed695c352198716fef67c0d44adddf27d87b8456b627d567ee6f48a426015570602a268451fe73a1b913241c0e4b7afc08c2804bdec4235b3a0eb247eacbcda6798a51acd2116016b99b6493451d8aa0eda7c3e2ca49756868196d7f4a28d7bb9f1ea3d9b5598c13ce982e0ff675e3 +Ciphertext = 39d488074c3031aebf088bacb912421a44f2693a85cd4ec785cbd3558ccf0f489939f00c6b02ccbf5548bc44d4b5b7a99ab92329b9e9db4d4890c22a3b565a1be5e7c203740466fa9d668bc4fdc8300e65a36d287130f97ae142dcec86d275d907276e67d8c540a4d40367ddb027cf2bd86887c37ec3c686c3ae1bb53c11b24476c3204220039c9aa42a4a7a6495b56b41eb17dca158402f7eeaa1e114939587feb3a668014633619ab31e1ec2801c22c2587b81e1988f5bdb354a30732a6a57eae4817d669c3ffd6c6bc3f9f89134e5d99f4ed2830567c713d0aad78cbd3c202a36984fc23c20f82cd9daedbb677570d0be290187216bc981efaca7272a25298ca904d73a4184892e61e620f78889ef9378159e0d1dfe3120949f71bbd694be0881fb51234b16e686bd4dbe982521ad04dc9e2ef712359576574daf90fdbfdb423088a75eacf3b7a7ce5394ac883a2984f84b68da8d25557ceb7ad7f5ffb9117f563c83bb23f89796bfc279122ad14efcf1d9244cace486febeb68757576f332dfe2f25b06b9be2707a509c703d83d3ed4a377e8c0c19faf8804d9a2c132e9bc7cce6c34e1e6526c63d5dbfb0ab49e30d3586a4c3d055963e7b573fa360ad9a4b307c0df5e57a2cade656dfe591984449e3a4666da92457727caafe180a0587b1 + +N = 0542aa8a9159b6768c0cde060688a1a4f8758aaa16840201f9cfa2b22c1f49b740fe9834ba28934c05321612e9ce01d10db10e2cbc955394a5cbd36acc1ce09581983e7916d904b222a309 +e = 01ee215e2d1b6d +P1 = 033147353f7a17a4574a618113a67d95a2626ad7bfd59e8cc003e247f7022487c7441d1f613b +P2 = 01a5d2a17ff4a665b4264b032e254bd67b300db032512201bb69de4e3c89f83fef55743d088b +Msg = 05dc059552ff305ca112c0681ce58bb1b296f63c89f016aa4af28376e79771 +Ciphertext = 014e5721abb4ee15cdcb719a6f7fb238aa099a1035af8616ccf4d5670d7f3d4a6cd4e6833e26225f6ad3faf8d3ee5d1fbb90e2d878f0f3237e6e91984bfe9b2d33aa443b6027f21a67ff16 + +N = 5ee95bf8def9725b5069058e7199bcf56a3acdf02599c3764a6fcdf0d851f2380b394f25a4f1517cfa6cbd8e2701c8f78572c4a6bfdf9e14cfedcfc8604f6a6b5e434b42a794f2fca8a88764968bc56ac6a3f193be66b56150321422a8c9fd58c6d3aa4040d6d45bfc7dbf1a3b67c84726f17ddc301e5a37d9a084f402367e003483d0a8034495add6dcbbd0453f3975 +e = 010001 +P1 = d32f3501852575f9f8da6bb98048a3ede7ae2d6b15205dad4071b7c108b0529fc3e45f5517391e3eac72ed14ff29d17f96193cc94ac705df2a866445610993bdef2f4be1a330624f +P2 = 730d850e82e07f411d8798d8cc09b1dfd07b3e209463a74d067e63404d62e7df4a3c28a6180ed5df41a7b9bf314fdc3a4a99096fe87ca92d5501ac5e66c948ed2ce35ba1cc5c4afb +Msg = f73a02054a3e697d0064edc656e2d31b607e2749f095b59f066f60dba24b275be434ea3339b04f6b3b82a317141bbf63268e2cf32d7d0bb624a93de35a890bccda04bcf1 +Ciphertext = 2e668cf53ad58df74bb8619fd2e6a480fc22344bc9d8a9ed65a6e4c7ba6ae938b19e7ac337aa9b5fd66361e9c3e7d7b878602434ab6266bf6bdf9b6a97abfb99a1ce6f3fbf90ef424a27b0204969da9bb65f9171113bb4489418dd4ef377c221029f473c9986c3da93e675ad5fa0da20658891b5538c3f320c02c6cef39b342aa7187d47b55db0e1ff09278a9d77eddc + +N = 1477feee24db2344ec03ea554bca5c2829bb5279b3108f2f97ee7595e02ab4b0dea5d1d8a56c5e4626bba4d815eea95614e34151498924cd5922ac7dfdf111512fc902068d7193f46effa704bb165167d1f957479b1f03b7b50d48c103347806d8b5a6e814ffa86260ad66b928cb01737a3a93da574b5572d1a000c9e88f0e32b4f0504ce39dfe4e259f212ba0144ce33d3658c262c75c5f57acb3435a6d7e987a6d9a268ad862f1845537689f9fdb26c0a470ec7377f6bc6bb54cc1 +e = 02c6ab73 +P1 = 62fc5645ddbf15127bb65dae2d187e0ecc636faf8b199ff2d5681afe5b65d9cfcc7852b5d0e13b808d1977048a2271fae9ba58a1003157211932c1053a1cd1b9871e231bb60a1fab6e653e0d51d2ac94c2728bc1a37041f67532a8f1d4bb +P2 = 34efd8cb0464dc4a730fdb27b23d45f155ec520a44ac40319621f92c94f7d63a248c7f2e56734c5b9948593fa52bd897e4236900e6758b344989c12a43919f81e3d09ef5edd4a6d22485ad8ca17022902514f7d2240853767617df26cab3 +Msg = 9ae2eb85eb9688730bcca7f47508580f4f93e2909e166681e1ac3353a01751a66f8984d1aa +Ciphertext = 0338bf41782a396f799284a5bbdebcb0251b5b7ad9025f2846bfa2d15b29c8c32b1fd3af6f6652cc65b60d1a2941242e9e55bec72dc99878d7ad6b9ac49b04faef49a99a62d49613e6e40e78cdf151db16c4910867484620e962cab9fe5425c91b20cf937c93927c5d3d7b5c5d244d406dab5120464a7d62c015496d60e8f28bd2ed9fcff94a482e0defb68a0adad82847983592ac5f36d08e54d6fb6a7f461dfebd37355e52ef8ad2f049768251df890dfca832962c71f9188ebc5e + +N = 1493044d4ce5529889fcd4c48e6a64b13fde52f3b46ce07d0608ec22da4970f4bdfcecc7f58b4afd5618c3976a4e443426dffaea8f751452c8017bc5677b8025755b4c99fdb058105b0c9176ff20402eed63fe08fd749bc69511ae93beb2fc53eea452f9b53f77b4a6f147094725cae85796242040da591adf5dc55bf54eae7748e991c3923e2e1530324fb91fe30841f6cd33492a4cb1da095c84b40e640f8e335004ae39f12ff7fa898f75123902fafe22be2ac513dc6d05a3340f295a5abb984a993a3b79bd15b2023e027e8bb5aed1f16bb2a7ee251c5ec835 +e = 03 +P1 = 0ccdb37e32438df76ed8a25dc954bcf29b0b6cb70033970a0e8085e4a01f87ec3fe043b50e5f64d0cd6c6613cd9a9f1865c2813f428e107516e578f036d23d6333a6df8094e94131a4dec51920a7a081221fc82d671b12be3898b6ae69fc080629039e1b4d0a96734a6f2a6929df3b2d0e08a1e32e16d8cf +P2 = 019b5f5feafea45e9d4ff3af500f978300bf441c0693e3ca63efdd5f7bf58408d00c80a2b6be9a97f20fe72f91b2c48866feaf3bf070a07c9797b6f91cd2e3cdd7afdb4dc149a6b0e4c73dc6dcbcd728aea8ddcb20aa808af94574adea6f97d964e347bb +Msg = 6bc21cf7294eacb14cca +Ciphertext = 0b10ac5c87adbe7c3e2b87b20f518f75e16e2b5ea525b1b2c51ccc2d99a662ab641cd4287ba97fbb0fd690d335cd4f15b7d984b736362680acabe8ad4e7388e7c1c7069f5ed3ff0ca210f4a4fd9e2bbbefd2e1a393a15748175fdafa17f77e4adf660ce0fcf429b33b60c44246a711c4d7beadf5f3400ef6ba5382c3904b00e031e1409868b319e2d47dcb3e73d5560263ba921a4012b81adc9c5eb6050d64577f01433a681d6be12de3bacfc14822c884a9f3df9f3bde8d0e20ba6807d2e1498bb7aaf898b41419f5965d211fb3d4f2cec29dc3e2208f6527496f + +N = 3bf7893ce45fa75f02795fe79bf12d06051dae363952e9c9efb7bde03ddea282315e788ab92598c4bc93bb87f7bf713ff2afb3a78a9ae658002fec710a45bb7006fcdb3947a5221b86f6306f7fcd95eee0a65f0d92f57390db1b4c36d43d1c05128d9452ec963cf5d29beebc20ae72a0bb8617af77f20a5e95e709fee08060c6d2411e391cf9428c2fb05ff4e47d65ffe99400bc03ea79ac5ab7ef590cb3db77dbdadb6a25357a4cd8a63188a6f770793751f00682204fdfb19062a13f87b9f3f48208a48b83e2780792edaa4d6ad67d9cff2916b96b2a5c416f4c2fc1a6febc4317e6601deade1a7b9f4f193c6aa87039ad63c562cdfa74ca1cf5f7420f5659020c11ecfe52fad0fe6628041da271cf21b19f0eb963d352f3fc241c0c94a985f5c44b6f33cb2f37606df6a6883f1b77fa740dc69cfd19b37fc7a2d430d76ed41c17e33bf00cb43565d6d8e2e3f27067b77d9379c2fbb459ef79 +e = 010001 +P1 = 3c2e83a1e449032ce7c676e54331d1489f974f62c21fd3e2ea9d6b7c4f183d1a37180c65b297e3288824a40dfad1ca1799256925c580da95549938d2bee985287fac9d69add0a1bda96cac6b4367060bf75c10e047c937e670b7d03d65d14287efe5b81cb81abc7f451705b6630d7a7186137da36c2ac26b1e39408729cf0d0293308e406920577bfd36697903a6aac4aba43fcff887e74d4414928bba41ecf556dc6851870f4e598856145168226012e15b94e5d6bcf34b440f7771ad047e288b789f +P2 = ff16228cfb9a0ceb897228b8eb2e85f4fef4a1f97ca037c35edcc5b212852aadb5aef070e71194cdc15b97a21c371d188816412e3f629bc4bd02fc0e27b322b83caabbd09efde0e1fa4d4ff718b41b0c8147fc2973780e8c5d43be0b0c3f580658e209a1c0aa1182cb164875c3abd8752015dfe058e95fbc0d61d837cc69e45558117b84f8e85f84c43a5079f46a1023e431d848d0e8e7 +Msg = 2933eab28d98ec4a032e5e6ded2cef8ba4d648add5bba81659b5becb5c0e9554dd4db4fe6a87f509a1c9d052b88bff71b0b3d25e1c07cc1355957b7226824d8087a7afb80086543d6a5831a4148ec53e34ba8b0cafbd5e464a93b704c64231506517c5fd466567aea413194898aeea2a2d89c4d828301ce809e65577fad80d4e8c906cdc854d513448d7b90bd5e3ce67c619d5469622e03bf0bb1059eec9b6a6451255cdadb3159269e9f670f29339267191a96de447538a6ab48c4179d14993d4a4f892ff35be77acd4ca1feb95b764634d6be0d9956be3d2fcdeb9db21f8a821f9986f6c4ea19cb5150bc20d79e7f3165f21d538997620e021996d276027c206a64a3cc9173a9706850cb7abfe2f583dd81c3a0f8c98e94c23348bde1409a2bdd5f8b8f61d5fbd4456a721047c97ac1c5d7f85ce62a7efd0 +Ciphertext = 266693b40acb93c007d82dcf15c44f25dff9c8e35be2e2704476346fdba1fc27fe8ed3596b9a9c1a3228a9f3a576fdfbdfa5afe3796265050611677ab6868e5b5862e639b271089e779c45a8ccac9096365d3ae0b7eeb01c10310142af0ea07744e0ef54259d04d2ac1e6df670cd6f346ae65cbe4fc9c3d45a5c8e7e605d776282add281def6ed8bacb24b52ab12e24966f8f977dda9aa1c6e15a156cc86bbd3611a9271d4a4de2b62ea78d44562b50133f48117da440fb7f9d81cb95523d12f92ca16fe7429798866209acedb5ea34f6b1c54e7169ee35021a821617cd9e808da82e203d8e9f0bd62b1203ab346464a44111efae04a5288571e0eea3562d6cf1064f156f5fa018e5a8415befa09b092870769233c023e7d540ab38fd061353b71bd0282f5ad18c1da4039d61c091e20bedb83755379ea26f631bf6fd243cb889ef4ad378c0ecbdef3cf739bf0c60121e0e9497aae5d1beba5d1 + +N = 2200b50204efeb9b3ad839e1a1fc22fa61def5a6fb48db31bcbbcc4ecd77a4e9e496cf03aa0207bdf47d5478b6f8b91e1861f14234110038e5e93738d641bb39f85b5b16c730081fc64ee7da74ca24adaf867117b5ff29b48e555f210e654de24e912a8a4789a180f7315239d9ad6471a1ac85a0bd6f8f9cf4c727dde7f62e90e9ecd3f9eaf2fce0dd3ea574f220e13d7369f6e42eccea70856039ff75f6f061ce3a231236eeda1fe5db0856346d9fcb95083cbecbed9235189ffc1e919a18d3213a886df379bbda089307a0ef28eb2abedc9c7af9ec47742249760d6a2089a57530290ab8c985ba5f977e0f1ca182df95d70d2860e781be8736171c0b1a4c98c6adcec8ed340dc13e63e4c95fa0fc942932a99b3cc0d778a52778dc0c214ee01a877eaa37f9ff01b644285256c8e5bfbb556c08b20604ca00ae582170aabbf96e7539752b24a34d3b1f0f7a1dd8c430dab094f3ef335080303a5c76687bdf99a263721539ead202d006b9 +e = 03 +P1 = 2612fca4ab8c0efc0a059dc514a8435702ed18dcef7b9ed941203aeb8b4880e73b67c3d6667b6dc932482f1669d2bbcafaf9115617a830a9893385be5427892f486c675ef535396fd9204b3cc2e878e015a28c784083a27f3ff3b007d3ede86cd18ba85f51a71382f935e8b93f1f8fd7647d7d17 +P2 = e4a000e0f63a32d7d9d6e052dddffce132b597c0f2cc05d38541aed2dacbaf265c3908eea557a90222da8ae0d331b5917e61c641c198e78c3853e9c819881e99bfdb158a53a02d64b16631b85179aa15080e66d963e148d61d843ed185b13d0fb35c650d99b9aad9c0b90129309032ef9a0959de3e9b2596afcffb0e5d576abb1655add934de7bd50157476cacb2ea5d72f02fb4c45f05af13f1b85df3ffb89858ce0f71ce42826d05ec61d3bc21f853e9442873d45fe098a12c6c068251d940ee7f71eb62f7e55c109f5935f677b2a51fd783301a9ecef6a16a31431b007bc20b52471788e5ae02d7213c1c39e8d6af01186db50f1caf +Msg = 94bf441b9c34b5901523208008e324e3d50f2b231456b7f9355f2e49a8afc1f252378d115579d6e6f88ae5034597b300f878accbb0bca8706f0851bf2ff80bc636b3c60ffdae36a5c19247ec886789fc699ad88ff9514f45ddb8bc128351177112b7fb3cb911c5cc7f6463258f756b10f50b29b15304be97377aaa25fd583dbac4ad18d081eaf505761c76e85c4758ed2031111db92a5c59975df4833abc87e586662682798680dd9d6ac6ba5ab9e3310c6b8eb3827fa67948ccbbb0135f10f3a79b07f2f4a5d060038dd309f17a09b96891e0a1de54bc27fbe261d020e5584e630de81fecf1a4db7fc2122e5813059f1f1d83524f7267c1 +Ciphertext = 006d627a830d837c814455af29d696670a6e4d3a02b79737972c7e156f117c3b649d241ce1600aded376434fe73d6751a1ab5db6cf1b409ebec1a9ee7d8e5e043dc3e9560639ace3531bfb373285ca37771bbd640ef7812b4c7b0365efe4a3ec630cb97eebbd1434784ef4d988853df8eaef5dcd025475cb2932846e6024653e7b8f821da6fbbb8b88949e265ba971aa7e72a8af7637af6952c6922f82bcf9bf1f161890730f481f69a5e3e5d4b9a725f7a86514b034b4d2f7b48a8b0a731d5bcfca422f28e542cf4633a8b3a4d51a84d6a2a55020b4fa3b03f0d6e9caf3da0d5b45cfa82618c0677265930540219d21e357d437893a071f1e0fdb408f7b6925812577700c697f1959cc335b87fbd3a37cf5de0d729570233e5dcc3373e29c01a55111f290f31d8deb69737849a80eef81c61d4547bf3501fed91cb940cc52c8aa5cf12952cb9b6c29d346247152fef5fbc73881cf361e1300213dfccf1afdbe77c4e56a555ba698bf6bd4 + +N = 8dd84b5bf8fc03f8531b34332d188c342121bbbee555bf67c36ba4856c4623cabf308aaa5e1bed7b2716b0130ff0eaf04e71333c94f71f21b03932778b394a1280434fc25901958082d36412e684e4fb7eaacce05cc1234cdfd513a9a75f918a6d16fb0b7a0951044832fb9b3acbbd78abb49b4a2f3ce83e1020fa981508ba2bd3a71234516870c2ba1a59a7d1f696cc05ab075855f8d0a602f520490c28d0371181bd31d0c1a60357964ad0c09f08bc8848f5307994312cb56ceeb16c24a962b3425807bc33a2cb7d08f9b21ba2d5b8fe792152238c025c2d5d2faf9e44cebd3a95126fbfe2d631c547002807537151e4e5a091a117d9eab6e537a27855149f3c6b3e1dbdcf9e931c71630571cd6f29b7c6e82bb6820947a8ac14e8634c5893823f74e0c018456b91b30ee28a97695fffa380865e8c038913cb923f471984f1d5c8182e241ea9c677a17b2f07708502d9532faacde939d1231fead2bd844e94b3225275 +e = 03 +P1 = 3a7ba348f648163edd3d915ee10265f58da8f2cd5d446334be254d85b5f2685c2fcede15b4f21bc373ff90c0a41b440dbce780dcd7b636b73a83e2c510d8b9b52a4888e972185254c2b387f1e90ce437eb11f4b25f4dc70c11643bdf4e7f8f24d4e321748489fc73ac698e433527c17c1d82978a330b6c41a445061e976fd4f8020c9fcacd6e270d36d05e59ce3dcf6caba59803 +P2 = 026ce761c9b6b5718def614c3fe9ac96643d290b866bc5a1727adfe578f10fd4adb9800362fdd98a3c014b5dd4131d8baa8bd6747c2581fd68baed6ee2c2a1810b8127d729e983d05cf2fdf79c6848fd0f441a6a381f2f643c9248cdcd8e117636900145676154fa3916aaed4a9f3f746b6938fc61f718cfca8fcd7f515bc84a12dd693c237204773d28af32c3f59e3f4212543321a9bdf27567c10f9171bb12ac537ec3a7d4015e0cd8f54dac60e33aa32c70c397dfc8a9f79a79cfa6f0124eee54bcbbdfc6bc771059a741163f880e27 +Msg = dea0a7678a05f4c7730eb93dceebcc92308d77bb6afbddbe62bcd1e5810dc4f928a0c472fc88c7a1a0b926b333f19e85a3e07737d541f7fc89977a0e0c69202e4fcb2af3f306b53b3e74ad3170a50ce7834a828d2ac8c29d3e9145df726a6896952e76bd9e46ad6e40598e +Ciphertext = 0e84cf1a465b1ac6ae15fdefe4a7d13913bcf63c25ed7836e5f47b698646283215b0767cfc2cba0a953a1d30147075b2311a505c3f055ba0b9bac3918b9e56d40d63fe25c1a303278ae8658b8e9ec3b5d4a4fed0db67042ca00acabcc537c507c91b5c12de11dc90ec50fe93e8335a0bd98d1c56c4129e8054d7d9cffcbca11ce4d48a36b585d6f8cf75e3165a62e19cc3fdfe59a6a845c5a867a01f16b65338c9d7d9c65cbec90ba30d263e4d07365ad2b83a1d72020b60fccc50188b70910379e505357f9298a035aa9c3c36c1ea8ff9a12485fdb2450f96602cf9a45bfc971534e08ab2097fe8c934d33d6120022ce025f87fb7b2440ba0488addb4d1eebe960cd3e826f218f7a7900ea010cf542bb341d234ce77419f0d3d867a744e3c81064086b26ff0925cf4bdde16b9655d9b839b23bc7408a07694a169655038c443558ccc938594046cecb751064fe3df4869a30e56392ffde6619f7a68b282b11656fd455e + +N = 219103f38a3d476b4c3bb1eae6e913467296825c7a2801a343aacf9bee301f3b615c2370fb8e2a43605a89831e499fcac796d8e8870e494a2d6907d94dda1f5cd22a12f2b130f498729ca2e64fd94697092614d2fbc343fc7b10fef8223f33b6562512482a0c85eda7df2db37be90d338253d8a8b7a83a017b4955b7931ec8e48411c08af8de3a1e1d113b8e67528e7c1c55b2f4d85c166a70489c69fd3d72fa1cec5121118eccd16199be90d5e3841a7dbf907e45afffc18f99f24387546e30f52c180685c63f7d99588babcbb1d6cfb60faf6013b55709a6ac90ef54aed3b12ee875cd8721459aa7849287b3e7ebf261024afae9385bfa37a6f84dd33d0564615c7b2b1273cdb39aa2d5e31095ea30e320294cfc5e732e7bcfa7bf12c06a6962d2f0d37b3ecff45304d6bcb1e3ab1774692fa73ad3410fac5492ba97a37f4fca242f3d8e492d +e = 03 +P1 = 0267fc8de501e15c688cd7521ee2b1768bfb7e80a29603ba6e41f3a9e74524a00b6b8cd856ed182f42c2cf56f5eeb2476abd20eb957daf797c86ac3cea640277dcf03c209d777048ffe05025dcd0c50be06cfe28afc305a85fbd65a3a57d1ed56b984c78a7f866822e64cea718b902b9bf12380ed8587c786ad77a3bcc5cb9afb12ad4d7baf4b3202409ae90c8c8e2aa5ad176313e38de75f5738eeababcdf492d4c2d37f9ba16c0d203 +P2 = 0df3338a5abf3c1fea38f97020c65104ca1c11577e6cae58f37dcbf429e3edb77fb06721662b7746581363e6c6131be0bab0c4b99cd477c02df4bf41bb03eebcb52d85c1b4959ce4916384abe88e1868006d7caf1f958a90c5151f63e8217fe2a90c8b49a0686acc13d61e9d176ddf5a1a15f6b8c62d95c7930a88b20105e78dd6256c297c00cb702633ef7a2b7b621603d9bff7e9872120eba0788aa90f +Msg = 16dbd848665dd684a206334c30ed1a0a74284ae9a10e00994ddc34ffd89291b03d9b509fe86efbfc866674b77c405c8f3d4a951b7ef881340c0887de756355553bf710106fb426bee011f41add19e4268f14c97a8bcea55213444fc0c2d2f3ff2ee4f1172ff0067782201639339d9ff78fceca1751ccce1e238e504b0b4085b186f681590298b8a5c06de1bffe9decaf7744dd97919d48e7c069cd0f4803823e743e42bbc6b53d67011413203a764f1dafe4490e28d93851c39556aff7747a6e31ee32647e8254b921ee5bfa6052af234265ac0076203d56c2 +Ciphertext = 01cbefeb9744658bd3903aa40a3c085cbcf30cc1afbcd809dc9009fee4ae879353ef768dca3b469a4e88a452c880301ee45345aab4b62bb2de0c824ab1e5621498321f45a6762629d866410bf3d779ff2218e646b989c03ef5e1153ed7e1b2512d03d20681856914b1ba940679949fa7f197ca78cda42856528f678a03da1aa9e1db40549f340e58fb7d7445b2a0c21e6374376017b2a22589a3e7ec349010b4c2eba2f81d959ddd24c9c851ef9a30bd00b4ac17025d9ad32bdb6e2e1ba20fdd5cfcb658ff8475cbfe1f44b05c7d2feab2445d69d3c414f623f8b4b5b2079c8df95b43fdf02ebf04d0b7125f15d74c85224d5a5a23520c44841f86f4ffb7355cb4a377f0cd893660aa1c50dc56d63eaf1f0c227d6d83ea8f29686bdbe38bf35670781be3a8305dcacdd9ef8a5c48c503271b61f76346195fe58665d1c78d2c17d4aadb8644d6b3 + + + +rnd = 2 + + +[RsaEncOaep] + +N = c8e00ad52e14b6d8dff4f32927b777fc06e8089f3084b8cdd58d64c6c33c20d46f22639b7ed7d7b1ec02bd026be6aadbb842fcd5b1e4c8669513c24cd5a222445ec529051b5b6d772b4d690605ba72454704d79ba82020c5a82bfe079f8ea2afa125a755ad67981981d4c31cf45b2821d496b4407d40c8e86337032524a967809a863a0fb62853fb9645f79089ded21d928eb8fcab6ef798b6dc191816fc7db14709e566ceac5c99ee8e339cd2a4cfd60cfdb8f4e6013d3c1d268b470144e662a510f8d3b116ac73cb2172c1a572fd3ccc204582a61b288ee60777a589c50add40e6a1d457579f5cdde923dfb85bf605bed2e8bd60edfe9c8586001aff12da5fbf9ee7b620e363517c427e705d41ca8d6867de87c9abe5d40181fa3277c45760b6011808212cc63388290dc3e8e997d7c6ea16a9931cabde0c5daf66820f3c9f9d8976b7fb8bef7ffd82d5bf71b73422a73c5cdd8f30dbfb40081b8a288c9671df559811b1e48decb54d1260cb372ac7ca506d59331f235d1bdf588f19ac14afdea94a88107ffa029db4de62f92d7427ef2e1eb227e896927bad2ae6a0e875f828dfffa87b80cee5d31e2a0c8322b51cef40c332b1cd26262af291d509c42514d278b69c821360f4523b49e1f83b13635823198715f6a143a9a51ddc057934e190bafc44649127d6242686728e64c25a1b3f478078037e7c5e0bb635125dee9d174d1a36705b5d789c55c240c453fe67ad7390fee12f728833aaabed6252327bda281dd1703410a22d0ff48237ec901fad3153dd25936f564392e4e83c5e41239d6d30fc2e75513cd27f8519e105d13fa2343d01b84e0335ce9504a9a91ce7fde94000979d4abac0ef8cdad1a9f8cb9a8555e331e3c0965c12d2ac4e99576186585eb2646e9d064383cb74b4eb06e3206457857d5c66415fe6bb6aac54452f9956b9c04b817000bdc3f6b08b84c89c68deb7961d2df13ec499fcbf6db9995f25cf76b8c43175664aeb03f961ef868d3c01493b1cd14124f663ae48d0075c691c8268f0126dc63ec6607e148eafb8937d397d40d6bc08e1e67c2cd6ed7f0383a81510e5f3d4e57d6e4fd515d4f2dde2092887feed2da7fd60949b5d8b67c80c6ff3730c9aa90a5cc3e2bda05eeae58a7e15e2b58a731fa6d619bcdd5f4bb715d0062125cab9d7a956acb6415ee79d2418644b4b9be08fc1df76e5bb32c5f755422bf5abf96755a7f86f654ceb73566d21539703a18d4c4085a5640743d389cd8c0b0dd741260feafc20c50a203eb3c4324277145f21a483fac83b3d4dc6b26511d1ff0c02021413704b23dfa42842b5a29dc6d110b1d9d1b48db42ba02ebe8516ee1343851da0c045f19798e8aed264778cbc501f251057693016eeb081e57cd4fd8ec5697748429380c33689ba5b84c230644fb0e402173fcb592f14466a52fd +e = 0919c3dfb507 +P1 = ca3a571ec9743ba1f6028df2fb34b11cf7e175a3b2ff62d31efbf52ae0f5db361c58deda318c97824dc099ce12d5b4a2a4927448ec4c4e9a43d4476f9b5f0eee13a87d917b73c2bfeebe6ffc3aaeb21e1bc25d41440ac0b16a61cf94cedb37a766bbbc9004d956791a56b6af1f112d17fdc74519f996932351408eb1f0e71d0a8b4f419fb8f04ba9df7bdfe5a71caa60e06a124b41cc99106789c1b16a9889f60a230d5c93570364d967f85f03162871f4b523950ed4efaf75aabc4ad26b0c0db6503c67b73f1b138029edca361170b21ba3e770dbbc03a356a9fd4fddba3bcf50d62c2ffc4169799c8789834e426624a983e3bd29e63d7c8d7eefe0d8602eee9daf75d3a5afc1777965afe0547ec85fb256be86a96b3e93acc6349b4cf5a994c8fc2963e7c12c8899b28a9fff92705ecbfa412368bbc514c14c5a52b3ea25889778729f1c11df692ed039b7443e4ddff418954aa9505a926a16ecfafbebc0780816d8b42ec336cb510af596988e1e8f7a55a501d34cf38287082580fa163743fb163b4cd3b22ec21b9a4ea561de924e5a449662f4d71da5f94a2d0eb7d9b9d77772f19b930960ddda4227359c38886b2826b61c1562d67b8fae30ecd6a6458d8ed3cb164912ee843ee8a09076eaee97831bb488f015b90e775ff5766a3b6b6bcf724bfb0238a5c905c105c5e1b94120654a4e24410b3a389cd4efc1c811b7bf +P2 = fe499f3212e238ad2c74ee15f87dae3aa38a70a1aa1f471b1c62c2b26c07564676a86cbd3e014723e163270da8d50f1effa6f7bdc7f054da4e7541ca4a0ce87036b68df65ec86282e3cdac5d3d76f11c36693f7303f69d46e67608f1d13c558e1bda77a123ac7499f0929f827b4cd6601836ef44114f9b323046a5430a8d85e249a999196659927277abbd17ebdb2245dabeaf7d2fe9277afa3989dd2a771835e3728611c1e7fd3f1678ac0b5a1793833f5bb2f6348ccf4bb7a554fd887fa883387b9a362897b9780e02879f5801c1f99d6a5b03725c4b31137d9edf75c07003338dd2c165482f9f5ba9d8b3fe1d88c966c4334ad677cecdc0f27710227af415df91d90857429458ce59385fe501ffb04d6c3de47a790512d0162fa8f52c7fc930b6deb1d54428510c126e68da8d9c8f8fb1e494239675849fb33af6d07340f67769f4bf540bc4efb007537bea47986e1449408ab653594200bff5540383d86798a2b541b8c8307bf4c9a951e145b63ec3327fb84215a54def615e9798448c8f28695625a5889240297a8941437d318ebbe3fb1cd98b62bf5ef586f62edfe21542869c84adbf773b2c02ddd67743345a78f6734c90167f10905c61d89c785ce579423c38926bafd891e6c7a428dc915c03c89e54cc39e82535b3478aa4a3173a451598f1ae24985d81c8890761dc2d2acb6cf77d5d51b9d1dc6075826527c443 +HashAlg = "MD5" +Msg = 475e131681f906d86d33cb303fe53c7426227000bdd94edf14da9567d067f4d6724edbff3eae6b06adbb832f179d91b2ace00763ba6a7ebc01ea2b11fbe773fc66a09531ff49268e61b9416d3a9bd17c26a83309ef55c2d1cd8bce6dcc090581549e0df3faecb62c339d44a8c385014073ae007da52b83be0dbf282573480b962eb411a3bcd88f2fff935225b1f018535b160b855a3bc68aa77ec93198cea2681b42d2840c5ee5cf60351f7ec3fd095a96768131d1a33c188c8df5c4810d545ba25607373f4cc168410a4b35892e8b934b4a9cae2fc6590f58cf0935774e0d49fc4a4ec401eb261d7fd15898f00fdbd071b70d64820f42fb4e22afec7b0ed524158bc40971305221e9507d46806126f9266608992bbabe57eccdd08909ffe3e2086c9be40c1f01e09223299534dd64c44e780f2418d2a6a01469a215b8280e5c40cb025f4897d468dc6d51d4812c0b5465dd3360271b310fce6c857ed6e627da244f06d15ac830cb151cfa747781f5a5fb69f9d340ef3ba5a1ed442676ecf36feda621f601c617fb48e7dfdec1a17f45d137e0443d20e2275939b5d2921b5206190e411fb69e42322358b1ffa209dcd63f2152f222f5f0dbf8f2ae96ea6c05c0d9ae035b516574d28ca945209fe31763a02766343d8d537e85fe5a9b6c62af18765ceae50c47364d70df6efa65b7c3bf4c8664071fb9aa3d646b7641b84cf7c04528c1c70ac0944978d77a90d5da8240fffada5607bbe494314506bb08708768997c0a5e3ddf1c855b34bca757149a086894ac588569c80d0f4c837c6115ca59206b1aaffe61b5d263bcd1aa4c5f3196a33e6381bbe85555e04d519d96e5bc35f2bf82f2baed10528778b0329607d8983db625da5e12d3cb426f5578fe104c869f3f0cfebfde2928c2bf60ccee48ab5faa609da2aecd4d2146f3ae7e7976db6a8ca4ffac51a080778894be217c0ffe82f903e3b1868d20754e45bbdc235b80538b15077ac6bbe4cf635f45858d0db0e3fdcfe12d423f6ffbf3ccd19d1f31c73ef1fb526ba63b47bc2f2d2ded5b3fb006a1947fcdb4533065c3cf9a320eba5bd932607f654437962adac25e89d07b864910ffc8106b17c7e99b959b4a109aede1764a021a37555e0fee62b2c993351fa24ad1292bdc84c660fd2782d8dbc2099d3650bd4377d25f0ec92c432c2e0c27c1ed105bb8bc0634bcb239fb372f0a621ec836e5d261a08601152fb264bd91e4cfeb5eefbe6ea023f4506c281a +Label = ff7ee1a11bc665e1a5ae2ff0a4e137b88965209e112f606cef5b9f4082c48734c73303c417a7f407d9b4a5778da7bbce7066bfffd616bc7c5dda2fed832f9911b0603e25d330c42c472f602803b323024c3da6fefe0dc5b9e772fb6d2f8afd986df96dfa724aaa0e1a85ea1deb42990e803670b89bcf5ebd3818274ff1b38e820d129f87d7321d0ce043c2ea18abf654b62641929bd42791b23ff8cbb04b4bafae41ac299e1a8064cf16d1c84049a4431580e7fd2e13de54ab56c7bcd2b7f82c4460624c5e21e498ea8e9501385a4ac5a27b76bb580360d0e0ad039afaee9cf1fe20eeb7ac015e97f90586c38370e2efb4b4d646317bb0a4c1ca5774f447477474cbe3313fb24825b222bbfd3a2fede2380f83f417dcfae31e146fc264f875c417b68313ab7929201881e7ef3f8fbf91b8d046a14f862e94b84b95e9f23b75bddb678ae3c1074fde70c6907f403a2412ea459ae551fbd59dcbdcf8a4c07f9a6c9806e6791cb433b2330e5e65bb1acc407f47c997b39384ff1ea3cb9c86115667a9f3302d0f42f54bca43067d5766a43756e1b7e8cde0239068f5858f86df2cea75f3022c8e43ff7068fca4dc6940bbcfecffb52f93fd9a1c36ff6dfbeca5b856e75ec509577f9511d97f0854ad6960a6eaaca181766681a9bd68dd3c6f3e41f9d7b1f1ee89faa6ad8182e29515b2eb43974d3ed9b26b5f45a5a3b54e1becd2326fbcfd1ee65e64aa8dfa15729c801b049e9d44d4e2c63da94aa62c +Ciphertext = 1c98a8d3da8d5e669434ba91cc9493db3ebcdf38c2ff4c0547a76e94850638b41ddfea815901434197f4f6aeb83b97986c4fe5172862ce84f45570210c8c2dd8db1d40fe2b764d88ec37f8d3a802286f69da8ada310548e8f936a2b1f9f6e5a15ed3c9e137912db0a2b86cb6a08424e739daa833f23176bd4c67482e4148c5195b68d20aed962834d1f6490a0d0e50f42f60ebfadcef2364137a92ae71bd3b64d4e818dcabf665dd9f52b289891d51910b36ca3dfa07a8171a2a5f7a6658c5edfb558290b42e9e2aa80bd4398b84c4a26920bcf6fdf457c06e89ae567f38c56b8fc7bfbd07539d234f74a45ee504b2dbe40148c4adfe457ba062506bfde545d351b7df07900a4bac1abe5dc434801dcd8b0152c393701624296091344ffa72af2726f2aeb2f99a2ff5a75a6593fe16912b1386881d5e6913f8849898d788d77f935dfbfcd6238890c8400b76b7b96ecd412539e3365ab559302050119e4c769acbf2c5c7a10f4c07788e6841abaddb3debe4b3a6fced00772ab0e292cfcd80516cd69ee2176464486eb37dab14ad36dc938c5ea97723f18be1588f1d0c6cbf27ba76a123eecd5705d3d35bfe6074a7d54840030cc7def0f0839cb65ce748962de073294ef3587c94c3186b223636725cc88232c9eb17e6c97245dd6101619edb95d18b3d07dca5d17b7dfcbfd3bc9de3fad4d762d32897f329f7f848550ed3f54f747c3bc8ed2f14f29ab86095e16637a3c8cb312baa28728406a1b32a34cb537245252a701a6ea2721336c39e5e20aa63d123c733688813af840a7fdd3fc95518857f449ade1c974ea0236ab08e34a096377baba80ee1d390a384ec9efb51b2b0756c4908a8dc48e71d18e62afbd00880482bfff73a0e9d0c60e008dd076e63966bc28365ce37c083e40763d42cf0b50c06458a728aa226334a36e5f1217df410925c703b31e0963716abc32ad731523e7432361724f51c8e7136ff3bce6397ba0dac4c5917d15fc9f098d4c95e83966a4849e0335da628612148610fd26d5c220f4eddb19efd6d149ede6f23ae168133ed5aaca4efe07ab394ec68e2bdd638b10f742a9e0d026bc4abaad1a7efde6407011d3c14ad6f3ea712b749eb1bee7decdd42689704393d19c6143d4e5c7c6522751f90e80c703d403fb5425babe06379517b03fda19a8b6c93ade8288201c672e01f380663ff8bc885db4140b181dfb27773218b6f27e849477b8161f2255df4f2ef79a1bc8aa0b9632428b9f624cd03593dd4208586a2eacdfd8f4d26e8b560083be5cffb7a2ab83be4910fdac9dbb67e9e9b2168d4e388b6e14f15565a8e2a4dcf64125b4784f8e1e6388806433ad7d7530c070991364616a852a780f91a75af2f9d994179006f6c9abc98ef5f04eff9992c49c9121ecd6750ea49a47f4324eb7d2a959578b1f98a4afc4bc45309 + +N = b70c0350dff1e424ed1690d62d5d197a56eeff27957732ba32ed00b299aa181c1900ba6ba473f3fc55f09cb9827bf8e77da3d2010080fb44b7e2ecfeb29a652469da38135bbc234a0b36ef885535ea3a4345fbe894bf149eb6b880742111ef03916390ff3d4709c049d67484ff41106cc2aaa3c71eafbe3e09d49c8381384c38f5e0d4c0e37792a7bd7ddaf8a3f43d35c7210a6baca193949a63658b18c0b72f1af30037478f3ad3e997720e15cebcadcd52fa48730707eec3806e3538a06508b2fe180f076f51420c348f80bed6d627735f58dcb67892f997326284a60fcb2a83194b8e79ba157d40461fa3a2734acc0231e15a126dc4ee21b5d2f92f8614acec6fdfe32d4a728d6f05e0e99a90ed051c8749e71d00374504df67e7438e1fa12e63c4e17d36501b4a05fba28ad0d98e5a812c3c2e69400215a541ca2f2aa846ba5387717604f92278c44c5a4e5dd1d33c2d311ecee58748272be2b52d617a644d60c650f90012a87011dc6121581c033deb68152e3ef0389b9dd125c77f2bb835d8e84c21ec71ca5b529126fb2bc053b517f1420b0b4fbfb8f40db2a811294f6345138309237b19368224d0d6bf8623e7afa376cbf04ac91377be1aeb7e7d60e4e644cf165be8a93e8a258ba3578ce4494a1b3d6ccc87a1d60435cb997d4e08f0cf8cf9014db15e42106e81a339e52091d876f05e852ee71c20a99be4d6122d +e = 01cb45 +P1 = c8e098cacbce5005a5c8a98c468616c2a1a4c1998f4451069a9c32c4e5ba1a7293a9a9e1cb5425624296307920525aeabbc7cd35b7e4e6e79ac53c1bbf27dcb617892a2d0246017b9525f9d00bba7d9552034ebedb2eee10240d62f4ac75da6650309a967d33b1302183c09e689ac3fb73925502390e470ccbe475a73b83af0955fa7065ab1362ffa8b141a516e7372f680b29ccda2b8af45c292be3ebdbe7951077a6fe63eecc9d0ac2a6eec68cc647e1c6ae8c42c9305e4292f06560be2a600428802d9bda7f65e7b11a23b612840331943e02ef848a5ed5873268b7cf869fee75c416e13571bbb5dba154453e648442d4e7b53b14d3707149e7340f4f974b +P2 = e946d9b7b10dfc7e837f414d31f028880aebf4eb5bc60a8600ef5bdbadf700f0df6b0c140619074b6d7a2f34676b6dce5590db466dc322b084bc1e142c78b764bd1a3a1723fd4e7e963909561df490afaf40d0885e4319729931770ea24a9d4ecd1b9f5705eb2db4bfa9ec6cac74ae369307da385503197535f185f64da3821004abfc7949897427d27a80a0c88f4adab48bc92580fd42876fe0ff0a601b5a4b95b096075d7dfbd96a85fc39345571329e20e6f50ec6479f65f7e606ad7b3613d42b2bb02e7f04a75b565445e73257d6b8fe540cdb7c867dd0384ebbb832a3e558d502386651ebf5d118407ccb4308d16d4a43413e450d7b6ccddc9bd291b967 +HashAlg = "SHA384" +Msg = 6b34ab4f27437647c0d6c0baf76a1e6c4eec1a2ef88b97b46fc66f47636a49930fbda9b0a05d05e56e1a884e91945fef533964f4545c9f7b0c54fc0798dc583388112b98e286e16d6acbd376baf4ca2e22f9f1764c4588c2972510279cf7fc3667d30440da4da50264e585f0ebe487f9b385089893dc0ccc62748151650d7a124b9eb7ad2f16e71174d087650354ad8d763f1bdf292971b0a2c54088ec200b836919173ea102c23b57ebb53d5f8cc206321ebcf697b3f5313aadbab1cc9ab08e24b9ff473951f8c4cfd0829ccdd32c9fd40170dd3c7188d705e9a9a36ef6b8b81aa87f46bebb6abf408d40c4835f196ad4d00b230e09f04b67caccb634da60ad1b4faa1c14eacea04e40873f92a629b0dcacbbfa3cb02991d618c9428c8b2b559c172d7930f54d68f40ff5e277e557cc13f648a59a524690d5f71933435228f86e +Label = d733f463c614856eef54fc434a8d8e8c8cfbf8d40c665b78d2c5c1a014113ef7993a74909e23a45c6769551660bafed8e03903afa930c72dd255915764d9e11b20c81e77fe3e803376648b1eea6fff9819f0cef1047ff0e09f2f0b206eceefa51f4a2b338a9ea430bd73826e8398e08e42b4dca54b76e77ca36d4bf749657fbeceecef63a14ab561f414efac0fc46f5d9b0364e18125038955bbc543b2abd205ea4ed75714ed53de5686424c02e26d421656c201179a9e38bcc9a69d32c00923d3a154f19e5a0af4a5b196687081dc2665779792c41dbcf98be113a3945de151d97145fe207f139dc7d5c2f9a2cab534e03ba51ee6cbf3264c2b638bf608c6500f57d91124e048b03a721225f1212a6b6705c1fe8b3c9e5d204187eba85a36c3bbd3ae81e769022846be5aa910d3aa9a858deae41e538d5aac2053fbc650f700e53d75173a648727b9693dec73c8cd95d53eaf0ab67d1fe507ef2b35d8b6357b2bb20ec7c28687efb4bda4baf0ec486405cdf80dd3d224211f074f99b63345c40f429094862a6f41da6e8a9cd05a26d7ee883645c734d128665053571ba0d9ff167096e83e70ae38b44fddb3da7ad3f2643b6259f1ae202c205b85a17bf1bdcea9341d0248885b3c7723ac26192b1029b338e7d5f4c868994963669aa45c3e12d66caa4c95fc0da8ac5c1e1fcf062d055cc5cda9622041e2226bf1ff9be804727d4de1f9d18f86056f9e893576d6837dbd1275b721f2de7e7dd9fa7f74d33593323347aca986eb5ee07581630258e26da1a34ff7aa1645701740d65ef6d9df02f0a26da6a0f08235f63aa6a621052f44a040f22307fe45a92d04494390ea399375727ad37265b53299666f7d7c1aa81c008c31018705a32be7ab63102b324aa2049a8880878a6d8b037d840905b9002555d85bfb40b3b1a847e2689b55c6e914a0cb67628a019a75506f5b1b7d9628ab22704f8f20edec4050a80c9b3cd81a8a24bad2133a73dff23ec5f040080579d3b600498219afd693a043fef2e7d9d1e3138f42fdcb4bebf0bdeaba74408e9fe70c08dddce5f3910a3b68d72de65278b20485fc348781b8d46062ace52b73141d60b78234fa13c13fa645ddd513ae2697f89ce4cf90cc6167083e8cb98681e2de267dbfd061043da797b049d566bac981ad7e6d1eed724a95196292291f8babe6b2a55b826b060f889303e37dd0e0d453006f7823c0927ed9e49619edd82bbd754680feea670da0cd358ed1ff0b62ac7a3b4b50f6308c73f0f3ea5dc66d15e2b07cf982da6ccf8c290501f3b3b3840a6e68 +Ciphertext = 9302c7456d3a5cf7fe4f357b76fee2abc5e38bdff4503c557bb75a4e267c4ed8a2df9c737b9c5881b5d616e247395fb2c1945104af5a8d9aca8eefe35aeaa5d160caca75d2e8aa358d0009b13b0cf7b185a162e11cc2c727e1be3b2d0ce2a50eab8cb5a6bafc491f219a0a60acf5354253a6d344e87034a810479f194895fd1b2dc87e9d16b9dac0ce9fcc432c6f002912b1988c4719484981fbac549bc1471e27f0fcca0194c5c742724ab249336e5c6682ce97755386abdb060615087cfb17585e425d3426a54c35939d847afbd71a9ec44fb59f382ae8fb64c20caaaf0871afc8208e1317de840df7d5c795b98c12be9663d3530133150aaf990f11593bd0f586120cc041a03fcf324c47b277e052da5390fc6f0c8a8fb64bbd74200b30f91dee976a0342b1151fe1625f0a4b3168a7fb0446bb2dcb054d634baad2f7e327b79e8e1fd02e4735db2aa29dd23277c8e5cfc27ddd04a7052334e9227747f3feadab499cd9721f7fe9c18658b365742ec68b3c13491f9c957b297dfcea00a47028f5660f0760c990508aff15a9260c33a921fc2475b3a612f4b374ee807a07c834a4ebd92253a6a458aef59a240260d7c7aa102ef8880353fa6ae6b4562d31677b651f7690fcde438ccd2eff0cdd4faf36d21368ec6227551546ecdd1ce290ac95db0ca4758d0fec92037e0a3fd7104d2931bcf992e1d71ff236abd0b0571fac + +N = aacca1d9ed15b5cc7d423bed5f8e7fe6aece8eb0f89160f3634831946be1aac0225b488df33cef5c736b36109dbb3493f0666941adcba3e9dd114c0bbf8d0efe38fa1aa2dc57f65baa227839e96bd9812d534c09eb28f60c72ca58890c424c8ca4fd39401040e4a2c586f3f7c864f57e68bf810005de0c0cc99120a8a315670d743be8439a425c4476e3e607fa1328b7645c564dfe56f0fd85430bc48126d57d2592d4bc01a1e5f82cc83e5f8492737493346bd0c292e9493c6b758306b32e98f1871442d8e1c18ac32c9a3e60a711b8d71013eb79e81971f89153174f6d009bcc8ca0c651ba2b67a8add21d5fe19ac690e86d8feaf48672a197fdb658d0fa059de9802fc5b5fbd2d2e453833d886cfe0d4e1338e397db5d11e99a39b281bf94a331393daeadef4a44505c8e10941ff20327ed93a4b878a62aa5939a943cfa644d48ddd68542e432ac1b3b61e51bea876f78d298b4e2f0e232bf8189e11ec19d278259965e4c88f4c29e7549c4cdbfebd320a1ff9511211a469247e53c12568e9beca5b3c4eb0fe62554cb59a9f413f30bebda90db977fd61bc085abe299a4387cb47c1004fed4855f965f49e5e57ed2f18f80ec87b71d2673238e69156588f9f602e73b57a6a8c2063c51f12551be7e94cb76cd3251236483a1a3fe03c5a3fbd1fd3baca26dca05c0123303d12da505f590c405c949cbf1de1dbaf993432ac9 +e = 0b44d8c7dd +P1 = d6a1899d5196e1529aea80d344d23270d84a3e3a7477bdfef593cdb6badb5672a41e0e0d368e088e21359e8f099f6da38942cf1a3686248e741b7eec07b762a54db703a9e723072d9a971d76779ee1b3c450e8f058c1fc967881572efb6a1ea2db681790ffd9c837b56646deabc31fe30b6c89c6c6809146477ca8b53f84cfd5c7b218198deccdaaf3038b300fd45ec820a8a1370d2318718f6a4eb4f42a29ddaeb7f0437904cf3c5b0a183a8e7a6d82e0c86ad76d870dd7b06262c62036d186e956166b25ee1731c6403c2b7811bdd62f3178e2cd1a1ace06ae3dc996f8f10587e09a3bfdc7fc2e2674b0001a2bf199caf863049a78603b2367aa99ca3868fb +P2 = cbb8530a9b84ad817b117b32c2a7f2507508e656353d04bfbf8d4baee008692aca4561f48cc93e3f0148daf7d363e7a94f80adc31ad4e464865e7723ecc01ebb08b836ec5895b39ad625a96a192ab54d1ed4416eaaa0814fdbf46b60f296b83befe2c37b8d47281599b2f68a17506d33a7c131fe3b40e31ea703a787ffac17167c4c2f3aa66977524d56978ae3b4fbdc43047b1964827c697f92f7292f635453f45fc6f619c655aabf6542ff2bf4028178e3c021cdbf3e0d11a4c0e0de46210278ecac8538b3ead3de7ac73340c3dc87b24fb32022b709f8701834517146179e7b1f0bfbe8cc6d9f8e08f204f68e087726add21a441d4e5055ea2fc84513780b +HashAlg = "MD5" +Msg = 31e29b117bb01086d360a2dfba6037083ded79266f6b26084c0cbd170fd148609f7c533a2389d220c075208f4d531c36e76504316e40ee1ab8decad60406575634923a1c17e6ba11c338874cb921946564593763178eaa38b0735308e37785cb2175b1af4edbf274fc717c4e7b461f77faa5a4c2fe6799048f8e89856cb6c6b7cf9eae2c0464016657b534e096 +Label = 3d6458ffb33c4514bc650982bc6a47fa1398a5ebe3a6f90caa533b98bea5e489eead4545904cc07da2a9af6fb944cbffd3230ca968eb64d0bb6e4ae37ae8554fd937a350e59563799fe72444aff3c013788e75d5762503e9633f3c0d4824ac6a91e3837412400ab3d8033e5ca10166792437718e4c96dba632d6ec495bcfc0875efae9588345e1c8bde7fc84027689c5f096ddc8e6ecb512643107c7e91f3eab52299dd35110f6b419a3e22a55941e64fcfc795ef60fa0c4cc8212eca5ba5567b24c60fd562a73deb800d579199d02913b1ac4a26e78744fa95fbf4aa249e1906bd68f7878ff220cd77daec5091d1190f87809b49dba6659561832dfd6a1ddd40e9528349f +Ciphertext = 6132f49e28dbbe4c03420aabfff127e1c06f4f23595c1a007f0c919feea0d8e290a48569e1795ad600cf7c4970ae2da81644016735061480386443a6951045f3196c140fb1ed36480267f000976fab59a3ede87ea8a32bf8e4190a8814da0b208d7d0bcfc1fe493baf16ee3eeeffe368eabd0b22c8d61952adb862d7c10a4f645f1b3e96b35059f1dfc5ff6134fb5a5e721b7dce453bb261f18b8d8b393cc5b582675e2f91a4976f4b96227a5ba2e8be1aa19debea2f45d8c785d260df0755cf2bf7375f4230df3aded2cd87adb032fe0502bcf255a34332edb3b7e282fcbcb170215bb0ddffe394f1a2853a84dc424fcf73ee08eaa805c06d3e2d1c628c09e86bd72a2a223e656ffa333da9297107aa2b524bd09e148e09b332f2b310a803d1e2b39b8ded901afaf370f712091d60b4dbe63e17c654f046db9032430da98337f5338e908a2edf9d033c1e34b833d446a7d7d7148b59ecde6788aa4414949c66bf05b6d49a62da44c87e1423b79b093630b30cde2bbcd6c80c86ab401edbcad31d5b5f33af796e91990137a0c8aacfbbb3ef6f26269c1846a9037ade8b460e842b12c93a5cd97e899ad42f627c5ccd2d496501014600e4667df4e1e7cbeb0c17ee6ee8c3791556caf286e06fbe43babac5ca948de81d8a89ed199d646403ebd6b3e81c38c7cad31834864c2b698bb7f3d28ffc7eabaa5e7a3b1e3b8706500242 + +N = c6890b8bb2100b87c2226cfbcd99e1a86c65fe0472607814b7bf03098e090ce66555f1fb97f2cb50e9064c74615100f1788d9667235c32b42d366f1afc9b301017950693fc4b1d96300d12ad0527cb9e94c7aa2998343e275751f1990641b8d16dc3f47dd423f7e634a7e3c9ee40d7cb7cb28211a8aadbd10b2890927784e7a927e3c97308e476916990652dc4d67acb6dc746c2670c5cce9855d73a94efa3ed98d34b4610b8a4dec173965afa326f3301fdb1e53e235a3cfd822ed1e2b387c75a83e074a4a2bc5856574cc16f35278eef43be37259f8d5a5401736ed75a1639b91624ae55251b3144e09cd7ac811a8d51e3214928beb7a91c5d9920239c1d0a6d94c4bf72e14a6dc125e3d3bbdce32c606e3d71108d5d0de9bb649daa588724c754a344e37a2a26f688799a2283569d6fb0420f522eedc63bbcaee65f8571ab270565acc64f490a312e7f6f57273c1a8b70b867173c9f454c2e9ba092792aabd33bb9aa2614cfcdc9e9fe79d4829d6f9b12107e36c70befa7111d3ab6fd359d +e = 010001 +P1 = cfe3a7898d81712f1975a316d67ccca75f64c2f6ffa2d62899825a86a45adb1d557e1abf43e7720acb84ee6bfdddb3fd897ba83d5bf646db71565391bb35a1f6ca64293faacdd226c6cba1e0736dc05234f109a925f0c021c773c914aa6dd8c90d5eb124625167668ef553dc35f1235f60811d06d755fb686d732f3f3430872017f2fc1e59be1785d819bba204396aad041311db04a56b4784ee32a963f934142c120c9b552d99ce8b87fb2b7198542b4dcae745ded9e937c56e8eae74710607 +P2 = f47b3801982859cbf372051f3b53b2ea3c71ba3eb8b9a5916ee3630a2e59979ec9ed7100c93da245c00ffcd793c1fc746125495ad5b851f54ccf79dffbb68c507fe268b1875330c55397623bddf86645a90377b76f916d0d185dceb2a4e5be131b1b7672e64347c32c7b54df8a21430817309aba2190c7ef10575b9851e5b592af6681c0e3581dce187f224d5138f797fbffb78bac0918303ea8e839f70cce839f0ee4872627bfd9f96dc5facd11eee094210b124d521c542218b7dd9ce41e3b +HashAlg = "MD5" +Msg = 906bd706e23793e477380d2a469ed4746fca0cdd3117e691d9e5d94b8f8d36771c36431beb92ef9b51cd8f6d51af01a412500b3c565ec494bbb16466780e62da980382bb021d22c9d92b6a76e9395539745c7ce87cec46ed9b7cf0672cfab5bef65f50bfcc1002cbdf1137e038a05fb33058dc709d05384ef5c3e06b2b1cb4798016e81a873651f75eb644d7dd +Label = 8cf980ccedb331f15824240dc89836f015834eb025a160e1d667a1e3ec1e4eab6afefe534ea24438d27eb0d8ada81f54c752a0880bdb764efd925b0651d9cea0d559ebad651a9a71a102e2d67ff8638617f1dd8fea99a2e6c8cdd9a59409a5757f920d63b3993e3ef2072df091eb5dd5ee6384310760e1579981e958fc16ee7db67256c86d544fb9b6e37acc14924424529207b52d2e02326251c02b0b8f5a279a0c4bb7dc0ec46e8914bbf45974e1c5e02bb4f5dbdf25d328cf04297e64be91c07cec0742a0c800d9eeb9890e25f9139548c155de436d2ecca01aa53296e21c4c390059960c4b5526a95d26df2172f56db1ba4bd4dfeece4e7c48f156b9fde441335720c6b22e47f4a1c679f67b8dd996bdd02ecc9ef20366f02152549394fd93fbd2640bf4cfe78009e3f116533feff8020d291dfcff204b0d673871334211fb0cbc9e91596af51dff9e838802f769df26f4cf52b4a94999da74149e5a036cb249878da082132fd12ac421a0171fcc57aaf01b270563a18a979550e8f3ff774af5dd +Ciphertext = 8e3787b11176625c0784d1ac200bc8957d4435d0c9eb18df3f744f7ed77010411584d3d6582078d2d1f7530a13ce4c8694231c3d68c426256ed5eb2d29cf223aa161bcb69130dc649db440428be5b93d2f8d2b3be83f61dc73293495de668dffa6b214bc2ab15ee3619aa689576e4dbb8585e7097a2c4a031bdeaa97ae61d5f3ab27c2415448da59fa583e5be57b4c8336a3bd3aace3260fee08b6e0adac23a5bac6e6f7c60221bed480189b31e82f4f51a4ea00f16883adbd2d0ac4ef3649d370431b1064a4c2c506881bf468da22549a0cd04ecf5a2103f826bb56c699416e0ed8b8737f39cfe40961b034a3f0dc97da0905716cea23baa0c8c63528e5ad3dadc96402ad0006ac7ac89298e564df1ea20db0ec03e9720b6fddfa15ae95156c14c0f2170c93c02ce6aeffac63fd5c6d1aa6895577b80787e34895b64607ef8d169d4a3026e3b3f8040be124ad52c4e8c3daeac66057f8a2c10dfb21d9e8c3af2a84ca1fa9fe50021433da5f00b0b76282028633b4385742aa204674651417c2 + +N = df7a504ebec1abe0cca305952800363b9c351cf8a1ca8df43a51b19a563ce594a3b50c7f851995686fc770709b362e51bae1586ad9db7b6281d44b713390c36ad15f8158b971dd4633bd359d90fb749acbe765893671fcfa5b545be28aa0497894c57e95f6d060ac5461e6a6a956b081a305202ed5fa7e1e071a9b7f70b9fdae649b8fd3e2bb00115f9448a3ca8d79679f7193befd6963d6ed5254b62f729f696038c9bd7132d858ace7ea0033fc7050e09ef998503fcee194afd0cd1fa7b4bd01aa2dbc1fce2a69d435ea25a8911a3497aee314c7ebeb35efc6f377691ef8a18eedf72567aae76f6ceb67c99225117ec0be913003544d8e0f0a7297842e08983b6b8713190b8d221a8aaa784276e31344a2dbaf83fbcc0ea7829ce012ef51b745a8070415494124fb0740ddbf2aaf27f7b6e6ea066e693dab3a770b91199f509b5ef8953638a87671f62fa13a986d141359c05b9ffd0ba8aee7af53c669a299822b782b44939c1ea9eadde57e0a97af2f0cdea3e7c5e2f2662b121af79ef165 +e = 010001 +P1 = e4cd41cb4bcba4cb5094244f124f12f4de7978fb3458b1b51f0a53bb9b70e171802bfc14b4c293e4ee4aba005877a8856d24a8c45973af114504e8e000c79d11838c2e896be3da4a2821d87454e6a2b7d3a7122588fb73eefa1c27b08a1e25b868d926fb2feb65bb3b55a468775ed2bbbe9e8b2225349ce426f35658d2c9f291713c306e2ad5ebd7b174162b37872730b227bfb7b594ecd00d99aedcc1415f6652edcdd60747ed173975a8d5caf1ea11da1579f438ff01b9c96b9bbba830eeb7 +P2 = fa0b0a5572704851ae8f14d252b2144af9c3a97f0ce8f38149608a4ca8d2edc3197f17f5341c816f5cb50050e4833b9a1586ddfd9a892af0f2865c1bbcfea43540f701b3ce2765d4d0132c419706a7811e575d01e112b14b16900824b1d540d44f5016ce73516008444c0f8bcf07b912ea81723e9ff30139ae0e430e861a928834fac2b20f0c59dfa9b452f9a1fa44fb2ed1349028e6a4baeec6b3084ba7d737936e453ea84b4e8e35f41100b9772633e98eddd95e36dc0e8ac86366b413c4c3 +HashAlg = "SHA256" +Msg = 87ccc1b255ecf72c1f864d997fb7c4de08db7aacb0938be963b1f227be334af0ac2dc0bb00edd6a31c52b9313c152c0f82a1bb2686a0bb5588c18100b046f4c9424759361e63160c45fbc40210170d730f2a0990fe5f320257c0fadd1330fb12682d88752c887598c15a865b4bf0a4dd7bfa2cce6672abd70ba5e1eb4bc8e5ec58ce1c63d3c20cbb5ca3bacf00a8275a9e82c18f0d6cfdec265b4d2a42c5d45a9c9eb0c0c3b845b4686db1b51495e7027b67eb00a6bfd364ae6e41f9248666932a600cfe37f218e234711f88808890bfc8bcedec60c682e57a8f425a6baa93afc8040a4c30f350ed06410dfbd96d01036ece82901542239275 +Label = befeac4c16a56b04739d76662de11d32d2155afcf67c4fbe425d0a443f7a28a6fa09346242cb6040efe59a994f7ee1192adeba5ce20e107a160c7904a5047ad2213ddf76863f734b7d6e7a813cdefd94ca249c21e45963d684f0a159c545da0c3e85e515d80f28c00ff29b0b050d29f66419acf0334805a23fc93bb03ef08185b803f987fd35758511fe4fc2d599e08368d579270fcb249fce8dc874408149faca4fd2b192f4df2516bd9188ac5c5a01d4586b2fef30257d1e30989a1761f774fb72a56e36450ca455ea904caed9c57b290be2f91a4960cb6a1a730362a0154ff93ec55429590f1ba7516d1f17a215ff555a7d0c09f1e2fc710002162c54b57117cbf974fca8ff7ce85bb01b3c68dd019ee2da418647f3f6c23398d6f0b0b469660f91ea8b7b9d77b94fb911b02ae4a4199f988ec17600118ad9097d9a17e5b0a80b625df4c320b8c4f428927bb660bfe8453ecc03135ff3637dc7fedbb68ea6a5f3422cf96b428faec784926bd4a6717150bac2c7ad98ef459d00d796700f55e2a8a1ea228ad3dd9bba5a9af16cb1c2a51c32edc6cbf9b40f6e3ca5f88eb0f242264f621cdd1f9f425d65fc2886289f924f9865100a90ea53eca3b583f20d6279a27008f96f6e6c71793267ef6845d98c30b87675f9ae8acfd21250a7ca685587b7cca139270a13f28e292aba8f37f7ef0eddf83311b40b8092da5868854a85a579ebd308c8faf6fd6d84058c7255f2458ec86ce19b5717a90013ef33c8459711c441f467de277eb0f52542306704810daf7aeaa8c01a16 +Ciphertext = 60b05a4b22042239fb6d253fe8cf20083a7fc45e4ae90e21ec8cd6598b7a4dada1932006e8ab605359f614b0e41df456d12af27bf5e96bf4662cf72b407aea6b949c2aebb484d741e06570f3a9a4a7c893bb639adfbdaa5329589e9dd62d9e6882ae4d51c764b54b780fe346f35e0ed62f4e62222892c0e2f0c1a923b5cfc95f24560c7777b767f471bd874abe2d2831cf3d7426d5f8caa905e06a1defebb41b8c7f8084d1385089fc961ed45a78680d7f5217aa62b625680329188c833419c0bae6396cba8ab56d92f4b3ef601528dcffc57b958cb8afad5c49a831bbd8ba7f74096354964b2e939d1d4b6b998e01dbaab14b233fc38b954c0ac540bc45159c2a231417d64ed3d29f03311d28065c56902478f0c773c7845f0340a418b2e8ab212ac1974c241cd244f988eac0042cd8260c2b961afef543f4baf3500d346bfe63b9f39fc4851217ae06feac4a0c4a2f0d6802cee66339fae10b82e2a792786f86f5c7ab1fe95b9cd0713d3a5f63ab02f10ea933c0d8adf8c079dc5f72acafaa + +N = bfecf53599b6017414e891d4526206310285d46f54bc742cecbfc841d026cb0f489cc2fe0b6c3095db8998c07a1a7988758d85e08eb97153a2461062e4c5ee6c685db36afa9ea2088193342031ece3bd76db5ad0b27d69cacc5c3d25cf571801904cec207058021d5a1327c8348de16ee58a3b789683d2678a3db074f16c81c120a7b8827f61a413ea42c229df1668566263e8c0058cbefb1be12e3cef1b612f7540f63eebe1741c68fe6618c171c0f79cccf72019c6533d213e96c7de369346be39073f2bac1463fd2ab88cc670fe5e55b2547d1eaecca7df00dda8aefd9af1c48b74e3560f2f1f911d56820f52fe88084aab61ec963f27c9d33f6847e62ac7797e409cf6410a5bc6407aa117dd2492b3be43b279a4a130c6e213417493e387e411cb3e00010fe2000ebc2ba1a1c151ba49d9877909938c473238f052581f83a7fc64253e7c1035bdc38889f00aa0e78e3457d088cb4e6b0c26f226c8a9045e221bf676e048a934d928829ba32d508776b288560702d088f370b8e351a0d33d +e = 010001 +P1 = e1cdda7b5c23e4e95599488008ef202dda379ad1a5593ee1acb0be43034eb2c174aaa8a6c28580ed3776029506942a9421916f0ba4ea585a163ede0095a8e408eb09a7370f27c44e9bf91e8843527b245965850e344e7a71fb994eafc910490bedd3097e6860522154badf4f2442d9a2b7b2c5ea824830c4f1462d1423f9a3b6125c29157f6cd1af82a14afaaa00979a07c888bffdae01b5a3e2be5d86e242103ebc7da0e24cdc1d0120d48bab92c31a63ede8a1103dfaecd7504acd67e70f47 +P2 = d9975007bf882f49478ccf245dca62aadb73bf510b5bbcacb92ae01ffbeb863b35ee0ff8f4d6953cf4062a0b5f7d79cb58c900c0e34cd4b1d91caedfebbeec2c8e15772afd2629d534f5b562f699c9420355f268649c2c675a0db13abc09ba07ca95793096bad4ad5ab72f38d10df200145e252faee92e4a3733d9bcdeeb4566df15d480e84cb93e6273e1dc2848dfa3b01fa0393a08a4563f11851dacbc240672150b6571d6c7ec5ee727e370573f68731b4c0957ed095fdf26f6562412f35b +HashAlg = "SHA512" +Msg = 56b4c3b287c96900 +Label = f185a8cc7d +Ciphertext = 2b37b1ad4a25153732d6ceb3b816e3d2817939c5de88436b658270488a697b7f787486ee7ee5988572eb53f51de02ce7b85478f0452334a61e1662e67ab903f46833102f043e178641b3bc11da45e3341bd57436eaa7ba54637e0f0914df99bf26f2b575425cee081450c5bfe46630edcf166b177f405e38c1ab994e510383e9da5a69dfd1f76452747b0a48388da7ade87a79ae33bb98d4540a3265eafef2efb0896ec89ecfe8a3a8a99881f51aece940229518cf59d67684ae55631980549ca74f06fc0864fb2f43fc6e49c66c6746ee445b639fc216913b80bd207fddc85c7eb66007e624854533c941fffc343d7ff77b1b01236a8c6301659fec587d3e8834caeab84c01389131b1e75e12ee7b474141b91fd1b5cffdff284b0243d81b8ae0f66e63e468d532ad496163ba0818b17f452022b17d90bf558447b4613de19669e84dd4b9ea08a4519b622a1ce058ada2f277364817c4629a283760eefb3e131e41d6277a5532f04dec76466138b2c5111506fa8cab7e2a0aa8bb588b91d096 + +N = cea80bd6d6bb75f0996be97d41cdbb0e272aa2a247dcba4b825dec42556cb6764356d85c3e60250e2aa6473990a2c81b4bf8aded67b5288a13d8d6939ff62c8fce32343efabfa70f306bd383472df1daedfb272ca9c391449909951f53de8be5fe9f21b9648b814d3d27b84a15fd849524245c4debf08f3c37b5fea230beac29a52d162e627753f0cad3089192494cda25de692881b77197af66f3755b86f749e0384da6a224563f2a96aeea52b92e7bae2020eabc8b25db17d110ab2c61caa7c7debff92b4e7e0d39647426ffb59e1a6636315a435bc9895f6980275dc560b1572e5e70aac5fea6eec7aa6890be7a3be840900754ff8a30383359f94d475a51 +e = 010001 +P1 = dabaabcc39ef74355bcc7e8ae74b50b3c7c05c9a9228afb21c838ccdf83b44939fdde31cbc4151bfd71b3bf6c3fff6f2a5e173f5ed7aea538c704dc0fc9267357c71720aae7a5e82df5584cded98f8f1e016a14b899fa7b255cb9a30fb05276af7fe402fad3e3a5543df53bb173f1bab7a70da79b411a5646c07c29826a0400f +P2 = f1debddf4a7db5e3922bdbe30152be7b550802a0af3c8677fb5991af98b05edb163aeebe31d1d72d6d91d7c04ec11a37f290ee4c58b7b8b383a3ccd30090005b5adf2bab4281d1d6daad41c86bd7ca4db05b4b745ecea0bc19271474884e031bd8ce6462335fcd71ac604eef064cb3331764739008646aecb896e21e8e665f9f +HashAlg = "SHA384" +Msg = afe67a370148bc89cd3772c74f3834a28c3b02894882eaa988c5a6caf94801b87f973ad39b3de3f522a8fa085843b94c9ac78899aaff677236a95754542dd60d327f176bd09ae9cda93695a0 +Label = b8c54751ec030e6e1721857b8215abcd0dfd8c5d267d3f899a417a97d790c878266643ef774a8207d7a6e17a6202e46522d33c758c4e063323ea24a1414436986a3fb602882fc8229cc8849652d826c3f664ac44e8b7925c5332e6e1bbe36de343918f9e567939339439a7b5b0635b090b3afd002857218cf875ac5c7f05bcdc22fb30d8172c2533234d653a43b7c9cd987f3955a7cca2ba5c0ea13d1acec9081916e7156233c9183d448cf1913739bfe51c89320ff122ad479a4099711c0ea0c64858b86168c922da6f15c5a39790c41201e66949754e839766b0d52767e2bc4a99a2fe390bb93507b8f19a2f9a21b4885fdbc13855992f058b0cd21f483a21efed51048286d187e01d3545cf26bced5a310a392d081537787761b5f4ecb766ff439a7423d3939e6f3bc01044ae3cc79842e1f73c6c0360d6b62a9180ffad392f79b1c2ba986c9e76e4106ab58dd29f47ce2a1b2944cc0e9fb086d3284fc6f8d576695cafdb79e3c76155c97a9fc23ca793af3ecdb1efeb97931705f95d710e0d45facf7bba9367dfb31b19682420f9caea0919b060de94dcb0b2a6cfbd9261353f3816c1380896011d94239de5798f1e37af25a60aa3ed652838be7200621b54b29965f729ab6c97a94b8911d8dfa0d8ac97dd05925521dac72aa8af5f09f049d959ccc4f135292e2c0e8eff82314dfba6e4468bfd80e5f3a164c97109edbba7e84ca7d00a18ba0b8fcae36b87d6a0cb8b3feb71c3b24bdd2698ca0a48278021be682c7ae524462b816ecf21e5f1836d0d242607adf5ad344c0b37c09ef7b6ca3a94dd5efab30267bcb55daa870e51c6654f3a41ff72c0d4da7c52bf2566a464fc237a2edfc33df21ff59e795ba983400fe5073ad243d2c7453ac1f48cd3f60d292b49fb4388e06500cc9cdcdbe43a4ec1fe05 +Ciphertext = a0e021e1efbf98c5532f2f17dcd78fb6f32f52b5dc2570ed14904aa745ab8575440865d82463dc36f94ae8e5fd47ab1213f594b38e2ceb2629ee51715af5b51518374307d83894c6a8071c27d248590760104feb869b88cd9b110a5ac1166da4759bb2599db4b6c6df0ff10e87e85b4fce9e9ce8a13a09bc4f77c0e4574729580a6aa9221d0bcfa1ee4c705a8cb74fb4dc55f949eb60eb0319fd6a08d7a1d260b7fe044603b561a4673bcc20364f5a8af988ae866c80e5af9d82b498b70b5afb37af7fd76e2d5d4b69490b38f3b3e2691933720def025a04f511a633804a14e1a506954507572739a1339e3a84cade04584658c85215b718e66632cb95e134ba + +N = a77f16e4ec286d0e6dd7c98728d805e5fccef5760cda9208f76990cece67460ffa59d5ce41286464604902cc5777253b458c0b979b90a118f13ad0bae4eb1fd54ec6a3dfc42bd2ef95bb6dff8e9724dde4fd307b5b7c1ff34bb8c6bfe0535667cc7b3375daf15f814ef185a4074eae3d452b1221bf6a1ba5c70280468004bd5d57ea7108d4727fe6530b5b6d0b3ba43e48ad6a084c37e363e3709a001e63684734fa67012f4ecf45c814eb28cc8c99defc5dbfe2db236678104fef6078222a2b8f0d06245421c94b82417f0288051b904277d480e61e93aa7125cd7075e836363657597d3b5f4ff660bf047729e756e6955b796ba9117b4e4790705fafb38161 +e = 010001 +P1 = d1d109aac5beb310134bb788fc8bd82e143bb385dc2380b2d31f925ae8cbc5eea63571923482fc98e5788c111ea5f1fc449572e7fc60e42d2633d369daf0470e64888e55fa8a2e8f9d02cc6af2bd32cd55f1b605e325aa48e7900e0e1435a848fd6f5e7b40ad02077c9280a5bd505ed58fe5c36cba550657d5439942c7991bab +P2 = cc5d5a98508f64849e3f177cae51fad7765254061bbd8e85e108544c68599e898958a784813584a6e749c8becae9ee8e36bb8ce92ad06f1602a107f5683a1a1c0da6306e6bd7c396d2e86cb2db8c56b821d65272b654a6fd36f3514b3c6ffa9b5cd2575d0c292636730016c7b543b1fc084c42724132352d0404ebb0e35d2b23 +HashAlg = "SHA256" +Msg = 28310af5c242c6d55fbf70b5c84bcd666a0c29bdf69431abdf9a86c708d61b808e900bf27656982d3b2cb5f73ae6e2035cbc837f69fa406143bdabed328872346ef033f553d16ffea9c3e1330a1082ca9676681f08a3aebba496c1512201d5be728becba154087a467583cbf1649a732e5a2de69c1e357f28e9fd1c115e5f3aba7bd131ce4a14b04f9b9f05f +Label = 219e1378b3fc762c0cf4bc8fc3454f3b5f3b9eed8113bb9ac5bc9ab18374d416 +Ciphertext = 9da7512dc343d0d4c6a2848077dedfedefaf9896b2cce5a0819cfdf7dec0f87bc59e204878d148136398a456f31811f954880e59aed4a3678398c3f322f582e9efaafca03370febe3326d374a0a8d95a7b0a0a9d63c2c9de695acc1780b7788cb907de674af8fb73e07b0e1cf748ff74bafc4e4e6a2f5660e7de6c72eccd682f5abfcc00fb15af48f886dbb6083c73946fc86235a17e0f8025b514281f42e5c6c47601b70a0d193656716bb3cb5a5cba015f061bb7a1a5a71b2ee072584cf1c860236bcae84cac433f45f4c33ac461d4316f122ebc2730cd6439abbaedf0140cae3bfbc6f38f909f2cff198b44a3472f1aa98f6b673cdcb867cf8498c61a5d7b + +N = db8cffd925b19b18655fcb3b012228eb150dc7a6c119a9298e7d0683785f402a1595b56000d4461b700b5fe07d8974b09ccd371b1d9c78d8b1da8c7302e310d6fdb9990d74eccfe0110bd51204b8c848f2609c579086d6cfd02b8e70ab8fe0cd13209bf39941068f71ebe2eba3e101cb470ded2620660247de4d0eb39710ab0cbeb651ec3098e714e46bcbc58656a1a061cb50f9e47f2a81ed62c985d577861cdfd3ae57d2832b8092e546b5a6f172e0e5a4586f2bb15d027e4a29f5ef956c28f761aaa03893d27f87164bb5fe6418fe6b2bec913784417172e628051b8064d8f1748e5de2a2884afde873e5144e9fe8d80c6fefcaa2a5e011eea88ac40160c9 +e = 2565ea8e9298015d +P1 = eb8248979e0a7ec763229e7a0ba784515abfd1b35dc3f5a32a5b5991a59cf077b23485845c9c07824fe1ed333365051a04ac7324ea6464bfec0b60f583f9ef099faf4aa976523d1e15988aaa1e392fd452ffbae3d33b5e34624dccc7fb07e2530c6dea1485a26e86721ca57395735db1205881375b398a99b15765281265c2eb +P2 = eea743cc1285c532029da15462bb67bcf4c7ca3199465b8e04ea15192b91dd84dc7d902fc66936df11dc13da8595e7005f78f47b7ae25125898c49dd6579a25bbcdc8769c3a482e7d8cc146fbee0dac8848470391233605c10a1758ad47f6ecfd822b10e02fe88ee50a789bffd56c08329069ae70dd7af1afe4a4513efe8f61b +HashAlg = "SHA1" +Msg = a4196bf2db6abb39885c299d70dcf0c42e +Label = b60e99858e80b8010a6d966df0e7d0cb35d893065b3bad1900abd9c343c078037df19889beece4545549ffe5123d386d0c06b930ee5f169e6933dac6d2bbab479a65da26553beec304c72de905d94db3eab685001d51879b0f81c4280b34e751e1e64c765554c4833a3f124ac18a14afc37f9358e06c1214dfe784e31ec3b5925a5abecd582f09a951cfa04e45a4e1dec07ff6fd39a9d4025c7115ec8348966d290b9cd107e745eba47d3ddf0af861d5f720fb427829cb8f5452a25725baaa69f6e624ccefe3fc3291524593ef06fdbba412acd640ee63b85f09a5608698bb5b464b4eab2695dec9f2bca6febde9d57d8976fd9a6096538433277c4cf91d7a91966e09df4433b0a8496f4fd693970c77800796cf73ebbd3dd6a581963c42abf45c1965148f8490a25e5a91dcc11b08c2cd4a20ba6e86af92e99548995f6ab2a9491d0370b7ef2359eedd4f52261c61a7c5cfad66c92594c2ab69d0d1664ba5cf5fa8688f87bf5f6ec7caa299e44ab8aa594434f901aad4332a578566ea649428e0cce55a491dbb38a7a2d20e6b0a148b98f9d1be45cd3427cad7763f4dbacec65bc47f19e892ed0c16439539b52749cc3af1dadc466f06d208feece1e50d46d8f608bfb2d21fa3b4fb8f8de966e5753f2572eb3718a9645e12570ef89992199ddd65fb890c3bd759ac4aaac9cf6d2809d5d482b96e6db7f4886eb91a2fc422ac8b2928ec06cc2dad2c372d3582ac1ccf625c210483378f450ec6c6792c4f4fc0365f0a3bdc23552cc25ec66ec9fdbc6f5b773d0503263feae56eccc0e3f4b2b265115dcba5c6d33d0082a97bb0f05e7c60bd9cfaf96b03f96e3558fc755177ed4700a11c047e9e788747c905aebc1f776b4529957eeeb84be42728df2650f82b04462b57c15b63cf9e826e09e56c84023bbba1d07e44795cb7ddefae27161ee033279c3749b5de4c853eaad15b6c46c34cf7a26d8dd0f5bd509c74fb7765b86c594b8320d60b75d0b8e59980689aec8cfa109fe9e469a9629bcd41cd666c3275b7aa2c5e27e56f773b4569a6a0e9dbc4db8052d80ce35066b33d34f584399e3949a586f99307d0d61bf24aa78edf02a8d0ec245b9e701d7a40bd1507bab2b99c0a62cb09fdfd01cb5f048371eb17729f87303aff602a13db26df6a57426001e64cfca0d81a33751904fdd116e3279b0f7d0b0d649295345c146083237a31a1bfd01b07e4382db35939e19abfbde9a559aeb907752f260e432d3a435363a71b4d36f1ffacdb464e033cbd70ecd48b47715ce86d565225a3ae7e0927fdd9de6652837c3ce80a610a9e7219603a77f03d4f48865b383d39075450672beb81ffc3fc9d4904b2f6241afe3244f2fa54c6d366f997 +Ciphertext = 36c92dcb071fb7288fe727017711230a90cf3c44aaa0bec228ee61e93fc76bcb6f5bc9240bcde7cf3c1eb56d8e72d017006346e0fb66cdcc7f044987de824858f892895eb4cf6d878c81998d923b784ad998a0d0d4e620923cb91ea72870fd86efcc9ff97ddd0a95ab4d16b3b4c5b5ed72f88c08e36551c656bc94a9a17e03b1dd59ea589f3ad0a9865e94c9e716e1b8989c01b24ffb0fdeb1a295ec5eace1570f94ac08d82c6ca497b94427c3e70395429587570960a55f835fea27293b339129d03ea30139852f2fdf7b16e40e121481b09ea4213bc0abf1b375e8ea80d9e8d8b090d377dfece58be853fd2076b7c64554647dcb7b9ee8b7a22ddf5bca4fec + +N = caabdc1d71c7373a258fd2606f53d8d496f29009db3bdbda17f30e2de7fa3b52d5d9805548815413a1884f5959b567e75901942dc85ce17059edd7f8e434a4613cf4c45a2afcb010858c9e4d3b2f1485f7c6f0008c23aaef0ea5ba92f595a3ee224f384ec5b920696209fb85033fcc969dbda438b0e401a73bed098925478555ed8b672693623b94a96ef0ba70161f02e6a3eb308414e0b99d7ce64c5b305dff45f14c8ecfc3242166cbc2c5a16ed8c95d89dc03b5a9bb2e9a9856bcfbdce6690c41fb0306e1277c740be06f32d6300b815692181abb10162a376f5acd9bd158fea42b788a1def028cf595653e2c1c565ca5d147cd8c457fd7011e9f8b2c6afd +e = 02a5c8ad36a9 +P1 = f740657dcab38f35168d83af15c81d7dab05a3d30fff6567d2af209b1b21c208efdc4f984927835bd5c1f7748a603f6bf850efac55f3b7e5c9c475f42e9f1d51ee0ac5844de2462c5c0e0f55e02cf989406bafc444bdbea16efff537e660cd2938bff34c89f3d3ef67ebbf513ed25344f70ef8bb37e33d86400a3a814277eb37 +P2 = d1d7a7e97b084b98a619c7345e41ce37bbcf7f27556d3ff9a65eb14646d394e6598ad1749a441887a85c794c8c561e1bd647b3a8ea2986e18f3e5a313ceebd5443f60c3dadd5331c2a6a234b77b98dd70951598650ffd6fd316f744e97808e37397bf67ba5e49928334f364e06fd16d8641b3c616b5104b4b02155d30a873d6b +HashAlg = "MD5" +Msg = d8b1039fa05250236066e5195b0c04ac76725d90b1f935faff98181d366804eab8e12c28d34ac795e7d1235d669ac3bba33b80d79111fc3c +Label = 52f704cba51b37ce58b885f5d7f1bf542b513d94c32646bb0297643dd3d64cc19baadfeb3bdd60241ac544a2746e4f1cb9e3ed0ccde763f265eecec12d65b4b052a8ac3294f302348d3edb6c15e4a835bc3e944132d717b1269253583499fda9ad34473f5764a327c7aebdd426e745dc84b110f991177fee450951da246f47a5dcf92cf620b458b2a9f5892c73b1e4f41d95c72caa2590ffd4c8d91074f7875f1787b8ca4670944feca9e0809abb63af5d6bd82ed375d1735d7e7bae7d56b3b862414ef1fad072db9905f1fefc1e09ebbca6a7f7bb335c51efd7edab5e65ef572ae25f7d90ebe6203cc17918b090d4bb8b94f966267228129408dc2b93374d40c545e59e8e1cbd87b35f3014c9d85eb448e44e244191566ceaa99ce353e21562d3ce16e2d330751e01b8fc3bbc9496bf772222888f8d7d1d20dfeb6af89c9c09187564d777b969f9b5a473cac24e5569cdad80c2166e125093d34310d773ea6d6a267faf214335887c573e1fa315ce606f675298284c7d71790b66228a370d6521ab0036fb8bcc2a871127ed96bc21a9a8e8fd2b48d4af5d238f0c646916602efe044694caa71c49d715955a43b253854336f95f50f6c8f0d11f85ec56a2da986529c3728a5bc3b91f427828c6685ceb8aea2a29de6f5655fc61c27c75d1d036caec6ffd608ac30e2a64ea9646e817c33823df06bd6d56ad85fefb7435acd0f37c603dc9a4bb206f24e46297390f4f9ed387a25b263826db8ce6b92e71f23b787d494fd31ead6756b3bc0a23d424d89a8367c697a603ea6e468b5e8aa41a6438998940eeaed71780994460e6c8256ab4e5c686e0101c44e364e8551f7f4976e09a2eb473b23d5812ca876a648f961cefda809f253a47019e28f9612d760e676b8b285db6a0bedfc2fdfdac34b4029cbb3c359eb24cd088be9f4e7b4dc8bb3a547b8d34f29cf52f +Ciphertext = 6258beb39eb3bef9350a436682bb20a2203b1cf21b7afcf99eacc7a01c9982b9b2e5789fd11294e3c3a035e05c1753ebd72d9d6c09f8bb7e83325e9b39e577c20725515c62088dded9f4479b21cee3a9ea5e4ef388075d71d31ebaf7c3479f24b5fb4040655cd0efebe59071652b1e8b99d8fe900361c8ee69df8625895cd36d2044a5ce57bec203b8a470b19413b385dade0539d35b3e8bd6fac190ec72b6a2e79eb7f719c4ed63003a53d4a8197637e0d17c401894786e47c77da91fbd8d005caf5e54203a232a234d3a2b90c1a70b7abc5577f5b6d43bfdd4c1a29b230a183bfa422dba8b4c902b36659748545bf02c1f0fe2345e1cd4cab4c268008a9ac7 + +N = 98c450c02a0b84eadd4b0638f2cb647fd75421be58aeec04f72cf7c4310e7c3fdaf05ab020d33a71e55423f29187f040c9af2a37ee537fc2ccc78dc98f041d109bff92703a2dd393a274e0de87dfeb8c6072c72322ea3003e1427f367b7ab94928badc9cc0f92e3f5f81c885d190927c892f1615503755b4b4aa9475c7b44434cb632ad7a791e13f35cf8488d29b3b7df02c1fefa6a23524474306096a1c366f440abeecb3548d372a7a48470708bd2ef2becd479699f66492a5c27c2f9240a167a5613990fd8c114b8aef598e1bf175893139ae7b7cd20205468993dab7cbbd8c47efc2de2731b50d1b840ee887400e6cdb44186bcef285de5d5be41f49b3b9 +e = d746139c67 +P1 = c7af2a48e5636afbb474b7d4ef0c1f7c5460148d7911ef3b7b95d3f2a066e5c075fe3e0fbd652b2fe481a2d377361dcabf6965b180f1248c83e8c7d4bda1f55e0fd44fb34ac84f21da84eb6bd9d28a8af3058fec9d75560a9cf5613c210d2c9192e4b4c185368ca48ba5daf7e4c659e0c2d5221a8a3e59cb055c42de4c0e0bab +P2 = c3d9cd33f491a21456b52c20ed1e6caccc3ccddc24716fd26248cd1f0811c13c6cd52c79568300821323a86dee94fa3f2bb5fe1ae9db7cf7c2a5b4a112008a6ed241228efc236933c71a358176c3b6663d9311b014a4e739297e743841ced231b0bc6ae78c467559f8c1668d61538a6a70a45403fe2105cdfcf59ba38ddb3a2b +HashAlg = "SHA256" +Msg = c20d0d7d49519027d8858c2f55b1d52bd042f8d107f18fa2fad9bfdc800699cef6383a6718e77cfd30995b070f377bae694e25d6750d05e0fa1011fee0acf66f9069a5875091e1c306ac7dd6d2bfd2e47cf568e03c21535dba5d9fa497ece58e9462f849add3977bf74fa5a3a52658b1688faabb54ea353f5434d3f62b724b548d92eea678cdfa08973e8b40a8f1a2cd8475509b905230 +Label = 9c730eb0c7e39473bcfc93552d585be8b0c43ec685ed05b045120ec2d8b5b783eb2aeaf8c7f1535fa67ef0bb003df66e638d1f43d0955b8a55c1c8e24646368e24b54c553c855bbf18c0262014f0b615a8ca3a95c18d85d75c0c4f10cd824f8121f0004ba7152026c854b114c3d1eaa37f9e1cab61efcc9a0188d4967248e8424aec2844391c3d173c7e5983de5f5ff692aa59a28fb9b4a8ec148dc38523c8ea5827145cc4726f55792be2a9d2181a4de639d020f05f0d402baa48dd52e42da040a868ec692ba8e72bb1e3f00d377846805eeee8019ec9a363a17690ed2dcda3a460d8dcbb00dffadc8f279fe360938a24461d76fcba01f3e59d56985e06e9b8cd231ad577fb9b4f717fe25b21cee8f4e124b7a000fafc2cff724200b0c10aac0b94efbc5141f3d5755b9494bf1e972b1f5df6bbeb15598c6567154a155bdda0fc509f79019fcbfdfba183b73f9721b424531d42411ec12833c2e68c90cb95e2fc5d40b6e09368ee138ceddfb7df2b3955640d0425e2f29f1c3aa1a819cca19ecb2b3167fa20fd0debf09cb710366c88a7db45c92fca4f79f1f455b8459a0d7ca7ee5332c663918b622b99e478b1ffa6ba66e69f768dc293d8d14010c1263704fc8ca78ab3c0707c713f68967d8cd5fe6242425aafd8192ff2cfd6cc96e054008153a736bb9202566b3f5ee537f1cb71bc +Ciphertext = 3b3c9fe57df2b5b5d377bde071cb766c1cea0bd3f712732293e7828039310a2f9fc409f37a1456cef8b5d0d35255b79a10ff2b007a555d2ad19a0ba9e5130f0a9abc3181bd2e7af85f4539280af67c66a42ad57869b156fd909b2ffeed234db585e76503cf50262216d2cf66ea6b706fdeb2c2568eaaa26ffddc382e3515dc74a65809f31f4abe8bea2212600e696ff3a3a549afe7b7025cc3f90fd91184530761e3f6660ac4f38dfc736a2d41b81c970064d73c7fd174a23ab5da2eeb0337bc6789496447d86108ef2ead67974df8a2f389e27e44de068fbf38d3c77a5eb1d83292711611988ce3830dc1eb5421b1263b95583daeb50646e112905893b0639a + +N = 9fafa747c837dc4716530751db7c969a738b53f3e67e07204eff97726cbd85cef1a40da9e5c3bb7c838e1fba54607f4dc6e8e8eec97135ae473b29086462eabe1737894a0d3ccff0bc089bb5096fd91b2c6bacea6a0b9305e7ef23fa9e89f203fd271812d01eb60cb9c6740ad1565cbb9feca09c9588b5e0835c4bf9518055606ed8c4714ab3f7e00234b0fb3f9d8ed53e0ca868fd6f860eb8c38e54fd27b51c0b2c55afff79462ab9d4f166a5ef0c7ecf70806a12b5f65a087e2e16175d4199 +e = 03 +P1 = d469869aaa7efde3d2e6cfa9c7e5233997ff3d559a9218e5871f37f6073718ca0037a598bbbbd89a913fa9d6e6499428827ee9ca85f7ef08ef3183136af527b1592ce1b603ebad4b587dfaa6d2e868590c5957a402ca1882d3783bd9425cfa77 +P2 = c0745028c07bf4ea87f1508fd7101ef9437d05255f9509dbeb949dcc798fd77bab91e1b5b96f3aa2ed183ce7f12bbe8a1bb080856d1cc8077cc5f29c175ac99338a6b60712a3a820ae28d6812d218447ba4428b609df24de9faf44c285da986f +HashAlg = "MD5" +Msg = f229a652ddfec1047ea396e7753d6f0b5e1c22f67d916ecc82cb +Label = cad47666d90d4be3324850e5934fbe3223b32f4f3dbfc78830e7a6bba2c99d05e3fc4cc9525d9ec5f2739beb28e3af3c1beeec237aaa17feb33222d9f58b4b16f7ad872d294a2848017ae3191a8f7ff2a8b23ae29a1c9cc5758c42773a45f94d1a7c8f3d79f7a3e541856112404bb1f597e36a47b4ff56226a896d4ca518bcfd2880010bfc6b47bcb0b70b05c5bb4e8fe25a138e27018b7f8f3c9932f0adfe21ad5b19b0d8d66810be76bc488add473096298400e14a2d2dd10887e196b5cb03c5d4355404e7b5d5ac6f17fbb275b6cb4c1ab25ccc9baacb52eeb42bc7209a9375c260a9d77a8e8b0e89810c5d655f436e598395e481d160c4545fe0c087786c6bc964e12bcb4e44e7527b216864632bb740061d4172a551ea471b19c9604fced6addb7df96b7b348248f366b8bfc76d44dbc9a6e70b60302ef90dff324d1089ba9321908d52f1ed3c73798ab61cde8ab398fe8349f5c9fdfbdb3d493957a3d3d8ae57b70f5f2138b59ee5c1cfa3d5dcb275f03d8f3e61f44439726164424312b6570f9269727716dd42f788d3fe761bce51e19c69 +Ciphertext = 16521bea48e439250eaa4bbda41eb529d23987e12d096662a7806c39cb88c7949ccaf30367fa4ea31c66ec3827f5dd0c27133f002b4a3be7a31fe4faf4406fb4f3064cf738a61ec6d16c7443f4bd8ecf39f6ad2c48bf1e980e88436e4006ce0ce92ebafb05c3f9a186e41fa648b721a11fcf12b55d0db546979218314d29e6e245be16825aa952d35279790688aced08a384a8436830419db16a43bb32376c272757b9507ad7edf18533534a46421e25ad757a69541de2e04e13681b7c06b21d + +N = ce7a3f4032995397e03a0f2c166d4b0aa7cdaced4c7e9cf231756ca6abbdf15a406d1559ddcd9d2165d64418b1ba2bbb66ee2562cbe4a6f888ed63e9ab06070d8e25dc3f6a273b213f0848acb46546efbc95763ee71e0b0ce89cc005fee93c7e8898db281b4506820b76d86f395fef3b465f74b6262a782a31d1f3ec9b06a64c363b976aea8560722f13111b10584c4d25614b7db8640ea3d10af9de1f2ea3c6c4c23313a7b0b4d52fd48ec5b9c493bdbc49be14c534294606b2275dd4f13145 +e = 1057c5ba5457 +P1 = fc37ba9bcef42e263e3a2b0639eaf809adf5989f2fa80f883534e5e25454b0a5792a492c0238f74c46d155bb6bf1e3b7df16c396a36b15346eb2ee81583038e8ac5ddf36c6bdc5c6da2429f2a1b1a37e3be61f5e18893faae958c204fd3362eb +P2 = d192eb99aec15f1dab26cb11539c9c736e4ef634e11fd84885af61f4d628102f6694a6c01885dbb50e419a0760963b9a2ca6418b0e0f596bec42bc8c2f1642b5f98655e800019e7038f6702b7ecee5a84e046dba5dd2560a900593878b1ad08f +HashAlg = "MD5" +Msg = 6163d30260c13f884cf0856c4d85e15bda8994a7644050629f5d3f2e7624f19dd0b89f4919f84ae9df7acb73cb4d8413b1d251a4ef7aeac9d276faba9c1f71edd1221079fdc3c3974bd7ef3bf7259e93fb21a2f3c9a37d851a02573cbdea3b5c0f2e1984c21b7855f4b99fd8be8a8300fc7aff4809d22f0141fbc951d1f1ad40f274430159cc8440bc13 +Label = 9968dbc541c0d65d2c1de846b61f28632be6d529698d353b5b2c3aab88d44fb07bc8f357926215677eeb786dc9152aaa05dd08be19311ebb55c56bd1aa05281a737811f83024fcb8915c479495fd492b35fadf1be86e5526adb88802f749d4a29bc18faebdd6b844e02bba2dfbbe2f9313e93590c52c89de2483e748cd97df95eb6b9c1cb4636a1b7f396367758d6cea95ab8767a6f6b18745618d86d090558a4d13799382e34e4b62bf04b0fdde3e20d2dc2c31df59ef7f05fefb62c5fb052ecc7c93b59b94f464dc3b419172a15bfa9ac5c8e13bcfabb59b21b40b00d22b32f6abb4a7fa2405e9447adb18d9c724afb17f9d746be43e4def88f0ca8ea52f2cd2e6b8ed0541d5c6ceed958cc7507f7daa954c8421550fb053f867addd585327708dca5341e103161a794fd11039e8c3d2e4d34d1250bb8d88c562ba6a84f59021dc0bbd41f1da6c65afde1306a167f4319a391a3e9e9612e1a3e3d81d17bc9a7898353bf371a8e95d43e0269ef39722c951d357daf94999938157e5f580fb7ac65a2d23a7283b3e7b66436dfd9de6bac1fc101d1419c6246e302b8d5cd50ce44bc359b9c1187d3a079bc769b5866890c5bd7b28b29627b86d2aa259c788ef7915fb01f40954b87db2741ae60d1047c27d3b9f6fce09d625eefd7659c9b8af00d699a8eb45735fce93e355553d3170efd7421989b5993972a14d3ceaacd537bf67c95df8b6971b8e0a98034bca29c1a46f768ba4c903ade56a42dffe6fca9629b86e83137b706f713bde6518f5a4bb20096b707da6456ab0eb661250f2cc236af33dd7250463a08365e57dd271d92c2fb066c2f48801f4c0dee38bbfbf9102855a5436ff4c6aff25e5d295e029d7678d79ffc3f4ebc781c02e34d18f4f6a26124d6d704aecd64f17a16891901778010fe7a20d9191c5468d0c7fd07d592b76a21348b95eb3c0d88367946bb808e0aaf8ab5fc0a982ecac385f22453482a8ba196e6995956856234f4c4b3c19e58f54e4d6486ba19d6afd49e58853999d5a5648fb5231e11f3ddea3f61e104bc14285241686ccc4ba41561e1d6cd2015bb865dba689852bad48a4d683b297f48bb24675950b6ec7c7c23f0be8e045422ef9094e38b9a9884f30e9bbe52c4255a01cfda3cb1e0a06f92902 +Ciphertext = 795fd2556b4031d0434a56e3db13b7854f11d768160b8e361fe40332352acecb8982b2b2a18d39e99c6a033c90ca97de3fb5cd1993fc59278c9ab8d4639f51235b73c61857b0053847e805d25144624b01349cd82e295a7bbfd235c96b0e511c7222349d3083e349e991481088801cbbccda59c98911cf93b8b0f81129c65fe87bb765b248e9cb8d8df74646bac4a9b0950a4d3cfb0905a20b6997158b1226fcc37213e836f150cb5e7ba805228f45736449695e0833edabe3c69b72e2c92f50 + +N = d887c0c4bbfc790b4233e05a6ce715c681232b07df6e49f9bb9be4450a3d74d1e4a2488b7b59cead1b4be2cc85196a74293cdc395437a0a6f6a64ffa1315142df4ff82ac90dca4e816be7000ec7a99879bd2ac586c08c59069daddee56223024adc9a5fa427fea55d1d3345f687defab83f94759e5b222d486b25625aa68a8f5 +e = 50223855d9 +P1 = f16a3d5483fd073a5de266b11ea20a70fb7b4976e41ae58f1fecbb3d33cbcba8f3cb2cc09bbf75e9b6e760c053fdd32abdc8768ed45400c0ba572fb58084ef0f +P2 = e59ca48a988c6ad90d5923f666e7326ebf057dbb1b95cbfff6416b7c183d5034c69f2c04bc2a40785e5fc2b27d582e7b39c9bc97467a84f965ac43e5c0f167bb +HashAlg = "SHA384" +Msg = 5a35c5b662dd0de8d6c7ae12ab +Label = 2894f2c0116cc66953f579fcf0d1bf76ab954b7dc02fe30e3f814274e9c75c654b1ced86045f9b6331e7b8b2e653b3ccf2dab437d594dd27da3822ecdd217a42f09c1b5f2ae9a342a4ad3febf41bdf695716fa5660245dedb602acdd3171815d96b179b8f9bc1cbf84c839933fb5f08101ed937b4d0f36bbb2af37113e59d1a91f8249b1764052ebe1498aac724e760ff3f2126777a56ae17bc92714cd3f9de52e0dbe40fe5d5a6432667ec80573180b594322a41492a0f721cf3534cfce89b8004deffe6dbc5d0d5000f87f5baefd9ca06d18b9655d32e7fd415cdf5e7b7c9664278d163a9d086f19a640ac44973c0a16f0 +Ciphertext = d1cbfbc96367cfedcad26496930be6074c0e6758042f5da098183e566a42114385962bc245985212e1624ab973918aaad11c519cfa8054063a05399326a77ba1718dd9d8c646c00259298b634cccdf395210f99ac4ff1e6b3658ea4961ff8b757d1818a4d995155bd66ded710f74eceb34391489f1d4b8f45296af29443b9668 + +N = a33736e91b304f27e309841df5ef849c25749054d965762ce5feb8a028f2b4e3b7dea461121aee40e7aacb43003813c4000aa43952d0d030237eb2ee691b958a62409c9456bbd085051dce79963fd8d3afd61e75956c7baa35b0b407333c827e6458ec87356449daeeaa55e1f3e91fdda0e4d673c59a53a583b196cfeefe6b49 +e = 02ccddf37ac0c3 +P1 = c5b9baab3e4ea5270dabeac46e8b6ed08b0eb095651736feaf22b0f0b51228148d41c8464f984a9ff804060fa37f89bb328b94d9b45011725033b3a1a4554cbf +P2 = d351bd674b3ca1e20a7979e91767c9e42d4edfa63dc369cdebaf1ffdda2642023c4114a1db67be4bfcab32a19c304c7b03773dd56cf676d17f9201f90fa361f7 +HashAlg = "MD5" +Msg = f7dfaa3f9e7b3f9037e19527b8bac7954a72434616 +Label = ecb521efb6acf16798226073dd3dfa3b5b59afab7a9c71a3c231e862f2c1439f7b6a31d786e2c9a78c410b53ef5921e649c4009b584e4cff6abe32ec882ed74df5ba494fd6b5bf293cfc5949a6a83a0ce96cbcfd0d30b41fc0d31a50dfa12820b36f6d3567035cbc355e1be521c5790d89e22d74f51a517f194e6c19112288b2909a1789dcdc400a14cf52e6e8712183292fd863a854a66caa328b808f4c18ce22484339c33d4c2fd66f245fca4094518c6e8146c348b89be24b4fe119478adcb934157696fb42efdf319cbd41e53c2f8064d4f817a73161 +Ciphertext = 2e21f2f9814f645882596cf269e427778f95536292ccb3bfdf425334558d95e30382dfedd8d749c89be8a927225dd86e5031550a335918359e8fbf64c04c14102753e6620bd018e3a943ccff9537c612a9052afc02380d94a7a40e88b4d95fa6acfb694ea24021cbb861a87fc752190fcf070b066ca59af4f0f584cec6b3af12 + +N = aa48ca0576f4c9e2f0df51554898c88ae37d6d5748efefae7ef9d194df513fede53a6c9de0bb1aed7861b0b6bd7c02e66c5d183261028d110b86c1003076113af1158c7af908849e2ceedff6cdaff37a82fe3dd21c071b3ad61becf27048df7feb9c1660ba91ed268bc66170d71168a114cc1f26494c490725fdcc762a1d1c25 +e = 010001 +P1 = c63e6b6c7f705a131ba1c181f48d860136b38f58bac6bb4cc95bf86d229d80d400cfc6e9ff95583c530091b302221cda6516c28ed54560ea39eb1894be0f09ff +P2 = dbe5127324879bbe0cb24a4baea16f26596a921a4c38a828703312e192af72e5556395c4a9f495d20da076dfdc4b63f249229bc66a97ed3ec6315c2cb42a71db +HashAlg = "MD5" +Msg = f0b088ca1bf064cee0260e269a12811cc0543f3300fd4a0349750a85196fe2deac +Label = 7208a2839664346a3a64599d3676bb69d3cb7fa402bdc9b92a01374d16280a858870aa67b8d52ba1fc57cde5f73a91c2e312167c0fbbeb4d97ff24d3850262daa3354dfab5ad2dc387cee3f219241cb5eecd132132732b5737de5707bc0a2eee2e8d6480cdcc0aa9632b5d4b4888fd9c13243fa05e +Ciphertext = 92204073afb508e006710de41a4900212cf4f384b36017cdba105f14cec456b9dc1f5b4a874903eba05fffe0231dc7b37aadc9ec92d554a8bf1f8d4895ad9fbebfcf5cb42b748ce0cedd5c20863b66afd79f6a4a4864c5d8a93d4e63fe7ee8d4c65024c4baf6a4b9a8618e4cc963a0a1d6f041239cb90db7b1fc14d9c914b80d + +N = 94a98fdce949f555aad44e8dc43d6fa2fc1d5bd7940a59f1c8b28b8cb1c4dfd1499b898aaa594c791f084b1949006e37ee5eccbc28a8ce173891ea22083f4381e22776feabd40bb77fa553feabb3c67222a208ebf99c5a0fc0c2711569dd866bf55a063f17d03d9cea4ff715c071e1b329e66915150e10a3404a24de5c94e421 +e = 010001 +P1 = c0942dcf4f9050dd1cd5ac1cadec1209cf97af5e29f7677fc4908d14e37d9a86298a6fd84b51823d07ccdbfb634cbfbbad3ce0a81e4b8c3db917005a4e70b0e7 +P2 = c59ee62e7eb947599d6277090ddf1970c54bf1b9a8e04c51bdb9fcba2881ee196ef01d28e546b036894eb9362c84d784a7c4b53e7000843260b1309aece539b7 +HashAlg = "SHA256" +Msg = c1bdbcad4c5f0790cacaec1566717685504ac755598d2557ac5b346c1e71a2c269b88e38bfcefc924824be35e5c6ab5da338db6af64d2173794685 +Label = 364bb1b048d4 +Ciphertext = 2050e7b80eb02273fce71a9e7d349bff4941eaeffa09a8572f6dd97449bd7dbb7f80a5baf77e3d2ad8526d64c16e8a6d16e7eecf1e06e16c3342cb3a6c55e2876d70f25ef1962796ad47f91fa8a821311f54c86e6830fe06e4a1886fb7f3cbd9359a9044d1de44ab4ed65789e1cd89faacee96da2b48ef37c4a387ba0450c214 + +N = 1857343231e79e427ce3f90182d54598688813612ea1bbe540ce311e5d26b40f3e8c8281b15fa6eade4a63890950254b47ccbf11516ed9e0f6a92c5201d423f90816c9834a7f6ccf85986589c3f1b6f3853dac8681d0098a606d7ef4e89b5095bec42aee4111d117fd1cb84fb0eb8d6bb56108ca399fb38080775dbede4250df37bfa8d0c697ba87d61c3613a4403dd38d62f998988cd6929790b863da451f82d157bcfbfe436e7f3b00a683dcacdd209f8785767abf47e9c912b94370c94fd9f589ed6c2e7f8671c85649f4ce630a81020f63c072467f6d0e129567b198848b71df0988c932f21889dc3edf07ec04fb9959 +e = 010001 +P1 = 6470a5af52f649afbf11f5a8803fb30fda7b4694941878294b4b468c00f9c5886e6312972c5a21e62018fc7b31e0422fda3c300f54a440dcf5395bf64b58e565f4751f3234483413587a0276c5c1877466110f1656bac62fdf1851f687a0091091528381289cae3138084d90ff0f669eae34188a99838412b7 +P2 = 3e09ff28051f6aa8007313eef5bb022a982b0aa8566439a200b0180531595560838975860bdb2e42b361fc7ba42fdba0a020744cf68736fd8799db6ff7caff238e5886090605c2625b28c2f2e20a88651eb13f37a7bb24eabd571e3faea036c2a7d814b0153c4b128438d3b066b14a49c206ad44774bd8646f +HashAlg = "SHA512" +Msg = 3ceb3a1e5aa32ddff59d0080b43531550df41779125552bab44674b13a969cf9e0ab19846b8246bf427d5c047100c328a4b0ef19ad638a6d52052ed861d31af7e05b143db121f783709c7695641d990885271cb3a558bd7481 +Label = aed9c5173ad7439b5cc13d6102fe3d862bf55d3602fcd2d9f61254efd7aecd2ad4ea5871a18be9539e28e84e464e50fdd22475c777140adeb959f719ed2e2227dc2ee638549f4c4c218d3ba06ac3b935ed2d87bb8ba3da8ed0932df5e46b018d5cd7355767ff845aea21bac90b35520e8d09ce166314a6986aa54de5121a446cb91658e3f5b83d21a592e6f0cc4692576aca06f7ae35385a6d6508761fba8b8715d8488dda0645715afeca295c0f7093d1fd2b5649f4505bf11bc8997747fca63ae9fe0836518a224666b2e11d32789f13876c87bdbda10a0782e6289bada1b2172cb81e47445098d2268f700494abbf5d7e799d9dcebf9fba3749c8b242b7641e7f7fa29d9c25830c2cc2f555f523b85157da47fad7d610c752c9cd05110feccf9a264cb39e118595bae93e0905b76a6bef95f27e21afd242c1800946fe47a4aded18a4360435beca0c0b606601d2c934b11d24a86a37f255a450efa72def193ea3a3d4b3a154a9ef07191fa4f5ffb51aa2d5686aebe56bad1704ed008c42732c9daf26a92f260d494ad75098f6cf37d53672ec2e5c40d7d01a16ee20755e9dec7367f59cb66325c2ab66fa07c73b32f7be696d8bd086a07ab82d742faf61eb4ebc68530e8ad42052328d27d7f65db95230a6f578e2ca7d6e4a8e7cb0080d5fcd628ff87323715e3d30f02baf8968c23e6ad1555914716555e8c3c112ef2783f6147f7c23e02e5bca759085c5a4e2ec1d438e16395f0a276f516c8a1487fb00ec5c9caea769a6af731d9f55f54ca1bbc16c1b96f08b58e59798e7d657d8333f62024eb269ac85c252fc8fcdb01a3bc6092442cff4ce69980927d9a710275d2218a32f469325e19b3d95bc8c0f2d5634d0733fe75ec157177be17b300d392f4677d28d31b97d081fca24d6064601d6e977db9b91089fbc2694fe4e1745facb46 +Ciphertext = 1827b5da6d36eec8104d2827bf43b778e5848ad72f4992d7ed609c87ecdf0387b9b253d5d6ed78dc0b38af807e7279b3899e26dc7058deee1680091804c8b178f30b2958c90d051bb86e67ef0825cfe32d335098dc76f61225405a844c0956004212ac742336af527f47881a3d316f789154b2aa0cb19f65ce2d850358bbb9724b1b3cb9855190bbaebb3ebdcddef9f1ce592498cb2126e518dd272377b7c4a6887d93f51ba2aebd2eb34d4bf6d87b65bc53a1e28488766b8a06690d973afd361fa213d0d9be64cb95754f0945e115274cdff2f537bf21119a8c143cce8fe51d419f33be7d6a54255d6014dfe37120d9a4c3 + +N = 019708cc109a205341a3d97fa8901e650b8cf8768af5d76def1b864c911ae5149dc52c8b806bb5415cae2f8b94efeedc30cab1b3b77502b00da93fcfa24b86550499dac2ad7a735de669e04741740ef31317351407367a3b9060058fb309ede4330cfb2594b39bda463da6adc35910af472d6c7036b84cfdd65ac4842e8ce0bc5722e859e38b940f6645be9f567e5b23ee8e7534c28e06f4010a72b17bc1188eee5ca9b2dc3d05cd3e990d5b785d3122f347f84f9b29d4112470ee9ef2cadcff8657596d11142973c35f1f5077388081088a9995d703e9ce40104a5b498c888b4d4496fcf38856ac82a39f74f6639704e653a3948b605aa6963ef4f2d05041 +e = 0153 +P1 = 01c66d61f6521d729e5f419b1a7afe2c452e3a81beb5d2664cf1fc34ff32a5f9da609c4a740c31abc84c4623af4fbcccc723a41f3367c8f37349c827b7d62bc99737ed5d8f3966d663462dbc3476ba8934591901ce9ac9fc0886c9ded1cd56753ae95e9c2331ac6713c41390a87052e5f9f86dde9797cb8a54554049cd0b8bc7 +P2 = e54d269bcc63d98d20c73452c666a0e65b0967fbe7130fca7810ebe4c4429a3f18e5eed2367a6774f9cd04c5aee625eecf93e1b85e80b238f54c48810a3ae3726a8da191b69402b67271e7fdc6939055eb0839e3f39b233ebd9c7c986c6da951a06f0714173283fe6aed588d310f76e97036c23d8ba41a57d73dc5b01373b7 +HashAlg = "SHA256" +Msg = 6406916fd53e49b0feb741d79835588d06ea76fe5ea75a67b45b041f68a97db1c070842b7e874cece45b128869b9abbb1d224acc3875984e1de10c9cc4adb95a4756650ef2b79f4e44133f1f04173b83f795ebdd15a8715a0be4d08ba4c3d47d35050e60bb5182d1efe3e86e878ada14c183793e6accc590ff404657bb02fdd8 +Label = 399ccc013c2ba31eabcbefe05563bd02e8a9e23cc29cc80de4168f36d1a742b6b02201f9cc63bbd036f2e999273b295626baa9f15f6448145c6fa4be25a40d986be398227b7578 +Ciphertext = 011407a7481301a7ece09790b9774ca5908c1928337bd93cbd96a7e8e5b1b016fbe01be04eba67d5c5a62053089f240afc9c4e956b76101eccc2873f82a5e590f7e791fa73ded4aecab21934b633528a5df79807b201ddc51e7ffe97979e8b13584f6bedbaac2b29cdcd49182a4b250da09c514602513e6f1551839d1a35db04f38d14bc8c67ee041429a914b1fe9c678b8ddd2935c05ddf3c9ae0dafe0ba1485575227389a746a7aa2d235345624c955325966edd40b756e23567f6a9ed96a910c2f76147ebe53719be3cd88e5724c86140334ebf4f63a3d3e27571583df5aab503657fcc1c87491311424f530644954e71d365bdd93c0cc16c4f8bf74bac + +N = e0999768b24814b483208071d4367adcdea3be9d0036650395594fc474703cda498b3f4d2a94a52b27a455b83d0bb618a62da7e0cab17195f7b77fbbeda67d41bd37e3d6f22e76c908e01cb9d49a81581e88bdcd9a94afe16ae47b1757ca8bc454c82d89b90458d918507e00764d0e0ed7569b4cfcb5052d282325ea7f668f88ab9a7db68bd4542fc55069a0ef96f2021818af0b364107716c0c8da742cb0656d4d63d801758242c1b5c9f8739b6e774351b0c467f3297afc7d6e843af512b1594f56ca6b3b555a6a307dc1b4cbb09c12a6ce1 +e = 023bdcf5b6c87a15 +P1 = 0e89342e02373dba3f444f461c9cd3e69c4f70bd5ca5b7f7d7db60a2d8926858baa438d50e167dd51a2b92a00b6e151b503ec6870e398d7275802ddd55f574bb9dcd14a88f7df7e5b54b1f4e00b73e585dd1d35a0e0849902aed13b39b6539a8898becbac57d80e6f46f +P2 = 0f738b1f459a6e7c42950ef843cc461e205f1608aa1d02bc9bf6c7d23bcc4647d66e08e1c4520a1cd912bbf6c1c6a9f0ff82a2cd82d25a97883cb9db349e114cb723cd9a2ffb4f9711d3aab7cabca7f99a6f17c8856dc07a6170f23aba923db0b8d9540d89146da87baf +HashAlg = "SHA1" +Msg = 625cdf0f97e767 +Label = 9906e7c562be9a4415d04ad71e49886490c3fe4dca0f833183418025581b1fd0ee11be6280ccffb4c10f99eae195601257843a7a1c7fa79719d05f1dee2b1e522aba895fa3399bf1fdd82360fc9fc788505d567f3896e389a5abbac401be8435ed2fee45c9a2f266b35c5da15448c5b3245cc1578c6c1a7fd9c6126af7fb0284bc0304cbfef5a04a2726df9ea8aa22e7dd3a55c55078e9db7a444389ac3d2db3bb951ac93369e2d455d8248564040555aae25c293d75f190d5751ca15dff4d17f7b641f9ccaf28b4591b785a7282e4e1f67151c3bf0535b707e8 +Ciphertext = cf04edcb75862b09ed552c8c853e39e641960f952f4456b2fd83e919f47bf67340a745d7dc654a3df267cf7fb45e5d31ff7a81933e091f75bf8e797e886b1f6a71422cf425b2e837e96b815f9d2f50eb6aea6b06df2500cef7bf9b09764dbeb9c406a3383886f61b69b32fb0d87fe404b562aef9f2909f71d9a8ea2ae33053f7bb61471c595495c0cc7473a75e3183278853b353328c0e842e81cbdb84c44c5ddb8df4152e72f967252a91949d0e542f33b15fb06c4d366d7a260b5901748f749ab43789ecace0dd206b0828f21917b4ecd0ef + +N = 076d1e3996a2eb7923716eb9486f39735d98370995977ae172142365dceb8688029bd1b97caef1496442500e22bdea6ebc3dc40b903d9899850f156303f8aae73c3839d5a2d410fec2b19d70b351f50e2a8bf44435c081b9ebd74f643b62053411110e4bea05aa51ee1a6bff6d3f360b605b1d8454574575e8bb5af246508988dfec2c3084644f9cbc13ae90e84ecb4ee55b578d +e = e3535fb0a710e063 +P1 = 3bbd45c3c21070d0e97afb5809618adb24b0c89f2ef8b10a812b0fbba81adf5dc5f5fdebeac1ae9633c050dd09e2bfd9903b0c6f05442374990b4086aca381afe0d60db15ed270bb8ab3 +P2 = 1fd2d42ec423093698f6fedd856889538630822cc127230dc672e43788d86b98d5f43427267c3e73f6ce3c9572c8a67442108cb250711cc004bfe5bc187ca165b08e64c1a0dcacf3b4bf +HashAlg = "MD5" +Msg = a625c1d76a16be46c8852951587aa5ac47126f4117e7b5e5f285a1af67a60e74c1e7cbbadb87aaa371b3ddee5e6b24f1a9040f53ea93c6c9f7cd820a52ef36ddb885d69315d2226781e86fe05f0eaa24b0873100c2f938e7694ead9d8ff9b6d8ecdd291f5c6e9984253e9113c6 +Label = 728a9f72437ae21ef04abff8db67f8a6a2171e99eaf6f827e89b157f49f65ac9de6cc8e8d707d91badc6218e13173f53534994e8477a58205c7f8d0e4977a0d4ed961dc71f2798a1688822ed86cc6286f0841fc3aba0684032c74e92a2eca09924b728257d02ff6d6af91a0f6443a218f1a1882cbe99cb226aa0ee849b6b759498310bd4d23c1b5a1f5764af588b53f7c202ab8534c0bd0c284bd567265e620fccbaf45adada90026fa4147c668bdfb76d039228dd44f053985a30aa57ec54ff873a1b8af1f4b3f54d7bccc49e28fff01364ad879d7b3d3bbe9a0ee70b765c221ccd4044929ba21f4a37adad6b31d4ef2743e1507f7e1d156b59c3b6abb50fda22a5d6e407bfd0a6853740cf76b3fdb493512c7da8194a0f8802f530eaea9af0f5ff15037559b554b00481f3bb5fca378d32bb15a8a475893ded7c105c2c615bbf3177ba4a0ec72558dd53dbc60f419318e302b62fe4da7fd14eade67437185bb81358f009a043a2a7e1659da72be9b21666dc7db33d1d1003ad9d05ebba4a3c18698ab5e922c7225efb4e499e7cdb65397481a4482532e0b774a73ef054185b5a6e8eb3a93149a41c4ca1407678cff2fa79001dd64bd3bd956c8a8c132910db65a94b03873a2e27d39169039ffeda3c9016728efe564e3b6625d045f782aa0d62bcf4d18e306c3d7a6e4eab6d176d6c42bd7c4e4292c6f795e1c31411a749664e56a3f78b6b4ed5990af6e3e09c44270c866dfe9e30c68222bd263fcd3aac0c59b6bc251e5f2c5e018b95b185058cf4bbc254d897fd2a36efd8e7d909f653d636bb786ec1b6543742364ce96c882a9c4357f216586fe4503520643b7e8c9d50fb5b9a40494d36c69bcbd7a1cadeb794d3df595765e80b6493de4bf18c58ccfaa4615d99a68b3a67a46664fc468357972921c3a80f50dea5cd8779c30e08250c16b9c573be4915ce1c39769849c14ab2f5d27c282da3e5285ea571f3c6a6c6c65bdbd185c12b9367a0a056a96bebfea9b1327e95e8dc788ea285606f77bf07af3c234e3429f3931741c45c952cf7ad69fab0 +Ciphertext = 059350ea9bdf9ae567e65a9647624bd8b7894d6dd494c20a9b45e4dfe621f17b3ed3d0617b1f7e6edbed94288e6dee6e79139cbef3bdcb87d1305a0321d80351c6359c601dd254feea557d2c5adc75ae5c666c2bf72f0809f77affc281d3a1b28df764cd68d76036c6f7db824d9749946aadeb0392441294f0816114eebb8048537ea3cfc91a4d98ada9c5381a3d99ca20cacc90 + +N = c4a916c0333891e49b4ed03052f0b1d1e195d98431ae6af89729536cb4baf4a501c0c5d4c92b63797fc2635b1b47471868eb2b8a26f88658fd8a124fe37c4f95ee20a533f9393c4315966ffeb91ae01ba85de9e2a6b285c9c38b4c2b153fd06d66775e5b71d2d1db56c262a5f0b99505e88e3a1b3fd9b7a85471e50bdac26e224e36b4c2c157291437efcdc057d4f19309736045f2834eb844b9ce83fafccff675ea5f0b1ec8169e7904eb906494b36d +e = 010001 +P1 = ec4e98ee1b68f738044c095cbd79dc6714c9f1f23b2f28aa68a62ef23725c4d9003b09d29359c38ae0378a9597a5762c6672f309385762bb8191360341115ca3d1278e598d2847f70dfa6ba26479c0cbbdc260fceac71537 +P2 = d50caaf9f4059a087c2a4653535a2c80397e3d259e9c5877c997dc0696921e6b37013cdc5144105ee98b4e7b48c121d76d1d3ec1b57095e5c5aa0a91d2a4537f6e5f06a81beb24dfd5a6cf9ba84fa1eaf88215eae49f8e7b +HashAlg = "SHA256" +Msg = 48daa3a3e616e57d41ecb133ee9dc0965b23018f976dd213e2da15bd0889f2df26eeaadbf247c5b04839f43951489b94 +Label = e004c04318107734f13fcafa852bd4434fac698c924269ecd39bf36bba780d320eee7820e67dd934b71bc5ae3a937cde0888e6d1ec324a6894f98b7a4c4373c1d233eafe4c3408f1b9c6f3e8004789173d3a1ab3d5efb682a8c5db12a48b87fcea5405ffb552e428f214f99cb4dd8881500b55caffa4ecc49102b75e394bad8fd101cc7172df287325927b72f3abb7cdaad9e6e5890bb1d97a5370ff3bdd2d1041abf2c151c351d681719ec1c048e58dc71620488586942b9719193a6eb3abc1b5d3da17faa55f98a9ed930608f2ee60a1a872f327e163dc8c35328204c79c5b2732efe28dbd9c04f7c2c3f2b0d4a0461211c44734c0b4f15ce0774e50c24687cbd9509ff647fb702413d2dfdf4e2055d9adeaa116ff3e446122a2ab1b4514202aa66a878b2d1bb81d499e40f5ad905265028469bb0e7eff1f0bb00c0a334ebb31907531ba7fb247c0a3206c2011f830a8fc0d801f73c82df1866de45692ff9f01ef07cb26eb5106e76cc01a746559c170f6e3d010c661a7453e16f2f8bb09748c0f834b48c5ee6da375652d40863ad515 +Ciphertext = 5c73b7af2d1dacea7b9098dccf1415d391c9210c54c3a15d8213bcbb254c36023a52aa4f0ac28cf3fbd6708ab6d291d0b6801c83dfa0e4169c8ab28fb23c23260242b4701c5c3e1eeac551a96f6885c83f95077b832e44559a1717806b34fa7d6e4306fc9662abc8b1a1a09a3fd3e813dd3f0c527f7674f1d6d5e864fea0453c490504903a4c06b73b48b607f1f9ff2308b2223a485d43c99c4354829e364fac234e51bb2117d91478269d1f91fa6f68 + +N = c4796c0208d54abfba2ba48ad3231a3e172a59db3d92efd8be91c652ada5aa8cb4ccadacf777f7efdd8de67f367dbdd4f9c63f47670326550f064ea12c61400c9eb2a3f6ec5f2869013467b77516a304c1e37e5f42bbdd1609bfc05ab7b4a9bb0992e6ca011d302d2960371338ef6a377d5ed3a0794211048e965e3956a291d4bd9081217af28782207a22de66ab946b7d5bc8b1a67cb7a32c028669 +e = 038779492034c413 +P1 = ec64b88d8b9f197311bebb288978f5b894fb608ee89d24361df4e18096683f94223e77dff13dbf9b3193d55dd4065246b4720f729cbf6a9b7a736b6404964d10551ef6d746d6fab643fcee3d06cf +P2 = d4c51bcbc84addfaaca03ee5db61f063200db94eb3b5544239b759676ca57caf49d6b1f925d92d6cce7e81c4d1e9f1a210fe09be61267f03e52deeb3690303350b373d4245a2bbb800803bb8ed47 +HashAlg = "SHA384" +Msg = e67810998df273adb93aabf5cbbac1a0416a22 +Label = 3aaf91a08b7f7e4e887c9cfa774a80913c1484cd245cb9ef5286662c56593e62df1ed2d5cb74cb64f0f1d68832b0be18d3ab348c9706cbc47a5ca4e23a3935df66e3f4b04c902732aab761e32387a319bfdfdd31914603e575f1699c7738 +Ciphertext = 74c38ef968c6b2ae43a913a8468bd9bff275b20cf873e4afbadb73d6c5d651ef6165bb35ba590d02f25c44714fc755c9a6abfdcd9a67632e4b6fc059adb2b341f6267354db4ea639014174b992e76066e6c5cfd7b46a7c6c4ed2a9b38742f3a35cd31e81e3549ef960aabed8ba4052016b72a1c55b7e8a79e0805663ee9133c0e09cc19b503eb4861bf24aa403db13742eedf31d51c2c64eaa60811a + +N = 616ccba74e44fc369ec96c2ddbce028298a0a52849d4bb08c646f7e5180dae9e16f28810b1466be543c5477cbaf6c1dd2b8cce2fce37bcc558981d42d1d0ce3880b078b0ef66528a358807ee3982d7897699d8f52c0ae4c33a2e7dc815db1eb7bcc6c62607020dac10a10c5f24395113a47a029007cf3b9ea8db95e3f59d71e6910b11f5af8f13942a72a28d88d1f83591d1a965166666bd693abe4a399dd51800b503d992ce8c58ddbe442600751a0a5ed48dac6f54850194940cce769c7c1f14c7f430f62aa9a42b3722ab663373ba659779a0fc574beaa46099f135d64532447bdd +e = 010001 +P1 = 0e515b1dcb5c9022cf947e3fe4d5259271dde42b047a010560f806a19a294c92b9618c42f10ab5e70938727cd8a872051d5fdb2857474500a9d709de221f6267f8a078b76d181736f0ece3b55572170f6001dde2c1b445a7519085a7649c58e8f5190698807db8b18c858e34cc79213f0973 +P2 = 06cdf19639d1336171e5b7cc535ed2061fcc76c59905c8dc1dc36aafb560bb9d8a8396ecf0ecee543c5e9e9ad5ccef193925a0ce2a6af9eb3fc030d0e994b29fa6f9171cece8072f6b22732c2871946a5426f1683ebb998555844b68bb110f5f2b8892a42bbca92fe824927c271a9dc6516f +HashAlg = "SHA384" +Msg = 2e1b6afdc373ccc0008844d6a07521538252e4f483bfc4b271936a9c87025c3e44c91e6423b0fab5c8cdae6bdd2db0c4 +Label = a79381b2f37a6863b9d4e926ab5c29a3531e4b44c50faae113ceb4759aab508475c97f96b588191c3ecb322a30f90dec569cd247204a6225ae167d4b85881771b2329ec692eedebd0175bd51af3cc9c07ef58af3d9d920f4fc9f430a757d9dddfba356775f6648b0fd98c742a7b3d0297d82060dc1fff836bac04a1ee27516f179168a9c7eb4953e6f7c9c88e261fc461010e3b72cbf6ec8e84367ee1a37a1d56c3efffb938b9a964c918637c8ffdcbcf2aa318110eae9c5bd4ddebfee050687a9dbe988dfc91fa80de24b856b1e06d9a89ed6114e391e826ce1caf29f4beb23d404bc05ac2cf633b914bc885aa836d82606567a4c5ca66a86f7eb5c6f6edb5af4564fc602a5c4e7c72b26dbab22cdc4fc6da6d24cbb4d2016791f7d9610ccde7faa23bd2e6e865b3ff1676ae1135993c72f726c0f0b2acc89cd32eef458baaca05eef5b1afc0b63f6083d894bcc337ad5f85af07c46b7ee96cf2f6712578425f0d918702895c05dff7c59 +Ciphertext = 0ba761a02ed6763b631665f772cfeb4819c856aa0267e5e423d024b4c785bdb37ffef77cacda403d8221085ef6c3cacae53ceda4024ec5c5009c73e36e471a89426d01e7e2e3a92aad02f4026b410a203b8537bcdf3c3120a00597d22952424df3d3e5fb2d41bb1ae2ad677e1b96fec9642f12e94f2a19b61f66ca601a68ffbaa982425d5b006f0e286e7bda82d9166cc3cdf9b301989279cd8b37a1cfecf61773fbedc7a475265ed3c62995bb8ee75b119bb387b5710f9ad0f0fba30a73375a0f86fd019d27b94174e57f74c8649cfa19f782f94140797c79b32dbd446fda0f73e529 + +N = 0742b992942435c282671dfd9c31ba82b2c16393bff869d455b6adc48c98b2871d324be121951ce551e7723cb5b226ec1b901683a805e2d0f0d28a6b55faf44846a7e2ba7b3767cb2df66c6024feda8538258703b2d07fde734c3303402ff6663a584f727519365232177a217ba592787ce76b29f05e8dd7457fa59293df4c7b4a23a4fc9dbe00b357c8bcad4837580390475f14302a679595967f53a68c7d2e41fb90d8e8379551 +e = 03ff594607 +P1 = 3affe8e7f99fe441bb62a2fe31bec9881169b7cb6e077b80ae4579622d96f7b089b803c35a1603d51f6cc97aa121cad894f2f7f2addf177ab18ae442e2e313c65211b0dbbcacc50aa0924926d940205c7a06b7a3 +P2 = 1f8106234392ade6b822033e76ea376d666bece7556503f76a5f450e895061a3cb22e23dd9d39ec227dab8e9f007a731fccb7acbc51859a8b48783c64b36f605cdde669844b24dfd974ed2ca89dbf649912ade7b +HashAlg = "SHA512" +Msg = dada7a3ff9bbce8e9d2e6ec8fa6d161a089fa769ef7d63f64cc281ee3c136d35 +Label = 762d93a26f800b67b89360c971d258f3948d46bd67d3492cfc8974125d262b46f3c3e6c40a3a400a9ad19b89d0c440faf9086b66db65b08be7d8748b498cfcc1b0a632b679c3a073d5439c784e69924dedd2a327fc1c5e262c7d8e308ece17399ccde04032b8eb19249f88a7f592b2a705ded5901c0506328884d03a9014fee28d83e6b872d53697883ea3c24d819f7dffc6093e128db34cc4fe3bbc814565ff3a0d556fe880e059e75cadd6bb142fb7ef4f5ef7bc902b499e5911a5a9429e24f0f09fc084d1da34c3b6a65f10c8386d9df4ff3f28a926ae134192873af8d37a1998c9336c827a4050250a280578e0e6aa9c4485c45c48d8b7f69389ff2a699e4da5913d83d5412e0bfd7ea0e0612f4b2bad6b9dd209a6088dcfb62ef6032a4dd3d2baa2ce15176a4fbe870f0265c5eaad0e7f84607268f6d9b887231b7829fe9bc9d3eab07beac4882c5d1b7ff744d144a55f5de10b10f72f6e0db2d7fa0a4cb8178f1056e6bdd06a2a06b1f03a7edd6e8e8106845d5bf8dfa1d7624da7c129738e3738df04b46c4da641bc4fecd6dd4137f83237c98a3b54b1859ab2e813639f0c61692948cb50991c3d9a5ee9337a81d5323faf5161a1ec656d886755546c2e41099e2f66e214f89931023741c6c70f0b4053bccea4b6630573 +Ciphertext = 01f0671b701d3071dac1497a0cfe81d3e946ead3c0a56ac7dc8953adcb769301e5ad07f6569c708d1bbf239971b165283ff1b6b257ebbb393f469706dc66df12f7f9b51ab7850570e902f342d8618bf52fefd47d03219962a4e015a8321b255f55804c1fb0cb04ca53e8408ffb1302289447f86a0fe978466fb9e14c6a35997bc7437b516c9ca7cc24a01b188c2c83371232d14f0b5ab367d16c4e1507dd0d67158906abe1b87338 + +N = 64d5ab078d0e29de220e3322946184b7b635efe27b71830a0238d965760620ffd7f6b7f5dada610158c4f60d3cba9f99b52610fcd0e782141421a4cc8d4f9fbbf3e1699a14be64cbfa6a67f941b9245fb50ce5c971d6976242b969b1575de196c0c8ad +e = 021c55c83d35 +P1 = 0eefd0e87391fd212a782b90e3f5640e89d41a5a324f72fb24b0f42a7cff19df268eee85acd7b67f4ce027e27da6d0bba56b +P2 = 06c031dec5fce2642857fbcec25377cc3b1f81f37ba6a9c833e17e44f396c3c15eaac6da4cf8e1c692810f4a4646feb3b847 +HashAlg = "SHA384" +Msg = +Label = b9711af9b7c6db78b13537dfeac1ca78cd785d6c4ceef31d7fcdae4686e7307d83f99ae5a2c07d6d6beb667ab439cc59c20cc474bb2c9ddb7fee64235a2c2d7f341ea4436df2e48ef9d4f395147a20517f3e66dafcb7225b8a34115904d9c020665a227ce4d0247b9f359b0a398d4bfd679796df1d9f3966b1264202853d9934e80c0216e22c73d87db28019d3e5e0f56d44d4f7c9083ef8bfa6f2f53328a20673a4b5cecedc890fde0ef8c81cd7449334196237b4ca8caf42fed6363273bbb1d7b1e7416496fbf8fb0eaeb06f3c1d3c6c27e7841e41394e1af962a55997227fbdf45cffd55c906a2d4bad9b0ce7668cba6d7a85bb63a8a9bc3bbb093b5bccdfec90d1d06855e697c39c852a4764f18c94783d0ef5a914ec8828b03666fe20059b805792af4519b38291cf60b84ea6340b35a1f61234d8abb958d9f57f8aa6ceaa07b543740789b770ff0445f61f5c4d888bf6e18a8b4943c064d01bcb8ecd12bd3ffa76292d5ce8a36462cfd53b682c964c267b92b5c99e1c9cbd3a682aa936c805c18df66a02f32693b48f3131597bc15168eb9a5e96bf2f2dc5163a7d2c5fb9e3524c88b57f892c5a7308832f8575b3090e8655536d0c1e59619e0d5caad93beffda8b4b4a2cce8a4b65d78918b1d104bf237d2e067c00089f4c49dde259bbb82cc4ce6d23acf0e4b92e21d124648a540c1c24b635bb6e0b9e37c0a1d4b6f611ec96b73d1c205fac27a15ddd82d4949b0bf800c5c19ba084b9cd53cc30dfa025e46abf684f583fe1aed2d76faa87623dd284ab36e1badfcad0aa9dabe4cdf66947b72963f111155eef0d85b93298fb49bcdb22f5372ac588d195f8f369618c7cc647e8c30c54ee5f750788412720159816ac325a43c5ca24e95ed323412d3cd28c898484fb576e7e86d1315a0f64c71afbd8dfceaaec73d19109f244d853d4286c9b2d57336df4a4b764e7716f88b6192585c786eac41099040443be2aeae3102fd20c026cc44c898b08000c507e1ca9054a971d54d3495a07210641f7d8abebca55713a6e335157de0f0d321c06f6dc3c4dc9be09e0512c67203afdf9aa4aa58fd86d523f249cd65c3c37882df3f7b1bc723a67cf858ca3946710539fe2e76dad911c989ceaefa3cd992bbeff925821612ea8fa14df9424a276d9a0851d3b41e9d4bf2c768fdaaa5f274bf32a0bc2b26710670ff0dafdd369e2cd7b4cce5c21892448dbb8b650b9afae986837e2dbee93d93d7befff7ce50faaacc08e5a521404c6b1cdec55bba5b7b60bee4673d7224ee727f147a63d0e2b0f4758a5cbf288cf0e3b572fe205ab0213c +Ciphertext = 44ada8bcc8336389bb0609bf95fd231fc6d4733ccd73f2bd513eacd7528c21f5a66b6b03593def83efbbab60b9cce4fc0cdce744d20669fc211442bbceb8f39e4d64104470f5c009c7eeac631bf0df0ced67ab5c82db7098068cae4154537e922737b9 + +N = 0f23465f3f1a32dc51a2cb935a15c803078912bb085b11ef3cac3c19375c2ad483a93661ba91b9150e8e2eacaef39281aa4f7cd7efed35dbfbf0e11bd2bc0b019dcfd41a5c21fc6e73fb752c3689136886677e77719605bdc5e464c10e017c728107e9d5e5bff7b57b1874b983864ae244fbcd9cfb01dbd865389fbc4cbda4cba04ea23d157cd079b55b75afba6925869e3f60ec71ac58f710258a552495946083857b6dd12a8641f1c994aa56ba074246e3a839c04ec6588a94f448e822817fd2d5519298cdc24d2b4c99a9a6f95123b72bfa3e9c30b1 +e = 4299 +P1 = 03fced4afe66a5c5fe1c68ff6c6ed06d9c65135c3d33c09356eba0d1c3274952c9b91636399c7a42ef34cec191a99a79a6567bfc01f2e9f76023b20d656868204b9bd902956e4ecf1b2bdece9397c00c09fc1e2b8aed1e0bd4c6588193d05abcb7a55aa2e876c794e37ac243 +P2 = 03cbbc257f14ae5259af4e3d3dcc0cbac4374b63451afa3beb16620ceb74afea2c37a86e2d794408b77dad0bef58d1d222e6965e5a1de84cd58a39d7385dc672de51985609627c58ec0995d210d105ea793a0e7950ed9b63015d787250297fb2fc172e2369c381747c6c53fb +HashAlg = "SHA384" +Msg = 4cc346a05c7f9a2d87fa8cdf4c4a3b9e4b16ae47b6a59230325860a7 +Label = 5e9b33c1248cadf130f8dfc19f6cee723b77ff6473f8286b26f77a93f632481658c57f15a794059c1435f5ee2731a1387a363edb381e2d01d07ef38fed2c518dd57a7c0020cb6b889e06ff96678e4e77b5e4f8b8f51a4da97d0b19f5cc5b7d2a06f3830434c3624a94a3f79e25a5f895990a87433614081045fe5187b73d6410b0ca169c42cf4e9196bdc530227a2712f717b5f18c92e5a23a2af6df12d0c7a27b12faec24032fa7fa40ecc1280e6af99c8ec4d73024361d4afe54b3cc99b9c9cdf92873f2ba57327de749eee081800c30d2a100d2744b0941c9c256e1176fc7f636feef62d3d45c023bd906ceabe585f2a0641053006294603cab58cd70dd64df7fd82cec42d71d39e84f38ac28d256bcb3917cfbc31da437eff86e9fa18cb01884402fc8dc190a95bbceb9df02988ea293e8a05b523620e4d256e09d556c8f965c23ee3e3834c6b61b28d02920ebfe8254068c13f76d99ba203c820a766af70fc085e1dd4dec99878b2aee1a3664d9948e6e21cebbfbb6d08e339e20d4f8d4ae24be9cb1c7be4e9a8742fc458cd97cbcf6efe0a0eee1a2bd9ac991e969120b046bca8bb84ed0a462c3a5abe081e9e5cca279e4d354449f61add279051641bfda31710fd6d9c111dce7209c88d3ff415590d488fefffd585ea58989ecd3e336e99d99bcac496b898eafd84f9c1c7d08b644dc80eeab79cfd2d7c9912d680650364c5480b78f1cb02f5703b73eb244e56a3766039f9b9660d56abf02eacdbb52a909efcefc94bc702b2fa2e94d504c5801bbc589695b0820ac7b9bc988f3199cd09c993243f945ad11c588fdac19c298d171638040475cea3181e8833b9890d13eb42ec75c79d0f10ae9a561d45e3db20355bd8d5c9b000cc0a2a45c323a21a3adfc3c1547346661857b0b882c37f79f14d489302552765c972c6dd9de76264484c9454b8c6bab9165a29a62d9833fc8ce164fe6974493b70319e5cf3f4c181fdd8a48ca910fbc468d702a54469d3eb32d7cc909839f6a2a16e3ef287641665f9adf6a4f9aca164b11e27c07487f68677763a5878d3ba33937105858cdcf5d3371e4e76a198e8f47c8359910aaae9910829c09e1f4b90aac3392ffd32276003c47a97e791d318abfc6a9c021d90606fca6ba91b4de6bb1f00c5484b7fb6f292d8191d443e57d701a81b8aaccefebc80577736c9230256ba04403e400b67e007d2ba74f0a2178d9d1718aacd38b3c38d34b2a64d78110b0e56ded534eb2c74913623b8ae3c34c8bf53bb667d7ca3067fbab95eaccef96235536c0ec117d8eb98ec81033a03dedab70a4b5df250bee2533672d89c68846c1121308dcdf1d6b8b660192e07c75cead4a85250a4949291b8d1c112965571f7f57a118c5d0ca032d13 +Ciphertext = 05a5f59ea24985deb65898fa1a3ddd05381ac8203b3026a77d7f80f1688b0d3672dedb49c144191ac43d41b4baeac29c1b27aa084632170b304dbaae3c9a28683784576d0f87cae9bbc1541ab5f87fa623065f63c5e6ac8a6a992a9a1031faf2e11ce6645c571788b07ada5f2c0328150aa200857f0bc365cc4aa68cfdfec624da4f2f3b37e5d29e0933baadb45fe3e3ab5eaf72fc301e050b2698920bcab10ecaeca81630a51750c86aaa7553605b85d39c35214221753eae3dc62100c72ef95318754c4bff8c869bcab07b95828c8e65087fcacf34dd + +N = 018e03e236e649598203067bc5e706d44552a4408110856fe30fecd2651288f597715ae13616708feb05e8e441bc72a90f4670d3e916135b6330192c2078d634c8645ca44d +e = bbffd82d +P1 = 0193371be3855347801110a4341e2adb5d4ff477260fa8b8dedce7a03d3f0e2f02137b +P2 = fcb2cf420480063341069b056852a8a8eb05b9aeecdfce8bf51f053308561f0458d7 +HashAlg = "SHA256" +Msg = 9e72 +Label = f34cec81a1356d2ead6a9bfc53e389bad2a0d459c371eef168da1ebe3c28930c2a3ae4e984544e869af8ee24533a935f358f55e75cf3da983e6ad1ab6f77d245ee8ad357ffdace6d5b5c723232f5daa57d890a0b1b334f7bf2f5f91c09a7c5632eb822b3eecf5410405dbcb710ce17e5a6a75b6e8415daab30ca61ed59c317de95b28b71e3afa64648990f36657a1ec007058317766e97dcdba1789f41d9d47cb25a19de0784817b8505e3d7be5ea8b8b03cf411080e6ebc7a9defc502a32c0abc0920a6eb67653edac8bbc5d6251da1bdf910b6ff0f248f248bfc7ffb160395fb28f83acdc25b5b8ee9736c6ed0c6020ddf1909b8347f5b606c +Ciphertext = 012444ddfedd9f875a0217e52f50284bdf1c4bfab75d4a6b471830dd8607d92c8087df4fa83341f39d03e1ced4c1c1bb82515b7bc3cfde616e94fe82b0a4cf1ac6704c45c0 + +N = c61f63ed24a0ad2e398099df6e9178ba7d40638282a072077aa24c317b0d41a8e3bb91ce73e0a65479cf0291fb80ec86880d4b4108556fc43bbbc1191e44b5402bcfb355883930815c576c2fe30c6d2d186f053942e8cd6ed9457bb9195a20c4ccf1830d668e8f019e039241bf618977ceb2c7b6b49126ab8f3693878a6d364dc45a8bf7077fc17d8339d405406d4eca96f7526a4b71ae695dae44ca254c5686f16facdba269290675975490e3e6f20fe8b7972e09a638aed9b37d055b59f6c7c61031b73b4021374e21dd0fb7fa8285d7355ae52c61078c9a93e44544670d85d357ff3a19f22f0bff0fc23dc09334af4643771af059f5e00e13e2d3f56e15707dfb5023bfe44b968321fabb673bc9f410b118e3e0f247d6dadc04684e1aa15f37bc990831e30c46241bf92f965836323da5d5560d78ac320106219bb1f3f0176a402bc6fc79831f069e83a06e62dae963ac624be3e3196a4445df85bffed219bc9b731806c637c7c004ed53c2f293955c0ab3963c093c4c38981e583e5fe1fd8a3e1164ff1bf27d281be80c2ce3e50d689d0c135a513758eccc652434accdf376687f8624719eadd03bdd4be9e5b34d7578af0b9aac1e8170d226bca210222c813489c99ef113cdcd +e = d24501 +P1 = 0f48b724206adcd249da35e65123261b66c181942f2c76d7b9ec39d60272fd3a2a7fa9d599cb33ac0e979ef3bebb7d924ed3c603dc97c166e6883cee473b0895de752b579db2fc3bfe423e937825753e584ba56cd8ebd11a57efd975f34f90452216a617a317c68d70f20ffddab4e878789058ff8885b15d4a6171a57a180b87fc07b372a9e745d20bdfbb2ee3e2c6fb9d9acead7b8d04c1e994417e2a01c65aa78b145e6699d51a306307cbfbdd5877d4373ab2a73ce9fd6a75cdd52f8b6d3f98f39758717cde201a6d15a552a44fe1630237640ac163a079c9b8a2fd3993ec2aa96320eb +P2 = 0cf67415b7879213a40aba76d43771c8591b11fde99fbc8fc7bc5464cb2818546ae214e07f4e736a823e4a5137f8bcd09da0b019550ed7be1c28ae3bc30be6cd01251ff5c9653fbf25f0786dcb218db0a7ceca49821b1acfa3020e94d8a24b9e1f20ae9e63c5a2ee674de18f3ec445f2927f5341ae530ed89884df025bbddc32506d4d52784bb1583d25ccfd2c1926a2dfe8408def2955de1248437af61dcccb80920f562ee674168a0322d91f09f95e57acc8012ead811edd535896f9f6be2549273ce1e0bc751ee88fffbbba967b29722f4c5e439d7ce632fbda95db2a55fc54d9cade27 +HashAlg = "SHA512" +Msg = 8f4a6e2856ce72da5986bba7b8318e419ea0 +Label = a36f60df3c13c6ba53184e1251a6e96ece207b6212fceab36fb932820cdcdb83d890b0843ef8cd005a2a618fae0be941411f8e8aeb6270610d53ed9c83050fc4634da430f35fd4adff3473fbcbba7b86c0ab6db37be7f8411eb7ea6ebf57fbb8213636a1f3718cbeb9a2433e25246a97e27d810a7342adc7e5db3036bcab1c7637f18c9c2d41e662551eb7f46a11a3def25f41fef47608e526560827d939850fd91b26c6a8aebfbdb72c233bcbd039d3edfea5a1576b24dce7802b137dc46126ec1b98d107ee7771036db86d1c69dc0eef9eb5e16a7608f90e35a74fe8c920a1c28754b24a697b83389f5cd1f57bc687b7c81b1d1c99d2199f4d57f909071062bc6a5df281af8dd17e492cebccf981683f7264a4e9946dab75e043d992e339e4b0f9e86af975e0af762329cea3797ee29e51fb9c2a8cd4faaae0b8ade25482ed6acd50f5a43f1b85720bd739bfdbf8cf2f52d6b1e51bcc3ea46fe8400c10764a8b7cfaec6c0ff083bc814cab28907a3b1a6cc1a76f9d844082b540584260faf8fda1fc45c0843783c9c4360cd05541e19e86a6318d1180cd68614515fc19ec8e49c39a8787dfda7bfd89232bb0bd5c40a15a22eb813afc2dc5d2b9064bb2174b9d603b44222b55b66188011bb3b131d9189f54532b321076c51d9acf24e61932fc5f1f0b683499be91c2f8cc820a112c5f2274a82959ddabebbdacb31b8f2da804aee5664afc38d683cad8709a3f70de1f647a +Ciphertext = a9ce76ccebc179ccd9bd045a99edabdfef95b7cbf24cbfe2fdbfd0bbf6b6b3a4d07159b727428af31993f3321150059ec048fc31e6d7f908dec4a5cd927f7c9c1436d271708fe3f0f7d8daefae16bfda2c962f32c9e6b12c2d000e36c8d70040ad08082a0371d597218f74ac9fe4505ba256a321f818ead64469e35d40c0fe5b5afc75bb6f6e5ffb20b1ef163f8315766244cb59d6b72217579592e4a8d7614b2051fc379c959b4cb69101397c54df7ca942abeab11eae964df9c8a53403a99c2aaecbcfc3c8209e241f201fa2f0946c76fb85675a1e43baf5a1f744a5f7a001eefe69ee2e01c57849d84e3c6ff5b54977b8ab903b3c5c683a05c9e4af3b44725dd8c1d9828520ff8d772e561d8581d011b7d90d4f0e4d5468f5af7450aba7c435f655067fd0970bffc0c6d12aefacea789be319b71ae51c6b889d443c21968161050b96c2b270b37185200adeed55b559dff468c9a5c3b3e57b63651211c7484346946ef07c441154126399aa7cbc08e5f6c2054f600e477c2fb5d2e87fa7db403ebb25d698d748db110da0cedeee067c2c9c208869943c66ef2d5b4ac54582cb6d7ff1fd7512184d667405311cd6d4717f79324a6205c4f6507228f9fc7568c9d5ac6550cf859d09 + +N = 02f0d971886f40fe69f012f02c4e34b765f67fcec95b2101786009eb3c5ff86ed0a74d9b16c3643d13f20f53b7123ec1a06d53782dceb0f4f605dffafb77d14c846ed8a2cdea53b32e77bf2cc0454b9e7995146abded8111c7aa44e68625db83eeab17d45c19cacaab7b78997eeeebed66d8fe23b616fa0bf0d133e81a3efc235c6f0793cfad896a9a75d639cbafb63b067b26c9ee889c19a698399791176b988915600797e371e794925bf27bd24b1b0f3b69002407f82c996cadd66bd10f35099cdbc2dc16f2dec95fd72e1a0656e1 +e = 010001 +P1 = 1f27afad0d3897e4c349e8908dc3fb099a9894020019e38860cf1a0327262981a9d163471bc9db8d862a6b553dc9615d26b2b2eefce3b94da19105e5043ee080955f97f47f5680ab29921aaaf8dcb69bf46113ab5ed5d303a946c55f8cac270c691227c79b0856a7 +P2 = 182a24abca0ea63452b08fe6807c7e8e788616a323a097dab4428763368f0c60c4ea2651e0581cd973424d9739c085a13302b171505e80278dface3d6f071ffe8bdd168916be0c80c7dc24c362fa2f11d45089f4ee885aacfc4221b5d755de06c4c063e3ee869f37 +HashAlg = "SHA256" +Msg = 0324f1dc84bc6d6f7cffdf27149614172a42a3a605df8ca7fc3f638a54f9876757ddc5b5b897b11cd9e7 +Label = 5d6407197ba4543b8511c03777efccf930a3125e4a0ace3635270ef1282101dd8bd10ecafe6c70e095e43e74704fb7bca65d4545b4acf13bdf100a24ffc9e6ec2bd62cce06bea0f641739a9178cf17006148d63508321d55710d1966342105b72224df83432a337db9cd6fb2ef2bd7b260db8a25d4dae511f25ff79a480c8cf9c680d0078ce246e07d38707d1d668889064f393240d73a5311f30756c011a1e23c7ed1f6ea44f1990c18096003b5ca3f4dab3cdbfd3734f620fe6022120ca3e06bcb78b1d03289bf03a9af4771b701df06cdd5aeb9b2f354986edbabf3baab7412c33f8e392667a309655c82d260fb3f7455ec1a88346d5ec631d0cd17a1ef6dee9eb00287f69ccac774482e544070fce5643d3836b7391fd58e6338f4a97c3b8c2ed5f0b871a154a84c2f76bf91a1d3c6448ae9ffb49be25c5f2d39f7427c677c8e1f6a7bbf1544eee8e0d178218aa893d3796f7c39d7f8a77ff345c03bb503c895b81c3cfb1a99998deda2b6a5f45d97410e8edecff2f5039f4b75db7dca1be67de6d08f609f0eab1532b107b645845b4fd53219ff6cfd853fa1990653ad30a9a2e3fe23baacbb9858066def6e64180718547bd63fdc40349cd3ced4df89719faf570fe533d34fd55d43768b74af35cc91d4bdba8502c1b52e7a5c41b4b44a7770cc06d8493d89e37f1d442c03fbd198849fb631a15397ca6084d46e1a01d07db880d62f79698714708cbfa585d416c8 +Ciphertext = 005570909d695f01f490d85a023f525170a342c5d9517116676eec42799a8053dec7854c6a6a7a3427ba2f7f48ffe56ddcd43785101e22f66533d18c34325eb0662fa3ca2393dd43b1a5d427ec5610eadb19cc7513bbe8e0c4a5c88c58ff57c0d8f6c59619b8c3f2767eb6197866364f97b62feaa7d299006a326b4449238750e5d25e1e15d53c88e8cf36960ae9c18ebed4f35242f99e488efc97c13826541320d1b5496af25b8433e57403984349f6d8de1ec0c8d32b8c9978e77e66e44213fc2c954709f3c63760f35dfdb1fff972 + +N = 319c3c304dfad3af1e65a693cd65131ff4d5ac951469a7deed947102966a83a1383fa1b6d412574c307a9b4702a210092a8d83a362f32480bb01b927d243add5a8e03d9fe38cce1b91663f17576e77b355fc6bd1c3fba779bb856a05b04eb4cd59f142e46a3e893980dbc2dbb34e4231a56bcd8679189b3b68d35d5052ebb1874c94c6049b10f155fad7682a7ddab56a265e1b31142235d9061b2a9df04167f16dc798117182d3c22e8fba5191d8acb0d6184b251437a5 +e = 7d5f723263 +P1 = 0751fa0e206869215470f297e9bdafe900941ecb6e01b00f0d6f4bfdf7d3c2cca939c0590a7080f820d98a4349871bbe8419bc3cbb405db7ff2b5e59eb81a6fba61e778ee2a3dc06919871d37f86b51dcabb0eec34756e6fc2f4a463 +P2 = 06c6f3c54c2d5178e5d89dea2dc75c903d9f9dd0713eb06f5312b17ad2bb87cf1b0d4aa6b76fa4254aed9518694ebc11b5ac0e66793ecd5f64300f0c221e734aec2d971e4e4d16be5f9eb162daf8eb0355cd0dc84f3535afd45c5e57 +HashAlg = "SHA512" +Msg = c6a5e0786e4abda0b8af8ea62d555b29e2f64ce3dba8a2415f0860529e985191177fa1 +Label = b890c95eafc44fbe33b447b8eb6390f7b35cd0cc66fa25acc9a18b7ec42906d494c0488e030ac33d6a4166ccb96b0fa20dbd3896afe2b61576966c9e6d9b0b8885671e3e1b12c6c9a22260e2f8ee6ade0573fa6d8f3accdaffe6adb550b6c31f16cd63591dc7149ab46ce9f58e8904592461045e3a46d1239cdaf05dfd99eacf4fe9753d3e446119f4c210c0e6f78a2da7a10d98e5e75dd898d98e46a8fd8bdcbb0efcf1a6915fb4d729a490b50db4ef40c5c112ec0f0565934830b94a58137e952213f5b4cf3e599a3fd622f9de6cbb79f033fe81f055b697454cd897921b7befebe7e729be0355bd77883673314aa13a7297e97e62539ff1bee41c480105d9b4a5cb47ec398cfb7d57bc8d97b55909987a545138328a9bd83b384e86d3ed8b18c7e702adef57a3bd8b0a68fbde0a33909b0812195e5abfc48c364e421e8c8f8f41bcbf2fa4adee95be95df3306948f7483469ed75eeae035d46fcc9aee7bc3ac13c3f6cc1497bcbd28a1e31afe374f215492d6ba03ee7fa475c4ce80ef2b077b5aa958a465c61cd0d2793e742f4662f35049747a1c2e91a4a72170870f3cab5141f31218ce08ad8d621e637ef9efea6b1d323e1890edcbacbef8a4625acb8231fceeeab3159716eb9f7e2b26589e1bf9b3be1ed561cf47ef0cef6c7218f7a91193e01667408dae51f94a7ef815ee6b719d6946c3537931000c12ec577b1063b22cd707d000b65d82c45cc50ef514dfc2795ec8cd3f24c3a1791887681a91e48746ab0145cd3c892aaa004e7e5cd74f74f2502cd4282d497c2596cbba7bc2dac9320c35b62b9c26aca3edb6338ea1aaaebcc6bc6751267c8e12c22e24acc92ee9bbe6ad9002100fb5f9b0b62047351ed09eb2edfe2e36fc8b52ab962ebc716395 +Ciphertext = 2ca9b6ca841937dc6a0be41e551df7ec62a2a1d5f29c737c161db401cbf5af48c932144845926dd8770d917a8c5ac3e6747869b09ac3d771822b98fd67c6659bf8daf70cb8e2ecb0eacdb6ba120cf9ead713c57f4d588b185c870eafbcdbcd14961743b24e505e44a91f1fc910ff80062942b82942c29a0b7281af073d7aaadf2b59283865240ebfad0610ec45968bc1690a84ddf9903667c267d45e4a26819fcca161e6f5c1aa092ec63a7c0172ef5b8ef092072e2c37 + +N = c2374d3cbb8c5c37483f8a1c8b3010b2f488b684a886c6e35c6360ba89c9be16633305c0b0533b4f7b665813b6a40348e9cf5c150bac31be0f07cc36ae4521b77efbd286a01daac5870718a755c7d706375dbb492521796802d9571154bd802edff94f360cf22207682ffb09d64de1b9919a49832b2a65d6c4be8d4011a2221dc67e421afbe36de2b28f23ce3dc355e33cd8d6d8d9411cc7504be0797f5e80541ebe5940f92efef7aa0bf260620d +e = 010001 +P1 = c6bec8788a79b8739c7d0b5aa8158825af358f73156cf0145a77129fc511c3c52904af1330b1ffaa5908b96737180e5a92d425b4ec8ab44c8218711339c60951d7461e801f7d3ddd1e9b417062de28f6f2d3158bc568df +P2 = fa2a7e71a46fb8f9a691a5c207f78a43aee93c867ccaf241ef9cb24af534ed4e979dcdb57a605005ea69fbc9cbd545ef43d7f22e1588262cd8c006146771a9539c5eada17d8da0fe4243c436c0635c9e355b590d3e1693 +HashAlg = "SHA256" +Msg = 6ef464b350e57bf88f09737c7b3bfef1ef30d5565d4fb1 +Label = fa07889445fef176d4719ca74f219508b4466d6d7c18c8a0766405c69c6b765c4a888412ca4af66fbfcd7cf091d6a94ec8a82545fbd72ca6bcd756fcb7c6a1d346ab315a85e60b938e51da5198fcd6a965cd616b7d04c7170eea3ed9f08de70a30212c92ed20c549c6bb050492e9fcff10db803d389f131a016245e649b47ecaa442290a14c900cab2c4385e92f100dd39dba08027d00593f2601af3ff3a1948148d25a2c72db66ba7e27d86c6662dbc69ad32776ebecfd3d7d2b7351a6103697ac865776a5c0d886db3e65591e5e55405cd0e8770d1f8a5e3404a24f85a96ee3a7857ce2b59e5b7191baa9a4baa1afe3bc8ef9e567c138454973dadac97b2591c99bfc9cd7cc96e2148d5eb7e8ee36974a7b697e39027e5f493ed6d590b2ac91b1276bf2d799c98768034cf9815606930b92145f53ca9293c69596c307e3f8af8e92410ce53a1357111e1617728630c25f5429e6fe763baa3d623405935b1cf89738dd2e15d97c4c04d3d1cfb1203b9a7b776232654255f44e6243df7cc12031457ab2a39e69a900e903dd40388f7a2705c2341793dc27432e4676b0d0b2b7892889ca65649d09be1dbf7387de3a62486e330a00084226b2936e0a70b6e4e7005efc05f046c05834a89b7713b73988de9d58c5e2291856ba7801090b75bc5baa01b5afe89670503d899f51bab219b0e9f64bba2429599422d5ccfe06ac505741612a01d49a8e957a9616945500b3d3cac7c353fddb9ef8ec5bcd344205a0148d0a1053349bc448a7fbe6b8d8bbc60cd5554fd6dca16730607c752dd45f521bba676692b8f6aa8b2463c1a106ad82b54d4bea380369a676855dedf88e986416cbbd9f69cdc4879dde34aa42bd6e2ecceb5456ef85497f549fcfc37daf71605d34525b8dcca84f947ecb082d31b23ee272a9d63941b12d74e5a758227585c7c14104a547b97edfa4941a3ca29e19a93c5136e9caaa50ea360b8968761806e74379278f03fd53d42381fd3cb7480977ec472e391dec16a9187d644f12691ee9bbd2d79bbc3314d960ed1d5bee5c1ca89aa0ad91211eda934a8dbb4312852cbaf79f9744cb862bf6644a84c2cf09930e711d924ca8e6b88ec84fcfd6555eb515b08eb9c7db94ff2972c8839ffc2d3769324556cdc7933913d1cc25da19612ecad8ca5cf3ecfc4fd3436b4a14a371b58c3107a5efedc0b1b0f650b3e8cf2c3dc31d6916df3823b0c4a41f98a09a7c55fa095c9f8e39698ca8176952bd4125c9aa6d47237f0e9ca45365e1fac3f465f7b50a1f53db671d58ab229424fc55eabffc053d453d8b64106e6 +Ciphertext = 05fd56c1960a5365e8e48bfe8b34b49abf30f12d4798a60212e219ffce0df728541a726d07f032aef85bb846d831668e8e89b6151f45d0a4fb7e32176a6f4072dc98f4b2dc397919888ed54ed72836e18a8dae5a0e08a0ff56a6d3b0d8a8ea55b5662d56e035578e5204fad6eb5e3f202ac0a72402e88d465b24b6b135ffd2c54e69919bfd85c890438b4c64090b7fce17b0082e2dcaca04d37873423a7be2215db2e27889b6f85b23a80fc0ba9d + +N = 050c4c8d5775258b20f06860f292d75c8163d814cdc48dd61c767f4e2f58291528baaf0cd7b98517cd18a3b52d4c41b370d2e02b61c79571eb719247837300e0bd9fe13052ee692125f071946f7d69017b422098321477766ee1c7a7eb6b54478abd6062441e359d32318e4ffebec5d803ce963934c941ab7169a5dbe44737e3d5d2c1304fca23b7624aaf988c49c54bc99c6192989cdd9c3f8aec4cf6533a662cbfaad60ba194db4f0b0553bddfba781fa09ade5353039de3c720756237968460a9d67290a2af3debf14301873096cfee095ec740fa1784f023d91707d0e515a901dcb04cbb83297960a62a3f986c921315f7ab964974465f33cc936473a12d1d813dc3b9cefa20ac3283a65d3e5e4b42899b9ca0a31beb5f40d31345db7fa763d6fa3f99da31ed20cf393a5f240510d51d906838e32403b0f59b59f992ef1189a6d8b0531e791c2fb2915335a505a26167b004176006d7b53efa3795d41e9c8aabab63ba29f23b7d16a051db2a334dae0e95636b6ed0fa4dd10be6f1a0e20f6819ce974dac34fd379e2b8a1b2985c7e3ebb5770df9b43ec2242dec722fa7d56da267848e414958fde91a761f28499bcd3525810b297626094d6c9291788e1a9f6ecb3d7bda9517e1f463a5e2c10943b820f8657347f8454afc3885b47f91c12270fbcf52c82634d98e4dafc2fb90576985c9b4f7ccbf93f4fe2afb14c92d80b5fae796056a487c8b8a67ed921b76c8ea8e6e81d0523f770b772952264fd7e2230a6dc0cf7ff2740a01f203f8c26adef9421f915af9f74aa49f468bd3313b0d7bfcdbe00b8cc9fd594e8046e8f6f9544afc8d7bb650023a1ace9ec560b279f3d18c013deb7cfbdf487fbb7f8aee576420435907d0c4babf4d1017a46e64ad05bd8a7c4addf88ecb1723b9629cdd0737822decc6a02c91e5e8e8b65eddaf5b63dfdb2f4c6bcb42bd44657cf754045c95ed51b102f250d07bf1a4e85cc44d7f1cc477859d549245985b9be7e65b502607403a89b5fde61e90991fac55bbf37780e2c40205ac597a1a5eb6e4882105efc781fd327f65e8c0b9f6cab8605cff98242a356303d76d9144acd3d86d5b40b18b199dfc5e53eb614b971d0d964f9a9bfacb4a22eb6eab2801a8e9cff0994fd847d8abf0cca0f2d223f27d67af08b5a414d07f0417aa9284ee20ab2dd2c31e664ccfe06c8de3304044a995232a2283192317ad046b169bc20c33b3ce6121923a9dee4c605980d07c83551cc1f1dffc6eb15435d21ecb890db29785d52d1d5bbfc86ea0ddb38e85cb254e6c834b5936b71bd5aaa989a8d1a15d6518c251602f8c6381334faeb681150796f1c4a2d3cea60308679f3967c3159fee921924ea33436b94588f377f6f78697f6ef28097f26b52cd2e15a0b95002a75eb535f109 +e = 010001 +P1 = 03179509295ec573d13c745f19b06d17c163a83e432ace923fc0bde6069845205f9bb6b0d12e14f013729bda33611210e0ba350e4a26b152367c958c29e42ba336013bcd45a8139742e577b6c363df2025809f84927b3a9d89118ac4ed19f88d85e3bf8b183bb222a99c9026b376ed7bc8bfefc77ee36a9c5f1f297163cd24e428e92bec796d4c6e8f59e10e6e2c82e6da82749ed5ff792d764eb0ac05a15aea7f5a8eb7d07930eae8c16a372768cc3d0c2c475e07d92f08dbc554a4cd1590b82f9c13f6d0baefea2939d32e198ddd0d99c08e9e13edee362ab9a1d85dde068993e357de59e1084bcc3f3c7b2548c2c550ebea7ee9999f422c052dde4a32d33a694fb753d1a846024215c5e4cc7731e0b944971bbdf8977013bd2027500cfdfc8d1bfd9e8df34338262b862f8aa390c2fb7fcacb0e4720494461d68dd6e777817f69a2db0e8a161b40258b5dfd2b50af807df75a972ce56318bfb1679cbc8989f7a1a9e5f93dc9332f6ff6274b376babf6ffe4a1b33d7d26f2553f20b7abf101e9df9ded8fc52f13d37c09578e34374763b970978b64c64731bc413ee0cf9665c1b4f86dbb7c879cde5ea691751a4b033420e5e142f860036331e93df36f380db3ad20d0ba60c5a6c9bdc8d37b0a01091681dd0f807621284117d3d454c6117b906b3849be3e336aac25ac5c4c682f171247f2ab862ae3 +P2 = 01a1eeed027358c4ca259771cf09308d0017a2cef9f04aa9f886bcfe624fe697623fb665c8c124521e751b67c4947d1c77007b6bca451e42af07da1769f8488b91753b3fc1a40447fb8a11c95568fcd456118ddb9e52c52c4f69bf79b7e7b0779debee81868c230e6452235aa97a8ab2de45fdc19367a8497f5f408e9343c026e8c9abfae815af4babb868a581e2d051fe691b4fef53ae5f5b0af376b7d5d84b8975c7885343619711dfe4f0784719996b97d7f71fc9aa6b21ba8b5a9c2c4c5081b7e1d41efb58cfb6cd3671fddcd6a3ca27de56b6b68c9d506338ab190bf1dddb878a8e18ec0da13a2ec023d6ece35e43accf5f5e4914084750bab674497d1b0c6ae023736eecafe588c4b80d53b241ce1f5c56b2adb360e733fd376400269b2502457d71024832d45bbbe0c0196eb6ffeff59a27b20a347414ccb40368ffb03d2a9dbacc125a242f24379d88d4297c68769cd7de22c6dc1a2b907845ac593455fb7b932bfea2cecf8f3ac9779ed246ed822f4c00a56b722dbfed0a3a72d968cb79be8b3a8e1529ba725230de4a17773b6269566db2c4c0da335fe203972a346fda169065df4a5c4a5dc41dc551c5c09926d69a1b1903bc0edac988f16fb37e9de5288628cf321e5b1ae6254febed2ca7d422d3f0a40b4ff2c26cd3f28ec5b100d2e074b2549d314e362f27630f3bec55ed328761dc23 +HashAlg = "SHA384" +Msg = d3c22ed0a85b32a72d74439424384cc10b8e460bfa93fdf2861d7149e95fefeeb33637890db50947e70798d2304a49583f28453a271acd2336a73d2d1a9a98455f145632e726efa5107ea3361fd10ba38fcff5c0644d737bf84cfe630da3b4702397ed6d99952e9874e03fce30dda394d400e9604c139d43bf2809df35eea45b27bba9644f3159cc587c62c6370724faf7f999839bc2bad0b6850845f4c05827b61c1f34b5cb7275f55373c88ce7127e0b3257e9083ad50e74dcdbea9870dfa033a393d0b67d9466feb72c367fa21bd59ec394d44cf7ab48f554d03137 +Label = 25a6c6861c58e00bd51b6f3a0c6ef8bca1bb591e26fecaab7ffcf5decb90a81defa0ba69609e9ec6066329d8fc35873bf42af8ee82dadb580523828be5c3455bc09784e2a259be002d0cfe7e8235121a6e9a9a70afa3338813ad82ba6fdea36104a60c2fe22000bd3d3add7d4fb83d9845191ec55f4432016397e09e7a09175118c266359e981e8f695463daa3f88699a29abe6f8b1c71b3a9b3f1c08f81561e1d2c996bdaf522fcf885b0448745fa7ac324ac298c53675c13ca39f35f2d4a33871365d97fac48350ba4033455099f9470c1902767b77c4fba609dcbab0475b4447c6c5d93aad2482658ff4f68701f53de88dec1e53da4f1121d323d9554ea027f903877820e1ea1493d64277f816a02075bdcd5194aa034192148ca93dc47f70d0682c21efe35d5a70608ae2942edcd48a1246d0bfec165f9cc140781992ed9048290bae87653c9019572a72639afd9d627b04fe4a3bc3b7b9dfa1ba3bd82927136f8c129b1048965a4a19576eb4b3b754a1eafb6dee7c5e9253a690bbf1639bc2777a5114c11839fa9bfb2331105dd5e8d274019db4a90a50b1bac173147c350fbc4d21a41deafe31c5fc63118b1b256027e6fba5be90959bcf342e19b3814162563b817f99226e7f2f81ba12891e1ee7ac957ed93b7e8860483bb82ef2f55bc05379eb2752d10484dd26042a2b2f60a82d095851c4ab863e0bb71ba051c3d31e8a2bfbdbbd636a7b6d60a4bd94f5473a3e037803a54a76ba58f0905b631ed94584274d9ea1a72dd187cc841abd248e7c5afe046e0c64c7925cb28b1fb1db7e638200aef11e041e2deee21642adf63dfb528bd847a42e766df152a290e3ff6485eea5f1d54402bba18fefd627f4361fb72807bf916894625b5512e656e6683d9fbf2347c45a1558646a0d01f55a82a92ab7ac3bdd8715377f4a88d848d0bd8389cca39103bddde8854fccfc048739beed566794dac1bb75bc8dc7ba2b40630d4543d80c3f3bb0796065af0a8ba113a12f9785d054e76806f3c7e01588d9e5149cd71ce57b6cc154c7ee0aaca4af6b10dee616bf0a32c348ba0e68f42ac116939d66dcd3dbf203edc0c118bd2db1008247bf0253b0f8e4ec196003ffdf98392c4ce8dfdaf07076eeb008abe7364c18f57365c3cf944e64532cc181009939c10e4e1d9a98b1e564ccde925f911ecce306bf12ba0858e01be4a928d627645bc184d1b29fc4682fa56a53d6b028d67fb9d552950619bec8d14252dab52ef26f7607819e45284869d6dc9c5 +Ciphertext = 02cdc821c79d1d4eb0785524cd23bf530cb483582e0195bd6d79befcf272d066e9c4909ad01ff58090fa70448a0a31b0b0be03d37f34c5cfe01e4ef0b9288870e3e8d0c866cc468e45e5771afb1cd20cab165767a8c52137458d40e1bbce28026ae644bb4a3c2d7adbbc58e2480d04b0b544f5bf58b6dbde4572c35b6264f34f9c930cf4c810844732c3c55f857ac56fe6409fa1603f54ea0aa68d3aa1d2defa54983b003987079c72234408e8046cdee9ecff239e144f927219645f64bc2474a9b2b91595db064593c2c40f431e905599d081ccbd50831f9153672ac27405103e752d921e8b394e7b8b8150726095bad54ad16e60f8829efccdbe172eedcf8cc0208412d8490ae6063e1098f7278bbd573aa8057e8b2e7b80f8e779b53df6d6ae6d2b4e25ce3468daa88c04646506e122829e61e9b6fe1781cd91f633bbba6691b6b799d468a5600e9a46fc21b57e98501b924b9f0e2de296bbfa4e54b2eb2a65df7444f6761b467dbf4ae0252fffd0521e32aec01100e77b01dfd6f96e5f28db8fa518b969c069ced3abd8b6b85bf4f239de253a57fcdb64c37a9d78fe6cfdab2495312c7bb392469d05fd5773f9024ea9cb9f40ab38fae563d99c1ee90b8f7d14bd1a01cc60fe1d452de8a16ddda8e6ee3ae05f80259411f4d452aa3fbf242c422c25542be1e3cb8cbe9a8ec78fdc08bacab79ff5080eaa1d401efaa51bd0e982abd94884fc0c49246ac74c032f893c5c568ea892964a427789f2ebe28cdb1eb40133078030e61a383b55ba4a8d4713ae9257ac2839ae2bd9cd02e33029a53530af9b824649a50cd8d43a16b7eeda92ff950e383c5e117e31b1ce1f5350df0b3a11a9e47072ca9d39f65a38286c42479859addb41f479243880133074e064b603d1ca24ad8c25f1813314c475e70a77a7dd5c62bfca9009b30ed9f9192277cbed08bdbf83463258bc45e00260fba81300e5ca17cb194567a2ed24f1a0ef825df273cc9b59db2dba62b65e08ae4bd883eefa1a654f067554e0277f036d001d3a1812f0e0bd967202c7c65991a43f469e645d8dae9ae0eebe42302790ac75ea34a63b41cb5d4dfe66b9a18b66cd04a17f88b53d884ddcd8ad2ff5ac81e092e85b6e87a1fe5ad9025011b4b98a0ca93308b39f0a23fe68e45b9814898fcf4d695ebc07334a1eeee02e3123d199b1e9105d027e24af9d2a17df6e8ef6f4adc23cd59982a05b8d73295f6946e2ffda2694c08d6abd131a9c110fe21c993e0af757ef099439d21372b0cdf48b3a5f8b39052ff910d86722b19ec6c28c23a39541cab8d866032da7b2bf44dacf6035afee94d74c6a97ef3e4870988523920426668ec7433fae14eaa8b54a02ec74b90975dff84fb1b3a21a3732767510df2aedfb1f20d442a8efc234f63f0e55c20b + +N = d072e944707cacf733766a653c6218e841461480d005030352d305434b376325d2897244bec0dc1732b7b92399d99d6efa39604138b4e8328dd0a806624d3811d34f122fdbc7561379c329f83c6f2d38edebf22cfe5951ae9f59 +e = bcfe43 +P1 = d9a00585f759380718bfa99e5b317f66c73c8f8a6b07af0051b83fa407e19c2d55711326683f2b28f9d2524be3 +P2 = f534a8c6e91b4f436021fa73d06a7af47cbd72783f218662705f90caceb561998cb16e8b3be0dcb03947448493 +HashAlg = "SHA256" +Msg = 71128b9e8e120bf41ec6 +Label = 9e49cade0ed2babf40de5b688156fa19989efad32b36435360eee96fb8251dbb966a2c90cdcc79e726c8912d493070523f0988024a30f9c5b2a545363e338780d4507e7b25bffc35cb37e530fa4cbba0e134feff6fab7c0145bc1a3dce991f27df7d98f5ee5eb09cc04d4f5fbf1dfce2abb15427d22f02f869fcebb096d00876b743956c21157d4a3cecefadcb9338a0eeb2dd01dbf0fbd808 +Ciphertext = 9178f8024b168833778b6aa07ba60939e7d8fcefbf2f011ba85e37b879dce16191f7568956daebe5d7b2a1e3a7f40211d9762819ef860c5d8525ae36bb6bb5a269f29ab4b6373e8a79d21469780b10e7d42a87d2f38ac4c2f962 + +N = 0b92af8d9a69c57c9bdd850fd188d592674ad4d0a4899b7f25f7dc076dd35c69664826eadca6a2de1c0516066fccf48b5bff11a0e2343a9f98b255a46e455621bf09ec7793bcdc341224b504011cbda180eef609fcb6e003b2685796763e72aa6498ddd6edef2ce3b57935613d19b9256bb39650a6f226457761ecbd85aa994915b014312d4532d65a2c328e226cb5dcb7624bfd4ed3956dd7ca2b7433ea8404e9a7e52a241baf7d1b826851ed +e = 4358b9d7e0f55243 +P1 = 03527d7085d3dd1767ae5bb4dd004ed96c5e80be5932abecff2b76d898fb9955ca952882b8477a4ccc32d046f5fe5fa7d0290c80060e02c8e4e99316dba52e9e63ad2a051ca52912dbad31c9089bce5b0b4154b905a207 +P2 = 037bc6f3cc3d702239ec57068613c9e3552b1b47ebe193f533255d24e2919224519860c4da701c7590958d5068472b100b7f491eccfb7b1f93fe89be8242d5804160102042e44dc6011a1aa122c5176f6654437b6b5f6b +HashAlg = "MD5" +Msg = 3f82a6f345f7a0cb4f99f2e56e95c8954dbd09a4adf2d797f4062e3969c3d5a55fd509268e27 +Label = 5aa9906fea7a13ce93fdcd907dece00c6b09d21431f1c622fc3825aee3aad56077901ac5a5ec99dd8c75186d5f74913e640cb5aa62aabfb3502879025805fa6b0a61ff1a8eda307f69252c534fd988dda2544d1e6ab0a5c0fce3bdc439dc33668758095bad494ee60847b808fae7761a5737beca99e499bcf8d79692dd3b8e2231928304bad939c328f9b6fe29b6e58c5b3d5c93220efda1068ee6f754266d555c6b5493a210500d1b8479bb7eade9e66ae62f40d0162db3ac1d9a90d244095830c5e8f040bbda578a81 +Ciphertext = 094919675984ff3dd5d7ae5a2bcfe9272eafec3bb618abbaf401dcd51c4de6e10b51d1f797ba47b56439038a42ccaf62b1ac99607f3c24c0bdffc5d88a724e1fe0e58a1896850a8e217c90511f89c752729662410a6cff9009d92d6f3afc887ea443fb6cbeb169513cd7c02c2a07fa30830fe2887c3f3c0c1c4e8fb089b71965c2bf5170ee8631a35ef510c014e97b3033bf0746b4a9ffda118a87dbcaea033bee29f58d7e2cd36aefd2cf10d6 + +N = 55fd45b6ea85cc5ac1f918ef0d933b59ab98a45d0d82621b8549afbac7615c432ba7c5aadc60a5671ca6b2a99f6c85b7a6445fe719e232bab0ea2206edaa3f9f0602fdc4b739a4e7244358a36909e8574971bbed1e02da0b4b20b4dae66b9ebba15ca0e598aa5750932cdd0f0aea48e842d3f356885c755addce35b40a3b91dd755e682781aab4daf3ac2650d79a30c7de158b0498ffb85a1158d63acc3c4e025812eeb1e32311af904532a4a3e3e67dfe278526daaadaf6c3b91924e6b7a1e27ec1283fb5374a0870889ee7174cfbe99b591458c3c92f41fdaabf84ebb169e7441fdc6811d675234c5834806c2d50eaf442e9b615d330b18313d8789c425b7c9a0557515a4ec8452eb9fcbf672bfee57b38d7ab1755a4af9d4004291566ae41460e847b0b3a270dcb2f4e34a40338143e92d2b91cac611f978fb1f0fea9d30ebdb7fa2a753a94579a100433b33bcd40eb5f47d2d1752238724ab6bd74d6e9d64e56643e78d3d4a9fd1f28c1c5e522235f0082d95b5b973861ec15b78a9bc970c471cfc0e24e9f93b1dbd934ab7ca3816955420020028ff1007cbf0cd499a1358d366bececbf52c7eefece415f738986a506e85f366c7f008d32e7156d0a7120b0644fdb24b3c8ea664f7164f226be06ce0ad2db20ec3148015c44c39ca3139e4d +e = 010001 +P1 = 0d033e6518dd886106a0e22b957d1caa3a504341768d47ac9436be1bc01e30e7058b5f0f4ccda0b5d94c74cd5d0879863f30570811178fcf455d6fa55b02a82ebc9cee0c819178bced87b20c785f42f74e7e40c01d06df605f22fba8c85c7b494eaa73de36f00add71680d1d7828ab99779430c0f9b56407d1af83f7bc77c265cdc7e540fe704b1054801cf6dbdf9b290491f0c4f426939d9722b07b84e14827c20fd324815490836c08af121d54d2c9bacec4f8c398816e7429c027dcd7f8206c693f7a5184364486d27d5a5eff73a7227be9798f100cb2d7b4ab6f069e97155e1774cba9c2fd5199a8447b80bf000a1f +P2 = 069bae071ff52a366a996c9ea1ec8bec3699eb9fdb868f870b597ebd0b051137832dfcfa2e17ef3cf0f6085ce98818dcc77621c464419df975c0369f147446c64c95f8c36d2b69a28a02f070fdf18c6a7b945502f50a18715e86a2193a5d40ed573e525017f3105b4a2733cc3a11119f86a7e7752a548b8827030e3698f371ac349b7220d55ac466ff9493d4df2a974aa816b158f7343a573afad4ccd94f432ea88fdc0e24d221b54279f011c5d4659ab872a03f0c7850dd6c495e1359504f8e51c82c9567b6c63d24742f4aeb925a20f84d9303ee980bf2a5df44e3e81f85477a728eaef6804725eb02484ea57d6d6213 +HashAlg = "SHA256" +Msg = eeca58bf7e2814e76f2c3217273a00419c1de6cffd1055b159b9b3dba1328e3f535b979569212a6344cb3c897f862f08467deaca27acd78f26d6f6c370178fcadab2ffb3f853b1bcdd9cee7710fc7945eeff65bc9180b737a4c13108f33f5589bc5d7ab522280c2051b497d6ad17976956648254611911a7bfa4a1d3ede2f9cf82730de61e41ec9d73f1dfa1d166ed4bd2ebbb2e073254c31d4ff96098f7e6f6e6fb64dff6d247fcead33fc53ea7194b8199c08fec53d7fe788f1941cfa285ed2588aa46f00c430a323092a337a68c3aae40e2108063a14b50fd5c2b472f8e5ca23020097ac1e74aa6d2a9eb5edb72a23fab9fab17582a0d2303d2b65874dcc0f8ea7854a1170a0296d6db55173456be2eed90bf81eedafdff92ba3bec19d78ba75fda5d14052991a8934ffe0eabb9d5d67105d33fc80a86ada2f8efdbb476188959e1e600090ef8bc6f5ab31f9f9105ccac69a75627cc5991cb31ef66fd0426d2f7dc9b995d6a1cc0caf68ca402d29d0a179549dc37d4db45e753ef7ae237d362f549c6c7a63bca +Label = bd4583559878c72d6696e67a62f1f123b9cf730db9c200d59017670999ee4146c7bb3d02242b47fd0046801d46e052d5de9391c7db4e9f7373783367dd7a1c6d930cdd2cb885a83f5673782184f706649133ec512c97d980d06ae62098cd77fa17c603ad53cf83191e588e2d61986549af68fcb29ba835023db1f27da37bbacc841273c73550f07a22132e5ce2417403fe9ea508ce445a360e7bdbcc6766430b7f6d2787af123911517c95f5caf684e2108878b8ca3b1f0b1dc24759b6bad67f564348cd8efda07ed8891a5aa83c45424c12cf23b50cc5a9108cb7556af8fece49a47b0fe73826eb5859979fbb573a34b477991c785b62cbe77d1cd8c239a887c67b1007782b1117a874b905ea187caf2e9a91aef24639260246675c5fda4bbc5f80c108c59f2232de7dbb7eef9a553bd67f1a317a1015cf166255bcc7279e62ec646e163c83240a97285308132f9158ce3e467e8abc7fbb5bbedaee3a061a5e4043feaf56775a4526c31cf5b260ec7865ad4c7bd67ff48f139411c67bdf12eae6422fab3423cb89ebc733ffa31c3fc3ec049441bfd15c77ef15c984e1febd5e510ec1dc47c14d18fddc36acade79351c93dedeea1fcf821dc818337ee93c5f20eeca74909f23a18ac0749c02b240cfde75fdd26061e361a33c686eb2ab34b5c49d70bee271a112471d81f7f146ffeb227b88418c766dce3ce63b789f8b86b3d421a43b3e310dbcc69afce04e4f3a1e9a29fc0e4d283af7b071ff1b861318f87a7ee872d95949a58f18e4eb48ef7042d88dc7ff6a2b4f2eed89ae7ab4eb99905905f5283fe72eb6182c1870f2f803c8f02fcda08fd0a7f351f1a0c881b86e296f8ef10f769f8171c36810ac69d5fbf4273cd72f5e1e4f8214af10d33675639f506d4e133299ff46486d7130b253de2ff5585e93e70ac666e6611769f464567bd778af1365f5a27af3b8f021d46c03ca8ae3220d83e0f5e42d22cadbf2a6d813fb6bae889249c61cd5a2753e4696495992c6876a92a181c4199533a09c19d7a1493169c0e65cc09193bd06999351b5bc1577b54b1126e8c89ed32536a1e5c74c1197572b151bf24a2a861d2a6955786b393c78e9aead87182f0eeb5c9e88333dde415c469668d28f934f198c0ead9c41bab0140c69a654cf0e253c043770b48cd5bc2698c66452aec +Ciphertext = 1c450cb409871f8c9b2b611f570c5d0b4347accfb053968e711136e164dbe51cae848be1900359282702e0597102f627120963c6c667a699ec0fd1c9b64b894f5641a84f3e86e843872cad095b60d3145506ccd6b5a76a8f5fbbf363272f9e3ebb805b8b71d0424ac9804057a6d33d8d51c8984659232cd4fccd933bec40ad63fb06858fb7b212055e8279c4533f33b1f35a36f88a49039b3950f0c1d0067c4dec4441a66bfafb11c5dfe7fd434a09af1720d053ae7339f32ed57274a145421838707a99429b996eef542e3d7b6cfd00eb344c740112a7ba4ff77f4146ca36fa4baaf053a64197c83737fb3824ed18a65b7df74bfb5c769b280a2c6ba63fbb9386daee226106c93190d9e85a8d78b08f9871bfa6d6306a7c7b1b1f507a55f791631810f53fa04bcd9e56237f1a23f9458977c5c09e3b8726c0e7da9fcc0376573b17c3faa3cf635c250cef10d03040544fbc4d3bc4d5498a0e8ceb5654889d88bd11b5ee990f5828d4ae896f03d863b289e48e87c2ebc56ca7d379a45bf32612f24d5ecefe36ac4255ca1a9839c046be10ceda80d642e85917a10a903f6bdb9760087b934846865352ff1759dd40b267eb6f6370d3fa53ed40b891f5acd54bc67362d9545f4f62e701400a7176f6a355092773b6d6215fc1fec46a83905a7be74f + +N = 0542aa8a9159b6768c0cde060688a1a4f8758aaa16840201f9cfa2b22c1f49b740fe9834ba28934c05321612e9ce01d10db10e2cbc955394a5cbd36acc1ce09581983e7916d904b222a309 +e = 01ee215e2d1b6d +P1 = 033147353f7a17a4574a618113a67d95a2626ad7bfd59e8cc003e247f7022487c7441d1f613b +P2 = 01a5d2a17ff4a665b4264b032e254bd67b300db032512201bb69de4e3c89f83fef55743d088b +HashAlg = "MD5" +Msg = 26a302ad05186d67d022845282e7882845858c25de +Label = 12f4dcba8565746dbd6e0d86ec59c46e02a304b592101da52c7adbee17d0cf5fc4297e5a8978b2598288ff46eb20ea51a1729e078f110f616820c769675faaded012d5a094eb6c07270bb76b4c1a79dd29fecf7eaa065ce5a77df5174ed16b7ac23d28b0aabe8dfea2f872477391e9f2a0b3e54acf3fa73ff5d07ced8f56bdc7dd81cb8bbb50c5411a9971830337b5f06835a3 +Ciphertext = 01fce4de0ac6c515406f420589b6450606465fa400ca8417bf180113291d4d1a5d4bf040158236681f17100064aeb65cfca83232f517969da50e302667c2fbe01fe8ec09f9b1b2019a267d + +N = 5ee95bf8def9725b5069058e7199bcf56a3acdf02599c3764a6fcdf0d851f2380b394f25a4f1517cfa6cbd8e2701c8f78572c4a6bfdf9e14cfedcfc8604f6a6b5e434b42a794f2fca8a88764968bc56ac6a3f193be66b56150321422a8c9fd58c6d3aa4040d6d45bfc7dbf1a3b67c84726f17ddc301e5a37d9a084f402367e003483d0a8034495add6dcbbd0453f3975 +e = 010001 +P1 = d32f3501852575f9f8da6bb98048a3ede7ae2d6b15205dad4071b7c108b0529fc3e45f5517391e3eac72ed14ff29d17f96193cc94ac705df2a866445610993bdef2f4be1a330624f +P2 = 730d850e82e07f411d8798d8cc09b1dfd07b3e209463a74d067e63404d62e7df4a3c28a6180ed5df41a7b9bf314fdc3a4a99096fe87ca92d5501ac5e66c948ed2ce35ba1cc5c4afb +HashAlg = "SHA384" +Msg = 9fdef095afea84aa6100456a4d7cb795 +Label = f237500e548224c52cd8320f3e4a2a369e45298e19f985d4978b121d44794c9fad3b93a8591cf5860219132ad8d321e2d1b08a720d418ec7408d01292b30df9209ec6e93e4862604994942536280b32d9797d3988e31f0eccc9dc0140933cb9b99af56d18667f424d9d4d37d1c2f853bad4a0f862ec0de322fbf2dcb3bb206006606db7eec464df1ecc4d50aed6b25dc962cdbcfd9d575f063dc694ac830fba394ab07ad96a15b18dcb1ab2ff6828b42e74d9cede2830d79d636f30cf516aff682acf1ca86987abbdc78b49aa8627af1 +Ciphertext = 087ac6a9fe069152d338c551173e5fab4d16a4ec5d82627c975de7cd20c57786813abd4ff4757b49372db6058fc709553148510e136bae81df4fa077b462476e97d06d950eddea379c7737ec3e71abc3cb04ded3d46a30a9dc0b144c0cc96cdcd4499e18ec325ee5a44825ca1e8c1d82c0c7481c22a06a492d8dd389a1330139373bb6bf92d4b6fef5425f8ee70d4b3f + +N = 1477feee24db2344ec03ea554bca5c2829bb5279b3108f2f97ee7595e02ab4b0dea5d1d8a56c5e4626bba4d815eea95614e34151498924cd5922ac7dfdf111512fc902068d7193f46effa704bb165167d1f957479b1f03b7b50d48c103347806d8b5a6e814ffa86260ad66b928cb01737a3a93da574b5572d1a000c9e88f0e32b4f0504ce39dfe4e259f212ba0144ce33d3658c262c75c5f57acb3435a6d7e987a6d9a268ad862f1845537689f9fdb26c0a470ec7377f6bc6bb54cc1 +e = 02c6ab73 +P1 = 62fc5645ddbf15127bb65dae2d187e0ecc636faf8b199ff2d5681afe5b65d9cfcc7852b5d0e13b808d1977048a2271fae9ba58a1003157211932c1053a1cd1b9871e231bb60a1fab6e653e0d51d2ac94c2728bc1a37041f67532a8f1d4bb +P2 = 34efd8cb0464dc4a730fdb27b23d45f155ec520a44ac40319621f92c94f7d63a248c7f2e56734c5b9948593fa52bd897e4236900e6758b344989c12a43919f81e3d09ef5edd4a6d22485ad8ca17022902514f7d2240853767617df26cab3 +HashAlg = "SHA256" +Msg = 63ca5a7bd1e31787f6dba88896c50f682cb548f2c3f91ce6bdcfdc9b9c562e5284838579d83ca13592767198c12605f299f8b27118641d67291e58 +Label = 08270e9af6dddeaec91885243bfe1d01e3eada755970ad4170d6005225754be12f65d32bd51d4bb75cb661b48b8f147839bf9aafa9b19b454cc13746a0ae58c667212116b7d95faaa938a71262544811f8152d831f35b7b60f1073cafa5e1d0d0af70ebf80a52f143bc95ee778b1fee0edaab7a3cf48bb557f1b0e5eeeec4f557166787c21dd25f08ccf2bf8cd927851768c6070a38f8ae5e04ff27d53d05130052db83ed4f8068f65171b515b2791a0bac1d37e6ea2a9c85c8175b050caaaa2e111ebd81f0fcaef21f3e0b59bffcba1638dd3292dfb85728cde4def467708766e005d0404beb95f34432e9f25870de2c0b9d385125c74d2980e84debc214e4695ce74c33e54c0639a74cadbebce2e64132a52390fcfa72bcbc58a3b7aa64b90505877441dd82345eb71641f01d6eb1e68b1c2a41cfb7a0352800ba45dda85dcaed51c85bd6a984ee78da36ccdbceb6e68468c4a7e214bf60ffab1e4042e1033f803fe4b166d31fca0c3b59abd6ed8c9151fa422c93b1178a94ed4026179d14be01dd42c1c0e1952afc3440361edd216e961092373d4c8c8023aa656865eea77fdd925bf4e1190c7830de33778462e2c5070048aaef0ab44d4f9c18f643d3a44a7e6752e80c69dcf451283ab0d1b08d2e8b31168452bb827f7c4dcba7ea7f130b80a102d7ad248363bf16dc68f3966d95b7042d13c6ec785c7f85a9321a393d04c6974ac3c7ac1ef65cc27c71f8b82642c4d670f5c95e93970fa25f839d3b983daa51e3e988469ed3592f22a62eee37317ae772215b4c3fafe253e1bd0f68ccaea69597c04eba11a978ba7368be6684010e1aac4a7413e905e403ddc23aa0e7f80b36960769b8902ef7afc0fd25cfa507aa95008b2fd008d8c1b0111f7be639ac0db1ac55be493d3566d075f45e3dd8694513431ecc0c498fbe7473ba8caa30186dbbb4f56a589e114d9d7b01b3f08fa60741ee926beb066535d9560b391276400cd9245c6a377fdb3c939a90aacace17beebe5fa7ae520594e1a07a517dcbd0d99746577fe5444dea0f052780eceadd4dcb9f9c6908a524414c76322f10eb740da11d7684a2c78b4a80e436599d46172f38ac8865a2c04821e8306788f10e6f6c88fb61b4819d73a763a5ac162b71e8ca2ae62511e53efab679aca54d1e9ac4ead038a76326c1f937fa889cf03ac7aefa314ffa2232ca09027709a1df6bcd5fe12526ecc847e41db0784c1af12b29f9d2719d2fa098999b22bea9bb817656c884a5c5a9cad9cddd9442f627a7ee1454cdaf16f26946571befc4e9e819406853ec239bcb65c606fe8cd951f63c94e820776fd0d0ec0168acb17b9bdf52b437fcc0fdab16a8b2322d0cfca7578b8990baeb1d7cd44b280579b955452300053ae01ffb39e57b72545a2b30151b4b7259af0dba2a +Ciphertext = 0adb5030c9763e16358b2878594c4b284d08f8163f5402712fa64611f0792454dc5636d1d68db8ca3f07044d0bc462d4eb5bcab425cb59acf5f952f455c31830ebb97d3de15145557f76615be86784fae9740bea79939cd006c69a8d244a64064c740ab58be92d8a8af1c7d4798a0089fcc62be57753a0e12fdd660b3a346085df09357adf1d948760ecabd0464a092db33f0e459b919ba3246d5d625a475f143b6d8a7bd7527ddf1f3a731be78b697cfd9a0357126d9ef255e89f32 + +N = 1493044d4ce5529889fcd4c48e6a64b13fde52f3b46ce07d0608ec22da4970f4bdfcecc7f58b4afd5618c3976a4e443426dffaea8f751452c8017bc5677b8025755b4c99fdb058105b0c9176ff20402eed63fe08fd749bc69511ae93beb2fc53eea452f9b53f77b4a6f147094725cae85796242040da591adf5dc55bf54eae7748e991c3923e2e1530324fb91fe30841f6cd33492a4cb1da095c84b40e640f8e335004ae39f12ff7fa898f75123902fafe22be2ac513dc6d05a3340f295a5abb984a993a3b79bd15b2023e027e8bb5aed1f16bb2a7ee251c5ec835 +e = 03 +P1 = 0ccdb37e32438df76ed8a25dc954bcf29b0b6cb70033970a0e8085e4a01f87ec3fe043b50e5f64d0cd6c6613cd9a9f1865c2813f428e107516e578f036d23d6333a6df8094e94131a4dec51920a7a081221fc82d671b12be3898b6ae69fc080629039e1b4d0a96734a6f2a6929df3b2d0e08a1e32e16d8cf +P2 = 019b5f5feafea45e9d4ff3af500f978300bf441c0693e3ca63efdd5f7bf58408d00c80a2b6be9a97f20fe72f91b2c48866feaf3bf070a07c9797b6f91cd2e3cdd7afdb4dc149a6b0e4c73dc6dcbcd728aea8ddcb20aa808af94574adea6f97d964e347bb +HashAlg = "SHA512" +Msg = 71e8e95dd5b2083f755480 +Label = 6c19e2cb7ee8e456c3c459ae2e34c7fd6104cdb09d833826e6327e9543fe769aaf5b4115271ded7441336d3c20f410bf26c78bfd870b29344565890297cced2fb11bb826abbf67ab6b351a725fdd7f7dfacd452d4ee821f25a4aadfea3fb5754816e4e071e367169f722217c13609c77794a299030f536be5aa0486942040912cd0e2a89dcf14a01d98daf90cc3372d7aaff64bd6404f3d318a0ba6d02f90ffdaa22c44a141fae556a2029a5e5a98b101ce94a0c06971d76ee8749456d88961075e8e0f8722ed9398c0cb2ac444365e5ac9873d562ab307711b6b88171a55799832c57d81b929102a7079638ae0ff9a4c52992a92695afbdaa14be96cb9993c7aa6ffe7178363be99ef365e833d414b9557bf9369834bf716596541567d398a0db77c5333064ef5c72cb0a8042c5984694db45cdf5ddeb41e069dbb23124b8ddd655f61610ba11f61cebae09204f8e3a39e65cb90768860ff7ebbffd02fa0e08804e48aa6d1e0cd9ca2c51fac12f5eef80786591ea285fac6d80d74b43ee83da9e95417723b6e4f2caf6201cc45ac604ab85e7d323bda32bb2c26ce0b65795cccc00ca9142a14a9d0322a758f81fd323b5b7abb7ec1315490ff42d7d0feaf9344878e8051807af357b4551ca09f1b13e54f47dcb9c13ee75957fc42a71d777fb3094cbf68e2f83e5de01fbc5dac176392360ecb6c8908adc0430cb897b2d29160725e78131fc463a12615f920e7d319bf50af4763e5e904e2c0390bcaa84a2539a3532f51cb121606998cb210b7409f5216875d92044110fa0a471e41d7230be2f5775d8e3a2baee6584a6eec64b211e602dde9349d90215a3e48f7c783ba680f138582225c6c4982bd9fa94e9276f90e749f8ea089dc3cd +Ciphertext = 0b743998b9c80f3bfdf7dd64b1cb0eb27b22de5a2a9baf0caacafaf09b24fdd59e39f361a50d3432632add431dbf150031d59efe11cb9b9805cfef8e5b9ce57b754852da95a955673e89780588bedefb181b1c3ca559c0edf833d8774029f71daebb580dbae9e78bd09e44869204eb5cef7241acd6784769e7e7b90af5a624737588da4138ee6c847bb4c4610fb56ed062c753257dfb4f7a8a976a0c5489e1c0b48ee8cbc77f761e8360d1d2955abfbb993942346abe19c530727c65bcb30671793acf16f3d9d1bea47b8b5acdcc9f34afe2814c41a0d1f01c772b + +N = 3bf7893ce45fa75f02795fe79bf12d06051dae363952e9c9efb7bde03ddea282315e788ab92598c4bc93bb87f7bf713ff2afb3a78a9ae658002fec710a45bb7006fcdb3947a5221b86f6306f7fcd95eee0a65f0d92f57390db1b4c36d43d1c05128d9452ec963cf5d29beebc20ae72a0bb8617af77f20a5e95e709fee08060c6d2411e391cf9428c2fb05ff4e47d65ffe99400bc03ea79ac5ab7ef590cb3db77dbdadb6a25357a4cd8a63188a6f770793751f00682204fdfb19062a13f87b9f3f48208a48b83e2780792edaa4d6ad67d9cff2916b96b2a5c416f4c2fc1a6febc4317e6601deade1a7b9f4f193c6aa87039ad63c562cdfa74ca1cf5f7420f5659020c11ecfe52fad0fe6628041da271cf21b19f0eb963d352f3fc241c0c94a985f5c44b6f33cb2f37606df6a6883f1b77fa740dc69cfd19b37fc7a2d430d76ed41c17e33bf00cb43565d6d8e2e3f27067b77d9379c2fbb459ef79 +e = 010001 +P1 = 3c2e83a1e449032ce7c676e54331d1489f974f62c21fd3e2ea9d6b7c4f183d1a37180c65b297e3288824a40dfad1ca1799256925c580da95549938d2bee985287fac9d69add0a1bda96cac6b4367060bf75c10e047c937e670b7d03d65d14287efe5b81cb81abc7f451705b6630d7a7186137da36c2ac26b1e39408729cf0d0293308e406920577bfd36697903a6aac4aba43fcff887e74d4414928bba41ecf556dc6851870f4e598856145168226012e15b94e5d6bcf34b440f7771ad047e288b789f +P2 = ff16228cfb9a0ceb897228b8eb2e85f4fef4a1f97ca037c35edcc5b212852aadb5aef070e71194cdc15b97a21c371d188816412e3f629bc4bd02fc0e27b322b83caabbd09efde0e1fa4d4ff718b41b0c8147fc2973780e8c5d43be0b0c3f580658e209a1c0aa1182cb164875c3abd8752015dfe058e95fbc0d61d837cc69e45558117b84f8e85f84c43a5079f46a1023e431d848d0e8e7 +HashAlg = "SHA256" +Msg = 2902252fdc0bdb3f1bdf2f7b1e6b176d4c1724fe5030fc88c592da5fdff4009dbc23f63b68ac6a2f04fb2b094eceeb6f58d20a833ad04b46e05265d207bbec911333d64b2ffe04f09fd9b98f64d70dea79615d73476fae7c9db1c0f003c436d5b35f5ae2741eb65956b2c34732622a654503a2dbcbf678f3835f2d243bc885918084cd98e9825c34cdeee904a18de4c01a6d9ba015b34c5e9bea356793866d111b65ebf41313102a30b81fbd570c8e8a999b94461552b4aee41cee9c3de2efde418c068c4653555a4d0fe6936e3c1802a7fe51b3f753c430467c64b3d218e0efeff6 +Label = 5603a9fb07062f3c3b1b5b84c46a71c18681ac46533b68c7d6074c89301d1b1938a933466e8558362b6cfc0f8efd2b5384057defa2c622d6cbafbd1101f214e25b5e162681fef141bfe8aa7a5eb35175e7ae30f30b9cb1759a3398d9cf687dd60c5ec41372fec921f0278c0cb6186037003516fd470aca5d4f4f8c240104e3b6c864083e65914f4a558ee4e3d89ef83ad102f93f99567a35bb38b9d510d4567067ac4f99cf3dc83379291f4d9586324a9a82804eb923ab18b2bedfeaa7d6605e35de2c7f4609943c3bbb486c226b0671ad06ec88b7850ca527f2926672711c2ebc9d241c1bedf5b8c61c24f3c4009af386441e5a3e9ab8443fd69e152d5bdf66eab6dd9842c28a240fa8190048da33c6b2aebf6c82df66ec53471bb7c1a017950ee08ebe053e1c4ed41ce76ee66a346f0b81675857972cb00b35b941ba7c9f47915c3151405348ff9d443f75b63fa29282ade199c2b662f96e479209a37c8d9d01ac6eb760cc103dd455e01487b0b832401fbb5d3f9d8f114ed241bd53b1398c2dfaeec705bcf25fa3f4ffad29111d2c48973f10a2218cf896b1ddb7f8557f0e31186fe1f0c6d1cd34c8b50710a6e9b1f4ada47593a98ac92eeb6a78573ac05e5600299ec78f30b7091efac7802578bf6e432ece3cc423a7c0ad346bd12d335bfad42093153c0a760d7b323765921f220de78ac4a53590a9c5e1f86927d201b57a2e2ff704c6a9491ab61ab076c28953fcdca78aaed6245544a447e73f40b1c1710b67f8a7677f17e370da1ba37e934e4f1403ee17e038ab0820ab630b5cc3892f23135323cc81a48ffd57ff7c44692478c61c0067dd6113cf22dda5848c41ec53022ee123844ed815cdadd722dcc09ba7c5b86f85fe8740d6485b80970105c1a762795cc9bed8b6af034b2857819d6d3566922fcdd30075369c30ff8eb1a3eaf67e5962f528a25ec39d880a20fc75ea5edd3e87c4e38751a5daf2d4ce5d88ced4854f00053f0793550e374eea8343d27ad1377a584f676bb8d96e1b6d5eae0794e68d679a758d6408b278f9e4593af9dc1e59223813d577b1cbe3e0e47cd088b09373c539ca97df47a3751138499a61b9d014c1de0e9da8d8671ee8e70d80cf65703e0e53372b083407a3ebabf75369a0b22c8791b78e5186ca21f5dc4f1c885005820e884ecbe3f02b20173ad5925088b6105cfb135d20a1b4aedd3cf69c9213958d50b6b81b9e7dc348742503191eebce5fcb17aa2c407138a2d2332248f7a21ba38484082e4ab292540361afb8a3fc16f00eed6ab4340b07ba4afd577e3faf35a951cecd96 +Ciphertext = 1b13998d455357c775357f69b041627597023166ab329220947f420a3dba1961f6bd4bdcce59004f19ba495cb3a10088ffb3b6d02752f62c54b1d26b16f4f968948d98d613ff217195d0d09c2165320c96eb0adabcf42672b4098ba48931820d9973dc233b4a93e08abe682c33f238aaf289b69fca8d16ef09755e7a2bdb05539add90a6e4276d677a7ad736cb93c9ff57a2157111b419c12e1e04571c7a72dd2379688e1d8e561238d51400fb8a4249c16c01dbca625b81a044772fa31106cd14abaabebf4a5b16d0ed008c60a894335a6f2c9e2f00c74df91b1441aac480a056222892eb0809970baff0580f8a0f1d4a300455ca0fff80e2a7e7b45f207104b933386baf4335246947c8bcea94a37ddc2375b652863911aa24e70dc70d43a690c735be687026bc8ff7821cf2326ef1cceeac5d3d69e6a63f25cf9618ff2abe65c0ca0c511ea449e893aaf15c873e6ba590b437d18ad30fe2a3 + +N = 2200b50204efeb9b3ad839e1a1fc22fa61def5a6fb48db31bcbbcc4ecd77a4e9e496cf03aa0207bdf47d5478b6f8b91e1861f14234110038e5e93738d641bb39f85b5b16c730081fc64ee7da74ca24adaf867117b5ff29b48e555f210e654de24e912a8a4789a180f7315239d9ad6471a1ac85a0bd6f8f9cf4c727dde7f62e90e9ecd3f9eaf2fce0dd3ea574f220e13d7369f6e42eccea70856039ff75f6f061ce3a231236eeda1fe5db0856346d9fcb95083cbecbed9235189ffc1e919a18d3213a886df379bbda089307a0ef28eb2abedc9c7af9ec47742249760d6a2089a57530290ab8c985ba5f977e0f1ca182df95d70d2860e781be8736171c0b1a4c98c6adcec8ed340dc13e63e4c95fa0fc942932a99b3cc0d778a52778dc0c214ee01a877eaa37f9ff01b644285256c8e5bfbb556c08b20604ca00ae582170aabbf96e7539752b24a34d3b1f0f7a1dd8c430dab094f3ef335080303a5c76687bdf99a263721539ead202d006b9 +e = 03 +P1 = 2612fca4ab8c0efc0a059dc514a8435702ed18dcef7b9ed941203aeb8b4880e73b67c3d6667b6dc932482f1669d2bbcafaf9115617a830a9893385be5427892f486c675ef535396fd9204b3cc2e878e015a28c784083a27f3ff3b007d3ede86cd18ba85f51a71382f935e8b93f1f8fd7647d7d17 +P2 = e4a000e0f63a32d7d9d6e052dddffce132b597c0f2cc05d38541aed2dacbaf265c3908eea557a90222da8ae0d331b5917e61c641c198e78c3853e9c819881e99bfdb158a53a02d64b16631b85179aa15080e66d963e148d61d843ed185b13d0fb35c650d99b9aad9c0b90129309032ef9a0959de3e9b2596afcffb0e5d576abb1655add934de7bd50157476cacb2ea5d72f02fb4c45f05af13f1b85df3ffb89858ce0f71ce42826d05ec61d3bc21f853e9442873d45fe098a12c6c068251d940ee7f71eb62f7e55c109f5935f677b2a51fd783301a9ecef6a16a31431b007bc20b52471788e5ae02d7213c1c39e8d6af01186db50f1caf +HashAlg = "SHA256" +Msg = +Label = c6f8d87fc5d66846c7eb11fcba256d2aa092e2daa6898ad42e45bb69939c210d7b0c495f4466c9844bacccdb97d6b586983ded1db1aef935ac139b7982bfea6bfa3649d89259a24fd9d15fcdc8416af7e6a854a8a0c97a2ea15fecc051200a653766f15d528cd89988de1276196ddfb60e253346ae37ac88f5f31f7473e438bc5f449cb0d7842c04329b5844f76f9b9d6d4b3636617acd114b1ba636f8448a0ff96fb9e8a97b33c764a43ab6c84dc98b362d4598da463f252404efa36ad557c93305ed6c8d5bbcb747d61a30285a7ee61a23d3d988fabc9c0eaa689c779a833bcd8f1ed4ba59f56a06e79f09e9a2f1f4f31f6e2f72735f9181544bebf80a5a42c340911e1a9d41780238c189530b4c8901a981cef29ff049de4fb47f43b75a704889e93690b2a2429064aed37df523f66b6989bea4f91bbad0bb5c29a7318db29c21656db86a3bf80321fe9450616bbd1b0bbb5ea66b74235aa50f1acbb7c0d0060202992b508894384ea2bbff1b157c8b79796537ed7d36b30cfb716572f488ab3088bbe0c9544787a41067c008167cca09653bcface87f062ac627d1b83a47d734da8c4d7b1494c0caa8e9fbcd69430c8b7ed94db12f325519f77fd123e8b8a4b07ca3f6d864887464e12bdd148790d9bf7ea090a1e57680d1c66e8049fa7d396168367d1343d2d67285149692ef0f0da8e93dee7d4470538e83a3321e3d1205e1f7d3a60225076238f64b59a9e80e6b1369284f0dd67a38d8ba4ffb32f993a0715ac0ebe475e598f20df4986a9da511f9d969b6fa6b5680b58f3037a715d8dd7920460e44907ab6c7ef43ba289ff9abec9b7bf38a09183b9db40c1248b4d23d8974fcfe9445836899a272a7bd209a7a46cb7535aa140792682a91e6abdc1c8563851591e67ed1ffcf0af34de487f62d7f40254799fc0b9697413cad34ade12911a02215223eec6c4e323e6c60680edb66bea2656abbf0cb24d9c49062577849d6ba5fd274cbf01d856b114a4d26243b9947c4f4c83fb5d8236d148b075b10d15f9d71902d96a4c07b09929a6e81bc04b6ec100c0e3370f5287836344fc82b0973b821910e88655187b5256c0cbe53040c6cae86d43dc41341726bc5af664dbb1fecc075b8d05455ebb9dfd249ca0e65a4c4fe2e3a707b31c55642604a1a61b61bd680fea9292e94e9050d6bdc7730397d1addbf9bfd3d927e7b86a926f2ebfda914628893576ccd +Ciphertext = 20b38d38d96a2b96e0831409eafe00a2b0450fb7098b0daeb917ec1884faac2c2cc85d734953d43db48f10fd661fbc6b4b1153e46561503024f2812c20fddf30009d267879dfbe125d87173b4df51aca2127e00e6003fc631575bcc4c8fa0c54674a8ceb24114428390cb4566a5aae38477d392908a65d15c0b98f4644d13258962fee27452d51aea8087a84b85ef8de31e2092f3aa98935e27bf7a9a320871675c63105485556dfdf1591036588ff7d11a5b9ef54e09da266ea33dc376536f38cda21a99d4da28876146b37ca7aa94a219a7a3021062243dd0c332de94fafb95bae1dcfa3fae65fc5a04bb125976e11cf5eed3fe14e3fe2dcf9644db8a276d4426744dc65e36dbefac5d67dbb7a1cde1b9897d2ec6c5b51da8207be947d731690e4525051c514380dfbc831943112d41f86af269d80b15101d20145db0c8ba5ffb2a71b5432c3c7d6d6ead7d39fb166696e51290ed37d87656c5e2e9dc6f4d28297f6e1b43b7afec08ba6 + +N = 8dd84b5bf8fc03f8531b34332d188c342121bbbee555bf67c36ba4856c4623cabf308aaa5e1bed7b2716b0130ff0eaf04e71333c94f71f21b03932778b394a1280434fc25901958082d36412e684e4fb7eaacce05cc1234cdfd513a9a75f918a6d16fb0b7a0951044832fb9b3acbbd78abb49b4a2f3ce83e1020fa981508ba2bd3a71234516870c2ba1a59a7d1f696cc05ab075855f8d0a602f520490c28d0371181bd31d0c1a60357964ad0c09f08bc8848f5307994312cb56ceeb16c24a962b3425807bc33a2cb7d08f9b21ba2d5b8fe792152238c025c2d5d2faf9e44cebd3a95126fbfe2d631c547002807537151e4e5a091a117d9eab6e537a27855149f3c6b3e1dbdcf9e931c71630571cd6f29b7c6e82bb6820947a8ac14e8634c5893823f74e0c018456b91b30ee28a97695fffa380865e8c038913cb923f471984f1d5c8182e241ea9c677a17b2f07708502d9532faacde939d1231fead2bd844e94b3225275 +e = 03 +P1 = 3a7ba348f648163edd3d915ee10265f58da8f2cd5d446334be254d85b5f2685c2fcede15b4f21bc373ff90c0a41b440dbce780dcd7b636b73a83e2c510d8b9b52a4888e972185254c2b387f1e90ce437eb11f4b25f4dc70c11643bdf4e7f8f24d4e321748489fc73ac698e433527c17c1d82978a330b6c41a445061e976fd4f8020c9fcacd6e270d36d05e59ce3dcf6caba59803 +P2 = 026ce761c9b6b5718def614c3fe9ac96643d290b866bc5a1727adfe578f10fd4adb9800362fdd98a3c014b5dd4131d8baa8bd6747c2581fd68baed6ee2c2a1810b8127d729e983d05cf2fdf79c6848fd0f441a6a381f2f643c9248cdcd8e117636900145676154fa3916aaed4a9f3f746b6938fc61f718cfca8fcd7f515bc84a12dd693c237204773d28af32c3f59e3f4212543321a9bdf27567c10f9171bb12ac537ec3a7d4015e0cd8f54dac60e33aa32c70c397dfc8a9f79a79cfa6f0124eee54bcbbdfc6bc771059a741163f880e27 +HashAlg = "SHA256" +Msg = 1cd1213bea9a9308ae53ec9a22870318318a9258607cab6511690e5082bc9c9aec8a72d00dab9b6cf4158a13987487258e5401d640164be480039f4e81884c7ef42ce66c4f0e229a62cc3565327d751b34946ff87f3cb49095910494ad9604fea8db5c9a9a94c1f8ae05c274f404d3ceff2657bb5b0446ced58ce8e6eceb7665f1364a3bbcbe1c914e0f16cc0cba +Label = 6e5c7038a87ac0952bafa6da8bfd46b7d0283d1dc5dcc62c50cd1dc85662cf6212dda5829f6720105b34b0a6c796f0192d5755c4300b886c2931d48cd2475a9eb956f75e5de93ca6e1cf96a6f172292863f3e5e24d78adb7f276174616e6cc88ca80abd0303fd623e4369abac4733c88dec0470ba0bfeabe05297b0382e471b3dbe764d3b0dcbb7129a2d12ac9bcc7d161a7e92480c53068a7a0dccfff54354db02e88499da1ab223216a0f51097b51c9a6ab8c85c1dbdbba135a3fe2897611e16030cb53c3f6b3e85a4057dee0c0847c765dc7c7278fed9516e7783b8ea44fabb3f6eaeffdd44a6a8370599831a446a7794eedc0d2b2420381872148e04478dbdade14161b670341b7219ab410e61b94eced12b5e8dee4f52ba0f96f0875c32ab397f125bc50b5e4edbce3e5deee07cb90023bcd57ed4afdbb54f323ff2d65d6893ad375631b9fbaea7c3dd505c81e930b5d1320c3ba1690458a24b66bffa0d0739c1430afb989eabcdc5e8e9a39ee62712daa1cae1448b4c7093a241e55475e6bd9080f208d359a05a90fdf794389358ff1ad455535d89779a28d9d590dcaa23320878906b06a8fb67e6d0ec105a6551558a1eef4911010dae0e80778b639dbe5b24485789a669e79d6828a44c256d51eba6042076c248835b7cd23601ba42bce43a0af1e593d3c82da9dfb1f2d10e080a7d01d93a3890ba7c891814174a912ca9b9a8ce4b5cb2737114665dcff60adabebfed73eb028567b8cc2dd907fa2f39d9b1d7011a7d728f57e43f4a983fd9 +Ciphertext = 37d864a70dfc538e980bfd719afa6e7cedfb16407493735e904e915b50a9dbef7e65b34a72fa716e9a3322b0e583e3706ebe64df3a845b059e7001f93c672634e21caaead5af250cd5401935e64fff7b45cc56320bc79fd54c9cf8fa7b892e356cfa0348cc3b8aeaa73922dc985a577ef2b4a22a36038bdc17283395495667ae6ee8c4d52fe6b9c1d66a680c4bd683cb2f39b2627a61ed0741c9fc0d78d3457b1290d944bb1a4b4c4db2b949aff1ad4a0aa3fd663c326a77548bebb2a3acc381fae4ab1fb4621452f57d1fd1e6c721d155ebd7bddabcadc43da34a3600f1f60614c92223ed8e69dc4ef44687be9a992f212c66c2dcac4499fe4751fe67d040a6a4efd2e82a5a83851f283ed2451b0d221c26f7294c444496ed5a0997f60aeaabb19530b614f90268539e343112e480ef4a7c0f1572f2548ce2d59c767a6ff74238bbc602dbaa95083e10c37e5f8c95b75940c53d6d87744b2d54684c6143788aa6220f70 + +N = 219103f38a3d476b4c3bb1eae6e913467296825c7a2801a343aacf9bee301f3b615c2370fb8e2a43605a89831e499fcac796d8e8870e494a2d6907d94dda1f5cd22a12f2b130f498729ca2e64fd94697092614d2fbc343fc7b10fef8223f33b6562512482a0c85eda7df2db37be90d338253d8a8b7a83a017b4955b7931ec8e48411c08af8de3a1e1d113b8e67528e7c1c55b2f4d85c166a70489c69fd3d72fa1cec5121118eccd16199be90d5e3841a7dbf907e45afffc18f99f24387546e30f52c180685c63f7d99588babcbb1d6cfb60faf6013b55709a6ac90ef54aed3b12ee875cd8721459aa7849287b3e7ebf261024afae9385bfa37a6f84dd33d0564615c7b2b1273cdb39aa2d5e31095ea30e320294cfc5e732e7bcfa7bf12c06a6962d2f0d37b3ecff45304d6bcb1e3ab1774692fa73ad3410fac5492ba97a37f4fca242f3d8e492d +e = 03 +P1 = 0267fc8de501e15c688cd7521ee2b1768bfb7e80a29603ba6e41f3a9e74524a00b6b8cd856ed182f42c2cf56f5eeb2476abd20eb957daf797c86ac3cea640277dcf03c209d777048ffe05025dcd0c50be06cfe28afc305a85fbd65a3a57d1ed56b984c78a7f866822e64cea718b902b9bf12380ed8587c786ad77a3bcc5cb9afb12ad4d7baf4b3202409ae90c8c8e2aa5ad176313e38de75f5738eeababcdf492d4c2d37f9ba16c0d203 +P2 = 0df3338a5abf3c1fea38f97020c65104ca1c11577e6cae58f37dcbf429e3edb77fb06721662b7746581363e6c6131be0bab0c4b99cd477c02df4bf41bb03eebcb52d85c1b4959ce4916384abe88e1868006d7caf1f958a90c5151f63e8217fe2a90c8b49a0686acc13d61e9d176ddf5a1a15f6b8c62d95c7930a88b20105e78dd6256c297c00cb702633ef7a2b7b621603d9bff7e9872120eba0788aa90f +HashAlg = "MD5" +Msg = 4116c33ea0614b4afb67e85df5b467e36ba9f4d0a6818f0b336aadd44ec7e58b8946aea0a513fbb688909ac0229152819d261abf5c2edaa0f3 +Label = fff615e36c1b751d8985b4801045ea2319fadeb34eccd484c120d482df04614ce4d8aab52a2a69fa3e78ffe2776fbfcf8ceefaa0ee8659ee0d4e3c3f64cbda501604991a7fad48225049dafb3bc39bd0a875bb42acdef3b96b592678480d4c95c339f3398a2dc304a8dc75e986c2b9603e6d7b675e9152ec150aade7d0fb3cb0df1aab061719db707f4edef656692d5c79ffbb59dc6d4a0f069edda3730de9ebce0d11550328a6fc0287f69b8de053e06160e8e1dd34ac4d32602a2e22f09fbe742bfdcc827cb19a9e5a677f97db77986625bd1ae56c +Ciphertext = 1d672257ea1aec4ca2820d3bd2480d68986b4a01f139e9e518253acb9cf5459f79b05d0d02a51048f8093824352554b9d10a8b7382fc9b2722be4166669e16e2cf8cdcd150a7fce050baed9992e13921482d81f611bcdc36dc0717b9a118d98de311d9223cf9f7f4eee6fb8c60b6620b9138516fd602616fdcd55d2706e5f8f20614f2fe81fc232f108fde18e9af02dc42cf0a652ce79bc9b5562c9786c6c6faac6555a23f46ce2785f7e537c2f5bcf04786b39b9b8a0299c285b92689db2971be457441dd2cee3f8fe8fa18730c8fe343b48c42fd24a5bfde553028be0fdaf9446868c84e0318b8ed53c00bb7f9aca3235d8f5ae309065b54139c0d359452c1d23e8204cba5adf3699baf8c8a681506b8300ff3f91769685ec19af47c7e537f802a53dfaf73753dd33c0f3fc48358acee317796b9c0ef77b26afe16a651b459ef2519492b5b65 + + + +rnd = 3 diff --git a/unittest/kat_rsasign.dat b/unittest/kat_rsasign.dat new file mode 100644 index 0000000..a14e58a --- /dev/null +++ b/unittest/kat_rsasign.dat @@ -0,0 +1,822 @@ +# +# DO NOT EDIT: Generated test vectors for RSA signatures +# + +[RsaSignPkcs1] + +N = db5f257d59bd31efa28c8283d817ec852a469047158e1aa484ebd012c8c9cc79f7b8b27e2e5acdef6ddd75179a1cd23b6233fd38c32dbfe31eeeed647368c11d4c442ed2fcbf8aee7aa6ef342bb9b599acdbbf878f2d19ccf9d8f188943db055fa452edd96513ad5aada75dd4f6a80c1d4d01a3576b8f5f277d248aaab45d409b9321cd35a75125fa418d1fd45c6276bb04d152553cf5b4a7e23f9864c34032c06ff5b422eab54b6c478184a38b4c6fed58e7291df25f28351e0d77abd27160d8294f26283ca1c16d0005cad5e2c300ac3edd56b3b527a9d347a4c666ce17f9aa002531f722933f26f702b4ddff7b5ad0f378546b7ab1e2ac29127395db575a59f575cf4b72e26117a3e1b74c40bb9261055057206d6eaf4c3c758a053079f4a4aa8d7b0cf0ec0f40c4611115ec72daec550a6100063de27e5952b9127b3e5f143958f58aa0a0972d091eae5437bef724a782251dc12d3848a0f70010fdc575c2b25a4f704e6b0fe498c0fd74c29a27f814e44dd2c1601bc319a367eccb4bcedfe585f66749c9de2343e1274514fdfd3ba672b6cc9638528bbafbbf325fe0d0741cf65b04facd554035d792f948ecad8ef4f2e0002c95417c34679b04868e5be47ab427f8b5b0bc6bb230c2a82c11a29c0831777008ab8260869083e4bd722c036e27af53df27a666546cf429889ba9a388496f740f907c2d84e6e870ae1c5ec33ad874b75df2dee858f5cdfee9643237b1a67a6e8df54f2987a29ad00a99e74d04390156bd75086219df20fff90e6f9f75cf82561acb8f9859418442e66a121704200268ff00149981b066fdf0b3e99bc5e992e93b1cd0d4590cb32c219055ce202092e00b494c378077f0cc203302cbd9f65f001a3a54844ed206d4a1281595f0dfc14da8eff2cf2135018b54d4672bd0a34c86240dc764533513f8a644ef9c93065fc53d151e76ee5331f38afcdfb67098b789884d5b0b99c0cd32ce0dfd9b01a77c597db89e634200751ecbddc1469a8fd9492e5b4e64c68ae77d3455b3252e3c888422082e397b116c42095f02bbc3fa7e3bebc5bf674dbbe8e5aa0587d6234638f7b9a032c98587f4ef51d08563dbc138227a564bf7bd24bd8d116e6753460a648e38a4c7fdf234679ee74f23e7abe524603939df9e9d5155b01f377d7fc7a6d38d202f060bd6ecbba5246176a215fa13b265efbc36c8694e867b09a0b34d1767f872e2468f7ab621abdb82b8aefc660361aa628e6828dc162c28a31edb109ff32f823ac644f4d95e51d8c9a26921700b9eaea44ed56ecb2c260336e449360be6da241219d999ad79972c8aa1a177afb5b84c021ea47b99d48e44ded138b0c9aeb4e882cf76d0db526d6460aa7571895710ffe0e09bd70897ef04e72220e34537d9908da702908e7a7fc644e5eb384c89529a08d73241ca146dad08471 +e = 13 +P1 = e932d52baf78a5fe2d881c8f4d7be7b506bdda11322b80b612df8848f112e69e24eaea021bbb85e967ab29e6f0631e68b2aacf9fb7ea09544045a0a28f0a2fd54a466bcc0a7132c6ae237444be5982223cbfa0d8647eb55d2af2f2a019de5dcd150cfa45f4b182d5af90156986ca03fbb635862497a01bfd3422fd388b8e929578c14bdbf132ae6934c0a94765428f4509d647e763b478ec9ee9ab72458d1db048c3fbc149a1318e595bf699aa61cf92405720cfd6372b1c34d753b74bf7b7d9f551df9717c2fd65fc7df4da701727324e4f726c355916c23ddb2b48893654b522ae1013ca895776e53a990127c31774ccdec03f1e00bdecca618ec9673cef628eb0de8ba9364148eca6324b4cdf88a62250cb729bd549865f6a563fa4e85df90420371eefb12a62d226912cafe05311215916683886d66437c7e9b491ff4667b6c7a131d8e301a05df117b38baca0537cd3ea4b5e17d3f27d856e41a244f842e56f663efd8610895b0a31ef966e8c9b56fd51289a95129e4eaf542a3f7133faed7f7e05f9886af50b54fbc64c1663b7d6e0b5175c57f237db7973de688ff2a52383bf87834279ac6785c4fc190a4c158761ccd685b256ea3e0846ad26206fba4f55fabea691b9314545d02053042955ac46afc439d7f797cccc2e909c790232e54288975238064c1e14160ee66e683f5eab3032b51323346f5f1164e71baaa3 +P2 = f0d236d3a88c6034773688c37faca84aed26a8a3c01afd1f40defa0cde14ff27e52f1d5dcbea9f85c66301fde28dbcf4d6182341c71ef6e92c7eab9b9dba105b583be72f630c8f956354be9cfcead994e501c5993e9481f2bfa8e1c20fcf0afec4604f5ae6d920913abc985305a14ff8f558ce16814663190b7b8e8db1629837d345fb0f7c6b6d7fb168bb6a02cd6ba0480bb59dd78844d6b72aec5a9f1c69d71e0813f3784dd0c0f5f79a2c2b72b92259a411b6ba7fa3765f72bd39d8c253b10370528f73df70dbf10b27f65de1364334775f46b2df7653200efdce8d9dc67a0c424ee9a63df9cd95fa7ccab8dda09717fbc31eceacffa8037daba7d6a410717046b6ead2f49ae62a7aad80af2ab777e97279958f39922523aea3178855bd19d6637da4727a14d2ed27c3dc5152f4fb560c0d5c222b23f2350510b6435d40a149904d6cd1e77e48d9632fb157bacaedeffdab97071b3e0fdb61c9398bb23fc4500ffd0085edcd51a243faf88cb675d35acb0c2efa3c8fb0853beadb49c9db2ede3782b45cbd3d5badfe8cdfdcec0a31850ee3fa311155d96cc0711723710b9caf20745be000804acdd51c1d3f86d72eb262a2c2b49231e5bfdff55da0c568797a68d175630802759f12d7431629603dfc4f74828a1c12a50aea1e081fa1b3c01e25481018114c566566e6fd7395a5029812c603e0b92cc4d0aa35d345eff9db +HashAlg = "SHA384" +Hash = 65d41318aaa119dd067a209332d159e5a188dbd713f1d79de7fab15d85c5c21e14602c45e3e4da2040a2b3b00d4e0b82 +Sig = 71222cfc71a11a205b6f851965dc2979d70a361931ae07b7ff91a63fd7f06766211be7297a1ca96357ff6e42a7661a80c04a18ea2cfcf0253d8d198a57911e0e9dee4a0a2043fddfff8128ad3b003add0c7e34f3dc765a8bbe6627844627d30ddd12617b2de02f2e992a07893fe879718e848a6332ede498883efa94ca2f33b6b495f901a3eefa59ad3a0747aa334333dc091cc20c5e82e1906c97af71793fe55f8c84bd266329c0fa67c55b49e06df94a64b63f26b8c3dbc1fd4962f76c3fc625c960778c54240ebaaf03016c41eb230bb388c65abfc298fd2f7fb1434e7d1e1beaf2f8f909ff9bd5a3b7f3d74cbbf9f314f52ed23eb5a0b3a333b2f4579c1b7c3dbe2e0b20db13cb7723fa099add7b3bea05ee5b622723c45165b3af5b86d3cdfa8fb3c7b60c033fe3b9adc3b1daf1e2d37bd793a2008fa89c29cb8ea104b1df7133ad4238ceeeff71b0530a792ee993045a78045bdc7e832053e5feaf79943ef6761cfefb59b6a67dc985e2787031bea4c1b70711702a4b70c44be0bcfad10a8b83b0cd465f5018a15f7cdd205646c29b75a1e9edd07dad3c31b3d1a33a1c32b19bc879bb40c8bf19c7a00ad27c138e2a097d81f239f2d3278006c4f9e242f4121a7f7300edc655b7ba4228d12fc9da7d64848101add8b923ad74d3182c14ed02ec17fa1ffec5d777fe65caf51aa2da5b4f6c660d4061aa11ac3b1ece8ab71be8eeae894b7a92856dcf0a08c91c5380e405d2391fffe04d94ea1f175c1caeb294dbf2b761d39b615207bbb884532ce21ce1e15b17860a7e421fbb9f75dd5c61df9c17be1c11b43fbcec3d600a2663ef50d299aede63bd0dfef673ef4baf69cb689f92725ee7782d53d0d1e80e49ce515a0b563f6b75647929ebba4025f62c3b04702b36b7659af9d4ae79be2c64462938a342d79ed97a358e145e0df2472aa3853dc30b8e223d50d87e32dae22f3951d4b441198dd2d26062d0919eb37500f8539a23c18305f19f489987377469ddf8f0987acabf8cb4f2972eb5250c8da25861cead90cf635384859529ad0cca54b87285ebce806a6aeb9418e8fcdecc7976b05b3c46bcacdbd1da80a07e38716924cfebd06b75a29ed53689978d251d37872af742c7ae1d8cfee6be900ad3f98a4fb472a5712167c2a7e08f93105724ca1cd94a1be808270b7794b907c2b4646749f5591930d1023242be263e6db31274bee5c33e32c1aff8cb65155f1cf33600656bd5bbd70696c351bf603146744c87d9f7d131b0440efd7a60aa6d97985182e3446a733c082e09b079d157603467f5ee9d5c5605945435ec52854d74e52e6cab6b245ab1abeda5d44692fe47ad856b5b4feace22a59a25eb17a9a4b0215b753ecb7a50237291e4d97475d52e73e3f9a61ed764b1cbf608a680340b2d7344a0b1d9aa5c64e8190130f8da88b920359a + +N = c53aaf5623fa857e7d783051f9f6750ec9890ab60007c67fdf8aee0a5af5abeb0fb6914760ecabbf667ce0dcd8f418bdea709c827718e56ccc98259b886c01d19f3cdd42634c48420799aacd5765efc9635022b4462bc4d37a9c7b78321fac08db46b448db3bdde1baa1e29daaa88cd0d4aea860bed85d57d207f825622079a96a28321cb2d47c85f09edcd28cadc5ddbf6f55a1e89889df57cdc9643c959fddcf30f01a65361912392a96d23886f71164f1539d42abe26561a67bf773873d9d83306ad131e78d9d5f33af46be988e157f76e6383146be4645b916ebbd87803c760e334cd47219599d3e28235edaef5da639f48f0dbe47f7b8b55a2c7ea94848d639a718adf5fa0b4408bc90eecad2dc25a6620b8289cd5eff41138d0d0b788e725dea9a84a93c4b37b4ba2a191ea97f956e515fc303c0df9c324389f6da5282ae6eabd8a7be70c485e3fee26bea0ecdd2ca9dddbd3fecb2a8d2704a026df381687986498270e0de697e41359adb295ea5da1e965683edab1c06e6b71fc3eeb6032af838ba736fe834f1e0377e0c3ea6f10aa3b71f26d8b1f34f2eb9cd92af735ec03e156994338ab0c3c64e1c74844e5a37a2be0e8162a6e928ead818068f780e82d586beb86cdedb12dd49728d7eba59fdb69282999f039c6f7b09c8b37f42aeacddbdc1113c2301d223fbfe602a7998b1ce28e9f2d5d5649b522720b17a4d +e = 05252b330189fd61 +P1 = dc1d40db7a8a917bbeccbff4b72b5a0fed97e40b0fb0745844f1fb9463de004223d7f18e4be649aa7bf9761f9fd568479e4516c5e38deeee705a9c44c63b6d54f91ea8903a07cff251651cb363f1be0484f999a77291076fd0d8cd1ec123fd5e853cb2d8ddbdcc59fa58a7696d9dcc2cf318461600b4553ee63639b625fb563c5004fec8db247977a3a7725432e64b000693a51fd75aa3ecef0743a34e8762a44d29960ab39f77fc0cb890a46bd74416cbf583d11b87671504e1e123d84af234db3ce9901ea15b02a11033a25f85cf9ce8f4dc35f2f31b46945bc2c9b23f7990822682302ec76057579eef3fe6b77d93a6a1a79a9fe5db02ebeb142bb7a055cb +P2 = e5624bbce3ca1efa65378538358b8063ea8fca07a32e5551902ccaddc0a14124990af07ddbbd10b5eebd886e79760f5e87a6a88eb8708abc6217825270cf888578f45c442e2175c02bbe8d2df199fb81175343ecea128cb98f4b93b10a7ba22ed4e4efd362e252639e9815f8117719b7bb50c524e7f088677ef3783d23f4389c1230f814ec1543134135c4fc76efc33cb22c60b65dd73c99e7ecdae9af29c83b95f93f81386f932c11e4c09faea72f4746c201b6a2877b8ac16913d40599625c918654015c4968b1841ef156c3fba2027783b95fbfbf531147ce6043fd4d263697708dd567f0ea617c8483d13fc35e318ec0f4e58df4517e0d8fb4c34fcf2d47 +HashAlg = "SHA1" +Hash = 5cbf421778dce03cda8d327a75f0caf4a9907c22 +Sig = 86b8c0b70461db7bf87e1c6a5688d3cf7dd8c5e0e48e6fe88e1b6a349b374581a284c0a165561b6beaf5329fb760dbd3cc589597d1a227c8b21a6cfa310ce87c19e0fe7478b3abe8a34e9a16aedee0537a7c85bb9c57f9b6212d0c87ad9bd9e77e9d1e44dbc7e0f2f6f90bf85e8a7d98096775cc2a549c5158db6a09e562b590fbecb6208b6fae59d3c6169f4c04572dd560ca7205877b638c39f2d22dc81618577d597320b57d8ffbf16995dbecf4d2577c0ad0ae340abab9e06efaf3e7041d656361413a69c1d7ecfde7d6a41cd527983d4ac6da511d2c23d6193d055c534a110371daeab3963b46407a0d80d71ed3a7a4f25940e5b1610894f1799175829b7a33591aa078573760fc04f407ceaa5198afafdcba0a10eabc9c093b0d7ceca13706deaa4d66eceea283abada85dfe61c194159e42cc517bf55f63d2ccb6993dc07699a7a3a79d85d6af64c677d7397f8afb166939f5a64be9e20a17c1105a37e07588086adf96f39ea8b4625e3619cdeb9f0a5ee5f290ffd7f09035d87f2fa4f8cb7ff340cbed1f52d93c9e44a637fcc58c17db876454cafc94644360b58709fe474a05f8bd1abde27f1e6ed726ff367d4e4826c084c00b0ac6610d342502dc9b937ba7f7199bc0c2fb898d3036c06d77afc0161fc27a0b58980b1ff7e31417e38dbc02a60c99cf685994ca54fe11b31329c9fe99fe7d7707b413a7e21ad1b4 + +N = ecd4e916069aa8d5b76956fffcedc4df147aff4192588a3ad66a2ba8091a3a13d5c5af4e6cbd3cf9119501b787f41f1ca764aef346a69d82fe0609fb06c9fc94e0177da82a3cf12d360af0489b041cb3445e5d73f46470a351e134a174f5b34d693978f6ca0614a8f0b4ce792ef98359e49c7faf766855adbe41a024d9387748501fdff05667894e388be83098bd7d2bb72235a78fdfac317ea74dd3395936f9850e87960054f180871754472b0666720d5c61eaca8d94d5f313654ca4e5222334b72826b1c8633988f425e22ba09ea2f8a70d845972b0132086c5620959cf0bbd271325244fdf63a3509cd2f9ff2119338056bbef23600db392bd2c5a356ba2c4857bc78f8a6ce882e96f0c90d7c7a4922bf46e2b2b68443e01382becc23197541edbe19ce5ee991b6b5d19faf14ab1c200f7165c735c98212e5cc27d2ba249dfceede303fefcb9a0dc496f3a6eb8f46082ba46c0d8d8c94a221c9cbb3833badee557889f1d5f042f2f4561f4d74711faa5ea6776b0f95c6a767ed7c08a84675787fed439e2eae0384245a3ace3f816890e01cbde05859fdddb0c33fdfc32af498f453d52ffb4a518dac334a1516b335065efa3399c68d38acba5ef0515edc4aa9672effbe6479f912818a7e65a25e6719894afb57eac7bf1fba1a64d32eb64f07565e155b58909722dfd1b8999abbe2125e068fa4495a34c116080d56bdccd +e = be3fcc6b6f7da1 +P1 = f1575867f1a19cdaf714f11653800ba259935351c773549056f58a93859fc70f9c350f56a1d56a3901f6061b18c09b5064222fe5b6094dce0ec4437d44dd8469d9faca587d683978cba9beb25e6501ed7313af01d56fcb622c5d4ef857aada303181a7a9e8330446b698062e84a4e0bd6618a04772d1c137aae767f5f71d01684ab63b57c2202b98f721ebc07e8cc338de9b8960040472fc0bb6d47c0923f25c4dccab6b55f295074ed54733cca02cd9bf471943b441cb881503915c8b0d6122a6eaa8de0bab010f4b3a491b304bc8388827bd2f335d89a52a9e293786560b257a19e435f7c7630e9f61f5c096f47439b8eeda5e4516391065a67f71a0ac43a7 +P2 = fb37722dd9116be36be8941f74257018e54680d68e05ed6726b34afac35a6d42c85fce93df1e942ec831318045a734a5fef9662052bc9c8e456e2c9474a2b51c7a01d05c23560fa838526441418a2163b36693e519bf352ab83e6484464cc0911df338ba1a10a64cc42dbca7aace61e49db7430873cbfb4824bb1594786fb7a4c6302dc638c5622388ec3f8184098b4c63f1ef0ff60a5310050f89006455c909d672bef856853f932a809c8c5f7c2068a7116567e5a26c53eca107b9136a85ea1bb81eacc407aeb891d060a49c2e063077a8034796a15e2ca593b7b3b45f00fef6a61f2b7313648443f95ae084354574d3e76a97152012d2dc00a1fabf227a6b +HashAlg = "MD5" +Hash = ddf6b57056458833cee4241308fc5bcd +Sig = c8bf9ffbdd4b9279f35ab4ca347e917fc7dd1a4dfac7a157a0c2daef1329a27c512ce723f690dba792820eb1d2d1295462fa559b2cc2448ef669ca20a932220d8f7fbcfbb466bce4efc33ca05eddd31bdaa69071792ec9d82ebb37ed5e433398196302e1423b2a4ffbca6a1a372433e5993c4c368b1ce3eadea1e58c109b82b28e1eb94bae361f6620bdac9a637fb39e4cc1e1ccda967145126d6dc198c5c30a575b842249819e60e544d65880fd5a41eed02fb6b510891ac46dba77fd1c01a0ebc9388c480a46e89ca1cd6532f60b2a901d3b30399b41e265db9007e944916d81648f640a11fb4e3ed39556d23be38033b306ddf43fce08c5518fd9a91ca1eceed0068b7266114970c8b16000cf22aa3f6c909c2870fe96d62fd3e5b19d5611f4e30418b2e8b86a4f0fe6f4ceccda84a2a85d74c9006b0e86659b3462a7bcfd81769f3be2ce40b5a76ab0010813700c4d5a3345ec4f02264ea9198db549370afd43b253c3ce0e50dccc0f7d576642a9d7abacb9fb50790330ff264be55f5f0d9866ad462545179a8b0af4d15927cc5372c7ac74eaeaf702e8cb2af4b83480f0f412b639929f08909b8860d218f958356b90883d56599dc04a62c98f6b7289be15752d24eac9dc38e740f86487ef7f3a49522f326973fce8a601779799f934fd8b45019bb581e5a3e21173d383e5ae0f294b58b0b62878c04dd3c6ac14ab91e5 + +N = ae96c514d6b5e6870c4536c343335d1ee1aac0cc0b2f4faa2dd3e033e43b8df1e781bb3803db53545a8802a8b9a76fccfd1271f3ea60bfa3798cca935c7bcf3c45978fa8fdcc7759100608f168b6919ee296caf15f90a28d05496f537156d5810b994312c550f01900e9189433a9cf34c92f94ada9f7835a6da398fdcf07b437c91d74d7c43e7a6cc1d61e4b5ffda639048503bb7b6b83cccc1fc79efe0bdd4bc6e3cebc1bcf9560a6d97089fd55f94adcc40d9ebe50d6a498395321ac3f313e3ef9c112a5ad96a9f8bf36d2852012ff6d630ee0c55a76868299cf2dd691979c00549e7913f80d56ab752e521b6debbcedfbbbbd597a942877112dd618754ea9ec33aacabb7646f1b3dec25f9a2db3525165ab402a1b2b8fc51b4000983074d5215e3668e9c81838babd78b78cb223e8087007860799ad1f32af41120fb128c0676d83ca5c0215631a7fc6fde7f850660524d5386ea0105f161403ac69cff2bbca3a850a42fc10e867841eb80db93abcf900196130d12e8c44ba927f3514963d +e = 010001 +P1 = deba804d27465b7ba8133b3e10eb955f0b1796c06af7b0a1ad78b0c5eb15e65d58dfb157c7e3c54324de226c49eaf411a8ad6d0dcafd3846081345a09bbd1f38a3c0411d431a474339e92b5c4b48f38205a6cdabc40c6005c9315f37b42a9af7559c9bbc16f8f97afbadc3986762facb05dd71ac360ca76648813015db1bcf0656d6a61776c4c1c22132e13f5a9ff5bd253f58b5de6060a9579b1fef341bb3e09a4128e8aeb491796761e65e7a4e9f5ffd61cbcc8635ef0a96c9baf254b769eb +P2 = c8ab555d070e38a54281c4c055194986ea58bb17f533c3dd2b418a3d5994d1306bab3efe7b75e84972752a7c37798fde6f852529b1dba1169c13d8a6e4cae8c05abe36c10fd58fbb3c9c849eeef0c6ede89896ea4f14e8ac286fb8bf9559a50e52efc16e3fe1705b63b67f0e587e32b6340cdaadc5b251353bca6757d74e09977c2a51fd2ed72568f8ca53e710ded0a341bd3a669a16f805208e27b3016949e6ce56953dcc38309a8e9e5ae9b37d60ae8f2462697b9916d0d723bd97deb68e77 +HashAlg = "SHA256" +Hash = 370856e8a1c50f78d2d46731c3505b01c7c7a43d068c1c7c1e422d21428cae12 +Sig = 8986497018f834f4df1742087cbd0e0afcf569bcb849d2a4de7ab103b4ce9010b9a1b635dafee685f693858b398ace39b4fed85c376b29bb5027f93afa1b44437bd14a7892687fb0df288ab2cecb23fee5db97b35fb1a53c1ce250aed8d776cac4d14a919c8b7e5681b75070b91072f44797f8cee48898f550b28d12c61fb81481cf40aebfa09843469a42359ba1a9ae449e34074ace0fa9070361f0a4d426032bcad4c5b0a00b64b8e9c5777b9afd63644d615e737cfe8f2ede42de088be08cdc67b70b773b9f122855a0a5b87a6dac17c0521bd3db50bbe6fbe01cf7b1b5952b68ebcee2d686b514e31edb52c66b38e6435b61edc443c4386f96f441151814facae0d072433314e8f22048919424fdfe254e23cf25be2550abc277e79359ab3bc589a03bf75bc2b7b9ecd03a192af62263c7ce4e7a36738e4fbc18d4d3c1e1add63aa35ff8d51045d627745ed29653d44eb728c39a12ab42565315bdf65f44de4ae6fd4e4a1b2365c5396b1a7034bc6b02c3c2747223dc91c98604e8bebf7c + +N = c9045a49935d3d654f095222d5808718bbef4c1baac94055f64abc2b71281a64824bfd16be62017b85756f62a850c1fb3256801806231f468853858420f3c2955c137f66e77f070fe58caf1d307637218d046baf2649988b0875450bf5cca7793d5552166f3618c7c35cb6ce5fb76a2c7727edb8ff568ecfa8f877e80a5b5ae59f05ec498dd26103de7bdd19bdd92415b0c29dc355442dafe5a1c7d0c141df5282c52888ce6415d3b1ba81bb26838629fe570261422eb0c522bd0d43a12bf9e3ef252e2600e9938647e3c3be79c07fc8cb6e22aec520c518c00c4e81e74605c220e2977629f48ce003866089c986fc8ff8d325294440c271d3de0fbb76aad1130685d92d1f67358b04cc6dbccd466d203c82f8bb74fb877715bea14dc3ed8ccf09de0f1497f324d3929fba4e89c0d4fc0bd1c5c7887ed1af597dca094a3f29c3cb24b28fa4c7486a5baf01de8f64ce47455c71881f57793342ae292c7357575bb2a74d96218c86bd177ad1b3eaa572803bcd4de9cf9b407a58954b445dab9ff1 +e = 15 +P1 = ef98424feaa6fbebb3d6aabb2c92f08cb83cec9de4b1cf7cde55a9384cb889007aaa2409b818d4975380e5d4a93222780193fb38ea722eb8144f021e03dbb427f9df0e6774ea650ec3f3056c2801e38c7d9bb1652ef08d5f69132e506a8d84aedb526ac4f3c19c887e6bd34da86039c5d20470370edb21d8e65eac871f0b36c90fb72b24f70bb75f5812ee4a9b3366bd64129808bb025ee3b3e6ea14fca683717a9f8cabd915c18937419f75936be93f5c65b99cac4b61a51572f5b93b84a1fb +P2 = d6c7e1fa738454dc9de3e9a88a635ebce6a3559e62b773404f3f95e19f3624a681634ae734b6a141550bbaf3ffaa6bab1dbd8be7c288664467071b56347d22604f13cff620c2c50a5cdcffaf313700cb4c46f866bd88a2fdf0562f10a4341aac22202a34811be65dfa9b4e40a6bd30dd5066ef67f2d494d8c04cbd4fcde44d885596f41290e0e88c82cf39d27899fe546b28cf6af141a12dd64705671f822fab598b0846c22ddb616462fb40b9cdfa8ac77ccc862a8ebf4cfdc266f6ed260e03 +HashAlg = "SHA256" +Hash = 282b3c71f517cdadc12c90a86ee6ea64c237630f6906141ad1791b4bc009baef +Sig = 3011cd9a7b0f675ce9ba4e0d7c093aa1a7bc99245d420a0f1a482fc14a0e7b0d2631efae167c4df5e2538923077272758c6dbf6e0ace79c1c0bc1ed4f84f564ed1cd30f416e14a4a2f418511765bd638fb0e84f4eae2f7f2aadceb4710bfcb64be75618f0904992a2d4a14dc477ad5fc8de6971783b5950fb464da7edaca8bbdd10991120f2fcd9d6f24e92bcdf878513d78a6839a52e79b0e30380e01467da74a37dcd81532b404a6ba4e7446891372e8c1176318127c7e030359649c8b8ff6577236a08d99cc2bd9fa10d03485f345643b2307f3812899f0a7b6a6b5054e120ba403c0942115c18aab26f69d2718e64e28f0b2ccbc0c1bdee44038978aa13319c353af6b26efcad185d33e87e61cd9d4a16d2bd94b7c2b4172c80a744f30bf368d9e15d57c5ee09e896c33a983f7036beed70c76858f5b11603e8fd11b99e3bf79a3cdd99d5fc266d2f626c433fde27e1863e44c5dbda3699326cc520118dbb9804090bfdf718d841cc8f74f6f5b50543feccc756c296cf307abf5cf1e7858 + +N = bef92148e6f984d35abcdb837425cfc32834c3943b86f18d3d1aeb241d7e9bce84566053a6b1b5a327d94b7d9c454ac6f5c5369db11d509f5193573c7235ced5322163f050f58919e17981335d72f089e820725782781ba71a61e4140b07ffccd787ae38c061a2f07fdecfc3df10c1634290466786049f4fc2a5dcce97a94e8d00e17d8455497d4ff5ba27bd586c5594c5dbeaf6d91538c86c931131f03f35baab998d7bc5152ccc839b183825cfd13e40a2a3f87049884120dd5a1ecd9c4bbfa7395e82c2ae046ef58db74e18fcbdc861c121a587de50d17d9f489617a9aac6e81fd979768ac4474d88b02c0358dc11341fd1732b7242af44dbd1ab4b7c141a8a2be2d05b5bf81ceff058ee065b9c35233eab813d0acf21c82953d7f33fd0e9433ee6cae7f02ce6d1c0d63d78c6ece3ddc909c1957459c601efb0d02f28da1fe9d5bfd22ced3c8e03ba33f8011093ef39ee6886e3730fb4df0e0f03e613d192a82bcda99bc48962c02a22e43d0869ccddb196d6b3aa24f463d7d6e0d43698cd +e = 03 +P1 = e568c4ae8841cc49e24f4fa92fa1a13c91223b87ab33cb294490744aff2ff874d9ea9e5ebc7307997c6eeb7cf4c1adc66322dc76202b7e170109a2415a26676ee4d65eada4c902018843509080b36b002402a218d7e90a2f1dbbbfc39d2ef2bea5272bcd8126055ecb0f7c2f2da24e6152d89620ca61f484d02ad3c2a48b4b90a6dbb3a82877e53f66d641649eea69c702bfb2d00871fcc2235061783129d0f8c26f784b666108b39bf8a529bb7796431a0a43c315b0b95c21d9b0bd0950d20b +P2 = d51bda42a5ef693c5c51fa632b06fa9968bca85681149c6465919e2ed71e6435c048730cde8a2c89a842b328412476fbecfecaba74f13ab0f48bdbbca7ae4f5151c750cbe135e2e50720e78726f79d5e26514fe61f70e7bc53077a07bec897a61c47c99940728bf34b8dc49f456415bb220c472634ed26dff1d31cc4e7802c0f3bdb3f640fa1bbdf2e8c999bed1a67148c792529564bae0c7b693a23780157ed6a8242af81aab5928964151bdaf9d54c0f2e3bbd80a3decff0ec07c259499f87 +HashAlg = "MD5" +Hash = fa10642625bd305cf3dc6c3a2a8cae0d +Sig = 4cdb669a82c369b37caa53419dd85a4b86fe9ef5fbe71f7750af2a90bbd5435d1c61d016e6d156c515278ba4f5a423e1c3183817e9731c8f52cf882b3f43680782fbfab003d57965dad6791d27459238964ea4e0b4bfefd1948661974cce65f4eb2da7d9cd4a0a1adb4790ca151bd86d678c4e7efbdd667a6e944d4da7e0f2b0c70a576566a1339aea39d1f52e07c900dabb1a4014fa5d8a1d6b06c56515fdf92cc14b32a926081cd375040e864a4807f86101ada09c0d4167ca45e66930eae3a9375ccff75447ad4fd9de0188115e35fcc480c835b4ad8b0fdb52c637028d6ea4f9d0e7578bb41cd7b1924b4c1c3427f22a58c8c85ec332d6dbc38e5935512c05d7e0cc6f87241430947c7f137abc1678ee2f2ce5897e8ed374468ac00375a8d1f84eca5fe97ef7f95a2e535ebb49eb21cd68fce4450de4daa783d14eece21362bf52b2c6d8f63d1998370306f8bf9dc15c9acac4243b82f0cc058efd212a82c0523a4e79a03ca5b8440a98badbb665db8c36536ce7363ee3dfd3c28afc2a1f + +N = b728937837a337174c34dc1c163e15751e73cb81b4dbbfbc9a26962e6ab56697a09b8012fca37445f455feede93361416124696e1d2b9ab8c7cb0fc912c20a32daefd257de0b35d3c69e16e506f12aaf012d976a56346da56b8277532f6f3c4ce2999a4ff9ce3d932bf45f4a7a31a51d859e5a882db16ba3137a7b756ce2fdd4c94905d9cc513c612c5831da8d3862fb30cde0eaebf120ad54e8e9cc35e9ea95852cdfa12dcd31a88374a316a005a0823f916f668762caa72ba0899c56eb35b80c2438737c8f7acb5b26811464d0c7f935d4f0f665d375ab1a982cf1a440dd8cf7d696e556c5b94e376e970a21c3df6fcf47cf2480a2cc20342da9f090c62779 +e = 04ca45d1 +P1 = eba5eb3964a192d8fa85cd190a77f50602ef2890185dec1a5ff3fa6f97f73cf4095053bd430fde490f2fa87eb97a13e6010b003a7f8f4e3c21fadfdd485612fe8f51b6c511fcf65744c1c55021f348d604f40b92cea0920fa409d7c8a492cd2f948de2d4cc1dc793ebe0f3b5c1b7b5422bdb5b04dc67d55aefba55832782d12b +P2 = c6fa223ac034d1ed67ed846b646dcb6f5ebcd5a2b09ebb637d77eb62c585a393ec6c49f6f649b894256a73c1b1138172f7148c35ad2294811d69fed0c792cdb9bc120b01077a76e2ded63ecceda1efdb5bdb5b0e2f4a918a2dc74051131b3343e88043ce96d1f3cca913a762085b3966a449f8e11d3f8432d76ac3dc20bbefeb +HashAlg = "MD5" +Hash = d280b2b3981eff424867b620d0ca8bd0 +Sig = 280bedcfb59e7a14d1ad45332637055519f286e6ad90c8731d5962e957619fd15340192d8672e929f2f9627b1eee08f9f8e4aa110bac3b8a6f8e2107a107f78382e5fd6a85869ebcdcc73dd7a7380adb8e8b2fd3598a32326f291f27410a90704524a1e62f40ee8893d8af3eadc66fe7b5171548752cfc25b0152f434a331db8cd60e92f86b08636fb11d0c99794771c501b9560d203eda2e4f0f1ec045ccfb508ef3d4c2a4c699d474253710dfa004dcd60c9b560c59248c8febb2ec52c93f3139f1763f83ac35032905c36591f9311f84d1b796832e8abc1384750e68b9b9b0fdcfad6a085221faf337b42317288825ebe5a9d97f99144c59f409b50e6f5f9 + +N = b79cd0faf17ff17330c56eb0955f1eb051483aeeb8e31848248f7bfdc7dda99308c58de3784b08f9ae5fb2851673fe84d7d908be2733a420651197e5db644c494f4e4296f3e82c41540e7eae3e4b6da0c809776a7a99a847fa7869ecd8e90b1ca6179f280567870520a555b8c830478cb5b6a1afd5d1abe84e1cf9678551f6534c7b166f6e298a3ce47a0fe252f396c3a85c74834c4365ba29255b6becdc1effe80c821efe040de62a45df98e36010b40bb8f24569bec3e8186de9031ba69260acacf976a87ac03e3f58ee0eb5d4a668cbe15a71db024d2b04f7be563945257733fc0ca1d024731e1be8da75d7729989ce43ecc61ef5e977cb5b1acc65bfd601 +e = 04c6cd63ada364f9 +P1 = ceef3508f7d019810e366db5cd4b1aa0e3d38d2948f8e256a1f52b589316d6ad92f1dab2fca30e519134e23d3a97b9b7ad1d29c8c336c9ad38c1999834f3d588d5e2d8851b51c9c1b221633f72b5d7767002c728c0ed769bcd0c87a61c3a5d7873b41e4106462dbe555a807af9354693ac40bb9594d66c3490d15f12fddb01cb +P2 = e325fcd7143d4a67700ad83e0d88689a62b30a7e5a6e5d7a33cc5560a1cd34e4916a978fc596d913047c34ae8ad9c110484344cbc632dc14a59ca76a16fec608c007fb88ddbc648de35f634e39f570939e5b01dae161019cae876ba8808f6650d2c6c0a5dee272880577d8cbef653495cdc26cde82da8d4cd877ad4d4fe3dde3 +HashAlg = "SHA1" +Hash = f402d4df5cd0635142bcdc8fc62ded7955f5ecdb +Sig = a8f0864fbd3ebe9c0b11c5b5e3f71edaa10aaaeb2112e23fe86ec3771bf4d8eb330cb9e95f829c636b8ac50aa3ee99549f1ca126b67c586ce335b2b97fd07324971eb586eaf7daaaefad49d9dc93fc73d963759a9c18db1fa1a2edf9bf4ee7ca87ccd20d988cc5ab5fbec2a2af68d0ded22ce5e7822584886dbe3dbed46a0b747fbab134dc66368f52fcde44f3cbbcb73fb5b00a154b016f6bdf406135022fd771db15c0d7b4bc0634baed9946a4a42100ea6696bc44acb2bebfa3c3b244061a06d65ba54173a427f5e60a9f54a68220c9445c9b6cec768410d30f5756f38eb4d828e8bd809d916a832ca2736bea207e4bcbc8213cb4608e5176ee7535866ef8 + +N = d9df3cd199824dddac9b5e545ad0b2174a2b286f2138c16c47c7bd5806c22347625a2018fc8bd54a7c0a0420b92666f1185a371d71011101bbffaff5020e5bab11894600ae9ed422e0e89299adaf9a5a49dce17a1a7501f2a69376b6913d126333f0329e767854c7d14468fe6d4fc5310465a760a8352706a38f21c4f24cf6b19a2bc4d8b8b7b58890fc83394a7256f75db34030c3627242f98c9005f07938c1d79a50bca24eef8503ad73f81562a47a92ea33b990b820aec4fdd1094e914ff9841ad43b8584c3344e35e80e988cbc7c4e5beffb2312abffe8b3c8bc98992fc5d80e2cedc8b059da7e329f077db2df891f409b25798599fdd8a7630df5fdc7ad +e = 0802c61b +P1 = ffa9c95aa4900ad1e67f1361964f32f676baec948482394ad252d8a2f59370a7b4cfff7be00a555ff0ce48e9cce2c002b33bcd92f0ac087f3b46e7f8bb73063e55cf832b1f9de5087ff0965e58204eccd36888f6eebb6c15b7496166705e12b0e5ea0cf751ecde4743532f44d5811d6688bd0fb4a1155bb16e3ff658d1c1e3bf +P2 = da28b50fed35ee3c62766069c918be675940aed79a65f96f424528734613a218ca351f29aa1fd2ae7626ce4a26738d834c56d53057dbda6fa83cff6f5d98bbcaa53e847835ae4c906c9bdf1329b30205ba1da75c9f2036f0251f0136c3e4a0df2e4754e0991cde3ac4679ad134a271336eb7ee2cae23a0c5700d77cbaa643f93 +HashAlg = "SHA384" +Hash = e88f8a5314e8c32de5dccbcfdf97e40797e74e644b4fa8cd9553b9f9017889151f58ef12b18e8c00af9a6fd364e28cb7 +Sig = 12c3970dc8e277fda7a69206097f1a56a1a20f54e958721797aeb52d25fcb17f4767ff6fc978019fe1bd041086dcff60caa67cee25ce0b9017dc0c82decdb22b3088207f62c54a00a5ba8837488bbde2d2f5cadb2b555a5de9570d8796fe9eef06622c27119c5d50461d2133943a5b211321c1b2cb5f6fea91d902260928d9b789eb91c9734f2b60a16db569d27dc5aa5cf0d343e9edfd257b3bf97fa7646582c99d4aec6f6109b7ed2a92cb0bfce6b9811c7da98dd0d8bd929915837f09dd6c7f59e552c89bc678d467f282b5d8cb35448ff5a71118cda1a4832bb97bca8846edb7f3c0819af61654812056c7a0b2cff0dabba84e5f0f25d9c74d9e9062faa0 + +N = c19cfacb302f34ab8c89af020ef96078ed970b57ba80b930a8d42983388749b643866b964a4496a06d39841e58727062f215d57a0f43b29279d48855c839434744102a1ee3e8c018a47164043464826f01a43ad9b91b57809acab96a0124c6546e6cfc5711f42e51c0a465f6412f844f12e6aba4f2b5fc841b117b30b3e8d8f5a2d89259385b9054742ac3667ad7839447df8f1760029be1a2554d1336909645ed309763d12dbcd1260dfaae996d102fd45f73b415acff941d9282041bee815d3f1c31788b09e42b709db72f13ee4e809bf7e6f1cec37f06639322f66f8f73d028fda37124c80c19d9431cb0341e384379e71eb33735b91a7ca5acabcf8e9555 +e = 23 +P1 = c9dea2a0a99b75325005040e86f7aceb2b633fb17328b43e37af5016b778d9aef8fe673d624f61cca30be945ce1eb36b67dd191f2394f3562203180909b5a2b09b5a20a75937885a351541a0f12d5fa9eca5e7e55c37e47f9509599fbca95b932ead7081b1f160377c8167298aaa8bc1fc821fddfd9e6657b2309204b51c160b +P2 = f587940de54cf6f781b3c21a6cc1be371b26741c5aa99a80a062585632858dfb6dd21af942bc69e7bb648b2ca19409b4c20eccff64b7c9ee0c9f7c758cbbf4c8b0ef505bc3171dad806352e4519ca6f80f5adbf74aaef69b92d8e48988b57aa29f5191b91d63db1285d9db0c8975605867c9b26fb910203d9346f9bbc47bfe1f +HashAlg = "MD5" +Hash = 3b5964b2ae577343f5397cad21667a98 +Sig = 8b19b7ecba25fdff8e0d4b0c729497fd69808ba520eec8d52c1b9c9078b81859c7565eea8bf193b70566ea02cc9e3504054ed5e2e417269a953fe089635f145e983bd53b9107d4e28726501b3a55b50e45a83109a4139540f17d7545be631f68689b2e24b3f00e42ce0da250c96114a9ed365046e5bb21e32c400053d8285095cd26da95a65b77f21b2d5ba298f4a58c33bab009f53aa3187c9a4a319057f81500e7a0e3b589bc3897c6bdc070c3221fbc3e7cfc103f6d7dedfc8f3806efe87ef0c363d7c64894b0355a092356d3014aa34acf0fa48ba755c144139c7d052d6451d4ba46f495a0bebb4318b6c57fdf8296a05d11581b64dd6031cf1113e5a327 + +N = cac218c90e1920357e3a9bb9baa5e736d068dea75064ef8d7a425e2553f522c97457e8fc230f21609f61ef96940f72d9835b7e31f92caf4f56d4636cca820f8fc27537d9cb6064d95a633abf64948a8549db2ac2a65aabd8d01d970588c6c0b50475933f740b336ca0c4425cc3531e879a562c59388ba8c9ea13afa3c7ec1dc62c59fbd51df06329627524abcd255181512889c118c595588adaffeb4b7638a53a903b0b642346e85e9d4b1ab68309b647c8fa2961ed7ff33273d27898ee07c061347cb0f18910c0437e4b7bb64a9a84f30a99b2eb63badfff40c2ade97a298fb68d2dd2e8924a52d0c008b27ebb0b734ccdfc9349201f86f88987585b8a22f1 +e = 4b +P1 = ea96bc544055716924090148b7353377b99b2f0ef529d61ba1e3ad66059c95c0d8730f6181351fc00ceaa330fb714cb34c8be19eefdd64e93d2ded480c158eada8a700fc8dbc1a6a945170f9d718e1273ea970dcbb500321a4edc1f648945594fa5f74ee61f65fadc0c1117e140c2a2cbf1ad4c685165e35224de84bdb34d9db +P2 = dd43a0260077f26f5f78d100b6510a57d8c42854583f47a95b8ac9fa768d2d6984e5c7e517a86772844783216787306027e81af649d013ef108e5ea192b3ee18802515459189d46eefd1ab029300b20a2e95c32306d3b9284cb38122bd4c5923897af9159ad709edc6cdcdf127f928e71e22e7fc929a976c7089fdb077f12e23 +HashAlg = "SHA256" +Hash = 5139eec44c2ab2fec1bb08abd7e9218cf28bcabe1eabe6c3e2a336154dd6ca3e +Sig = a6a2a658c204d1ab664299aa3df1a7b91fc32e814c1d6b0377e6484bf5b5551cfa35e26d21ecb248d9f9b410f7dd0409008658c95cb5f0ccbb55278eea8bc7123c56a36eb54e6b400d106e56cd8138ec5c4f4c13767ac59671a0c4e87bf5edd0a91d66492fe37036220a3017331ccc5ea88967355cd3091ba203c71187e0be75d7ee87f58ac8e6afb976c6eeb766b19df57352426f3d07bcf7014a260944506aa8c41c6228e781b01da618263af5a02d0bbfc0a8b300833bd9ffaed1a8dec64658618db522c735b36aae9b0201b44c08a0787409f56b62c539238abeb36337d3a65ad5ba7d4baad80f7d06b36754029abd5b3b39abf9c387e6d1abedee2ec678 + +N = d2d0cc6587158a995bcd20933f0e93c31609a962f4d28d63073fb0dc24b60e37107231778ee152926ba4c2cc56aa74a89e22ecb2ca848db95c40c9205345bfae06474e2faeaac110148920a25d54a620b538a5903d424c9438677575dc38558820a28539697d575a2327b7bf98ed842433f79abf1e64357e1dd0c504135c940a5267be9c6d0d82bf2cfcf8dae4be0565858ca6039d7cc8b4af96a2ceb2c849ccee83a94ac1dfbba8223d7abca12f8f16944e25343780c92cedce79e380e811e9 +e = 1aa625 +P1 = dca34f0129ae069fcb13ad4e50d593ffb9641b8bfb9e7ebcb78369ca6d77f17dd256af80c5f7fc7e9f52b413cdd0525ea9da280ed41674d7629036d1a782998ed52ba04977988f3527d4de786c51e55a29c86bd6677344a3c0082c96d7480773 +P2 = f49a7bfb1dae223574999a6ec01181c86ff596fbb267903bca3cb9815b6a27c36c10563961b521e8fa381d6a93ae99f9914de3761f4465d1e604dda00f4d01d8ce13bd53714fae06a8d9647e1ae0fc8bc74c07d8f04c1aac6e3a389167b59233 +HashAlg = "SHA256" +Hash = 5b376c44822ed5a2538070a9ff8adb0c8ab3e8d3427ab9ae325238991e22948b +Sig = c161872c24204050cb467863d7d67220e82358be8c9fd79f6e52f3dac9bcf95ef08979d8969b224b0f330176fff8694b0f423418c048c2d764cca33d348b1546d8d7f685ece08cf90d7527029eff78d015fc291bab491dbe0bc13cad8149d2f7b0e22092f6170d86ab73a8761821cbb71aae49ec30ee6febfd5053542ff930f09ecea9fa17bfb046dc4b223bf2495eedd44c957c3ca910a8924d5b8a035b9b130b75cbee41680275149f23224ceb5672d2e574388723b8bda0955591206fdb9c + +N = b9cc977b77f5b19f6e93bb1f95ff3424286dbc2df140890112347f92a182ff34a350703b76b1bd41df4734dda2b68e50332e6c6ed2087436ca326f1af5766e116c69763bab36e383c940127c9f1e5118d978122c002b72aaf767c62ddede118897216b8fdbe329fe6d525403cfa62c9d80aae7b6d861ff67a4e436c721b94bbe2dd5f643d3df1cf628c3944344e46f2b7538fa6bcd0489b753c8222c3298d19add5e2ff6b682b2e6f5e1ddf8b1c47ee51342ade88183574bb014fe086154110d +e = 010001 +P1 = d0485a7044faaba6c19f1e4e2f52506e3ad726902f56e59c4e4334f03769a5aefe401a59d0f01218741c8acf1f88227936e554f89cb9777dea36b500ce1c4a7b58e47c757f95395486d076417f73cf847380a33a4ac25e02182627604f57dcb7 +P2 = e45d993551fe0373f9dc81e29fd44eda34f268d8777b28b12c3548a6a4f54936a62826dd132caf05bb246233be5238b73e23315c8517fe84bfb9b7be12148afd6338f392238f208274b872b94a271f662244f8796e6551c36440b3165548445b +HashAlg = "SHA1" +Hash = 5d5ba2b0e030d9f53813f11260eec6d75f6e6a55 +Sig = b8ad34e80131f8d647b2afa1be26055cd5b952cd10e1806461a869b005b45655ce3df5349d7ddd9874bafdc5fc2e611b53f071e2ceea07642b3c21675567da6cca2de2a85da835ac74f058bdc71984511742cc07139fca48dfc0ac098b6c1e83372f3524419cd14af11d815ce7f3dd6391fda9804c86e9bfd51f3e58cdf71e29c4a57385d069832acc7877d3f6c94a6ebf948e01a685193750f283961473afd105706849471fad839f697777710b8802a3cdc36f3944a4ef1610f5890d06797c + +N = c3afc3168d1694cd68f2c437b144f1c7884bff11565502e9a5071b14722acb5de9540767713b4f9dad8dcbad2e901a3093cea1924a4d13783d8b7809997fb1ff0aa9fe4d7d661d5e0f3f4538e96a417d153104686895db31d50d5efbad7bf64ecdf0bc9832fc4bf14ed9841af5b4336028d6507d756365ac5e77b498dd771e6d +e = 38c01e7557 +P1 = cb0d6d9e04af73992d8ab6bc1c4bb9da9f5220a9f5daab1a3d91a4895333cd6d1fa7078a6032e47f5025783a291b4d3dd830d860a571bb5852f40d6679ed78c3 +P2 = f6b6a1a30d8f7838ee571ca49241825b4aff6a8e4b875851ecd53084332450e263ff63f9b8addc592d68617643198f1f59e0578396767e7c124cb2f1cd16190f +HashAlg = "MD5" +Hash = da93a3e4c27cb8b7c757b8bf836a0dfd +Sig = 12d4fb50351126f93e9ed363ae277cdef9e2b154ce9a8c6bca06e4cf3487acab31d69b1d5b5110528e93ed90d4418fc1062322dfdf753795c4eabb538f5c0056080ad3eb983cb8f9be5d39879b5c3efe72f3bf3564ddb6152fc4b41a99a4290474092b7bce20d70bbca2f741658b3e30bc6293c38f66b91aaf101560afc06541 + +N = ab1db03a2f21a6307e88b28ea7b7a68f7a7d64dbc39011b0b5b3db976c570dd4f16cd2ea4eb22ed4d73f724ce10c2dfbc0402b53f344c095ebd843f2a0872cc20f48bc42d6c94a5fbf37f78b1e2a09ff2ca854bd0b02c25dd2135293ea2326b7e999fe24eea9c7bdfe2a15de9f357c5e3d9c2818420eb89aaa1a10efa98aac29 +e = 013203111f +P1 = e03c9ae1e0de9021ee7c46bf786d4cceb5b8b332f8e429f4f87e78350668f9f93f39479b5870706cdf703b5a05b7b024c8b171c5d5465f673ac0ba1fabf8782f +P2 = c35aca021e89971f6517f0e187159531cf9aa923b132d8c3fb4b5992ac42720430364bb58086d3da03096ed1bcb385775fc21dd5aca791a90267a09d36713327 +HashAlg = "MD5" +Hash = 39e47ee6d527967bc358e1889f7e3d6e +Sig = 71eb664d4966ebb39efd30ae3ffb9a57fd24e1cc6403afbd6ca125c63e05b2182e12090e08c0544c61f33961352370ffdc8edbb96963d91348bf6ffe0e93fd72af9fc42d9a0ecc175c002128610994b58b4ea63febf35470c01bf31ee7847aa0969ffbbd4c7deeb6f1fd246117b8957ffb3278cebae55707647a2cca896ab4ef + +N = e9a8c4f7bf752be3750f972468bde08cfa52f79a1594e2afa4f281b8d3db620b30f6a4bd10d77fb4cce9e1226dc038623ee9c7268a821fcafbec2a9a7e9afd3953d5cfe1dcbfa44ffbdfcab66e07ffaf522d07f116c7457ea202fa535dbaa1c224da564e7cc6e983e137299770c318dec8bafc77261a63f2b94f5633e6b6aa7d +e = 47 +P1 = ee3a81f94dfe0384b07fa489c1953412f0f4d07f25649317f6eae4c576853cea7d02cec4aa8dc70fa3d7ae9478f49a04e4fb097bc11e7d6ae622f160fbcc82c7 +P2 = fb17004be78581eb94e82e393dea101d2312226f430dd89442d12019b25ea17b14340ab7dbaf95f264f7f18f5506f20eb50855880edacffe5a4fb6af8504a49b +HashAlg = "SHA384" +Hash = 17354043212b759916524896dd726ac62c4a5b3dc69771e98b25dba135d8ca81c4cad876a368f78d1ec6d4463676c9c3 +Sig = 431a05a67f1b2b037b9ce70beac3aec7d5bbbf44fc7246e2cc2709a2fd11269d309028f936c1e69e73d0743bea657777ffb164dbe95088443abf207361178329c7a732ec8dbdce771c4ee32fab23ca29bc854802163c508d64635ebaf31cb327a21a0469058199d49de7b17fc52da876e61dfb1e25e8a43ee495cfa3b57ff606 + +N = ca013608da824385b2d740ceb279dc1a0b1eac7912f6ce08ca485c20fdedc5ee571f84574d3e3370938db87265ec95f411d289872c737858115dcd7cdf5a2d84dc5334baa562fa9de84d454415b01730403dc88e520ddfb886f4e39be93d209d843b0c057b56289256f0a9e6511b0da5c021a39d79d6642096968294a14c1699 +e = 0c8da37f +P1 = f799bbb0011cdb2a4d8826ac1bfcd53c152ea605dbba02656e5dff6f568f2e3f03f3a9e6635a69cb8f49f97d2491ac113ea266e926060d0ed47712ec35a831ef +P2 = d0db81440e16a8819ce0b5cc769bdfa091803db7959538918c18287bf039a362044b69c2dabc3318358310f0f7208b2e9990cb04d1a958770294f1bce09fa7f7 +HashAlg = "SHA384" +Hash = 018b76252498caf4f9b90a5ee00a6b31d39f742d80e4e537c5870c930b86c1c8ea5e18c730c56b6ce2af8be095dcca5f +Sig = 98961f5e8b459601f0690b1a5a3024b99140c83739a4acebfc4dbf302ce48eedb3a2c01aa6b6de16145bdff197379e1c6f70e93f7417ee5441b479bbf1b01e603866bded699f1f28bdbdbd3f855690502f8062e562f27a262fac6ae2313d66b756e4cde0e6b2663adbb4af989e998bf4e11447fd87cefaf0e973999ec778ee49 + +N = d104982a3fd42a9090352b6771520c21cec4ce9571fd6441ce7387577105a71cd648e26a3a50959b03775625a3c7812820782d2af60fde8a5965c32d34a4733033dad903eaa2728a924129ae40331154c3556919ab09354e3b764e8cb2343782ff6e935e03f47fc93404207e3dfda7e2312bd1a11bd0a09ae6e5e88a7c2ee71d +e = 010001 +P1 = da6d21e7b0b72a89112a8e77b22dd7b903e3ef02e59943ef6037d501b3bc83a546f1037b495306aeed79a6304e814651ee494cf1a9c2bcdf7f3ceb827b0a94db +P2 = f4f9252775ce7aba51d575233d698668317537d66c0b823b192907b2d96d82bf66c4c135de985f8ffe2344df13a390861d922c34aedf3d1fc782314617acf967 +HashAlg = "SHA1" +Hash = 72fcaceb4249c72dd814df792045e0eebe1b5355 +Sig = 5efe06b8b9a96de3d89a8702f803b58e53886b8d9c9663a3be8d20b3730684bf3ca52b051367a5906238ef3bf1b69708ba957d77e54e5e78b0f35354aa6b5a9b1d9932d6de053949147408356b46734c80931251a29dbeae3f8e51f46d0b9713c44744826e8edf18b8f8d0469435c5a6fdb7c6afdb228d75330f750ff781c4d6 + +N = d35ef84d171f472dcbca741279ec50a1f365b1bbe4961614e46b474cbfc54530602fadce6287c7f094de02afdcc9aaf54d4d2d73af72b08c791159a0f3a2b58c242e9da2b375293e0a5a78869fbc3bafcceaf552b4b5cdf32671df6ab860fd95 +e = a55af2bb308dc1 +P1 = f32c155cf038e9d8a3f5a0dec6910f7cd6a93d218a3fb0cdfbc38fed2c858f34d74c764d53d5ea1bab0f8553c59e3ee3 +P2 = de856d5a24c4b20814546262b385ca55b0af7a31627970e13b0da200cb2528e128dc05b44c3dba20e4570f212af04327 +HashAlg = "SHA256" +Hash = aca85dbbe5d0c2902c518519e0d22303fd9d241946016f9d8c52aed194171732 +Sig = 44e919e888d65ad543227a4a03434986f066f70d3dd444777458ce020122ea36c360fbe0a394c9279130b7c4e8cd5d1b1c42f07c7286ca9cb50577abb470f122de181a9c636d0319367ebe5fa8816ef48eebedb6e7585744d58daabb3a381f93 + +N = cc2b7d209496642c7ed224776cf754de4eb44ec5c3d05a254c6c570e65f6c6f15a4a4a1fdb14f54b6c0efe31cd3d28898ff143ac8e1a082c48b1aadf76af9fd5e148ea2cac19d2a264891c25a3a5be6802eb0d4823c382add7e55130af954a39 +e = 02054956c8cc294b +P1 = fd5889caf5d60fe37bd6f1db2b287719b71f96c421a50597a151f60b1aefdc9e52802b749610c0bc3088f1f725b80cb7 +P2 = ce4f101772c1cab8dd2f87375be968708b1fbfb24bedc424f1dd7eac8873ffd68f9890856f0a6aa68f24d0b8d19b508f +HashAlg = "SHA384" +Hash = 9ae9b3c45f170b925c0d80610193bc0eda60e6805e84889e8fdc4b949037146248179f3a7198664379183b7108fec66a +Sig = 08c8b75fe93bcb8a169c9e27a6188c65f047336872526dfb6c4ea0344344697f7a468580a5948dab2fef173a6a19c585afa3b2712527474f700c3821cb746745f9a142fd1b3ef97787c0b3daf55d8630b81c27694ffdb1f3567f0b58cae01496 + +N = c9c9d45365b6f335a4e7137eb9745200c1c2a182fe64f9de406249bfbd83c40c60712a42f9ebfd9599ac79e75c6e78d5325f4d1915bf8812b727f23e7e0e67e9 +e = 02bfb1 +P1 = cf93179472071d77bd9d613020b67353082cdc38583f2cf4e36548db67185d0b +P2 = f8dd2bc871bd1b9d38606824180a663a0b09319320bba9380b5e05a82a031f5b +HashAlg = "MD5" +Hash = ebb3c571de72c44632cd9bfac98bbb33 +Sig = 89b8f9b5a59d1ac0f793eacc25ca4741c168efcf968d97fcf7016a160d088e269cafc328746fc2973aba5d64f55cab44dd508d3eee4d1b0deb37458b3b26f321 + +N = 2cc7480e82322ecb65a718036d2f4bcc0a0624f1c06698478d8315a3f766f63f8a76aebcecb09749122256309d6a8bd75c796e890a561bc526f70dc09faf53a88cf78ba0e6041e73ee408010b9d0228a181652c3d973687913fd482b751ffbf5156bf07a3b4803d0d96682864c3b0adcbb33199cd69b2c65b4afcec575faf910934ec424b07ba795eb5303dfd85b5d7ec9920a8f2f94f2ff5640c33d1b66760b09bf133ea18f144f16f0e6e0c6a435 +e = 010001 +P1 = 06524e33513516a4e8a232d874de152a00def6f1742934a05a23e67aff5e68c0e2fcb0a46b28e3f7e65dfbefe672b7cdeadcc835b7a80bb86497bce1d91c721dd8bb3e87a16dcab893e32a59af4e77225e11f5506f015113 +P2 = 071560d9a170f5b3552b14f6c61db29930a0f1bbb9b6e40b696d72c6133d3a0e4ff9ad76a83270ae28cf955accf9bbc46cd77770962081e06356a88f12b9ca70b5470d81c66291826e039d7cb213bbb419dde8a76d0d2697 +HashAlg = "SHA1" +Hash = b8fe6dfef04e7dfede1da9c88b526b17fec2c181 +Sig = 1923783322f4fd92bc2ae7704d44c16039e8ae3901b3392337d17608c3ee1426acef5a79fc8349d6e0771658115a958b92a7847eaaf282faccd7b675e48cd2088c0b5fab2e5c8bbcf0fa8761aafca6e1514fd5bdfb725942f1e74a684612b1174e1c69d70accb6ed9594204633365be9ccdf0ae6650b091b4314da95fe32f46814388a3e6ba95c7747f3f015bef192a2c4802c43857893a54710cc980b9190e3e6f21e19f632bfe7a66252ee2a3217 + +N = 0143d88ee776ed76a16bc39b8bc1a9494427e9ef000f91994ae28ccf63e0c10eaaa4e60cad1bdea05941d2ec11a0d96100efaf47bf5f9b1f9115db11303e5de6a4a75cb7529d46d5dac932c6d981a1875e414839d33fe7646692a018e957a0166f5867f1807b8e3cad5da46b0e59fc1b5ccc9e86c03eee329fb4ae77d9f49586c9b8008e917728d8b1cd24c8b376519db54bc9c051d61e52077ba560180d3922f5c8065acbff6105cb0c678f0bf23011f77a9bb5157c9b7ddecba90113ad2204be3ac695b7a965b0bbc93957ba2b14b4f77051fe8aae3f7c1b28248fc1a257809a0f572826bc372b4b41041898dd0be58d +e = 0205 +P1 = 018c9e15f425c5cff78d9f8433c6fe54a8b21d85b18031ac7cd757b8c9a9dfae7fd02028685d5a77acef08a0210ca9281806a04b54d283af4c2377f8f1930d4a320bb0ea5d948d34c049d90669794441afd1efeba0a5cf89cbc155c7738aecc8c9e5ea9722d3d87c6657a75548db1d7ea891b1ac0a7c30a91b +P2 = d1076b922c9684f7e6953a61e013e232219316e31b074a345cfc5705824c56a5cd27873f1307cff08f5063b82079cde5ef2f5d712a8707800db43266ee5bc84aab17310aa9baae0d3e5750979e8554db6442430ba944f28d40fc3cf50726796cf70d63ca83e8d7915bf7e445b6c2e412307f0fb842b67e77 +HashAlg = "SHA512" +Hash = 0e59e016b6f5d00eeb03a619b67824f4e783f03b5120baff9c427c3b6514d86c52fed653bd16c13da7be73396c49101d9c305459f354a39f1df593d19253bf12 +Sig = 00d3b966d9313a45e787fd59659d26abf77bf27743116311238a42b14533b5598c2c14dc00c4f28fa0804286d15b4b4a073b0d89ed676e508b4697260fc0968246c1ce833f1dec75143410041079db3eb42beb7fac84dc6343ca18774fc0f9450a2793182651a7ba4b52133a7a2bc086b072fd31c4679b2cbea09afc591a27ced28b64e3073687ae87576227a4f96f4249c6f63870e06ae5df38338b638c320a0d226ac39ba71d44a0da35a2819352822f48ff71868758cbdd3a7d4a847ff004a12a13bdc188217ad8ee9294267edf570a962dde50df55f8b8e3700539bec2564e0b788c0bb2a4a72a89ea98d394f8dcc7 + +N = 0d2708ec1f1bc2b87d6628bcc8165b76d12e08af24f9ff67794cf8226076644ad56b97d205d80b9e16f7f1afd00d286967734570040a96af71fee9754d74517708442e3da6d6e55354087a761890b1efb2c183117fbf914f56a19f1b20abeeacf6c64c5fdaacd7cdf4fa956f2895316f87c65625a6729b1af73e32d2611463d2d8b138d0ce28e595e5593ab0c9b96e9e283729 +e = 0eb6f40dc2498fbf +P1 = 035acdcc9b614032b62e7053bd17c081244b83fb8f3365e2da7dab2b6c1691c02de9f439aa2c467c8d5e61778e0987e7bfbbb827be093392f7b2ca771ddd60f802e4ffd01070942d9d27 +P2 = 03ebad1299fdc71637919bab37ab09c12b1833fee40ea775ea84db7c4de9c1d44b19e48d3e59014f335f2a667c4f13b139e99d3ac8220946d1bef937c3d194da82e90be89e33dfe8db2f +HashAlg = "SHA1" +Hash = dad2b2d66ed685dd0c3d0105d83cfa97dae9f8b0 +Sig = 0238f9e3ec00e6b59f0468811bace2610c90319fe70d4b582bb5ca56e3372d2931cd2506e53baab94028d8435e9ea688e7b75aaa27d1bcc84e9f1967d03f20fcb7514faccf887ab0bbfdadd311d1de4c2dd19956b1c6e07a746ef42f2541c2adfe930bf989a9cf1ae0ff66d270c9dd3a76d49e19d0587bc492fc5b56bcc20a51f83495ca665397779987c5b36622e5a8a2ecd5 + +N = 0e1f920c8ddfd075564f58b5496f324c5328a82c252924da15fc0a7b0812752c1f0874e053b440211e0f96fabc6d0c0a1ea27d2ae819730f8fb36e95c64f770acde4ca93e885c27e60c8cf97d417452fd34d92f1843cba34c7dedd3e7be4e6dcb91da6a6a7699b8598c8c054dbcbd53b45db9263b339a412210d9a59ae0a190972c56dde94701fa258a425ec04c2ac0cd4b55e7dc1ee7c3d2dd2cf0b99adc9fc46c40dc190e10374272588dd36996b831e50b2f925cda410a60c44e5a80c23aaf7e9987c09ca2b2ce87b4b0487a01c78a3bfd7568010a7495936e85fa577bc5d31b50ab88d5e5773e6fb1f0dbe365118feea14a7950bea3a280b0454a3dc53e9 +e = 010001 +P1 = 3aaa496e13281947c6ad56ff2a5240a43c584297d8188d12598e94a563a171814dde06e2020fcfa05103500519869e7eee1fd866eaaeaa4b7c2d905ac2d319221eea931fff15057d1d3f46785d8540a5c6ed47c4a6117e00aecdc3c81d9f219b6e7f3cfaa3accf40277d29ce9776cc08450bf1b3564241d93417e6dc1013382f +P2 = 3da16f172b659aed14ef996ce10d13615df1f3c77d8511ec40797b484feb07fd95ad41696e2e87949655c4220a9009c76da433368933a0b9b025718bffa9c1665bd1f0bea6e08365df87f74d16d714f85001645729843514122895c037f53f4350d2a4ef78918162d404bffaf9b76712fc6a9eb9ba3c3514beefb44bdd939767 +HashAlg = "MD5" +Hash = 4c4b185a2101d70773a30af94cf32fdd +Sig = 07367b2d906c10b431949b9d8d23aefa14914442111f5f5f4c81e4193e07fa233a9f611d818a756a9c56536db6f95437b1fff3ec13d4147784b68514de93319086540b77eafe4ccfb1639bdc7982fbbbac77ab46442d1c9202a2fe8ee6bd7b31a6f7efe730123d17cb3315c84dd172880e777412e0e00f897eeebafba9aa8a829858b9b3ec78bd11090ee137d8f6b9d9871d21dafbcc8a835c8e94a00842ca7d1dbc13b4c3dcab467f9b40fe24cdd9998043cd38e860ac62ad8b1923845af3b0dcc001542338661953a560661f81daa12a0b3e55ae31a02277e7ad170618bab136d2c7d1fae99f11e7a8307459c7edb227ebd4c1043fb938a9b02cba86ceae73 + +N = 3016a2976f6c970ea08cbdde0368029a04831f93cee697cbb4af63976b9a87004680fc92ea1a62d3639a8c9d3da3f0b55ced0a4338e9dbb45760e377af3d6b494b4a635498f99322c1a0edea48eeb6eb9c0819c5e357d52baf883dead4d7c703bed93b36f24080e533356e2e02b921 +e = 05448621 +P1 = 0639c0dfd0d5edf1c3f5b049ddf5ebd4ab5f00b18daa739f5194101733d08aaafc94cd931af08a1f70c8b3fed5a0f3f2025a1064b549dbfb +P2 = 07b96bf4b1b2b372e6a3f7ac3b84fe167bc85dd6e50cdac0c4a0a76019dfcb19de932a9478ec70539137f26356f80c295045c7e74de7b893 +HashAlg = "SHA512" +Hash = e119c109b028f739afabbc1e0648c17fe92a1a88a5040e7b8594d9c3d0e44732201625f0acf3c0e3aea788c8a0a2cbab9d148c0af814a1d0df743b7579924702 +Sig = 0fddd7b8aff93558b9adecb21e35180a9fa00652a452a3cb36e6ea4f361ab42bcc7e783f83bcf7d2df42efee2975630d9dbfa19b5912c5deec30419780eb73f88439e5f4aaa4a44b6e05cab306cc4284e6b99c89b6ea2b0519ee41214433bb881fc6718ff9152890b407a89756180f + +N = 034ff950dc764a07c87fe787cdf76b6361cc90dca89f18d610fa6b788c12560d45179dec3b71d1ede7d1d78ed1b17d65c62cf5e0fa33a6452992028a96e950ee57ccc9a012df9042985368dc5eb74d45151c122069f1495b9aaeb5b9e7a0c065d916faa4e66ed8e8a142171ca4a8f8acc8691dd5e97dd4982d7263858cbbbab13a7c65d6a4b57f85262f56fc822181cc8088764800c192cc2a4309f1989bbf463530cc028ad5f8408ff0923c7fef83b86066c36b132469 +e = 010001 +P1 = 01feb003c9887f0a75f90228f1f20ae29ef3a050e3a454f398f4ce7807d9a81c471ea6f42f0fd49aa9584a10385c11b1a0187af3a3fc150a1d0480a3b3a0c04fcef64401b86cb75fa91ac85ce71cf58a60522da2aceb69b1eb570bbf +P2 = 01a9139a2675762daaa24e0519a58d2290148a46453241c480854a38b94e43ee51b5bacb48b602a87738312fcde3399264f33b126f645d5293169fff37b1f68ee7dd6dbe18f4c7ba01d5266ea935a24a44d7563f382a6c62c65579d7 +HashAlg = "SHA256" +Hash = e67019b89fa4e47b86402b7e037774aa6e71f2c2318d85fc760ea4c8fc0da902 +Sig = 0286f52cae9a4cb7e5d5ebc66b6efbb5f49f1d8b88df81c616370f88ecb460850ad236cd6c701a21cbc6f1a944b6bab6c47df88fb768d00107534e84f3f9be6e3f4645a3f0c9ba734a90c66bffa5b9a1f33b36ad1cc2fa20399866a36fc6e053602207bc4a84b96fe73b3df25977477e1bdfd1e1e4ae27c54894bafc1b75f069c92b54d8a4a7a8f77e271fd64fa487c64d54c7157002147e5513e1c282b3337b9055ff4dcd6801990f686e44ebb9f7c527de3c09d14ca7 + +N = 068809c5ddc1f38e57be7cda4c1298fbecd0e827a1d47742ab6c74a7c54c030bae0e049ccf8f2f67ba61420d1e0e83b3fe2decd6db44bcb20f9ee21bdbd87ce651659238d0bcfc22df59e52a0c3f8659837868964389a25a1631ae64365147c603fb06fc2e8c556293815e08e2ae2b9a5cb12ef640a355dd43a4deba5f23fbece270cd65bac31807eaaf7e7e7f3ab01783442723016a882f4f17bfa6026eb6daa1a3f2cf4ec8c2ef5b993be0dc9ae05cb14ab2ae61a863ba6e79 +e = 08daad5f12b4c5 +P1 = 39e145f4015fd9a0513656196f6632536c6e6a1f1ef3e2d250f0f16128d207c805129fba55f32a03bb00416494b7a49aab8c239039aa655e0b84b1ab9ec81d2c980e0409a82665b2a76a1663502892f50f8889c71e026fb656028f436b +P2 = 1ce355a9a08eaa7cbb82718dec19e3678e8d6fa2f997c245bb7c3d3bd877ce2eb4f6b51f95fc88467310bacb146ba762c6b5fa0f0207b9253136625de03b2eacf0fa5e0cc1e339e3fdb1a9bc166894489466018967b390fa552578b2ab +HashAlg = "SHA384" +Hash = 86dbf6f79604fe7d6ec2688e96f1005062530c0d0e946c9533ae86cfe7f725171992aefed14e488670324c1ea0931bba +Sig = 03ec0ebf54814dc74e052a79d6e089de17c61f4c8e43d20818787fe7bc05605c24cf5f8ea8c9dcc315bcb003f46ae65bc99fa5faf04834e0d3d17dedb380eae76fe78efd5d7e1e8c0e9cad60a4721bae22a573bf1f29ea65e3b297b3e0592cbcd04138e58c7289b70b5ff197d44269c83ca7750c421626d4be91ea2f23bbe01370318e3e5ae80ca78f9be9e0c6bd456d3c8a16f8f7fb7f278dbb887402cd7167f8f316ce8f56579e58bec135a0dc9c80d2811e5236ad8963ffbd + +N = 18a21aa3ae085dcf44618d885a450fc6ca614301c8b6920c8ddbc1e7645eced972a81f54f53325ab718f05f204720927ff3c478b19428634c2566f90d2f97beebaf62d103fe649d80f517b910427276116652babfda44a2576c367ac05a2251a94989d9d5d90a85a85d331c6e4241c930dc55c48415e0f065a5280a55de7d111da5c5991cca63f4552533a11d2f0b84eacb619e30452a69f86d906cd31 +e = 07abec5bbd99 +P1 = 067a34221d43f60770623a31e7a853005c7b58acbe2225f9bdd5be9dc174cc3edc351ed2930beafe8e7baab8df80acee2902f6f661cd98a21405cc9101651a1f69c16a32fb25caf410aa88d4778a67 +P2 = 03cd8fa72e954daed460975f803f654c095abd26956022c64343ac56526c54c18c9191d55d6fc2d28e9171c653f36b5afdf41c4a87e259719c46c24a351ec0d13772af8d51ace5b44f1106502ddca7 +HashAlg = "SHA256" +Hash = e003cce6123c883817a3b77a6a6fda10b1c8ba57561f49133f7232ddd3bb0337 +Sig = 058f3df313530556d3f0277c57b74ecb8e5af98ac0e14e01e74c6036ef6b51c14c6dc79888d507c5fe84517fdcbc5637450d4d35c44f7f570eaab9b889af9ddd05f74653d2168a992a82d2bedbb2c4ce68feff59e91981812d08c7abc920d79dd323b912b794d55062358cfc896fe9ecc35f96359609a525fb69dd16d1de14f7e4382139da742ff421687cecab226b6f496ce66bffabcb5677ffe355dd + +N = 03173c35caf356a5f88df0e118e7ad2a1e19318802a8136055ea11ce8e08a950954713e3dcb0e3e487c4a128f7c5a0b7b48ab4529ad78b70f763830aff443562be70b9959f7121ca66c28dd3935d41d8c5bf717ab6b066153a671403969ed26cc7bba61daf81bb89280b57dd61d9a4f8a49aee05 +e = 010001 +P1 = 1c0596c54d9f94ba80d4d6141a8589ad46df59cfe7342d2be26a928e2abb6f80cb9a0aa63fee15c03f9dc023046f8995e556368c4259c94cf79f +P2 = 1c3c83a4969a13b31cb5910098a42b725a6f42eded4970ac5dba87f9c4b876338ce31f19d3ed10d5d906eb3e90775d49d2c964ff7374292a47db +HashAlg = "SHA1" +Hash = db9f5fe89c5d08fe3d1ed7cc4618aa2035718828 +Sig = 01fa92d08d7a972d83815bf5842cb091ac623216a6c664d24710f9b961db7a6495486f9ba200a9375be171ff5d96bb845ccfd212b121648b908164f37eec9c75adc9259864d631d3b8aee2fe779cac20a19435629803cc2ab0d66a772c0bb69b55cdf94da67308efd9d196562bb10802a09dd8b2 + +N = ea48532c2c7950ef304697ec3f90efacbc8f42739d5bfa0251c22652e9ddc8b494e2ec835bb3d4d65302b7ce934fe1b1cd8cb3973dbaa84ec4b041fc9ba3904fddab22cf135d94a396bee263e74101cd3ad4f1818f356661693d051d7359336d9a230bb0c60b5809b3372b5fd616226a349ebb06d6ef96c454b4739bbddb82cf565754f1 +e = 013626d4dbf00631 +P1 = f1338a49b88dd5c92deba93030b6ffaaf355a80abeea7e3e530c39229caa95928a1fcb4191b1d4361df04cdc182168bbf55300cf45041dbf5d6def5dd192d396757f +P2 = f8a81d1018dbac217e0bca1f08aa1e7860cba149b2e6a2bfaa43519d070e5c887cfdfd7d3a6032404b295401cb748e0626f12888d5359069af840b67c8f9434bcd8f +HashAlg = "SHA1" +Hash = 67123acba50591a0951aa6c12d781aa5bf6e2a11 +Sig = 127eded73e844e4c2d0f895e56161c727a4564392aeb522f2dfb863ae1b1a1cec3b4019975f9624cd5ccacbda2e343f70b6d8b7a2cbe7bb475b3647cbdcd723b221890b80091dd68db84ef734fbb51ec30d6bd924e7ae6c3d8b20291cd15844ece49bd1df63a411cbce9e9f7ab51b66f1c6d9a500541f1fe07227e8e9349913d409373a8 + +N = 03490bd002006ca381ce506cc390d91c65f7d61b5816843d183b466c857d1da85d7a04bd90781755118982744629a4d1e6766944aac9691417922042a239864f1002a1 +e = 038365c6e9d6f057 +P1 = 01ab5d748c8e2e6974e764d27f4841f7b38baf1d27db91e31e9f9e65631e72ffec3f +P2 = 01f7cd9375e8f0c217b311faf9ed4ca2f6b0401a165b30b455a6db7ba7a91cefd91f +HashAlg = "MD5" +Hash = 2d13abf707a1e82fb52de6d0c01f64be +Sig = 00387eccffa45773a3ba8e791528fa543126a31a959ba845c54b36c802ed29ce2922d44e3de2ebc861d14ff45a02a0a7e271d00d72c1426fe8a762d325106d98aa2fa1 + +N = 0d11acd84ea352be2656c6ba6438b36f04df836b3b5d3d3c74547d0ac81ccd937fe6b7d1bcc4d4b4f7f95f814fb191f24ad0d086c1ba9c9eb4222b3173dcaa8b332aef87d8cedd04c24827e22407388bdce9c237dec6d870e9d88cdf9774feadfebf4c39df86ddcce76076d48fb19c7d0ed12c671ebc9c54e243838cbb2b029c61489d74fbecbc87d2421a2e31d2c19b47ef14dd20b67f2c6335dd60006ac9cc28126857f809866f0c02cfb35a317b56fef87ed9ba6ff7d2dd +e = 568e1529 +P1 = 03f8efdb8a1fd688a403efa2c01b82719a66b9caefad1fcbfacce37c91d437769bea0f97a69458118433d5802e16f693e648c8cfdf683bbbaca55184cd992dfd3a1ae3622ff0089edcb6c045f18a9997af96d9932e0c2fe81dd462e20b +P2 = 034a3a6327bc03c0c366673d0325cd0b0f1e94744bff9ccf0d26d485addcee455256b9fe3ad36162783b75abebac9b7cd5315c2be68fc5d41bb63a931075aaae23deae4ce2961329e788a62e53463b504cdba96b4c54139c1da3f3d7b7 +HashAlg = "SHA1" +Hash = 5921be17ce9af1e137c995a5d604c13d46449143 +Sig = 02daa36be0b3e88d95aa265f4637013f4f12e9e4f0a87d1ea0f98fc07a2f568db1306e50cd3884e34826307bcbca40718fcd56059a37eab7edb47c23197d6c040d025d9aa3372c566117142fc30fc58b34903c19ba4d1645a2beda024fcc20a999df0b050c287b838913ca243d002ccb80abd084b338d7516f12c07cda12e97d25f56c7ac119d04f03aaec88e3cc57debbaa9deaa24b8faa4628a4ed6de64169c3b705d170aca771e5ad0d9dfe93bf54088f1ac923dda2711a + +N = 2b2fe131a803af546275c21904fbdfe3e5621cd8a52a31e6d2af5280035c0004afa5a56b8b4584d356697c2bf055151bdaf81a5673e1234ee46bcd5c7e7d09e2ece358ccc6f95202fc02519ae5d32223d062762a87934b473478d8f0f087dae69df277b9b7e03bf1714efb8bd945dce08c7254d5b7f113e3dd5b9c41 +e = 010001 +P1 = 6d709764b91f529578cb1e655cd27c7c5209176d070e2159228e305daba3141951df6ea7e7e0773010a4dd2d38ebf14bba03a57cde64a6de2861519d93cb +P2 = 6505c06f26f07fb4d2f67c228b4089c819054873c99bff9429fde8976f44694a313653f362a00864d4a11761dd62573b0095d07f3e11299ec2474d3746a3 +HashAlg = "SHA256" +Hash = 0e3692bde784515b97ae19481d5e19b6af409b34707b2951871717275f0ea7ab +Sig = 247125e4556ed2f385a526056d12efc9352d137a26f66515b4bfa5087f59fdcbfa59c4b1a63290628598ba80bf68ad107b08683d6e265c9aa0f35ef698ba8040eb3fd38bb9349a60da95e5e8ae24f6b48e87d14a35c69556bfa03f2d61a41c5e39ab3f6562e55ca5abb40df3e9897e9ede12e69981218297fb99c5c8 + +N = 0d747f8b926662d3b1058346b9cdefaee6c8f292b99ff0da6be3af2137079a7f82477df7027062b91f18be5c16f3b97200b751a4ad9cbf6151ed25234d9dee38fd88b5fdcc0d4d39c43054037319c60da100bc17a90248f3a6d494e657c8af4081 +e = 010001 +P1 = 03de6652ba14ce98867b5e114dd217975e716f85134bd48d35d589b4d686600a3b7446dbd66410f3ced37ed54c035425bf +P2 = 037a56cd2105321ffe54e12dd347172b93dd822d78b25f07171358c65e11b8cf86c84a5d83cbad5f9c175abac61704a9bf +HashAlg = "SHA1" +Hash = 594179577619869929c41446a38edc1a1e549351 +Sig = 0af252b64b69e58c46eff1d28738d01aacce3c20f1b27bd31456bf9697ba9a7c04559aac39ff3372e1cdcb7b06c7eaa597f1427c33ab831f430216fc88a4ccd44995ca50be8492e018933496ad0efb1dd8e2624042a7d656fab6bd4d9f7863c6b0 + +N = c0e77e58e4a524c35718841ac03b0cbc42351f4a7283dfb791e6e548de85bfe671497a46d6495338d9380bedc3eec560bee0e758138afcf24e534b8aacc3d06321c490d71eda1ef25c04450ec097ecd73af1c189bce83601e76f0f697258976603abef1d54d4b8137c8a771e4843dda55cebf73b442aaf14b3fa44ffd77ded07084694aa103a4d3680af450dd63ed604918c06737cbe632847aac1249e85f34b1400c49568f3d743b44335859bb8fc575485bd866a220e0cdbf2e04c46083af3dbf3a76e71de27e388ae816879cd15e314ec92ca35efc8fc01e06c8a9dce46716d498ecb849bd1ea55 +e = 03 +P1 = 0e68ae9ffbdc7d7ec034abcca202a41eae78303a23fe9b6a7c1200f2c099fbcdf01c0fbbddc268f25844f68000219483c3c07b2f526e107632a13b8952962ed2676d6d7616bc59f2bce8ac8fc253a12349703ab98cc62748d909b0676a2a2721bb79c218b8774b84fccd9ee9c946e43a554617ff7f +P2 = 0d63499d160601eaadfb59f435d1f415af0032ebde4f3ace9ffe0aa4f180df1d33d354c26926b9772aea92f0de673ca4ac1776ab068b4b4bff7dc10893b173f14d85e9c2a6d625b340a2d26cdcc8da0bd57e17000305fe5c46a729ef01f1044abf381bf2dd313fc23e6925c2ddad07e6968f36002b +HashAlg = "MD5" +Hash = 1dbb472b3fb50e3d474b3ad11db78f91 +Sig = 0efff62a224fa83a9e466073a40dc3af597a9c1a659e0f48393bd1fedf4267541102e763a66b32b709f151561731458224cd382b92ae15a9bed52308462665c27db8b42297d372d5f42d427fc0945e34d0268f5bff71cea9e37be424eb411f9a8bd5765b58edb1c8d336b94e928e6dc4b1863429071035ad142fefa63534da1c4f5ca528be240ed0f3206896adae3892632790458002ec1c5dfe67168e7032c05c7ed5a29499eb755ab78312984b5febbe05565c71bdeba0fd9f2ce94636c9e77aaad59f2f4b962e7dafdc6f413e5fe718e391a9c24105ea700eef404b6169d887d3b698141f9e6004 + +N = 0b7d11c1808759760cbc2de0e5a5d21123b438c941849b840b69a381963c493581c2805996bebc852f1f331a6963f65389a6b4066b9000c2bad93ef033a0115d08257e66d09919714e64d95b1f5f7abc5c5b378dd808ad8fd5d215a104baafb562964f5262ef8d90991e151614d08ab5eacd21f45fd9243b86369f72a97731b7d091780c32ce305e00cd05f8569b978024be0c2d20e1d467679920452b1e9e6c142f53c6f5e6b855a125092d90fab9 +e = 0719a1 +P1 = 03294c88b4bfe3f30f9b6fbf84ac72cb7f90a3ba9317b2cdb652eda917972efc33909eb2af906ed94a637c59e2e4b244484459cb15f8305645125175aa0a5215a79a66ffd9ce17f6693a4e067ab5f7b741b2bb365b108197 +P2 = 03a2540dd7c824e37bc2f157e6fd4cce9a1b37a081132cfcc37312fb58485ca5f7242098c1c6df44c6c5f417da74b459f6410f12f33b4f4901e673195e1aef43d14f6a19b313176b3ee270225d2366dbd7fcd3f54886502f +HashAlg = "MD5" +Hash = 6f1936468a89a1771a69ad4c477ea068 +Sig = 03c01c1e8b187634d9a08254a1d8f6308d94f1c6d81f7f5d680dfacdb9960dd3c702f721652b8157792c3df066ac7ec5bd03b14b5398038c5994e93deef58fa3fb981e054af170b2f3b8fa22394378005f904b808b33c8715b60715c03f2c1f26f352537707ccc0dd76c0432c023c79468df49465c16674e698fa794e2541cb6ee95398738e812dc8d7437c3796ae056f8335d0ac2f56680aebf762f2651eb1ab57dd8cc15b0387355ac92f5df37d2 + +N = 5e2d309579662f15ce8f3e80ba6d751b464659c0c2397808301e722f88bc3782eb64952a37b21202cfd2dded0f1f3b1d0b5776eaaf2ff7031e668cf2ee2a43032f31c2d0fd2d7945b4623e548753bd02d30915f4a7674c41bcf64c92a9c0b974e6c205d973c6a5e4890c137b4818668e6a82fec80c9564ea087c7750028c507d9625e90c5ab954c1740a105973372dedbcab3ff4058af0a0f3a658aa6da561638581c2c256107b8b7148a9f6891070a8c0daf61084649c06abb11a934cd6babcfe25e610860a1312238cb7104614fc7a89add4545b463ff6029ce5d51185603cd0d3112f140abfd2889420b839913fce52191fe5a8a2234086093f678567de81 +e = 02ee66e52edc71cf +P1 = f9a51f06c10c6e9ea4c48e2738a598fe1065cb628322fb895ff102d4d3d843db0c74b6d0c7608ef9c159ba4c22516b53191c83f89e44bd50409a32b310441c9f1915537152530e705f2797bc2e976909402134897f4fe99f53a5f2170dcb7ffdf7d9ea46377f733f20dc71f1fe403bc9705e808dd23261099a261f860c60c2ff +P2 = 6092ea9a245db109958ecfc796178ce12fb82e676b315b20be343986ad98dbbb5e2afa4eb1e81a22b646fbf3b66283fc790db2c062ade0de1ae9774a8244d0e24f1b7fb93827c0bb3fa312c360fea628887898088ee791e2bd2aa9e7e2b414be382f55b47171cb107d82edc5261639ae35f56a65f44883937e000d331db2de7f +HashAlg = "SHA512" +Hash = 113b3a4711c76196fee139010cf06fedb00d95c58c6daf9642ebb368c4ed1d531079f8fc8edf3dcb3344030eac0be42b0785e45dfb46a9a8900265b2defd2102 +Sig = 295d19f524e28ae8f61e21bce5ae01ebf7b52d9b3865086871d0d76748c31dc40eac9a25f6433c22772517eba18e50eaf753c65ce7288611d165c84a3c71d21920bb6991a71870ccd66c91ea121cb51b1557cd4f1d1618669bccc03f9f91dcebe42bb285de8c53b0fcbd1db9de2309d3df0f21545f1a04a906fd054e7dd2580944979b0308456582d3a496626303976a3269674b136477c1f04fd3984167cc218d9d5b5e8bd0cad0263baf88c083fa15bacce800719c0ae6d58c38973788bc72533166a6a4b0534b78562d8e163729af69f39a1c3acac4774855e79406762f1cc86c5ff02421bcb9d376275fa88312810771e519e5b571c6bf55b7806d47cd8f + +N = 03d90b84db587ae5643d18b1fc698939747e99dd91fbc723f71ad07551f149d77b0f401a716a9fb25b2208fae0c21b1176df60c0a00d12a3991c9409ad37a80ec68d0b45434cc9b3e74da47069f4e6fa4afeecc38a55ed684840958c6e8c2078cea12097dfb589dcc0f5dd34c36e7d75e0a3ef31e0f3028195defb6bf76676914d5a95dd12716957c393d0d2e56055e463d2302917c307e84d61b2a6c4c0202111f7dd2d093bf1a3470319ddb213666beb37d75f681bf87cf57ef9c281ac6f7f09220b925f2499848d00a5ed819a495fbbfedd1631a410b7c661a78bf95e911ae4a66945b554f8d107ad3bf9445d +e = 97886f +P1 = 1fce21d162ea909210f0c547793e1d6a2fa05588a498c55664043ca83eee117c1e605543aca79f44b1d5d30c52cffcc95e0de1913e9e9874693b1d567b206fc86543024521c90990c908b64b5acd88c7d45f6257c743d439eec17887d2deabb7d7e2a1e1b198a152eb98c96321b49778a1d161cb617bcb +P2 = 1ef89fe5a52043c086dfe50c891eddfb3e33492ff0baf5542058cc81f690cd1090877363dad10f4b63588d421bd2cdc626fd1b2e900ac050487c8612a6c7e416a7f9b984302c46c795883846d9e90b645898fdbbd07cb261daa250668dcf58d7850b450ae1013f99fd2585a4026c4bbe1f670137250b77 +HashAlg = "SHA384" +Hash = ea5abf2004326a2957de3bfc5746d6889ff700a71ba332a3bc3d15c6d37b4d79e2d33d33f9ea85040d3888af50003c22 +Sig = 01b6cef08bc76dcdb8e59e641ebd746a20c1ffa30950abc8e5a6c304a25633b67835e68a4e34910ac19ed12a3e674a7089737933dd239aef587146b8b2da1c33ba6689addf6ec86f43c5d76afeffb3baff31ecb3a52914880019a3906485282ded4df5752087780dfd4483e38725313dbfc2425277f86caacf0efde3d36b05402ae9d5d151d59cb86559a8a76319b8814dca253025b0b66965a76631eef6149d2d248160b39ad79654efdcd4a21f4789024db2b5c55769f71e3c001a9a75d3a9e5c6f712f861d71292cd7bf9e023633c33cd18cc1c372a0e2f834b04db92ae212aaa1f097105f84fe778d64a32ea + +N = 37a1befa20c65dbc16a40a39137ea94a0aebae988145d9f9d93f0ab612f2fcc62c591da69acab116a7c4e32000db837bcef90b608d43b48002bb3e231b5b0c5495ba0adf1c46ca4dfe5224b8f3dbaa0e699e68d182d869eeebd393966f12f3d89a7afb22648a1f680122b35969a3a02d +e = 744a680b +P1 = 748c8323df976c74ef0d72f5be136f13b0a5b3e9747e0a6953fbc1b9ab78573531ebe25f03e883d4f7e958d3bcae48a12baf08db5d93e0b3 +P2 = 7a320b103676f43cf87d63b0c6ce9917bfba82185461991fced40229092e1bce08ce31b6bec00e22f71b08cd81648b32a7a80c4d383f2b9f +HashAlg = "MD5" +Hash = 88dc45a6c2998ea28ec85e5e724e4df9 +Sig = 22912d67b452c28ba469dd3dd42f55b882664757f3fb182c171205e000a909678f2088886008b6c3a5346c9b8a6a48ac9181e7bfb71afefdca74d596bff7af8a570cf0588293c105316a91ff427a542b9daf77f5d7b7c8878ca8d588083575029c29b50b258dbdc58693ba2e39462733 + +N = 6f5f828c490c81a72fc64b0ae151fa0798a0c31f8aed45b747cf2fc1f62f36835a4f8e2b3c70c67d088e6f07fff20cdbd484ab545d50db9a278cf0cbea3fff6496a3c77f7b631a606fe3e10400ba08d053f292e053241f59e1317a5cf30193bdf0e6039ff60c9af697378b0a2bc1c8d2e298bfcbb5050f0ee968693605f3042bf8563932cbeb09fe0bef72ab04b501893557db206241c001d56c2056783af9662c859916470580a36ea79c1e8b4c9001edb8eba5a229efb4c42918234b0a89 +e = 010001 +P1 = 0ea7b8f6059405e0a621f1f8f246e769bc216df35728593fddb7fe6d3043aa9c4adf54781d745642c3596650ff56024211e57808c0769f49dc7fbb0edd892bba1934c6cb33f6be4935dcbd7491605e0e63a24cd30c82676a0d7653ad00d38187 +P2 = 07997dfb3a493801661c15c318b1a584b7237ed9f978cddd6dc893130af8d1c362369955ef6f687d936ca9ea75a6ce2e4775956b45962d572c21e26aee9ff031f64b293f791873a12d944e6084c720b1f895729ee636a909ed43cc513d27576f +HashAlg = "SHA512" +Hash = 1b66586136e63b8812d37eece726bd40ed07c8ca8e88fe41d7e22a86a89b8d2b4115757fb51f4e314c54985f55b1e68c286da8d39b666a592eac490025450b83 +Sig = 6a11272c999844252cf55277f43cce5c87fc762b4712337f8163783f438a5a954b01662c5abaee14b55f7328640201d9d1b6aa901482506480ca7336d52ebd6858a1724a5334f3fbe58169e2a58a7e14757f1977ade9f172a1b758fa6690b1b828f6c5098631f78b13f827fec13b639edeff246577d4a585e3fe4627430cf96798c43f7d4818da4c850d21d68580373dd540580f265a7880ad56c9b1eb3d3824b937820caf89342ff40dff2707c33ef8ec4574a61f887e3934d760065c45bf + +N = 0e578fd1029908a60e104c38dd8e551fe6811aa473ed70b8227987c27dada3450024b0153dec3ef2647bf5e36a7adc6d3f70c0233d938367936b0b253c2f7ff82c575d0b960d87997af00bb34b62c131bbd3fe8fc39be31eedfd02347665dd4b4fcfe6b9d23118d089bfe0c2562b7e2ceb25bcaaabd716c35855c3fe7412b465f21e5440d843a100383c4c977e94a80cbc35f2a8a409 +e = 03260d3564894f +P1 = 3af18a0fc539ec5be8eb4a14339bdce9e7e76dab44f7194e5cfa3d6fedb20b2be830d3d0fb4021585e7b8aa27050a788c3269b36bca7b007cff68778f5930c5108d513a89ab7b13e05a7ab +P2 = 3e4a1c7d5c38b1cbfa4f7e4146db636d6d5ccf55e2a316835699c2e355dfc3cfeefa6da5d60c7b102a7d04baafb56240f0dea3fb919bbde9b20bc5d9d36b8821ecf63eb1d0f1f1a706df1b +HashAlg = "SHA256" +Hash = 14644f849388e2b474f12b392fa522840e966f7c8132ffe5e12a75b869393291 +Sig = 08180ca0c2d6bae6ebb5c25c81f5928b6ce50655348d7762629723c425b6074b523d46ff8af60b66b894926b691ed203cce3d81e0622f5365705d5ef7807e377c51cb95c447ce4837094c37ba4f1e7d643aae0c8b3445394bdd2906323b6669954319b8f8688b996c368621b6dc218222112b6873d3d68904722720c77adc8096968743a9f69b06f08f2776c96f943b367fc503a90ea + +N = 1afcf357e95e957ff2c355896a1a2ea6b4ee858588c3ddd7908613b2330fe52071881aef0e709b6402eab4166f63e3747c33ecf6c70dd5a0c0c08828788c2f1955b98901693ce46bdee1e63134d8c9e556b4140241d9f8f9663ae6b1299769dc3d8da948d8b1f101754dfaedfb10a4e160bf033ab99ffe5644598ac07e8340ef7448c2f261c2ed7bc86118968389cefe741663af86c8bd4ffbe889 +e = 73 +P1 = 07653ec4453a9c503d4fca40908a258fb4d151fad2801b1dc5dc0088fae1def5830b42db6ee1e1c2cc689a2bde01804948d620a489be2b61cc07b74bc37710202c9e7e2274a3bfe6bf1875134b27 +P2 = 03a6362227a04d69ec252f6bf30506a375caf662156bd411dc434db9ebc52536e4520d9875f214c87f4ac721c9343d3bd53e82caae24399da8438d787645e16052c4020061bb74ea246501333ccf +HashAlg = "SHA1" +Hash = a60b477ec79454ed30a3fef0105cb24c0d3a65ea +Sig = 0c7861e7bca160770e3f1663ba0bb77690d689f96581d2fec255dc1561443fa57c81fe56b9d057f76a0f4f79a90cac21d127c6b00de0a90ee3074c0598d7b4883c2e0e139d5cb56d0acc3a06efb69df0f521d672d2ed7bcce9a42532f23aaeccf3aaf6c33c3e65f930cdd8dfdf7f9c910f68d1eebe2b1523ab6c3e506d6ba4955c7c0cbc9313fe63ea274daef30538605e7618cb4ee67320f08eee + +N = 1a2d2cd4b0b4af1ee42ffe205fadc6c167de0951b8792b788bc6cf304875993349154015abf8a615ae35ca7bc555d2a399d16c5a37ae12f22c9cda660572311da470c1ae6b278e250ceeea5426ae071e08ee998f008a4eff8c487fa5d36d1888f407d301da2f719560c40766c048a2225233f2ee00e9e89b415f2f77754f6fe321f21d +e = 6b6c225b0f +P1 = 069882c3a7e3a2d8c236228c2cbbf5073cfe3a2cc7a51fbae15d1288f96b5070ff0c58d5d591c6af3f806fbbc8e411b3d6a09be1ac132bab93f68b669b8995bc651f +P2 = 03f7fc096f1c3ed1ba2908a216690296645b29f8b201a55a799ce3a0bc61ffa97575dc912ca0b7d398debc7c9fc669607ab1cbc57131de96cfeadfad0294db0a2543 +HashAlg = "SHA256" +Hash = 83da0b28dac07f38e7ac495b71bbe81775ef79b53a6559151aab3fd38869f2c1 +Sig = 0ceb43e6452a00bd08da2bc7ece2e8e101edd8718f0513c882a24d32e616419b40de2261be8e55efa7f198e468a4bbfba4b01ff79a5162b91ab322e984aca18ff15a6b0c1209769d894bc4e81456157bf28acf5f4fd928f09d4a34424c0ba44d461fc506668844913015eac06bd93ce8b5e1c4279ddd809e813faecac4604efcdeb75f + +N = 04ca43935a8cd5f7da613400a7b5c1bbfbc5f779b02f608ed0f155066f82a457a72ba8066af04cde87c0157f3791311e8c0dc5b7e634d88ec6f19535a9752cc1862f0ebb4e29a050f74484c3f8520a8945bafbe63f62ba87fdaa12316fb35cc84c04ea44a2eb30d6e6b2e55dd90764c1d3a8dd461dbc18cc70971679b16450d5c9f6abda752d0148c34f079451f918861f113a4c48ca46ccf577d56b9e4b5e9471161e70721d831e5277f756e0ab7e0b30c522a3fcb58cede481eec89bb9e6b0b68f82409bb5ddda1d7d5377e0bb0bd7c0bd485c60080e8fa69952b4d089ba437e1ebaeec21401dee7549c5603f363df2e403197422d15e5572da23cd2574d1e50f667e5a6482d1e5ecf376199a95c6f539a6e6f878171777e0556c8f4917e6e3e8b3c0189a7b75199136d94cd +e = 03 +P1 = 033cd310f762e73d1ac7998cb7ee4997d7671a6078d136e28216113f1cf141c2e81d69933a3bcc764ee32daae5da2def506c5db56bea7eb89afe78345b7e347f6f55276bdf01d36f6ee6ee28c239a76ebc886b400b7c2ac6ed1d56bd9dd785d53ce1a0b6e946916cb2624b7fd81eaed4c5daf34f6b447b105cf39d3d55ed19a46871e30d8eb15147e6de0413d6aa55daeab4e171c6b51cb9dfecc565625dc47df4f9944db9905b9b722c6807a98bafbef0b1f96d8e7c9183ffe16a5b3c9d1b0175b60c8367b39748e6aadb66d90dec2dfa0cf9143ed8e5658ed1ae0a196e653787 +P2 = 017ac1f284cce98ee3cd03d4de5f982dc3153a5342baa665b1497cbb52898989cf51e8e266dc46e418cd6f5543d06611b56471cae274c01e0876bd992adaeec0670ad3ee5343680a3416b2be0b +HashAlg = "MD5" +Hash = d9d1f8280db1e4971b8b7f6eece8ca94 +Sig = 023ad5134dd0d64ff40629742c77bbf17000da09bd61787fea4bedb32a2727c5858fa52196c18b0f89c88d8e535cb40e6a5a695586bf0d46ac6271a10abb265a62a7be45c6364d2cae0e1c92c9ae2f93786864f3e8ccbd96793f31b613890e637476d03b4be81af5ea3734e61d3389e723c8ff660a75b2127fdbfe52d1eb6a3837e52e91271b2f75c23c6a431f6eac2af325be82775b605c94f445bcac73c5861a83958b40e3f3a9dce3c26da108ad1cef2c8f39c8295405585735535763ea5bf97b247d7ebd7a8632bf41cdeca342049314208f50102876825fe79c71bbab5e38715b5849e204bd32180f3b779c2779f421ee5e93b12fa7c2c91116f67c4270b6943a40010870185bc5af491bc2c1d501213813c2d86385608ee2e4778b07831b7f92b2cbbb11cd395fec5341 + +N = 30e8bf513fbe590969e2d50e977339165e101f2c3ce0c76d3e9fb8b0fa172bf6974a2bcaf61ca3dddd6c7ac8c17d8cb98fad262ff908de5fbd31d3acf3aeec8763078a1b920a7bed6b3d363b8d003ec03ee8b96b69812749f910a2e4d0ce14dd881b2baa4b16f5fb21f9b658efc767f1ff101b875a73a9e4c26c7b6c42d5efba179c1aa431a39f97ccd2736710b8775f6eebc369a36470d324d29f8d3a2d99a43a0043d491b23f1c37caa7ebfa42c763181c348b84789eb80a2a0fa42a65d72674df9dbe40ef57778fe782ed2c6158de8d123359d96958f1624c762e92845124176a51 +e = 03 +P1 = 06f29c79e64f18f1e642bdc81f3ba270d0a6eb4870705e986463109bb6b362feb5c95ab981558217f8902bbc7b307f31b4831b2adc68029aad4bb54226949a21cb7231069bdbd665da87c7cf761f5b935edba764c1f63ec627223f +P2 = 070a248a58881d86d8864055f1c399c65de88f1d73c38701f22ea9ab4f3e6f1a1baf4388a7099906f50e3ea5d5c5465ac6b30852e964ee98ce10a8574b6b056e7f4ed2d4f801ad16508879d07f9ba232227ecdf39cf912576a676da1a09a8e89d164524cabc3453a20bf757deb78a8c5ad59e0e0e15d3a4a6a725286fcb80d0b63c45b9999b4aa2f6f +HashAlg = "SHA512" +Hash = be1af906e29477dfd75d944ea2e1602e818cfa8e4417b577263d698910969aebbeb06ab1e6d06b7fe0f0f3481bcc341f71543a31cf0c737ef7b96a45e3374a30 +Sig = 1d6183324e82bd79af03fa57b9ebae477ee574e3dcf726600195149e928367cd9544e6644b0bce6c76401075c091f327827090aaa75d22d6ed82dd1973252ec7e1f2224794004d6aa66ca146991f91ef1b4318fbeffac820fd8d61bb7805a4ac8cf4b6550b627c5b6435ba30ba72d21488e08a59887f57bcc2e5ee9d885ac270a6057960f10135b4afa7e49149a8dbb26521760752874a6e505e1e7a5c187dd5813fa22949121feee2ec49467185abbc7398c8ad6d2eb3ad181289bc8ea80962990a92ed88b31fe87de8e4e0c3caf716bbbda84676acd0884036f4658090bbf151b91b + +N = 05ec31947d204011df47be20337b936ef4104db166279ffaafa390aff9ffd384dd530af577badcafb20430ec6c1df17521345bc1e0476c203e7dbd0ad40fa94959245366712cc6a222d451d4fc7843503359f8a09ddb9afd5a344a1c0bab0bc4f87e544277704297b94fa3d4321323b611f7a56470d69273729633531c2eac9c9a362e9345bf2fa8e8b0c02070e55dfd6fd8b032f13a2dfe748669bad7dc312d430fc1c2aaa200a5c1a2181736c24ac90d79189c5a0f16ac4cdf4ac4c98ade51c39e914e83350ccf61a02135494dc7d9d6d867e3808b1f50eee849c726567fcffe69c172076d16e55d75b461127531260b73b198fd02ee085f0635c0e205e2df9603c73438d32aceb338d0da97320e7d0a91cc0373b71ebba62e75f83a2e5ebc5b32001deb84a80cc7cc6d357febe81e1ff85f6edd3cf3c64f907f85adcf28eede8b20675d369cef268024e5c4cecd723c608d64e6915dffcb7e57ecd3746625e2a1 +e = 03 +P1 = 35058ccd6d78712b4373262d784e626c6bf5aa469cdd06d3eea5ffb1fe975e1261cfdbb2cea509fd59bfcf053f4b85d5ddf6652a38a4f2d6ff1d311b9e196ddc4636fcc4a8438562dfb4973103c949ced06f690525c7 +P2 = 1c9881cdc9be7cc67cb65a04d07db3f56d5593f47d13c13a969c1c9c15e5aa2555b4430ca21532199125d0675fc0f078da13d02eea526d939a7d9b5e439ec9f36e84e6ab9691a82279069fa3277b35d28d47cfcfa6ebeb9038f4682375f508ce7117a14e57c245b9e2c7bab5852cb62fd29333479f35b0be3922aa7a7a568f3c9bb93241efc96740891f00509d2839210d83ecf40e27df425f6940a14680953a3752d552fec01d343987786990ccde1ea0335710ecf860405d5e7b0ee3de7892f61d26f08c65771acdb7ee80fda4bfcc9c8f12a078c37fe5d8f3499213bba6f30c29931defbb1923a74e6b914d633e57f2fab23f087354e4e638d4b250aff65114d866f2c971a1051bf99457 +HashAlg = "SHA1" +Hash = 7ae985a00380537f86d0b2b7f46d47dd32beb981 +Sig = 02a39a286086b0a77b3bd3ccffbd7e7345ff7436a085bdfaf052bcc3f87e3002278a869ec238042cb14a1a1e76a5ad7ea83da3b5ce5356c1ebfdddb04f8b37555190859d4f3caaea3b0e62d8fbbd39f7940265855285e8d8a5900014c5c81383823b21a0920ec32d3fa2bca71a4049af61e1c966f5d8092f40f278a246ba96a1af0e10fb862155130eb3a966d8275a4a6713d2935de3a2985cbdb0f787c4c74d9682d7f9d86518175cc07c248fed408847ec4ae9945a66decd2523d0b0c940b5116b801f441c5de0a1038cb227142364a8a02bafd871060908927e03c421251c1794532d51a23c05b6a54f88787ff841f07c96fb16a599c919909f731a3578565380f761913e575089367ea730553c270e24aa3b87c5c5ea0bdb8218ee63340dffae30e6a6eacf6c10a31a172a2854a4c322092d1d84f8202a5dc15bf036206717967bce862f697d5eb98197d641a42a0277c6b3c8959aaf57dba47e8c1803c9276b + +N = b46818f060a56a2e73f2edb70f3d20a174560d52f0e73f81791a618efd184c44afd633392e9b7d5da1157dc3c677f805c4833c36822409b54fd73c2375ccfaf06b5300f94dc42f3f83238c9058de4d703b6933b9abe93f7f80e87a503fb25465122d90f157f696c21a3f49c6b0be456b3f792515feebbd037556476e34069faf6ba5cffd63777b20933c3b6ef4a58d7cc6f1e15d859b4cf9d993dc2078c08f44b13938f218f79826ded6a48ebcf17526bb5abc596558831ca043d3d430ed7ace9365c73b815ece1ea2ad0831e962596d +e = 03 +P1 = 018ac33ad6b0b2b45eaf3e5cc2c560dfed80f25d6ac5405b55849a6ffd7bac8c30cd37a50e935d2244f4bdfad951febcec97b593e4b4c74f944a21e5961f57751ce5c4075ac7 +P2 = 74fdf896faf9799aa5f1e0ada6fe11854b717100748179aabc6797fb96a74ebcb55532ef88a8f680fd106385e6dba920d3776c1b1c0c2f66fe58af51fc6bec6668b9d8e20b3a73fe9ae4b849c9c6bcc20b1d3c76d06c67a5e1cbf36e36ef74ee3614d050e0dabeaf7abc0f033f1136fd27f729d22e253aa8d9e10e3194eb105fdb3752d0e5488d81df162b +HashAlg = "SHA256" +Hash = 5435e7315516f633aa55a9b4fef5deb48d557f9ba53825595fedb42718619320 +Sig = 2532e104170beff12eb6fa4a2738affea5c7a9d49117cfd892fb678f51ffb3979787d41addf26cb2e0b23c67798113a43b0e6ea1dbb89cf1f9033ecf2e1db624785690321512d5545b50108a2a65d5b5404e2df806eccc0133f13bdd54ea864f3891621aa31dd2b74b97ff6422fda5a82915777f2f1cd32ddf96042b4a005166564cab68b5495ace4f90bcf8efcfe2c2f387fcc3ebecf107b57adea2cc0f4b3804fbc2a635c358a1a1c635c4a1bfecefb6c70d37f19507c72ec14416261455881c4b935c28942976f3e687a2bda3a069 + +N = 44880a8b6c92e30135b1b602f6e498c56546147681508960fcf743fe5b59d1d9f213fe61299ab012508c68fffddeab8fa077b21e14dc08fc9357aa7a3897a909c2549e7763cbcd3bffd7e39ee58000c02f3e9e58c56658bda692b509f9f430092c6d85227e35b8a2a46f4e6493ecead180a56d4be8fe2e019af7ef1214dc5d4d2ea7abbe82c11286d34740a2f1efd6bffaa08649b4be6f9f244a2ae8ba2880fd88ee5e7bc97f3192cdc2e3c6ce91baab315b9bdf63760a4e8c6e6f8ae69245b1ec2d09ccadba8f29eda68d28d16b20fb0bd09b13c08b65f87d77cd94f26d613efe3c57b9a483e269476ed4b3cdebcb49c306fc8f96ae57b9163ffba6f9fc18bc54e22b0a8d5d13ca69acb9e7f794a3de1924535c37cbee9077e64c5c24a23c8d +e = 010001 +P1 = 0295453e5ce4f9a70423e31ac6eb52260c1396761f96fd8a4cef28d43dc71b4d5d3c19384b17226a6fcc5746e18dbd07181073c85a59426b76684e1631875246f13fb5522a3f0fe2b00822915492fd2c1baa68a8c1f68745831c296ed10386e7c1b1626c793dc404420e1b5127363afdfeb9dc0dac0828cdea3d1b16219845dcbecc2f7cc1baa4a64776da0946f1026c1e64f5e3ef211efba2e5c3e8cebdf3685027ad72419ce0c39836f881fd398cf9b25a1da2951daee63d174022d522d7 +P2 = 1a87e3212db920aa406e446cfe6a49cd28a5c506bcab99a59b8bb15c190e96ac448645b32219220a6531e821dc93de012a84c0fff2aee34849675033899c083d4c4bc4a3700b342e91999842578ff1be5c888cec73fa5dd3c23a94c848b7ef14d33b +HashAlg = "MD5" +Hash = 59f2a8f453fe1147021f82cde53033f2 +Sig = 2c93292beb5496d24f24f362138704e2d0a1fe85c8f3b537cb8081d67536060d6255f8af92904cae4dfafe8c285d3e22cc7260260329b72ce81fd80b1452365da396f86cc92a3e55c97def22a3fdabaa3c28f2a79acbe1fcb378a69241db3d9c5d6b15e351fc217583589177df2feae5f92bd4c2f0bbd45c5f999d5f126868cc9b0d2446786f13aaa05f6bbbb84d2403feba759874d760557f656d1cec8661039b1d105da60eba15d22cd3006f55ec9fb6972f40376eab123fd66a78b7f5f2805add94cf59dea0cf5f11ca3a13f9162a8dccbcb3591fe719d6d3b4cbd118113c1d8fe494c35b9c5f93519ff7f24b8b7f79416229c77237739f2130c272ce6d91d221c7a22786a0f62b0f9a25196782de3760cbacbd60b5eab142646f7b34adf8 + + + +rnd = 1 + + +[RsaSignPss] + +N = db5f257d59bd31efa28c8283d817ec852a469047158e1aa484ebd012c8c9cc79f7b8b27e2e5acdef6ddd75179a1cd23b6233fd38c32dbfe31eeeed647368c11d4c442ed2fcbf8aee7aa6ef342bb9b599acdbbf878f2d19ccf9d8f188943db055fa452edd96513ad5aada75dd4f6a80c1d4d01a3576b8f5f277d248aaab45d409b9321cd35a75125fa418d1fd45c6276bb04d152553cf5b4a7e23f9864c34032c06ff5b422eab54b6c478184a38b4c6fed58e7291df25f28351e0d77abd27160d8294f26283ca1c16d0005cad5e2c300ac3edd56b3b527a9d347a4c666ce17f9aa002531f722933f26f702b4ddff7b5ad0f378546b7ab1e2ac29127395db575a59f575cf4b72e26117a3e1b74c40bb9261055057206d6eaf4c3c758a053079f4a4aa8d7b0cf0ec0f40c4611115ec72daec550a6100063de27e5952b9127b3e5f143958f58aa0a0972d091eae5437bef724a782251dc12d3848a0f70010fdc575c2b25a4f704e6b0fe498c0fd74c29a27f814e44dd2c1601bc319a367eccb4bcedfe585f66749c9de2343e1274514fdfd3ba672b6cc9638528bbafbbf325fe0d0741cf65b04facd554035d792f948ecad8ef4f2e0002c95417c34679b04868e5be47ab427f8b5b0bc6bb230c2a82c11a29c0831777008ab8260869083e4bd722c036e27af53df27a666546cf429889ba9a388496f740f907c2d84e6e870ae1c5ec33ad874b75df2dee858f5cdfee9643237b1a67a6e8df54f2987a29ad00a99e74d04390156bd75086219df20fff90e6f9f75cf82561acb8f9859418442e66a121704200268ff00149981b066fdf0b3e99bc5e992e93b1cd0d4590cb32c219055ce202092e00b494c378077f0cc203302cbd9f65f001a3a54844ed206d4a1281595f0dfc14da8eff2cf2135018b54d4672bd0a34c86240dc764533513f8a644ef9c93065fc53d151e76ee5331f38afcdfb67098b789884d5b0b99c0cd32ce0dfd9b01a77c597db89e634200751ecbddc1469a8fd9492e5b4e64c68ae77d3455b3252e3c888422082e397b116c42095f02bbc3fa7e3bebc5bf674dbbe8e5aa0587d6234638f7b9a032c98587f4ef51d08563dbc138227a564bf7bd24bd8d116e6753460a648e38a4c7fdf234679ee74f23e7abe524603939df9e9d5155b01f377d7fc7a6d38d202f060bd6ecbba5246176a215fa13b265efbc36c8694e867b09a0b34d1767f872e2468f7ab621abdb82b8aefc660361aa628e6828dc162c28a31edb109ff32f823ac644f4d95e51d8c9a26921700b9eaea44ed56ecb2c260336e449360be6da241219d999ad79972c8aa1a177afb5b84c021ea47b99d48e44ded138b0c9aeb4e882cf76d0db526d6460aa7571895710ffe0e09bd70897ef04e72220e34537d9908da702908e7a7fc644e5eb384c89529a08d73241ca146dad08471 +e = 13 +P1 = e932d52baf78a5fe2d881c8f4d7be7b506bdda11322b80b612df8848f112e69e24eaea021bbb85e967ab29e6f0631e68b2aacf9fb7ea09544045a0a28f0a2fd54a466bcc0a7132c6ae237444be5982223cbfa0d8647eb55d2af2f2a019de5dcd150cfa45f4b182d5af90156986ca03fbb635862497a01bfd3422fd388b8e929578c14bdbf132ae6934c0a94765428f4509d647e763b478ec9ee9ab72458d1db048c3fbc149a1318e595bf699aa61cf92405720cfd6372b1c34d753b74bf7b7d9f551df9717c2fd65fc7df4da701727324e4f726c355916c23ddb2b48893654b522ae1013ca895776e53a990127c31774ccdec03f1e00bdecca618ec9673cef628eb0de8ba9364148eca6324b4cdf88a62250cb729bd549865f6a563fa4e85df90420371eefb12a62d226912cafe05311215916683886d66437c7e9b491ff4667b6c7a131d8e301a05df117b38baca0537cd3ea4b5e17d3f27d856e41a244f842e56f663efd8610895b0a31ef966e8c9b56fd51289a95129e4eaf542a3f7133faed7f7e05f9886af50b54fbc64c1663b7d6e0b5175c57f237db7973de688ff2a52383bf87834279ac6785c4fc190a4c158761ccd685b256ea3e0846ad26206fba4f55fabea691b9314545d02053042955ac46afc439d7f797cccc2e909c790232e54288975238064c1e14160ee66e683f5eab3032b51323346f5f1164e71baaa3 +P2 = f0d236d3a88c6034773688c37faca84aed26a8a3c01afd1f40defa0cde14ff27e52f1d5dcbea9f85c66301fde28dbcf4d6182341c71ef6e92c7eab9b9dba105b583be72f630c8f956354be9cfcead994e501c5993e9481f2bfa8e1c20fcf0afec4604f5ae6d920913abc985305a14ff8f558ce16814663190b7b8e8db1629837d345fb0f7c6b6d7fb168bb6a02cd6ba0480bb59dd78844d6b72aec5a9f1c69d71e0813f3784dd0c0f5f79a2c2b72b92259a411b6ba7fa3765f72bd39d8c253b10370528f73df70dbf10b27f65de1364334775f46b2df7653200efdce8d9dc67a0c424ee9a63df9cd95fa7ccab8dda09717fbc31eceacffa8037daba7d6a410717046b6ead2f49ae62a7aad80af2ab777e97279958f39922523aea3178855bd19d6637da4727a14d2ed27c3dc5152f4fb560c0d5c222b23f2350510b6435d40a149904d6cd1e77e48d9632fb157bacaedeffdab97071b3e0fdb61c9398bb23fc4500ffd0085edcd51a243faf88cb675d35acb0c2efa3c8fb0853beadb49c9db2ede3782b45cbd3d5badfe8cdfdcec0a31850ee3fa311155d96cc0711723710b9caf20745be000804acdd51c1d3f86d72eb262a2c2b49231e5bfdff55da0c568797a68d175630802759f12d7431629603dfc4f74828a1c12a50aea1e081fa1b3c01e25481018114c566566e6fd7395a5029812c603e0b92cc4d0aa35d345eff9db +HashAlg = "SHA1" +Hash = c573f59dc34595062c026a253b381fb597cbd769 +cbSalt = 20 +Sig = c1edafb88087c0caf346245d9a97a7933325568597f0cb49cefe58563600500029012776897aeeb0a016abcb1387334c3b1486d266e4d77df9483363bfdbbc001fba02c001db531c7ed3380a407f1970a9e0f86afc9dad6bf73de1a8fe7ddfdbee7397d5c7072672b83888857b3b5a9c42e382b0195f351872c8be64ec99417930f8cf626beccbd15ef664170ae4a8e0db406c6571760489da3c1d2a392257b70f1749ba33df3ee44964de40eed0a448a39e820f160793a63c084603d48fed99a90fbe30faaaf7261e5582d465671aab69072b957450a2e7c76f33a37333cf66e9d04fdc30e33d4ed13da644bfa4a1c31ce4518faf22165d361d5f5f8c864a6159418911aee7661d40521edfa5d8571e9dc227511928d9f066fd072992f86a7c38de560866d01848aa8aba9e51a2cbad55d1756fb799490c953c6dde176109b234bfbc29b69c2641268e12e338b8279a43da755262684706fdb2efbb8ed15ded2e4736d073aee20d6e83f0d55a368133b64483d1b56989906da64a4042d8a76ec1b44cda0c523415b738710ded12d98b1b26df26fb9b0c517e0eef9e21778c5ab3253bb747e62f9a83ae428ace05494d1588562a15436cf598c62a613c63ec962f9b6e3eb796145a196cc18ba1c7a967fe7afdd8662a8b962c8b1794765862b22836d6fdd74d8f9aaf1cb43cae99fe3bc35db8e3dc552f1303006093e3e3dd73e7f303a21c61698c06636ff21b063e33cd04adfd10dca936f2f00a3bd7e29ec101d3d4f3b54d928a2b69609bcf9b5992845759a906e7b572f85814f1c0ee49da3d4e164022384cce24050736f79b5dda340eee24d95a8e131a75a252f4720dc99ac957088130b3e682cb24aec32ecd70da0ad1b7e1dbf1bfa7fa7a923e824d1a7cdba0d248b26ca0735259a913c6143b4205c61222663ffe280c0dd413a11da3693bb69783fd296acc2c527eff7a2defd94d3c414ba32a5601b458a8efb0710dce6e4d7f6e8ff72ef4d9003190a85e7c51c4b5b5f8e372bcd273f283de43b4703e01ef3368ee8c4fe95a893bc30a911f0b810ecf153b4e795f512ee82bc415309873e72e5c4f155c66f4dcc66e67909d25f1e97e592f08bad7ac7b987b533bbadcb484de80659daaceaebdb82e2512baa3751d756fba3a91733c10431126ed949b27540d5250fac807b4f49a43f0b952b648e971c13a76b3a043422ce882fe98e26986a7a66dbd93b20099b3e84279df06c9dc767aec18d79cbafbbedce6540017de72940894c823da74bee3d5bf8efc63446500534e4010593a69627159cacf3c7e23a2ec32aa78f89ac8eb11b100f2ff1c0c28772698e219a8621ed32f6c2e100c843bbb9c792b22dc6dab3f054840ab505dbeab697ad3d2e0ac7aa1c031df81bd3ede7d6ddca4f19698d217e4a6d2b8b115a8afe4427a587dab1f08218a04 + +N = c53aaf5623fa857e7d783051f9f6750ec9890ab60007c67fdf8aee0a5af5abeb0fb6914760ecabbf667ce0dcd8f418bdea709c827718e56ccc98259b886c01d19f3cdd42634c48420799aacd5765efc9635022b4462bc4d37a9c7b78321fac08db46b448db3bdde1baa1e29daaa88cd0d4aea860bed85d57d207f825622079a96a28321cb2d47c85f09edcd28cadc5ddbf6f55a1e89889df57cdc9643c959fddcf30f01a65361912392a96d23886f71164f1539d42abe26561a67bf773873d9d83306ad131e78d9d5f33af46be988e157f76e6383146be4645b916ebbd87803c760e334cd47219599d3e28235edaef5da639f48f0dbe47f7b8b55a2c7ea94848d639a718adf5fa0b4408bc90eecad2dc25a6620b8289cd5eff41138d0d0b788e725dea9a84a93c4b37b4ba2a191ea97f956e515fc303c0df9c324389f6da5282ae6eabd8a7be70c485e3fee26bea0ecdd2ca9dddbd3fecb2a8d2704a026df381687986498270e0de697e41359adb295ea5da1e965683edab1c06e6b71fc3eeb6032af838ba736fe834f1e0377e0c3ea6f10aa3b71f26d8b1f34f2eb9cd92af735ec03e156994338ab0c3c64e1c74844e5a37a2be0e8162a6e928ead818068f780e82d586beb86cdedb12dd49728d7eba59fdb69282999f039c6f7b09c8b37f42aeacddbdc1113c2301d223fbfe602a7998b1ce28e9f2d5d5649b522720b17a4d +e = 05252b330189fd61 +P1 = dc1d40db7a8a917bbeccbff4b72b5a0fed97e40b0fb0745844f1fb9463de004223d7f18e4be649aa7bf9761f9fd568479e4516c5e38deeee705a9c44c63b6d54f91ea8903a07cff251651cb363f1be0484f999a77291076fd0d8cd1ec123fd5e853cb2d8ddbdcc59fa58a7696d9dcc2cf318461600b4553ee63639b625fb563c5004fec8db247977a3a7725432e64b000693a51fd75aa3ecef0743a34e8762a44d29960ab39f77fc0cb890a46bd74416cbf583d11b87671504e1e123d84af234db3ce9901ea15b02a11033a25f85cf9ce8f4dc35f2f31b46945bc2c9b23f7990822682302ec76057579eef3fe6b77d93a6a1a79a9fe5db02ebeb142bb7a055cb +P2 = e5624bbce3ca1efa65378538358b8063ea8fca07a32e5551902ccaddc0a14124990af07ddbbd10b5eebd886e79760f5e87a6a88eb8708abc6217825270cf888578f45c442e2175c02bbe8d2df199fb81175343ecea128cb98f4b93b10a7ba22ed4e4efd362e252639e9815f8117719b7bb50c524e7f088677ef3783d23f4389c1230f814ec1543134135c4fc76efc33cb22c60b65dd73c99e7ecdae9af29c83b95f93f81386f932c11e4c09faea72f4746c201b6a2877b8ac16913d40599625c918654015c4968b1841ef156c3fba2027783b95fbfbf531147ce6043fd4d263697708dd567f0ea617c8483d13fc35e318ec0f4e58df4517e0d8fb4c34fcf2d47 +HashAlg = "SHA256" +Hash = 5bf0b47a953d95423752b3b9d827e48aacd950978bcdfe4f940c86defef6c6fc +cbSalt = 32 +Sig = 2cc6049f4c0eeba53871476d900364006901c3f595204781d2a9b065f191e05a2bd89f708bd14f6cbcf3a4ce34f6b692bfcbfd95b8c736a82d0ad6e9d8799cc92fde0876351b08d0498b512e1d6fe081cf40390f7fb025a5e388752141e9b0543d617e7b95442760bb1d26173c8b24fe0ea33d57a61c939a6cfe5341c7ce5d5ad51c2e3cc39132cb045933eb17f076a7a19c52beefbafe234663b2a5f6a9f8484b2971107813e1254f2ccc01d595c3aed57af4f509d36cc5067d37d120c7b93cb7e3f11480e9b1b2b510c2fb43249708012b18a37a7c361be03e6044ad595440e31b381b1e17c0f597f9c0c4ad95ba66f04e74ffa47a601df89394c46731f46885e1dd48640d748aaf9fa8dac37d6f0cfeffb59e1a05aa378a04ff78b52b594e9e9f78dd74ebe06556a3e2a5886b98ac199b6693157c3687ab7bed4e3d58538cfe7290e7799988650c2203b6d1d4dd34346d7f0cdb129dbcfb2277fa865f6979ac11a26a9ea0428e08cc778916eea768a3f99b1c5f299302793815361a8ceb58eb43e176cd0e5af0eba7135162b72240494e0ea40bc96e04d2a12f66fa846bcf5123c1ea960af42d48e2b2201dafb2de32fa352819653f3da10972ff2265198de29127844036bc115cf87d4d4e5b77155bfcdd5da30e23a07f1ad606dc19137eb4cc5574c41e5f572fd3db292c1cbcf0230b1a70956c7a5a673571bbd15676ed + +N = ecd4e916069aa8d5b76956fffcedc4df147aff4192588a3ad66a2ba8091a3a13d5c5af4e6cbd3cf9119501b787f41f1ca764aef346a69d82fe0609fb06c9fc94e0177da82a3cf12d360af0489b041cb3445e5d73f46470a351e134a174f5b34d693978f6ca0614a8f0b4ce792ef98359e49c7faf766855adbe41a024d9387748501fdff05667894e388be83098bd7d2bb72235a78fdfac317ea74dd3395936f9850e87960054f180871754472b0666720d5c61eaca8d94d5f313654ca4e5222334b72826b1c8633988f425e22ba09ea2f8a70d845972b0132086c5620959cf0bbd271325244fdf63a3509cd2f9ff2119338056bbef23600db392bd2c5a356ba2c4857bc78f8a6ce882e96f0c90d7c7a4922bf46e2b2b68443e01382becc23197541edbe19ce5ee991b6b5d19faf14ab1c200f7165c735c98212e5cc27d2ba249dfceede303fefcb9a0dc496f3a6eb8f46082ba46c0d8d8c94a221c9cbb3833badee557889f1d5f042f2f4561f4d74711faa5ea6776b0f95c6a767ed7c08a84675787fed439e2eae0384245a3ace3f816890e01cbde05859fdddb0c33fdfc32af498f453d52ffb4a518dac334a1516b335065efa3399c68d38acba5ef0515edc4aa9672effbe6479f912818a7e65a25e6719894afb57eac7bf1fba1a64d32eb64f07565e155b58909722dfd1b8999abbe2125e068fa4495a34c116080d56bdccd +e = be3fcc6b6f7da1 +P1 = f1575867f1a19cdaf714f11653800ba259935351c773549056f58a93859fc70f9c350f56a1d56a3901f6061b18c09b5064222fe5b6094dce0ec4437d44dd8469d9faca587d683978cba9beb25e6501ed7313af01d56fcb622c5d4ef857aada303181a7a9e8330446b698062e84a4e0bd6618a04772d1c137aae767f5f71d01684ab63b57c2202b98f721ebc07e8cc338de9b8960040472fc0bb6d47c0923f25c4dccab6b55f295074ed54733cca02cd9bf471943b441cb881503915c8b0d6122a6eaa8de0bab010f4b3a491b304bc8388827bd2f335d89a52a9e293786560b257a19e435f7c7630e9f61f5c096f47439b8eeda5e4516391065a67f71a0ac43a7 +P2 = fb37722dd9116be36be8941f74257018e54680d68e05ed6726b34afac35a6d42c85fce93df1e942ec831318045a734a5fef9662052bc9c8e456e2c9474a2b51c7a01d05c23560fa838526441418a2163b36693e519bf352ab83e6484464cc0911df338ba1a10a64cc42dbca7aace61e49db7430873cbfb4824bb1594786fb7a4c6302dc638c5622388ec3f8184098b4c63f1ef0ff60a5310050f89006455c909d672bef856853f932a809c8c5f7c2068a7116567e5a26c53eca107b9136a85ea1bb81eacc407aeb891d060a49c2e063077a8034796a15e2ca593b7b3b45f00fef6a61f2b7313648443f95ae084354574d3e76a97152012d2dc00a1fabf227a6b +HashAlg = "SHA1" +Hash = 3c5bccbac2356eb6c5efeb2216c6c6aa6039775c +cbSalt = 20 +Sig = 2cfbad897e298bcb3c4e99e791411cab5d9ff54125bd57e53883aca8d03e2851ce9f6f2e60071a305a9739bd19eda9c59cf43e2b9b8f126b2a7d2121f10155b90feb80e87a94ba757dd109c51416b71e546ab0c2ed377fcd2db74878fdbc38f1ceb6abf3f2bed801060a58d65cb2436a6744b9b193cc7d7133908fa69ea12780ed45d77f4eafbb9b798023874d9e1e78b243ccabc02a4a567d7558b587b5949989bfbaf8476fa9045b16b1c0c00ddd5696bf8084d222e3692fbf6bc349518fb7108d29688f1a9171aea613c7cce8debefaa81ccf53f1898b1ba1eba381b03c9d9cc5d81c63dce0945e4c0a955820811391d163ef7a20aa0360eea45fd563af55ea1d1d38d66466bc171ab94c229ec2aea3ac289a4cd0977b34b7ca2cea77654729b69f9a485615383546360608a3473737b63113c105e56034d8865609bfb5c4c3adad9f142f1ed69a83c4b7684ad44a972a8cad0f85082f8d3a019ef56304f8f5742a18d22be555e12cc7b48a32b06802e9f88cf58d49857f38f5513b0997d9f4816cf6620afac23acc8adc74419459c9f1130ffc955e121a372249f4b6fa5c1d3d2287c90dee28e885f3ff337b91eb44de99cb09ce872baa24beab0cf4d8dce48d3a60505adc6719cca7980a857500d85feb679d16b7021033666e920750a76cae7a348a6bafe230e5b141b3edf1a01cdddb1ac3cdc8b221fed4f26b583d30 + +N = ae96c514d6b5e6870c4536c343335d1ee1aac0cc0b2f4faa2dd3e033e43b8df1e781bb3803db53545a8802a8b9a76fccfd1271f3ea60bfa3798cca935c7bcf3c45978fa8fdcc7759100608f168b6919ee296caf15f90a28d05496f537156d5810b994312c550f01900e9189433a9cf34c92f94ada9f7835a6da398fdcf07b437c91d74d7c43e7a6cc1d61e4b5ffda639048503bb7b6b83cccc1fc79efe0bdd4bc6e3cebc1bcf9560a6d97089fd55f94adcc40d9ebe50d6a498395321ac3f313e3ef9c112a5ad96a9f8bf36d2852012ff6d630ee0c55a76868299cf2dd691979c00549e7913f80d56ab752e521b6debbcedfbbbbd597a942877112dd618754ea9ec33aacabb7646f1b3dec25f9a2db3525165ab402a1b2b8fc51b4000983074d5215e3668e9c81838babd78b78cb223e8087007860799ad1f32af41120fb128c0676d83ca5c0215631a7fc6fde7f850660524d5386ea0105f161403ac69cff2bbca3a850a42fc10e867841eb80db93abcf900196130d12e8c44ba927f3514963d +e = 010001 +P1 = deba804d27465b7ba8133b3e10eb955f0b1796c06af7b0a1ad78b0c5eb15e65d58dfb157c7e3c54324de226c49eaf411a8ad6d0dcafd3846081345a09bbd1f38a3c0411d431a474339e92b5c4b48f38205a6cdabc40c6005c9315f37b42a9af7559c9bbc16f8f97afbadc3986762facb05dd71ac360ca76648813015db1bcf0656d6a61776c4c1c22132e13f5a9ff5bd253f58b5de6060a9579b1fef341bb3e09a4128e8aeb491796761e65e7a4e9f5ffd61cbcc8635ef0a96c9baf254b769eb +P2 = c8ab555d070e38a54281c4c055194986ea58bb17f533c3dd2b418a3d5994d1306bab3efe7b75e84972752a7c37798fde6f852529b1dba1169c13d8a6e4cae8c05abe36c10fd58fbb3c9c849eeef0c6ede89896ea4f14e8ac286fb8bf9559a50e52efc16e3fe1705b63b67f0e587e32b6340cdaadc5b251353bca6757d74e09977c2a51fd2ed72568f8ca53e710ded0a341bd3a669a16f805208e27b3016949e6ce56953dcc38309a8e9e5ae9b37d60ae8f2462697b9916d0d723bd97deb68e77 +HashAlg = "SHA256" +Hash = 1ea8c820432b848ca3d66793993f7041842e7716b7161a52b27ba21414458457 +cbSalt = 32 +Sig = 648d818bc777b779fdc231cc1996bf5082da2d7d13064739cf66002e3d2cdc326268b7aee1543d7e2b4fb60f272e1e6deeb14d931ba2cad2ebfc6b6a1e727683a71f04a008e3ae0c6fb7bd0f0feb02a0f2bf31da26ba3eade532071ee5bfd26ba72b20dd83440d134c95297e9b570fa1aa79d243f2f2f5c38952f3937175b7c118675f13e4e356964314ac89ac90bc59a9019c50b720fd75fb2c72f2d6ba9119277673011c7ba6a59fd854c9f21648deb5cc4f599ff0874176550750818ebeb8fc0acb1cb43863c74f1681dc2400803189ba42e5d4519263e949a0b7c1bb1199c0979c77b5d2adae3209acb2f3061446dfb62b133c9c9c38b0dd2075cdcb9c2865a38cb76b6347e05e594ff547babfda4580c7e3a431d5d76d2611dd9319e207b4262d00bf055437bd4ba198437677ccd86a247b7b85d1e905f4ea6315dce3e9787f9a993edb065265bf82ddf398f91954f12bd1c5bedf0efbe3fd97a3699bf0bf683399795795f73af81f9c42df6eefead07604eb71b35ed7931ed6af86e9f1 + +N = c9045a49935d3d654f095222d5808718bbef4c1baac94055f64abc2b71281a64824bfd16be62017b85756f62a850c1fb3256801806231f468853858420f3c2955c137f66e77f070fe58caf1d307637218d046baf2649988b0875450bf5cca7793d5552166f3618c7c35cb6ce5fb76a2c7727edb8ff568ecfa8f877e80a5b5ae59f05ec498dd26103de7bdd19bdd92415b0c29dc355442dafe5a1c7d0c141df5282c52888ce6415d3b1ba81bb26838629fe570261422eb0c522bd0d43a12bf9e3ef252e2600e9938647e3c3be79c07fc8cb6e22aec520c518c00c4e81e74605c220e2977629f48ce003866089c986fc8ff8d325294440c271d3de0fbb76aad1130685d92d1f67358b04cc6dbccd466d203c82f8bb74fb877715bea14dc3ed8ccf09de0f1497f324d3929fba4e89c0d4fc0bd1c5c7887ed1af597dca094a3f29c3cb24b28fa4c7486a5baf01de8f64ce47455c71881f57793342ae292c7357575bb2a74d96218c86bd177ad1b3eaa572803bcd4de9cf9b407a58954b445dab9ff1 +e = 15 +P1 = ef98424feaa6fbebb3d6aabb2c92f08cb83cec9de4b1cf7cde55a9384cb889007aaa2409b818d4975380e5d4a93222780193fb38ea722eb8144f021e03dbb427f9df0e6774ea650ec3f3056c2801e38c7d9bb1652ef08d5f69132e506a8d84aedb526ac4f3c19c887e6bd34da86039c5d20470370edb21d8e65eac871f0b36c90fb72b24f70bb75f5812ee4a9b3366bd64129808bb025ee3b3e6ea14fca683717a9f8cabd915c18937419f75936be93f5c65b99cac4b61a51572f5b93b84a1fb +P2 = d6c7e1fa738454dc9de3e9a88a635ebce6a3559e62b773404f3f95e19f3624a681634ae734b6a141550bbaf3ffaa6bab1dbd8be7c288664467071b56347d22604f13cff620c2c50a5cdcffaf313700cb4c46f866bd88a2fdf0562f10a4341aac22202a34811be65dfa9b4e40a6bd30dd5066ef67f2d494d8c04cbd4fcde44d885596f41290e0e88c82cf39d27899fe546b28cf6af141a12dd64705671f822fab598b0846c22ddb616462fb40b9cdfa8ac77ccc862a8ebf4cfdc266f6ed260e03 +HashAlg = "SHA512" +Hash = 2db4fc22a6ab271276a0990d02fa73962dc69a999e36f9a67f044091972692c2dc165fc01623c43f2ba6c99657556816589dbf144f398e1e9aecb526431dd220 +cbSalt = 64 +Sig = 8d434810c2405108284afb724303f548bba537b025c5aecded20728626bcf8a122b1b233bf26a9ece5b1b40813f6c069eeeacdd0ac8ae1ce979b16f3ff74d88766ea000567451269011d3c205bcc98a8b22268f25683323db34b5b9c9d5bb71a34b182d0b3dfa00e92c2c220cdf8d90ff50a8070c10dcb1ad292daa65204d40bf8bd75eb50c4d41f4aca4849575d8bee8c711da36a1fd9eb5037e7782f5356900ceaf80ee01238f155587fa02308fd8fd9f9b864933c79235530e61273bf746152484503987e19a6c5f27dfc9e2ba9d1dd6c0dee9ed6aa906a8a12a89e10d11e05e3e6831818f2be23665231db31c186b28ef0e85a347e9baec4eb4c339b6eba3c8c1bacfb493ca634b27a6d7e80d9be8266b96536b7bb57e7a04c7ca527b5065926cffb382a733a133a957f5648dd5becdedb54655301c9be1495731c59a1f0fd2fb167003f3f821ea2ceb00e068caee92b096b8fa4a040a23c9b0031f8dc4819735c28db11b321ef60f679b542ff2a2791cbf1ef5cb23506953429ed2d1c5e + +N = bef92148e6f984d35abcdb837425cfc32834c3943b86f18d3d1aeb241d7e9bce84566053a6b1b5a327d94b7d9c454ac6f5c5369db11d509f5193573c7235ced5322163f050f58919e17981335d72f089e820725782781ba71a61e4140b07ffccd787ae38c061a2f07fdecfc3df10c1634290466786049f4fc2a5dcce97a94e8d00e17d8455497d4ff5ba27bd586c5594c5dbeaf6d91538c86c931131f03f35baab998d7bc5152ccc839b183825cfd13e40a2a3f87049884120dd5a1ecd9c4bbfa7395e82c2ae046ef58db74e18fcbdc861c121a587de50d17d9f489617a9aac6e81fd979768ac4474d88b02c0358dc11341fd1732b7242af44dbd1ab4b7c141a8a2be2d05b5bf81ceff058ee065b9c35233eab813d0acf21c82953d7f33fd0e9433ee6cae7f02ce6d1c0d63d78c6ece3ddc909c1957459c601efb0d02f28da1fe9d5bfd22ced3c8e03ba33f8011093ef39ee6886e3730fb4df0e0f03e613d192a82bcda99bc48962c02a22e43d0869ccddb196d6b3aa24f463d7d6e0d43698cd +e = 03 +P1 = e568c4ae8841cc49e24f4fa92fa1a13c91223b87ab33cb294490744aff2ff874d9ea9e5ebc7307997c6eeb7cf4c1adc66322dc76202b7e170109a2415a26676ee4d65eada4c902018843509080b36b002402a218d7e90a2f1dbbbfc39d2ef2bea5272bcd8126055ecb0f7c2f2da24e6152d89620ca61f484d02ad3c2a48b4b90a6dbb3a82877e53f66d641649eea69c702bfb2d00871fcc2235061783129d0f8c26f784b666108b39bf8a529bb7796431a0a43c315b0b95c21d9b0bd0950d20b +P2 = d51bda42a5ef693c5c51fa632b06fa9968bca85681149c6465919e2ed71e6435c048730cde8a2c89a842b328412476fbecfecaba74f13ab0f48bdbbca7ae4f5151c750cbe135e2e50720e78726f79d5e26514fe61f70e7bc53077a07bec897a61c47c99940728bf34b8dc49f456415bb220c472634ed26dff1d31cc4e7802c0f3bdb3f640fa1bbdf2e8c999bed1a67148c792529564bae0c7b693a23780157ed6a8242af81aab5928964151bdaf9d54c0f2e3bbd80a3decff0ec07c259499f87 +HashAlg = "SHA512" +Hash = acfea51d166abe11290e61b5b4e9cb0a192ab58da3fa2763e96ebab33dc32ac637cd740dfe36e245a90fb9b2fa2c00f52edd795ffca4ee8c17e0cdf86eeb9c1a +cbSalt = 64 +Sig = bd8cad726c3bdc570f7c23107f8cf14531e649b0a4f195e51161a6167fc025397f7d0c61b89b515077bfe0eb57f952258a64e0c8e7bf03a84c2f0bb22f97462844a5bd70250b7227290cfd5e0026401ba40295aaf596c0581f16e3eb7bc9ac6a84e141b1165c6eca0e10be0cc502e0f955c8c00d99f0c06ea98ae1dcd1f0bad6badc694f5ea4339360265741b94ae9f187bf25a681c6d6ef98d40fbfe26fc30da33141f0e32560b8611e71715a065fc4521f9ff9c7090aa06261a637109e81ea7e8a88b644c7888fd4821928b4219939d52f833fe9cb8999b5140e5124d39a9407cd2279f95704c8907f7b96758e6ad6afdf938519933d812d9bab07972a80da37e8634483242845c2e958a412e60cbe93424b9d8418548e69c7dca94ba92799f22cb69f1bbae472b12c1d658faff04de74b6eb060c216b9e331d866019d6073d42b4b5555bb9f0a43d48a69a25428ea8f34cc0a49fcc4ad42ef729e0acb7d8f4e002ba158469428892da002c1ba3d1767f04bd652ef4b297de97147d6613422 + +N = b728937837a337174c34dc1c163e15751e73cb81b4dbbfbc9a26962e6ab56697a09b8012fca37445f455feede93361416124696e1d2b9ab8c7cb0fc912c20a32daefd257de0b35d3c69e16e506f12aaf012d976a56346da56b8277532f6f3c4ce2999a4ff9ce3d932bf45f4a7a31a51d859e5a882db16ba3137a7b756ce2fdd4c94905d9cc513c612c5831da8d3862fb30cde0eaebf120ad54e8e9cc35e9ea95852cdfa12dcd31a88374a316a005a0823f916f668762caa72ba0899c56eb35b80c2438737c8f7acb5b26811464d0c7f935d4f0f665d375ab1a982cf1a440dd8cf7d696e556c5b94e376e970a21c3df6fcf47cf2480a2cc20342da9f090c62779 +e = 04ca45d1 +P1 = eba5eb3964a192d8fa85cd190a77f50602ef2890185dec1a5ff3fa6f97f73cf4095053bd430fde490f2fa87eb97a13e6010b003a7f8f4e3c21fadfdd485612fe8f51b6c511fcf65744c1c55021f348d604f40b92cea0920fa409d7c8a492cd2f948de2d4cc1dc793ebe0f3b5c1b7b5422bdb5b04dc67d55aefba55832782d12b +P2 = c6fa223ac034d1ed67ed846b646dcb6f5ebcd5a2b09ebb637d77eb62c585a393ec6c49f6f649b894256a73c1b1138172f7148c35ad2294811d69fed0c792cdb9bc120b01077a76e2ded63ecceda1efdb5bdb5b0e2f4a918a2dc74051131b3343e88043ce96d1f3cca913a762085b3966a449f8e11d3f8432d76ac3dc20bbefeb +HashAlg = "SHA256" +Hash = 3cb8ebbe35c6e6e2cbb032d1c1c81fb47ff0fe621fc5d7167d58a6d799d7d161 +cbSalt = 32 +Sig = 8d25a142040a450ea65629bb631dcae6fdc8159e823a4b8aba433bfb24a1e57f5e9bd04bfb793f4fd68936b6d8fdeadc91aa6faa1f8894bc9ab9df2aa4175776e31f191a0e5d50664a363d5924b56833e3dbeee537401fcaada71a6154052479f184dd42592846e98a7fa80df7a74a9985c7abba87e797f3a4359c8b1991c45a74111a3836de96a1cf555817fd38799b6a56495544f5c454ff01262569463058c62923e1b14c646867933312b0e85badee8ef1fdb489a21c647cc29ff0304c715408fbc06d57c693415974a3080feca4e4a861bc18ea2d67d8cefc145e2ed716bb0726a827d5d556ab7c587e16c20a1a285f0ee8736292ef8544370a827cef71 + +N = b79cd0faf17ff17330c56eb0955f1eb051483aeeb8e31848248f7bfdc7dda99308c58de3784b08f9ae5fb2851673fe84d7d908be2733a420651197e5db644c494f4e4296f3e82c41540e7eae3e4b6da0c809776a7a99a847fa7869ecd8e90b1ca6179f280567870520a555b8c830478cb5b6a1afd5d1abe84e1cf9678551f6534c7b166f6e298a3ce47a0fe252f396c3a85c74834c4365ba29255b6becdc1effe80c821efe040de62a45df98e36010b40bb8f24569bec3e8186de9031ba69260acacf976a87ac03e3f58ee0eb5d4a668cbe15a71db024d2b04f7be563945257733fc0ca1d024731e1be8da75d7729989ce43ecc61ef5e977cb5b1acc65bfd601 +e = 04c6cd63ada364f9 +P1 = ceef3508f7d019810e366db5cd4b1aa0e3d38d2948f8e256a1f52b589316d6ad92f1dab2fca30e519134e23d3a97b9b7ad1d29c8c336c9ad38c1999834f3d588d5e2d8851b51c9c1b221633f72b5d7767002c728c0ed769bcd0c87a61c3a5d7873b41e4106462dbe555a807af9354693ac40bb9594d66c3490d15f12fddb01cb +P2 = e325fcd7143d4a67700ad83e0d88689a62b30a7e5a6e5d7a33cc5560a1cd34e4916a978fc596d913047c34ae8ad9c110484344cbc632dc14a59ca76a16fec608c007fb88ddbc648de35f634e39f570939e5b01dae161019cae876ba8808f6650d2c6c0a5dee272880577d8cbef653495cdc26cde82da8d4cd877ad4d4fe3dde3 +HashAlg = "MD5" +Hash = a16c7abd30cad8d89e74d086eae2a125 +cbSalt = 16 +Sig = 4b329f868406cd74c77baec5dfc4b3573f4f8ed529491983e4219089a26cb0d05dc7be49b004ca3b7b4c0637f6b44fbf8df438495c7b612304b7005e3897fad56e8fa8a97a7aa7e87bdd4e388d9e92ec465b17a841bf2033cf028a004c43f162cfc187e7c9bbbbbf1a211c1fa25de6c4752c0b7ea5f76619e99c535084702e3f6a31ce94c46f85840bac6c53fe6568da3d8d19b82224eef261afb8c76f80d047574968cf7ca96737a29b172ae06d11da9e0de24ada529100b1016b0c3be4bd3b4d6cb8668a20bfddf397432952f065a8f0a8802523e41af374e54eaaeb9b18459cec7d3adfcf237c88e153edac393c29a3822b844de6861b581ca1b1305aeddd + +N = d9df3cd199824dddac9b5e545ad0b2174a2b286f2138c16c47c7bd5806c22347625a2018fc8bd54a7c0a0420b92666f1185a371d71011101bbffaff5020e5bab11894600ae9ed422e0e89299adaf9a5a49dce17a1a7501f2a69376b6913d126333f0329e767854c7d14468fe6d4fc5310465a760a8352706a38f21c4f24cf6b19a2bc4d8b8b7b58890fc83394a7256f75db34030c3627242f98c9005f07938c1d79a50bca24eef8503ad73f81562a47a92ea33b990b820aec4fdd1094e914ff9841ad43b8584c3344e35e80e988cbc7c4e5beffb2312abffe8b3c8bc98992fc5d80e2cedc8b059da7e329f077db2df891f409b25798599fdd8a7630df5fdc7ad +e = 0802c61b +P1 = ffa9c95aa4900ad1e67f1361964f32f676baec948482394ad252d8a2f59370a7b4cfff7be00a555ff0ce48e9cce2c002b33bcd92f0ac087f3b46e7f8bb73063e55cf832b1f9de5087ff0965e58204eccd36888f6eebb6c15b7496166705e12b0e5ea0cf751ecde4743532f44d5811d6688bd0fb4a1155bb16e3ff658d1c1e3bf +P2 = da28b50fed35ee3c62766069c918be675940aed79a65f96f424528734613a218ca351f29aa1fd2ae7626ce4a26738d834c56d53057dbda6fa83cff6f5d98bbcaa53e847835ae4c906c9bdf1329b30205ba1da75c9f2036f0251f0136c3e4a0df2e4754e0991cde3ac4679ad134a271336eb7ee2cae23a0c5700d77cbaa643f93 +HashAlg = "SHA1" +Hash = 1971f4138e3801a295070880f6a1902d3bec96ef +cbSalt = 20 +Sig = cd7fcec1fc2e4c98d08898d8cd5968024705c511d59a0eb915a766b02fd1980dfa99240bfdcf8fc502f7ce9d186dff65bf3ef23de643b8bf2affc1e5cadb929ebfcc1d3362952965b95cdce89046c7c223b693dfc6e95bb5257700aa482f73b7ac7d3f99978ce72aa492c68cdba66d258cdb9d47b5beea62fb40cdc2f101e21ab948d3e507b20226db632137c66542484e69944a49fefed0072afd7eaea0150b08baf5650446522357fac431ba22f8e7ff7871c27d5b218b249de6b4b4490165ef98f118729ab83ae99e472aba4f23a6f62c300704931ee683d75ff980c7cdf63e89d60699d055e3a3ec262edde32d11115a0ac4d00a7f8970fec43ada4975fe + +N = c19cfacb302f34ab8c89af020ef96078ed970b57ba80b930a8d42983388749b643866b964a4496a06d39841e58727062f215d57a0f43b29279d48855c839434744102a1ee3e8c018a47164043464826f01a43ad9b91b57809acab96a0124c6546e6cfc5711f42e51c0a465f6412f844f12e6aba4f2b5fc841b117b30b3e8d8f5a2d89259385b9054742ac3667ad7839447df8f1760029be1a2554d1336909645ed309763d12dbcd1260dfaae996d102fd45f73b415acff941d9282041bee815d3f1c31788b09e42b709db72f13ee4e809bf7e6f1cec37f06639322f66f8f73d028fda37124c80c19d9431cb0341e384379e71eb33735b91a7ca5acabcf8e9555 +e = 23 +P1 = c9dea2a0a99b75325005040e86f7aceb2b633fb17328b43e37af5016b778d9aef8fe673d624f61cca30be945ce1eb36b67dd191f2394f3562203180909b5a2b09b5a20a75937885a351541a0f12d5fa9eca5e7e55c37e47f9509599fbca95b932ead7081b1f160377c8167298aaa8bc1fc821fddfd9e6657b2309204b51c160b +P2 = f587940de54cf6f781b3c21a6cc1be371b26741c5aa99a80a062585632858dfb6dd21af942bc69e7bb648b2ca19409b4c20eccff64b7c9ee0c9f7c758cbbf4c8b0ef505bc3171dad806352e4519ca6f80f5adbf74aaef69b92d8e48988b57aa29f5191b91d63db1285d9db0c8975605867c9b26fb910203d9346f9bbc47bfe1f +HashAlg = "SHA1" +Hash = 6431f0218278631ada3b08f9f6c380ef198be61a +cbSalt = 20 +Sig = 008e18b9daa760e5c37f2fa496784ab53efe983ae87c5d31f3fbb5be3c7fea601dad1dc4fc26fe869095cd2e0137bc18a6835c5829fad001c7e5e6d47c5b87216592a0946fe6e8af88121cd06d4e9b9160e00f8a0fa94a3c0d1fd188dfe75bed1051c45ad297d1b9f96da4694dc537c1687296932013cb012d8e5ff071e14d9b4b2b549dfb5b0558d48f5a83a887a05730e2f11ed7c2bfc2dbba273d80112c40be5b06714434a57bd7f8198cc53345e76e908efdbefc787cdf6e83f060b3972f8804bac65158aee858111be46196277cdc9254488c0243dc271e78f616c5290da3e3bebaa1cda8ddde5623acc56451c41c3243ccd5ff7e42f2703a2b654a87a2 + +N = cac218c90e1920357e3a9bb9baa5e736d068dea75064ef8d7a425e2553f522c97457e8fc230f21609f61ef96940f72d9835b7e31f92caf4f56d4636cca820f8fc27537d9cb6064d95a633abf64948a8549db2ac2a65aabd8d01d970588c6c0b50475933f740b336ca0c4425cc3531e879a562c59388ba8c9ea13afa3c7ec1dc62c59fbd51df06329627524abcd255181512889c118c595588adaffeb4b7638a53a903b0b642346e85e9d4b1ab68309b647c8fa2961ed7ff33273d27898ee07c061347cb0f18910c0437e4b7bb64a9a84f30a99b2eb63badfff40c2ade97a298fb68d2dd2e8924a52d0c008b27ebb0b734ccdfc9349201f86f88987585b8a22f1 +e = 4b +P1 = ea96bc544055716924090148b7353377b99b2f0ef529d61ba1e3ad66059c95c0d8730f6181351fc00ceaa330fb714cb34c8be19eefdd64e93d2ded480c158eada8a700fc8dbc1a6a945170f9d718e1273ea970dcbb500321a4edc1f648945594fa5f74ee61f65fadc0c1117e140c2a2cbf1ad4c685165e35224de84bdb34d9db +P2 = dd43a0260077f26f5f78d100b6510a57d8c42854583f47a95b8ac9fa768d2d6984e5c7e517a86772844783216787306027e81af649d013ef108e5ea192b3ee18802515459189d46eefd1ab029300b20a2e95c32306d3b9284cb38122bd4c5923897af9159ad709edc6cdcdf127f928e71e22e7fc929a976c7089fdb077f12e23 +HashAlg = "MD5" +Hash = 5466f573cc255d1a63c558a3f28881d4 +cbSalt = 16 +Sig = 89639cba0eef5351e84fa37c142840668597c965d722d61a21d78ad928c3775f25a16cffe96759786823c7b3ce0a7a40a23fbe1d90e813f764cb2be530698d7679b18db4ac27549ac1da6d342d9a964c1bb1dbbe36dfa2fdb049a07667dc5f13355c776a429794d5f6bffd8f3b1ce694786bd764394fd9828fa2fa376ab88dd57cfbbebcc0eb3597664101ea120d4b4c4538d7770511412027464d771c4638acf568c4597886b1ee24148411493d24e54eceb89d6b32986fc1d0d8d940f260c3b61b17f7a22d568c8e07a9cc7f1dff542552619785b3af4ff1a58b6c697d4b475b6f1d2578502664c0b109c5ec91098795ff4e8f69efc692be54d5bf7a5c5d83 + +N = d2d0cc6587158a995bcd20933f0e93c31609a962f4d28d63073fb0dc24b60e37107231778ee152926ba4c2cc56aa74a89e22ecb2ca848db95c40c9205345bfae06474e2faeaac110148920a25d54a620b538a5903d424c9438677575dc38558820a28539697d575a2327b7bf98ed842433f79abf1e64357e1dd0c504135c940a5267be9c6d0d82bf2cfcf8dae4be0565858ca6039d7cc8b4af96a2ceb2c849ccee83a94ac1dfbba8223d7abca12f8f16944e25343780c92cedce79e380e811e9 +e = 1aa625 +P1 = dca34f0129ae069fcb13ad4e50d593ffb9641b8bfb9e7ebcb78369ca6d77f17dd256af80c5f7fc7e9f52b413cdd0525ea9da280ed41674d7629036d1a782998ed52ba04977988f3527d4de786c51e55a29c86bd6677344a3c0082c96d7480773 +P2 = f49a7bfb1dae223574999a6ec01181c86ff596fbb267903bca3cb9815b6a27c36c10563961b521e8fa381d6a93ae99f9914de3761f4465d1e604dda00f4d01d8ce13bd53714fae06a8d9647e1ae0fc8bc74c07d8f04c1aac6e3a389167b59233 +HashAlg = "SHA384" +Hash = bd99c6c17eac2f8d73dd44798e4d42e51b66be9d18729dc4034aff393f479644ee0701d9075749f93bf3ddb1090569ce +cbSalt = 48 +Sig = 1341f3d8d7b9fd1d44fbb646d855e7f069f638eee62664007cb6e1419c434fddd93364311065a975f39fdd5db47e745b0edcc3ff12cee057ad4356d6ab44808cf0dbdf9896970883461721a8a135b894177f041d9c8c546ab47c135f0535610e3b51a7405a84550b3b49a45ccb9b95cd923a356e53886fbdfd94bf457f5cf03ad70c0292f68fa20cb47da694061be4650a3451ea485353b1dcd572b25f70db0f799ab8b5495dd5ed1e0d93ca9696ce6df24d9e9c86bd23e26d75a155dc9e4c49 + +N = b9cc977b77f5b19f6e93bb1f95ff3424286dbc2df140890112347f92a182ff34a350703b76b1bd41df4734dda2b68e50332e6c6ed2087436ca326f1af5766e116c69763bab36e383c940127c9f1e5118d978122c002b72aaf767c62ddede118897216b8fdbe329fe6d525403cfa62c9d80aae7b6d861ff67a4e436c721b94bbe2dd5f643d3df1cf628c3944344e46f2b7538fa6bcd0489b753c8222c3298d19add5e2ff6b682b2e6f5e1ddf8b1c47ee51342ade88183574bb014fe086154110d +e = 010001 +P1 = d0485a7044faaba6c19f1e4e2f52506e3ad726902f56e59c4e4334f03769a5aefe401a59d0f01218741c8acf1f88227936e554f89cb9777dea36b500ce1c4a7b58e47c757f95395486d076417f73cf847380a33a4ac25e02182627604f57dcb7 +P2 = e45d993551fe0373f9dc81e29fd44eda34f268d8777b28b12c3548a6a4f54936a62826dd132caf05bb246233be5238b73e23315c8517fe84bfb9b7be12148afd6338f392238f208274b872b94a271f662244f8796e6551c36440b3165548445b +HashAlg = "SHA1" +Hash = 310efe36759fb7b1ab71f496d632f6594347115b +cbSalt = 20 +Sig = 2f7880a9c3840eb1c057112374be84157d8b35b8a8567f4261e5d42121f9327308b9a6d2881eddcb43a622dec32afc2fad8e6a2cf60392499a620b4616500dfb0eb31cd60783f2c76bd588e8e79229cac7d31bdb811771cbbd2825812d19179d7103d7c118ba43167c423f44273faea5adb3989d9e4495c561eb35288f54ada9df671baf8985af3085563c173ed2dd289fe2fccb375748111dd417b4a3caa8f7443703ed3dbbd1206789f09df0c1f95bd62f0de1f93f3a3065388b9b813cb640 + +N = ab1db03a2f21a6307e88b28ea7b7a68f7a7d64dbc39011b0b5b3db976c570dd4f16cd2ea4eb22ed4d73f724ce10c2dfbc0402b53f344c095ebd843f2a0872cc20f48bc42d6c94a5fbf37f78b1e2a09ff2ca854bd0b02c25dd2135293ea2326b7e999fe24eea9c7bdfe2a15de9f357c5e3d9c2818420eb89aaa1a10efa98aac29 +e = 013203111f +P1 = e03c9ae1e0de9021ee7c46bf786d4cceb5b8b332f8e429f4f87e78350668f9f93f39479b5870706cdf703b5a05b7b024c8b171c5d5465f673ac0ba1fabf8782f +P2 = c35aca021e89971f6517f0e187159531cf9aa923b132d8c3fb4b5992ac42720430364bb58086d3da03096ed1bcb385775fc21dd5aca791a90267a09d36713327 +HashAlg = "SHA256" +Hash = 2694ad89f838c5b7c5be082b745436c00713f7d1985ddb9e46e2b8317cec9965 +cbSalt = 32 +Sig = a3ba1122b89624c143b214bcf4d68f53b8cb1d6cf806faeedb4243477729f4d04a31eaedd5009af9b41c1b5e3e71ee2ed4201304f2ef5b2e9ca2844ad5bc7f5af947b0cdc774eaa3f7e00ec0b0fed5d88576dc70a0e78fda7625274064a2250f501c0075f8320e71f21044c38b1893d565b109b0b6c2b7206074fc73fb37f030 + +N = e9a8c4f7bf752be3750f972468bde08cfa52f79a1594e2afa4f281b8d3db620b30f6a4bd10d77fb4cce9e1226dc038623ee9c7268a821fcafbec2a9a7e9afd3953d5cfe1dcbfa44ffbdfcab66e07ffaf522d07f116c7457ea202fa535dbaa1c224da564e7cc6e983e137299770c318dec8bafc77261a63f2b94f5633e6b6aa7d +e = 47 +P1 = ee3a81f94dfe0384b07fa489c1953412f0f4d07f25649317f6eae4c576853cea7d02cec4aa8dc70fa3d7ae9478f49a04e4fb097bc11e7d6ae622f160fbcc82c7 +P2 = fb17004be78581eb94e82e393dea101d2312226f430dd89442d12019b25ea17b14340ab7dbaf95f264f7f18f5506f20eb50855880edacffe5a4fb6af8504a49b +HashAlg = "SHA384" +Hash = 4de4f10ffcbc1e620a2191b36c6dbf5094d5f7f92fcb2886d638d132bb5a3665020765db4a607ee4346915303d85af50 +cbSalt = 48 +Sig = 6356ae7bc672e43e0c0d606e9148318744015b8e14cce3ffdb732e36c3651e62c3639cb777739800b8ac0d4a7ea619611a5e4d5b7408036702290e1f7de9a2b29719e52d541dfeed852e0957c10bd0771f05b5351e47208bc4a4f3058dba89e78d1c553c51b973a4b29c00d7628988a1b0d196f773374d99ccfffe81da847b1c + +N = ca013608da824385b2d740ceb279dc1a0b1eac7912f6ce08ca485c20fdedc5ee571f84574d3e3370938db87265ec95f411d289872c737858115dcd7cdf5a2d84dc5334baa562fa9de84d454415b01730403dc88e520ddfb886f4e39be93d209d843b0c057b56289256f0a9e6511b0da5c021a39d79d6642096968294a14c1699 +e = 0c8da37f +P1 = f799bbb0011cdb2a4d8826ac1bfcd53c152ea605dbba02656e5dff6f568f2e3f03f3a9e6635a69cb8f49f97d2491ac113ea266e926060d0ed47712ec35a831ef +P2 = d0db81440e16a8819ce0b5cc769bdfa091803db7959538918c18287bf039a362044b69c2dabc3318358310f0f7208b2e9990cb04d1a958770294f1bce09fa7f7 +HashAlg = "MD5" +Hash = 2218539bfcafc80bf428f2b9110632ca +cbSalt = 16 +Sig = 4c57472733a5abba39307c9a23b7663fbe5abc1e6b0606036d3b7ccbde2fafe778b553b18944373a83b4f9a8404b5e63bd0be561e04ce72b460758af07098e3e7324124cc68f731384f7392a3f0f21bc32e0e7d96f39c141c2ff15b9083f2eb86c92dff007675760fba338cdb51ee593c5c1f04bec29851a499e709d7f13a058 + +N = d104982a3fd42a9090352b6771520c21cec4ce9571fd6441ce7387577105a71cd648e26a3a50959b03775625a3c7812820782d2af60fde8a5965c32d34a4733033dad903eaa2728a924129ae40331154c3556919ab09354e3b764e8cb2343782ff6e935e03f47fc93404207e3dfda7e2312bd1a11bd0a09ae6e5e88a7c2ee71d +e = 010001 +P1 = da6d21e7b0b72a89112a8e77b22dd7b903e3ef02e59943ef6037d501b3bc83a546f1037b495306aeed79a6304e814651ee494cf1a9c2bcdf7f3ceb827b0a94db +P2 = f4f9252775ce7aba51d575233d698668317537d66c0b823b192907b2d96d82bf66c4c135de985f8ffe2344df13a390861d922c34aedf3d1fc782314617acf967 +HashAlg = "MD5" +Hash = b12a5702c9652695942df7043734936b +cbSalt = 16 +Sig = 48e91cc4dda66e54ab032d83929181def2abbca5e74a1d56192b21229c1a605e0b460919484682724358e1d8e645f12251d60b8ea12e372b25220bea6809450b740c305a4c656171ba88e1652e6b8735f06959703afec02f3844da0990a90402e0c58d655d79165933cc9de282de16064b3b8922c17e80d548622ca5e0db1608 + +N = d35ef84d171f472dcbca741279ec50a1f365b1bbe4961614e46b474cbfc54530602fadce6287c7f094de02afdcc9aaf54d4d2d73af72b08c791159a0f3a2b58c242e9da2b375293e0a5a78869fbc3bafcceaf552b4b5cdf32671df6ab860fd95 +e = a55af2bb308dc1 +P1 = f32c155cf038e9d8a3f5a0dec6910f7cd6a93d218a3fb0cdfbc38fed2c858f34d74c764d53d5ea1bab0f8553c59e3ee3 +P2 = de856d5a24c4b20814546262b385ca55b0af7a31627970e13b0da200cb2528e128dc05b44c3dba20e4570f212af04327 +HashAlg = "SHA1" +Hash = 580add7c7372aadf0081e6b86aaa14c704fab425 +cbSalt = 20 +Sig = 043cea95faf6ba7b2a592c1ad675efb1f2ddff534f5f68d0c5b22f30484d1c12d4bc1e159ff7e5e47a4a64214c43fed9e0421a7510d1c341287a51da3bd3135c8fa2c5daa85dae710be0aa21d8df7a6861b02da5194313c0ca342b97fcec65ff + +N = cc2b7d209496642c7ed224776cf754de4eb44ec5c3d05a254c6c570e65f6c6f15a4a4a1fdb14f54b6c0efe31cd3d28898ff143ac8e1a082c48b1aadf76af9fd5e148ea2cac19d2a264891c25a3a5be6802eb0d4823c382add7e55130af954a39 +e = 02054956c8cc294b +P1 = fd5889caf5d60fe37bd6f1db2b287719b71f96c421a50597a151f60b1aefdc9e52802b749610c0bc3088f1f725b80cb7 +P2 = ce4f101772c1cab8dd2f87375be968708b1fbfb24bedc424f1dd7eac8873ffd68f9890856f0a6aa68f24d0b8d19b508f +HashAlg = "MD5" +Hash = a28c9b520a2c1f0993c37973380162cb +cbSalt = 16 +Sig = a5a4b45ad008c9a9ad14b0769153ac4a0604bae8fbdb4b83657d8f19be10a4fbb21071c947ad954062d0a761bb8b5ee93457952d096ee08d33b3299951298eb2fcc64218437f092448b6944cc8915f348b42fd333987048b9d443f8126325d5d + +N = 9d0c5b707c0b095ca4becdbc3c4f54c96f011c0fb5c89a44f8fbaae35f9a94609a5754030deda2927d686ced1cc584fe7dbce94ef6a4b863523707d01e6b1d69 +e = 22787ceeb3b349 +P1 = c54fb58d0ab654601709f7d93d5fd9475a7e8ec667e4946b014c00dc65838453 +P2 = cbc2cfaea5aaa33b21b2d77e8f123d60f149e6c6019c833f352e438a42251fd3 +HashAlg = "MD5" +Hash = fbf4d3acaefea486e83353027fe1d6c6 +cbSalt = 16 +Sig = 940a9530b5c6a428360a8fb2530149982f7919cb0f5e106f5793197bc863b0ae12a259fa3277299c4e7419fd3fdc656b0ef21d2c87763a9ab9354c0ffd575498 + +N = 2cc7480e82322ecb65a718036d2f4bcc0a0624f1c06698478d8315a3f766f63f8a76aebcecb09749122256309d6a8bd75c796e890a561bc526f70dc09faf53a88cf78ba0e6041e73ee408010b9d0228a181652c3d973687913fd482b751ffbf5156bf07a3b4803d0d96682864c3b0adcbb33199cd69b2c65b4afcec575faf910934ec424b07ba795eb5303dfd85b5d7ec9920a8f2f94f2ff5640c33d1b66760b09bf133ea18f144f16f0e6e0c6a435 +e = 010001 +P1 = 06524e33513516a4e8a232d874de152a00def6f1742934a05a23e67aff5e68c0e2fcb0a46b28e3f7e65dfbefe672b7cdeadcc835b7a80bb86497bce1d91c721dd8bb3e87a16dcab893e32a59af4e77225e11f5506f015113 +P2 = 071560d9a170f5b3552b14f6c61db29930a0f1bbb9b6e40b696d72c6133d3a0e4ff9ad76a83270ae28cf955accf9bbc46cd77770962081e06356a88f12b9ca70b5470d81c66291826e039d7cb213bbb419dde8a76d0d2697 +HashAlg = "SHA1" +Hash = 9553ad6cf246ecf8bb50599b30505bcd6bbb8807 +cbSalt = 20 +Sig = 0839ae3fbbb73a354c653154504127d69a722eaba57b28985cf3f91e4f00f7b086d68b561afff66dd3bcc314af8326c3961ebcda9a6576ef6debb28638db797beb3c0308d093bc6107e654162b3c13db8f6ce59bba4308351d3bcfb450013765d86017ad7792156e9dc486becb82fda60d7bb8ba4245ada7eb3ef73e9e43b7c64680cd52d9e83532b6dbc55f15e2503e490c22ee84f8f721e577a55ea842cc3f20ecee036fd4ac9b5197050760dcee + +N = 0143d88ee776ed76a16bc39b8bc1a9494427e9ef000f91994ae28ccf63e0c10eaaa4e60cad1bdea05941d2ec11a0d96100efaf47bf5f9b1f9115db11303e5de6a4a75cb7529d46d5dac932c6d981a1875e414839d33fe7646692a018e957a0166f5867f1807b8e3cad5da46b0e59fc1b5ccc9e86c03eee329fb4ae77d9f49586c9b8008e917728d8b1cd24c8b376519db54bc9c051d61e52077ba560180d3922f5c8065acbff6105cb0c678f0bf23011f77a9bb5157c9b7ddecba90113ad2204be3ac695b7a965b0bbc93957ba2b14b4f77051fe8aae3f7c1b28248fc1a257809a0f572826bc372b4b41041898dd0be58d +e = 0205 +P1 = 018c9e15f425c5cff78d9f8433c6fe54a8b21d85b18031ac7cd757b8c9a9dfae7fd02028685d5a77acef08a0210ca9281806a04b54d283af4c2377f8f1930d4a320bb0ea5d948d34c049d90669794441afd1efeba0a5cf89cbc155c7738aecc8c9e5ea9722d3d87c6657a75548db1d7ea891b1ac0a7c30a91b +P2 = d1076b922c9684f7e6953a61e013e232219316e31b074a345cfc5705824c56a5cd27873f1307cff08f5063b82079cde5ef2f5d712a8707800db43266ee5bc84aab17310aa9baae0d3e5750979e8554db6442430ba944f28d40fc3cf50726796cf70d63ca83e8d7915bf7e445b6c2e412307f0fb842b67e77 +HashAlg = "SHA1" +Hash = 6587634011cda5d0fd7004d4fc353d4d6e854a0b +cbSalt = 20 +Sig = 00648fa9d886b51ba86cce5c1245bf6ba23acb86886b0d01f1272cc00fcdfbf1bac9343a4967d3a0a518cc8c733685858b095c856c3453ff52913bf362be938d7af175350981366301c577a77847e88bfe05a9eddaee084b6b1d87068a8478701fc0a7d086972112532148c9fd4afbe3528c525dc1b4cfd959e70bb8de6ff0a4b1dd3c00e0f25f72043af8ba91704cdad42ba7304d6a07e14f0ff69d1fc4ef17d65fdecdd0f239d402285d73a6a57392d864d3dc8335866d67b48b7f1228e2732f267762eb828fb1172557911683e872426912b46cdd8879f16dde8bdc681468046313cf6f303dd3e56a92091455aad9c8 + +N = 0d2708ec1f1bc2b87d6628bcc8165b76d12e08af24f9ff67794cf8226076644ad56b97d205d80b9e16f7f1afd00d286967734570040a96af71fee9754d74517708442e3da6d6e55354087a761890b1efb2c183117fbf914f56a19f1b20abeeacf6c64c5fdaacd7cdf4fa956f2895316f87c65625a6729b1af73e32d2611463d2d8b138d0ce28e595e5593ab0c9b96e9e283729 +e = 0eb6f40dc2498fbf +P1 = 035acdcc9b614032b62e7053bd17c081244b83fb8f3365e2da7dab2b6c1691c02de9f439aa2c467c8d5e61778e0987e7bfbbb827be093392f7b2ca771ddd60f802e4ffd01070942d9d27 +P2 = 03ebad1299fdc71637919bab37ab09c12b1833fee40ea775ea84db7c4de9c1d44b19e48d3e59014f335f2a667c4f13b139e99d3ac8220946d1bef937c3d194da82e90be89e33dfe8db2f +HashAlg = "SHA256" +Hash = ca31a21b6928b42a8a296e6cf6fdfaf0056dbc51e09fa67ecf04d3fdf07ffb9d +cbSalt = 32 +Sig = 0cf2b333221b87dd738311314e5a7baf8eb27cc56f6c00dc9c8c365eca5d0df251a68fa4db23624733ce92c951cd455a47105f04668ba9c293edb88ef9e356d44ba521fa87c2c72a24eff6934bd71baa1311c781e9ac3fa97d68c36313e8b3c899782e831b66312db9fa29646172b217b8abd0cc06de6bb88e6819af360bde1900a59693a54e99c02037606c83aac82c695073 + +N = 0e1f920c8ddfd075564f58b5496f324c5328a82c252924da15fc0a7b0812752c1f0874e053b440211e0f96fabc6d0c0a1ea27d2ae819730f8fb36e95c64f770acde4ca93e885c27e60c8cf97d417452fd34d92f1843cba34c7dedd3e7be4e6dcb91da6a6a7699b8598c8c054dbcbd53b45db9263b339a412210d9a59ae0a190972c56dde94701fa258a425ec04c2ac0cd4b55e7dc1ee7c3d2dd2cf0b99adc9fc46c40dc190e10374272588dd36996b831e50b2f925cda410a60c44e5a80c23aaf7e9987c09ca2b2ce87b4b0487a01c78a3bfd7568010a7495936e85fa577bc5d31b50ab88d5e5773e6fb1f0dbe365118feea14a7950bea3a280b0454a3dc53e9 +e = 010001 +P1 = 3aaa496e13281947c6ad56ff2a5240a43c584297d8188d12598e94a563a171814dde06e2020fcfa05103500519869e7eee1fd866eaaeaa4b7c2d905ac2d319221eea931fff15057d1d3f46785d8540a5c6ed47c4a6117e00aecdc3c81d9f219b6e7f3cfaa3accf40277d29ce9776cc08450bf1b3564241d93417e6dc1013382f +P2 = 3da16f172b659aed14ef996ce10d13615df1f3c77d8511ec40797b484feb07fd95ad41696e2e87949655c4220a9009c76da433368933a0b9b025718bffa9c1665bd1f0bea6e08365df87f74d16d714f85001645729843514122895c037f53f4350d2a4ef78918162d404bffaf9b76712fc6a9eb9ba3c3514beefb44bdd939767 +HashAlg = "SHA256" +Hash = cbdcf730157dc54b4ff3c6627cf0d54db35bb3aa8e2654aa0768e861b311a15c +cbSalt = 32 +Sig = 05d202b4b755a20a4d32ed7f91d4d1b087d09821528209d7256593a4089350304c68140aafee972d54be5099ac8259d49f8db285a9af0b9c4635b701790ff083287a8c41cbbca28ac546706bbc7743eb839b4f947257265aa8987dc2af9b111faf9886d8a9c3ce0368fc8e3600c6e803998c278b181eea36cf8cbab9ece0c02a65f2a2713b6cd4f06c4347666a5eea962611550b0ddb897e04be5273cbe70ce2b3d4c49de922657ff1c7473391a5188120d091715a675eee8bb5ae2f43f3df69e91462bfe4105f7b0e5d624662b3f9c71b81730db0f57afa56f59415fc2957f1898b313bd7b128a708ae9820834f8ae96a60b883f2cdd1846f0a6fbc9c9d265a + +N = 034ff950dc764a07c87fe787cdf76b6361cc90dca89f18d610fa6b788c12560d45179dec3b71d1ede7d1d78ed1b17d65c62cf5e0fa33a6452992028a96e950ee57ccc9a012df9042985368dc5eb74d45151c122069f1495b9aaeb5b9e7a0c065d916faa4e66ed8e8a142171ca4a8f8acc8691dd5e97dd4982d7263858cbbbab13a7c65d6a4b57f85262f56fc822181cc8088764800c192cc2a4309f1989bbf463530cc028ad5f8408ff0923c7fef83b86066c36b132469 +e = 010001 +P1 = 01feb003c9887f0a75f90228f1f20ae29ef3a050e3a454f398f4ce7807d9a81c471ea6f42f0fd49aa9584a10385c11b1a0187af3a3fc150a1d0480a3b3a0c04fcef64401b86cb75fa91ac85ce71cf58a60522da2aceb69b1eb570bbf +P2 = 01a9139a2675762daaa24e0519a58d2290148a46453241c480854a38b94e43ee51b5bacb48b602a87738312fcde3399264f33b126f645d5293169fff37b1f68ee7dd6dbe18f4c7ba01d5266ea935a24a44d7563f382a6c62c65579d7 +HashAlg = "SHA512" +Hash = 7a06ecd41d5e781b6764adebdc106f04a91b4b1bfd6e611ab209ec7011077629e84f7ee87788a6670474c927622f059f2c02b5d2bffb141e24a2726ad842c148 +cbSalt = 64 +Sig = 005d0bc469fc10303dc54dbec352a6f307da127883fd7050c56df62d4b08c46c1831d3f5f153b001d525f5f45aba8bd1d2bcabbef04bfdc08b9656e6eacf2fdd8eff2445f449237c94e4a8db023278030371d4312c5f4ef0f9c9f20688a00de0e91e6dbe60a9534e31a789a442baca7174657ddfeb8730a1929c81f7e4e2f63a2522bd9440bdbda0fa1ec0d4d222af8b0998a4b9d365a1da60ebbf91d2b7de4247b6e739d12d94a4c5338d4b4de77c91a58d0c3a2d3806 + +N = 068809c5ddc1f38e57be7cda4c1298fbecd0e827a1d47742ab6c74a7c54c030bae0e049ccf8f2f67ba61420d1e0e83b3fe2decd6db44bcb20f9ee21bdbd87ce651659238d0bcfc22df59e52a0c3f8659837868964389a25a1631ae64365147c603fb06fc2e8c556293815e08e2ae2b9a5cb12ef640a355dd43a4deba5f23fbece270cd65bac31807eaaf7e7e7f3ab01783442723016a882f4f17bfa6026eb6daa1a3f2cf4ec8c2ef5b993be0dc9ae05cb14ab2ae61a863ba6e79 +e = 08daad5f12b4c5 +P1 = 39e145f4015fd9a0513656196f6632536c6e6a1f1ef3e2d250f0f16128d207c805129fba55f32a03bb00416494b7a49aab8c239039aa655e0b84b1ab9ec81d2c980e0409a82665b2a76a1663502892f50f8889c71e026fb656028f436b +P2 = 1ce355a9a08eaa7cbb82718dec19e3678e8d6fa2f997c245bb7c3d3bd877ce2eb4f6b51f95fc88467310bacb146ba762c6b5fa0f0207b9253136625de03b2eacf0fa5e0cc1e339e3fdb1a9bc166894489466018967b390fa552578b2ab +HashAlg = "SHA512" +Hash = a09d80fe451717e599ae3e8b3778c4d8820f3498cf2d3303e7519958729f3ba6647aed68e0632d69762b2d6cf7d99028aacd6f18b6c30b144e211878fd96a0fa +cbSalt = 64 +Sig = 068093b60c15b0e05b883f3b0480c1aadb0c19aac32416757c61225846317fe38b3ab3f281f508e4ef7b8dee098538794530e67e1303b86f9d78028e20b488c15a2d42863ea8d9b4e9ebd272c818adb9e76e7254bda7e8875b3c77b70fb0a93efa41cca740146fe8cda786c3aeee67b0e20049cfdde1258851bf6df36babdd810f64be4dd21765c7630f511ab090f0a0517508fac50aafeca720955a06981b466bb10c936e678c7b46342d476cf2134c23b6ee537650693a80c3 + +N = 18a21aa3ae085dcf44618d885a450fc6ca614301c8b6920c8ddbc1e7645eced972a81f54f53325ab718f05f204720927ff3c478b19428634c2566f90d2f97beebaf62d103fe649d80f517b910427276116652babfda44a2576c367ac05a2251a94989d9d5d90a85a85d331c6e4241c930dc55c48415e0f065a5280a55de7d111da5c5991cca63f4552533a11d2f0b84eacb619e30452a69f86d906cd31 +e = 07abec5bbd99 +P1 = 067a34221d43f60770623a31e7a853005c7b58acbe2225f9bdd5be9dc174cc3edc351ed2930beafe8e7baab8df80acee2902f6f661cd98a21405cc9101651a1f69c16a32fb25caf410aa88d4778a67 +P2 = 03cd8fa72e954daed460975f803f654c095abd26956022c64343ac56526c54c18c9191d55d6fc2d28e9171c653f36b5afdf41c4a87e259719c46c24a351ec0d13772af8d51ace5b44f1106502ddca7 +HashAlg = "SHA256" +Hash = 4f114f43acbd97391fd5924452971b364f4088192c2dcd279fb90b3be1a39ce0 +cbSalt = 32 +Sig = 1803fe2371712a39fb75c09c7592b3b95417b04eb6795a6587a32d7b0edf339fd8f32609303635805b42997e8ca3ce07e48a3833fa8837d8a66be18e24ec2a2858c8eba3f9e8b48bbd3920592cfe6f643a286d4d6dcf302b061340a5b1815438f71b664d6e1163979ac42971749a808c6cf209fe89962e4f61855bf3b62c7957dd148c820fe7e2cf8ad51072d20823388497af51e362387034d3f828ef + +N = 03173c35caf356a5f88df0e118e7ad2a1e19318802a8136055ea11ce8e08a950954713e3dcb0e3e487c4a128f7c5a0b7b48ab4529ad78b70f763830aff443562be70b9959f7121ca66c28dd3935d41d8c5bf717ab6b066153a671403969ed26cc7bba61daf81bb89280b57dd61d9a4f8a49aee05 +e = 010001 +P1 = 1c0596c54d9f94ba80d4d6141a8589ad46df59cfe7342d2be26a928e2abb6f80cb9a0aa63fee15c03f9dc023046f8995e556368c4259c94cf79f +P2 = 1c3c83a4969a13b31cb5910098a42b725a6f42eded4970ac5dba87f9c4b876338ce31f19d3ed10d5d906eb3e90775d49d2c964ff7374292a47db +HashAlg = "SHA256" +Hash = 2babd8e0f5f67f25159d2e31a624e5c86037dfc7a472e1581a8ee33ccd36375e +cbSalt = 32 +Sig = 00194d9588de3b430b90d824b2123aef51069ea884b02d88a707c74ba894a6ad4c035cb319268137890214f790f8e16a4e8d3c9c9204ac03505888c67732d9f3e99ade407466cdd2e501a75fffb43d47c3eea341f71b2ba944b961b2000c58ab8a2a398fad31c6fcfcf5864fd87908bc755cd11a + +N = ea48532c2c7950ef304697ec3f90efacbc8f42739d5bfa0251c22652e9ddc8b494e2ec835bb3d4d65302b7ce934fe1b1cd8cb3973dbaa84ec4b041fc9ba3904fddab22cf135d94a396bee263e74101cd3ad4f1818f356661693d051d7359336d9a230bb0c60b5809b3372b5fd616226a349ebb06d6ef96c454b4739bbddb82cf565754f1 +e = 013626d4dbf00631 +P1 = f1338a49b88dd5c92deba93030b6ffaaf355a80abeea7e3e530c39229caa95928a1fcb4191b1d4361df04cdc182168bbf55300cf45041dbf5d6def5dd192d396757f +P2 = f8a81d1018dbac217e0bca1f08aa1e7860cba149b2e6a2bfaa43519d070e5c887cfdfd7d3a6032404b295401cb748e0626f12888d5359069af840b67c8f9434bcd8f +HashAlg = "MD5" +Hash = 52261b360c87f4715c1db6420a422e2c +cbSalt = 16 +Sig = 66b38995bdc278bde42ac311596e553b30ee8a87e8131e39a0143ad793aee80a151b09a721caac5576a141521e9703be2606ea4aa79d75bf24eb0db1462bc46a0d77af8d069ffc20940e765416e082b62ab0365ad41c0d10cbda74a7d66417adc130c63ff07ea495782495149b266dc6d07a179157a3a3c794969ea7e3a7168235e132e7 + +N = 0d11acd84ea352be2656c6ba6438b36f04df836b3b5d3d3c74547d0ac81ccd937fe6b7d1bcc4d4b4f7f95f814fb191f24ad0d086c1ba9c9eb4222b3173dcaa8b332aef87d8cedd04c24827e22407388bdce9c237dec6d870e9d88cdf9774feadfebf4c39df86ddcce76076d48fb19c7d0ed12c671ebc9c54e243838cbb2b029c61489d74fbecbc87d2421a2e31d2c19b47ef14dd20b67f2c6335dd60006ac9cc28126857f809866f0c02cfb35a317b56fef87ed9ba6ff7d2dd +e = 568e1529 +P1 = 03f8efdb8a1fd688a403efa2c01b82719a66b9caefad1fcbfacce37c91d437769bea0f97a69458118433d5802e16f693e648c8cfdf683bbbaca55184cd992dfd3a1ae3622ff0089edcb6c045f18a9997af96d9932e0c2fe81dd462e20b +P2 = 034a3a6327bc03c0c366673d0325cd0b0f1e94744bff9ccf0d26d485addcee455256b9fe3ad36162783b75abebac9b7cd5315c2be68fc5d41bb63a931075aaae23deae4ce2961329e788a62e53463b504cdba96b4c54139c1da3f3d7b7 +HashAlg = "SHA256" +Hash = c2209eff57fd9b4862eeb7644cfc8bbe92b8481b2cfa3cff0ce13524dd0c530f +cbSalt = 32 +Sig = 06c2144faf0606b151a859d583dd8c208cb84cfb83306435499474cf5783b681805017fccfb97e34ee724411025888d5a97dff9449dbac76638850888f2405f9084405f611ff6c1a28022c7f89a6c9a4684f5200ad81b9f64d50a23dd36e5c8bb83d097975aa54e9318888b8d56fcc30d44d1549d8aaabf1bd90b46a2d1a4844b6e92020565f06793cc1e6bfab13a3f6e3ef9b8518724a89e4491e93699d8e2eb334a61158fb5680bff3962e78f85c36beed529651b00cc939 + +N = 2b2fe131a803af546275c21904fbdfe3e5621cd8a52a31e6d2af5280035c0004afa5a56b8b4584d356697c2bf055151bdaf81a5673e1234ee46bcd5c7e7d09e2ece358ccc6f95202fc02519ae5d32223d062762a87934b473478d8f0f087dae69df277b9b7e03bf1714efb8bd945dce08c7254d5b7f113e3dd5b9c41 +e = 010001 +P1 = 6d709764b91f529578cb1e655cd27c7c5209176d070e2159228e305daba3141951df6ea7e7e0773010a4dd2d38ebf14bba03a57cde64a6de2861519d93cb +P2 = 6505c06f26f07fb4d2f67c228b4089c819054873c99bff9429fde8976f44694a313653f362a00864d4a11761dd62573b0095d07f3e11299ec2474d3746a3 +HashAlg = "MD5" +Hash = 7575a11c29864a9578b0a199e105fed1 +cbSalt = 16 +Sig = 221ba4a26a64ebb25f5c3af6bc91123faa514f3fac3cebfaa5d03575a4c95cb179ab4db4d2b45e32330a742856aa325771e11f9c797ecdcf6c4f4b4bae8eb08717f6184d18129036992a6f128cf95a7384f7aae67368a830bb69da7b16ac17a0db74fc1e2f77264275d5dec9ee26c2a4cce41ce334aaee4bd8f094f3 + +N = 0d747f8b926662d3b1058346b9cdefaee6c8f292b99ff0da6be3af2137079a7f82477df7027062b91f18be5c16f3b97200b751a4ad9cbf6151ed25234d9dee38fd88b5fdcc0d4d39c43054037319c60da100bc17a90248f3a6d494e657c8af4081 +e = 010001 +P1 = 03de6652ba14ce98867b5e114dd217975e716f85134bd48d35d589b4d686600a3b7446dbd66410f3ced37ed54c035425bf +P2 = 037a56cd2105321ffe54e12dd347172b93dd822d78b25f07171358c65e11b8cf86c84a5d83cbad5f9c175abac61704a9bf +HashAlg = "SHA256" +Hash = 5dc691ac10f5794080f310eb051e1f24b037ec2a79dc67290f9351a54754ce80 +cbSalt = 32 +Sig = 0737236e4b33c1c9cd6bbdfa538cdc27a6f3d3ae99b9b2263ecb2591d26a51921035d8b6d67dc4d32aa031f01d6c4ffbf2f48c37b35f47e3fe6d98e56dcff10830a141c69cd6aa2e3c4f981a07e87b75e299b2b48eaa8dcb1ad0c40e34b6f6dcb9 + +N = c0e77e58e4a524c35718841ac03b0cbc42351f4a7283dfb791e6e548de85bfe671497a46d6495338d9380bedc3eec560bee0e758138afcf24e534b8aacc3d06321c490d71eda1ef25c04450ec097ecd73af1c189bce83601e76f0f697258976603abef1d54d4b8137c8a771e4843dda55cebf73b442aaf14b3fa44ffd77ded07084694aa103a4d3680af450dd63ed604918c06737cbe632847aac1249e85f34b1400c49568f3d743b44335859bb8fc575485bd866a220e0cdbf2e04c46083af3dbf3a76e71de27e388ae816879cd15e314ec92ca35efc8fc01e06c8a9dce46716d498ecb849bd1ea55 +e = 03 +P1 = 0e68ae9ffbdc7d7ec034abcca202a41eae78303a23fe9b6a7c1200f2c099fbcdf01c0fbbddc268f25844f68000219483c3c07b2f526e107632a13b8952962ed2676d6d7616bc59f2bce8ac8fc253a12349703ab98cc62748d909b0676a2a2721bb79c218b8774b84fccd9ee9c946e43a554617ff7f +P2 = 0d63499d160601eaadfb59f435d1f415af0032ebde4f3ace9ffe0aa4f180df1d33d354c26926b9772aea92f0de673ca4ac1776ab068b4b4bff7dc10893b173f14d85e9c2a6d625b340a2d26cdcc8da0bd57e17000305fe5c46a729ef01f1044abf381bf2dd313fc23e6925c2ddad07e6968f36002b +HashAlg = "SHA1" +Hash = e38e6d98821538cf1476cd1152f9c379570cfbbe +cbSalt = 20 +Sig = 4cf306d0f2a8f202a5ef83f18b7038f834bfec79599ebf1385e2f0e81ac7d9fac4bf9bf713c3711f90f5b08fdba3d2443359a7cdff76c461aacd26ffe0ea4c8248ef7f73b3cfbae5960fe5f88543016ebeff2ea18ab7bce74439dffd0cb11359caec7984f922a3fdebfdef159f638d8262ca36b8701a1abf1d45159d2c1f17029f5fd7d15eb531fcfe40ab52a699d7f90f673594bea21800bf6fc84c46e53326ef33f5b8354b59293a4754f0ad2a4d664e7628d50edd3d949cfaa3f872ce34510551967b99782729fadb5d652a8dadd46cb19e4114693906e2428ecb447815c47b144a9ee4f1da61b0 + +N = 0b7d11c1808759760cbc2de0e5a5d21123b438c941849b840b69a381963c493581c2805996bebc852f1f331a6963f65389a6b4066b9000c2bad93ef033a0115d08257e66d09919714e64d95b1f5f7abc5c5b378dd808ad8fd5d215a104baafb562964f5262ef8d90991e151614d08ab5eacd21f45fd9243b86369f72a97731b7d091780c32ce305e00cd05f8569b978024be0c2d20e1d467679920452b1e9e6c142f53c6f5e6b855a125092d90fab9 +e = 0719a1 +P1 = 03294c88b4bfe3f30f9b6fbf84ac72cb7f90a3ba9317b2cdb652eda917972efc33909eb2af906ed94a637c59e2e4b244484459cb15f8305645125175aa0a5215a79a66ffd9ce17f6693a4e067ab5f7b741b2bb365b108197 +P2 = 03a2540dd7c824e37bc2f157e6fd4cce9a1b37a081132cfcc37312fb58485ca5f7242098c1c6df44c6c5f417da74b459f6410f12f33b4f4901e673195e1aef43d14f6a19b313176b3ee270225d2366dbd7fcd3f54886502f +HashAlg = "SHA512" +Hash = 6a990c53b40169429b2a5c414ddcf10366fb4e2fa5b35547018d0514fe913115f6a4a62cdd040c1f7177a09d5a973c7d4aaa10bc0df0f53ba1094619493d62b1 +cbSalt = 64 +Sig = 038576bb9c9ab657d6f27f3e367e99f1ce812325cc7c48c1bf417955f5f58d21d8822b56bceddf806fa5e57adb85ba6d10583d40875022b0ff27fd2934498824f4c9d60423659158064027c79568fa37882380da03786a5a3dfe79d47794253273874de19024b1fc50bc85ebc7201aefb23ef35f65e7aae9e3e26e3225c6f04f07f52d8b65e2f8a776ea4fc49a9c6dd71e388798af014f1a078dbeea615da4de786a34873ec329ed8dd9f811549b46 + +N = 5e2d309579662f15ce8f3e80ba6d751b464659c0c2397808301e722f88bc3782eb64952a37b21202cfd2dded0f1f3b1d0b5776eaaf2ff7031e668cf2ee2a43032f31c2d0fd2d7945b4623e548753bd02d30915f4a7674c41bcf64c92a9c0b974e6c205d973c6a5e4890c137b4818668e6a82fec80c9564ea087c7750028c507d9625e90c5ab954c1740a105973372dedbcab3ff4058af0a0f3a658aa6da561638581c2c256107b8b7148a9f6891070a8c0daf61084649c06abb11a934cd6babcfe25e610860a1312238cb7104614fc7a89add4545b463ff6029ce5d51185603cd0d3112f140abfd2889420b839913fce52191fe5a8a2234086093f678567de81 +e = 02ee66e52edc71cf +P1 = f9a51f06c10c6e9ea4c48e2738a598fe1065cb628322fb895ff102d4d3d843db0c74b6d0c7608ef9c159ba4c22516b53191c83f89e44bd50409a32b310441c9f1915537152530e705f2797bc2e976909402134897f4fe99f53a5f2170dcb7ffdf7d9ea46377f733f20dc71f1fe403bc9705e808dd23261099a261f860c60c2ff +P2 = 6092ea9a245db109958ecfc796178ce12fb82e676b315b20be343986ad98dbbb5e2afa4eb1e81a22b646fbf3b66283fc790db2c062ade0de1ae9774a8244d0e24f1b7fb93827c0bb3fa312c360fea628887898088ee791e2bd2aa9e7e2b414be382f55b47171cb107d82edc5261639ae35f56a65f44883937e000d331db2de7f +HashAlg = "SHA1" +Hash = 3436d306c98e61e21a4ce6e4c572ae2f84c92b5b +cbSalt = 20 +Sig = 40a358869c92968ad0214b587702e29d76669413968ed38659cec0d6c81732ddaae0cc43f848320f4a7e7d7d59ed67f9dfe7acba3bf136918eacef688ec1aabefdd4efe94dcfdaa853deb4179cb1095b8825be1f3cd3170206f1a57fe532e298de41e055074feb4ccdbfc53d3e34830d91eb4984c613d8008e6ebef175b48b83347cacc6112e91868621de86935749d0d0a764dc681fda946a87f8c024069ba6cc7d4bdcec22e0de71bbce5fbbe78ae37ef67fa5374e8e2c7473b68a51574b5249ab1b59f3de3be29e3994d2291608b60130dfe77e818d313c7a449f347dbf55f34102e8ba4aaab58349a2825ab760b0012464c9f5b43d061d6611148121e2ae + +N = 03d90b84db587ae5643d18b1fc698939747e99dd91fbc723f71ad07551f149d77b0f401a716a9fb25b2208fae0c21b1176df60c0a00d12a3991c9409ad37a80ec68d0b45434cc9b3e74da47069f4e6fa4afeecc38a55ed684840958c6e8c2078cea12097dfb589dcc0f5dd34c36e7d75e0a3ef31e0f3028195defb6bf76676914d5a95dd12716957c393d0d2e56055e463d2302917c307e84d61b2a6c4c0202111f7dd2d093bf1a3470319ddb213666beb37d75f681bf87cf57ef9c281ac6f7f09220b925f2499848d00a5ed819a495fbbfedd1631a410b7c661a78bf95e911ae4a66945b554f8d107ad3bf9445d +e = 97886f +P1 = 1fce21d162ea909210f0c547793e1d6a2fa05588a498c55664043ca83eee117c1e605543aca79f44b1d5d30c52cffcc95e0de1913e9e9874693b1d567b206fc86543024521c90990c908b64b5acd88c7d45f6257c743d439eec17887d2deabb7d7e2a1e1b198a152eb98c96321b49778a1d161cb617bcb +P2 = 1ef89fe5a52043c086dfe50c891eddfb3e33492ff0baf5542058cc81f690cd1090877363dad10f4b63588d421bd2cdc626fd1b2e900ac050487c8612a6c7e416a7f9b984302c46c795883846d9e90b645898fdbbd07cb261daa250668dcf58d7850b450ae1013f99fd2585a4026c4bbe1f670137250b77 +HashAlg = "SHA1" +Hash = 6dec1f89e6496d1836e97038b3115135b6086d04 +cbSalt = 20 +Sig = 02ab99648eff1ce1cae9ac6a6f60eb2f460f98eb1e6615b17e2647248bfac362e42717c31aaab6f6de58addcad9b05bdc7f753787242f6e459743df7f99bbf0b41a6593805952e7fc133ae4a2ac00c06b0cebfe3c89763fb9c9dbf30aec8b0aff00a2f19f3cbe810ca3865901cd131bbb65e817bf79af1813bebaa3dc12b5a896338373c2051b0b02bab2eb0c10907edd63054c29ab4bffaf9786933e1e568e2aaba8550ec7e0fc6ce8fc25cd2147e25530616885fd4c38ab77d599ad513923b626b9c0dbdb8fcd80747d546495c31316f2a964b74d3a3efd224c8b75a46861636a548976ea815a62a0c81e1d129 + +N = 37a1befa20c65dbc16a40a39137ea94a0aebae988145d9f9d93f0ab612f2fcc62c591da69acab116a7c4e32000db837bcef90b608d43b48002bb3e231b5b0c5495ba0adf1c46ca4dfe5224b8f3dbaa0e699e68d182d869eeebd393966f12f3d89a7afb22648a1f680122b35969a3a02d +e = 744a680b +P1 = 748c8323df976c74ef0d72f5be136f13b0a5b3e9747e0a6953fbc1b9ab78573531ebe25f03e883d4f7e958d3bcae48a12baf08db5d93e0b3 +P2 = 7a320b103676f43cf87d63b0c6ce9917bfba82185461991fced40229092e1bce08ce31b6bec00e22f71b08cd81648b32a7a80c4d383f2b9f +HashAlg = "SHA1" +Hash = 5e1fb4d5b1586a15dd806d4f98411a1d80259219 +cbSalt = 20 +Sig = 32354bd46f55a8bedeb5e1e01e2be095a57a28fc2796e6bf670acbc35d63053b4c3d35ed6a8d7343f9bd7df85ea212a83da26a9627e77ba9b007a42eec4f6bcf03118f7f1224063a895e76f02e6efe00131c86b5fdccef041723eb74ad927fa179516b22805078e880ad73c4971a25de + +N = 6f5f828c490c81a72fc64b0ae151fa0798a0c31f8aed45b747cf2fc1f62f36835a4f8e2b3c70c67d088e6f07fff20cdbd484ab545d50db9a278cf0cbea3fff6496a3c77f7b631a606fe3e10400ba08d053f292e053241f59e1317a5cf30193bdf0e6039ff60c9af697378b0a2bc1c8d2e298bfcbb5050f0ee968693605f3042bf8563932cbeb09fe0bef72ab04b501893557db206241c001d56c2056783af9662c859916470580a36ea79c1e8b4c9001edb8eba5a229efb4c42918234b0a89 +e = 010001 +P1 = 0ea7b8f6059405e0a621f1f8f246e769bc216df35728593fddb7fe6d3043aa9c4adf54781d745642c3596650ff56024211e57808c0769f49dc7fbb0edd892bba1934c6cb33f6be4935dcbd7491605e0e63a24cd30c82676a0d7653ad00d38187 +P2 = 07997dfb3a493801661c15c318b1a584b7237ed9f978cddd6dc893130af8d1c362369955ef6f687d936ca9ea75a6ce2e4775956b45962d572c21e26aee9ff031f64b293f791873a12d944e6084c720b1f895729ee636a909ed43cc513d27576f +HashAlg = "SHA1" +Hash = 740020b33b81b2488014887501ee5f780b378b59 +cbSalt = 20 +Sig = 101fb55523b46c1a5c4e389080df2c0ea44c137b6e7788af3707a245c46b4d2b6e2c19f8f214d855ca6ca88493b93311855479c65f3ad1b39c0f3d5a13ec7c3cd522430b2376c97a5e9b7505f1f38b49be6ba3f2bef8c459da2bad253d35c78c6e09ed0ae055b1542ab23dd941b0512e1e891e8c76529c4106d1e3fb5f0662e638ec631e410bd5d6ff80764ca376942959715b449ebe5013c5cd510710a26d97d2420b6b82a7a34df103f2dac23caf411f4e3259f4de9c6ffc3bde76a8b7d3 + +N = 0e578fd1029908a60e104c38dd8e551fe6811aa473ed70b8227987c27dada3450024b0153dec3ef2647bf5e36a7adc6d3f70c0233d938367936b0b253c2f7ff82c575d0b960d87997af00bb34b62c131bbd3fe8fc39be31eedfd02347665dd4b4fcfe6b9d23118d089bfe0c2562b7e2ceb25bcaaabd716c35855c3fe7412b465f21e5440d843a100383c4c977e94a80cbc35f2a8a409 +e = 03260d3564894f +P1 = 3af18a0fc539ec5be8eb4a14339bdce9e7e76dab44f7194e5cfa3d6fedb20b2be830d3d0fb4021585e7b8aa27050a788c3269b36bca7b007cff68778f5930c5108d513a89ab7b13e05a7ab +P2 = 3e4a1c7d5c38b1cbfa4f7e4146db636d6d5ccf55e2a316835699c2e355dfc3cfeefa6da5d60c7b102a7d04baafb56240f0dea3fb919bbde9b20bc5d9d36b8821ecf63eb1d0f1f1a706df1b +HashAlg = "SHA256" +Hash = ef5a078840c6c7b2f87b313689e45e410f8c1ecafe5a50ec0c972ce88da7dfe7 +cbSalt = 32 +Sig = 097ce9efd3da24ed8ee34940c6699cf85e033ef596662d7cb3cdc3812b1789874480217c270e96028b462b212be5e573cbe4561bd09250d056ac4768e62851ab1c51a5961f65d6c0303a1f0bf3dc6def190c60adc849d18c8f78a68022162cccb15f9c7d0560e0fd95be0db856a5962d8ec205a8a690e4d4fcb14c66582fb4401cd44ef7104ae7633e769c4a67503f4cc1810ab5a993 + +N = 1afcf357e95e957ff2c355896a1a2ea6b4ee858588c3ddd7908613b2330fe52071881aef0e709b6402eab4166f63e3747c33ecf6c70dd5a0c0c08828788c2f1955b98901693ce46bdee1e63134d8c9e556b4140241d9f8f9663ae6b1299769dc3d8da948d8b1f101754dfaedfb10a4e160bf033ab99ffe5644598ac07e8340ef7448c2f261c2ed7bc86118968389cefe741663af86c8bd4ffbe889 +e = 73 +P1 = 07653ec4453a9c503d4fca40908a258fb4d151fad2801b1dc5dc0088fae1def5830b42db6ee1e1c2cc689a2bde01804948d620a489be2b61cc07b74bc37710202c9e7e2274a3bfe6bf1875134b27 +P2 = 03a6362227a04d69ec252f6bf30506a375caf662156bd411dc434db9ebc52536e4520d9875f214c87f4ac721c9343d3bd53e82caae24399da8438d787645e16052c4020061bb74ea246501333ccf +HashAlg = "SHA384" +Hash = 50e22563f5c80b532b82f29608b07d22891ea74afcbaaccde4a3300e39fcce0b1a714f8c1774d526f7db735fb1873a36 +cbSalt = 48 +Sig = 0cba8852e638a42c10e1de64d9a1196617b571be70b98a6c32f0d90cc79998eeeb4c1598daefda5042bac0e873801af281e78947c2b934a867f37a23576946f011b2574e659836428402787c748264fbc48722a584c01790e186e4fd97adc29172f652d45eb2e51fcb1a640dc0645c7ea6c26e7f001ee738c738b173c4e92f5e876c200d6a656331b27f6d4aca43d2ea1a0e49b6448a99505ce530 + +N = 1a2d2cd4b0b4af1ee42ffe205fadc6c167de0951b8792b788bc6cf304875993349154015abf8a615ae35ca7bc555d2a399d16c5a37ae12f22c9cda660572311da470c1ae6b278e250ceeea5426ae071e08ee998f008a4eff8c487fa5d36d1888f407d301da2f719560c40766c048a2225233f2ee00e9e89b415f2f77754f6fe321f21d +e = 6b6c225b0f +P1 = 069882c3a7e3a2d8c236228c2cbbf5073cfe3a2cc7a51fbae15d1288f96b5070ff0c58d5d591c6af3f806fbbc8e411b3d6a09be1ac132bab93f68b669b8995bc651f +P2 = 03f7fc096f1c3ed1ba2908a216690296645b29f8b201a55a799ce3a0bc61ffa97575dc912ca0b7d398debc7c9fc669607ab1cbc57131de96cfeadfad0294db0a2543 +HashAlg = "SHA256" +Hash = 2bd2508836d441fe77d9cd1e8e1a7a87fe7cc37d4d8ee09ab4dbaa72e80ea7db +cbSalt = 32 +Sig = 0b2f4022820119b51b3da0f62895b5fa9c9758775e0985ac7edde14f47518f7fd1cdc905a0273b0a77a257fff88e6456d161a8cef5b2a3f791048f4a3f774b37c919baf891660021dcb0abf9d177138993366d96bbf073ee7a8a61dff4702bf30829301dc7c1d33b1c45533b515c6f3b2991bd6056acd9beba460ae0949ceac71eba2f + +N = 04ca43935a8cd5f7da613400a7b5c1bbfbc5f779b02f608ed0f155066f82a457a72ba8066af04cde87c0157f3791311e8c0dc5b7e634d88ec6f19535a9752cc1862f0ebb4e29a050f74484c3f8520a8945bafbe63f62ba87fdaa12316fb35cc84c04ea44a2eb30d6e6b2e55dd90764c1d3a8dd461dbc18cc70971679b16450d5c9f6abda752d0148c34f079451f918861f113a4c48ca46ccf577d56b9e4b5e9471161e70721d831e5277f756e0ab7e0b30c522a3fcb58cede481eec89bb9e6b0b68f82409bb5ddda1d7d5377e0bb0bd7c0bd485c60080e8fa69952b4d089ba437e1ebaeec21401dee7549c5603f363df2e403197422d15e5572da23cd2574d1e50f667e5a6482d1e5ecf376199a95c6f539a6e6f878171777e0556c8f4917e6e3e8b3c0189a7b75199136d94cd +e = 03 +P1 = 033cd310f762e73d1ac7998cb7ee4997d7671a6078d136e28216113f1cf141c2e81d69933a3bcc764ee32daae5da2def506c5db56bea7eb89afe78345b7e347f6f55276bdf01d36f6ee6ee28c239a76ebc886b400b7c2ac6ed1d56bd9dd785d53ce1a0b6e946916cb2624b7fd81eaed4c5daf34f6b447b105cf39d3d55ed19a46871e30d8eb15147e6de0413d6aa55daeab4e171c6b51cb9dfecc565625dc47df4f9944db9905b9b722c6807a98bafbef0b1f96d8e7c9183ffe16a5b3c9d1b0175b60c8367b39748e6aadb66d90dec2dfa0cf9143ed8e5658ed1ae0a196e653787 +P2 = 017ac1f284cce98ee3cd03d4de5f982dc3153a5342baa665b1497cbb52898989cf51e8e266dc46e418cd6f5543d06611b56471cae274c01e0876bd992adaeec0670ad3ee5343680a3416b2be0b +HashAlg = "MD5" +Hash = f1e5bbdf377ee912dcd2058522f54320 +cbSalt = 16 +Sig = 04165f125ee323aefcd4b7912dd64e456ee265b9456f84d8c137394c7f4b327ec71b6a3d63cef1be67d1c354b1ec476efe2487331ff4af5daac52f664d6410ecb6486c80e77558803ea31665dedee91f0b7165043bd491b381048c5c27e26bceff3d39aae30f3b45742366156610e94f2f7ebefdad63c554d440db5a6e2917c77d6616d69befbced2f10a29a4cf2313395c5f13498da1ccabe394f58f35b45630c11740e39ffefaad31e9e57e316c850346adb08f3275946b89bea6c72b59f09bc706024fd02f4f9b092b3c777b6467a25624744cd0cf4be9114b98ff96d1e2ab2503d9833452376fb4d0a72ba17ea61f3aa66c80c02bd81173d2d6bc0b5ed450d24ec36755589287f7feee615da5040b53211ecc20b88c46feb787fdc4fd66b832664a56b89cbcf5991767c73 + +N = 30e8bf513fbe590969e2d50e977339165e101f2c3ce0c76d3e9fb8b0fa172bf6974a2bcaf61ca3dddd6c7ac8c17d8cb98fad262ff908de5fbd31d3acf3aeec8763078a1b920a7bed6b3d363b8d003ec03ee8b96b69812749f910a2e4d0ce14dd881b2baa4b16f5fb21f9b658efc767f1ff101b875a73a9e4c26c7b6c42d5efba179c1aa431a39f97ccd2736710b8775f6eebc369a36470d324d29f8d3a2d99a43a0043d491b23f1c37caa7ebfa42c763181c348b84789eb80a2a0fa42a65d72674df9dbe40ef57778fe782ed2c6158de8d123359d96958f1624c762e92845124176a51 +e = 03 +P1 = 06f29c79e64f18f1e642bdc81f3ba270d0a6eb4870705e986463109bb6b362feb5c95ab981558217f8902bbc7b307f31b4831b2adc68029aad4bb54226949a21cb7231069bdbd665da87c7cf761f5b935edba764c1f63ec627223f +P2 = 070a248a58881d86d8864055f1c399c65de88f1d73c38701f22ea9ab4f3e6f1a1baf4388a7099906f50e3ea5d5c5465ac6b30852e964ee98ce10a8574b6b056e7f4ed2d4f801ad16508879d07f9ba232227ecdf39cf912576a676da1a09a8e89d164524cabc3453a20bf757deb78a8c5ad59e0e0e15d3a4a6a725286fcb80d0b63c45b9999b4aa2f6f +HashAlg = "MD5" +Hash = d63f72da467a754b2c74bcddc6594bbd +cbSalt = 16 +Sig = 1939986cf728737168c43e4a50e8b2e80dc6e5fa5f73a9369fb29d2fd49215641afdbb6c8630a8c048146e5ab4d89a46abfa6f0d60f7311b3f9630ccaccdf15a298d87b06245b98da679c2f296023c43285e289052f4ee4874be2fde75253c50c32b0cdb216db0a7346c86720fd3c429a7ff15f10ed485f40add7f74476122a75ee3247318e86684c261d497419a7a9401cce5fc03500a05c58532b14a27c8d8adc49e4439e08b6c7ea82e1b72cc1a5496d5fb5b489056f2985756ba9a79878bc563009f18199be317366d1e5c3ad2e2836c0da2e992a389b74c46916b232b13e558bc + +N = 05ec31947d204011df47be20337b936ef4104db166279ffaafa390aff9ffd384dd530af577badcafb20430ec6c1df17521345bc1e0476c203e7dbd0ad40fa94959245366712cc6a222d451d4fc7843503359f8a09ddb9afd5a344a1c0bab0bc4f87e544277704297b94fa3d4321323b611f7a56470d69273729633531c2eac9c9a362e9345bf2fa8e8b0c02070e55dfd6fd8b032f13a2dfe748669bad7dc312d430fc1c2aaa200a5c1a2181736c24ac90d79189c5a0f16ac4cdf4ac4c98ade51c39e914e83350ccf61a02135494dc7d9d6d867e3808b1f50eee849c726567fcffe69c172076d16e55d75b461127531260b73b198fd02ee085f0635c0e205e2df9603c73438d32aceb338d0da97320e7d0a91cc0373b71ebba62e75f83a2e5ebc5b32001deb84a80cc7cc6d357febe81e1ff85f6edd3cf3c64f907f85adcf28eede8b20675d369cef268024e5c4cecd723c608d64e6915dffcb7e57ecd3746625e2a1 +e = 03 +P1 = 35058ccd6d78712b4373262d784e626c6bf5aa469cdd06d3eea5ffb1fe975e1261cfdbb2cea509fd59bfcf053f4b85d5ddf6652a38a4f2d6ff1d311b9e196ddc4636fcc4a8438562dfb4973103c949ced06f690525c7 +P2 = 1c9881cdc9be7cc67cb65a04d07db3f56d5593f47d13c13a969c1c9c15e5aa2555b4430ca21532199125d0675fc0f078da13d02eea526d939a7d9b5e439ec9f36e84e6ab9691a82279069fa3277b35d28d47cfcfa6ebeb9038f4682375f508ce7117a14e57c245b9e2c7bab5852cb62fd29333479f35b0be3922aa7a7a568f3c9bb93241efc96740891f00509d2839210d83ecf40e27df425f6940a14680953a3752d552fec01d343987786990ccde1ea0335710ecf860405d5e7b0ee3de7892f61d26f08c65771acdb7ee80fda4bfcc9c8f12a078c37fe5d8f3499213bba6f30c29931defbb1923a74e6b914d633e57f2fab23f087354e4e638d4b250aff65114d866f2c971a1051bf99457 +HashAlg = "SHA256" +Hash = 35eea7f32b75d415371f3dc8e987c4c69a275bb7b0c26e29cf1c8ea83fff7840 +cbSalt = 32 +Sig = 05313c2f761918fcdc0d9a9e33458a0e513b04dc116841205a4178d8bea0b04fe122cb4dd722fc6edc9b023fd9ab1108cc409717d57355db464cb7aa8c10db541fb156e0b0b2ab6f0dd328f26959dd0111ec40cfa5d7788ac1a44c0c940294419d1c15930023c14caea9adcd0e1ee242f153fdbe49e08853faa85e2667da1fc2f0e33b5364622099d32b92836f305298b0c66d3a383fd7b8d3507deb263216813dacdd346f52062e15395718369751e7137cfb84839eb681055de524ed688e4914f66db7094baaccf57b1cda8a418097a682c23f2a10e172a4e4665d372a793dcdde648457371f16366ae2493c12e3304f25d0c6666cf8beaeea20fa185a9947c2038bc499d6c9942faea67f80b3a760eb9d3c6f9944b0e71c3120f3cbd1e5e6961f144e4385583d56e0c1d26a46a8c4f6cddde706cfedf6c0f438d260c8f69148127e3e3b148611fd058d71bdf7857001d78ddb59fc37042960ef3beabfd8fa2c0d + +N = b46818f060a56a2e73f2edb70f3d20a174560d52f0e73f81791a618efd184c44afd633392e9b7d5da1157dc3c677f805c4833c36822409b54fd73c2375ccfaf06b5300f94dc42f3f83238c9058de4d703b6933b9abe93f7f80e87a503fb25465122d90f157f696c21a3f49c6b0be456b3f792515feebbd037556476e34069faf6ba5cffd63777b20933c3b6ef4a58d7cc6f1e15d859b4cf9d993dc2078c08f44b13938f218f79826ded6a48ebcf17526bb5abc596558831ca043d3d430ed7ace9365c73b815ece1ea2ad0831e962596d +e = 03 +P1 = 018ac33ad6b0b2b45eaf3e5cc2c560dfed80f25d6ac5405b55849a6ffd7bac8c30cd37a50e935d2244f4bdfad951febcec97b593e4b4c74f944a21e5961f57751ce5c4075ac7 +P2 = 74fdf896faf9799aa5f1e0ada6fe11854b717100748179aabc6797fb96a74ebcb55532ef88a8f680fd106385e6dba920d3776c1b1c0c2f66fe58af51fc6bec6668b9d8e20b3a73fe9ae4b849c9c6bcc20b1d3c76d06c67a5e1cbf36e36ef74ee3614d050e0dabeaf7abc0f033f1136fd27f729d22e253aa8d9e10e3194eb105fdb3752d0e5488d81df162b +HashAlg = "SHA384" +Hash = 76b36105be9babde1f71d384838034470723198b5caa35246d7af84894dc1aaa9019c7e44e30ec86821bd7193c7a4af1 +cbSalt = 48 +Sig = 8eb1b4567aa03ae50d1ef1aede4fab9c7f61c5e14cfa05495f2daebf93303e2101167a3d7d773ddf019bd7d20dacb94298918fd0bdca2d3a9edf112fc88d46122c0281b41f47efd185d8479a452b870d366e504c11bfc7c0cdea2bd1d6b95cfcac5de10bec1d740313758a1aabfc0ee214417e51f2c7a442e7bcb58a74715cbbc5fcaca12b1022cbee946ebd8dd404c282b5c82c533e3db6730e6f09e8dc6ec709f771f466df2362775710504b32f8496ae39db6e4dcc72824f412adc7d59bdb78a015a9c9cb817d541d7e913fd4bebc + +N = 44880a8b6c92e30135b1b602f6e498c56546147681508960fcf743fe5b59d1d9f213fe61299ab012508c68fffddeab8fa077b21e14dc08fc9357aa7a3897a909c2549e7763cbcd3bffd7e39ee58000c02f3e9e58c56658bda692b509f9f430092c6d85227e35b8a2a46f4e6493ecead180a56d4be8fe2e019af7ef1214dc5d4d2ea7abbe82c11286d34740a2f1efd6bffaa08649b4be6f9f244a2ae8ba2880fd88ee5e7bc97f3192cdc2e3c6ce91baab315b9bdf63760a4e8c6e6f8ae69245b1ec2d09ccadba8f29eda68d28d16b20fb0bd09b13c08b65f87d77cd94f26d613efe3c57b9a483e269476ed4b3cdebcb49c306fc8f96ae57b9163ffba6f9fc18bc54e22b0a8d5d13ca69acb9e7f794a3de1924535c37cbee9077e64c5c24a23c8d +e = 010001 +P1 = 0295453e5ce4f9a70423e31ac6eb52260c1396761f96fd8a4cef28d43dc71b4d5d3c19384b17226a6fcc5746e18dbd07181073c85a59426b76684e1631875246f13fb5522a3f0fe2b00822915492fd2c1baa68a8c1f68745831c296ed10386e7c1b1626c793dc404420e1b5127363afdfeb9dc0dac0828cdea3d1b16219845dcbecc2f7cc1baa4a64776da0946f1026c1e64f5e3ef211efba2e5c3e8cebdf3685027ad72419ce0c39836f881fd398cf9b25a1da2951daee63d174022d522d7 +P2 = 1a87e3212db920aa406e446cfe6a49cd28a5c506bcab99a59b8bb15c190e96ac448645b32219220a6531e821dc93de012a84c0fff2aee34849675033899c083d4c4bc4a3700b342e91999842578ff1be5c888cec73fa5dd3c23a94c848b7ef14d33b +HashAlg = "MD5" +Hash = c3b1b45a5e0d7d48ee523d6c59eb5c5e +cbSalt = 16 +Sig = 3295a25dea16ca99426c63aa4467d0870d36c3a64c2ec29bb5f69966966d95ecd81be9e9c892c9c6e73c69a8014512671ef0a9c8ca652b6ad99e965a7ae8c5fd29248379e72ea7dcf7afad4093d3f88764bfdb0ae7c5a5c17addbe8fb0884c997d8f2013753adec73ca9e387319b0f874341b109abd117d495b191a7066b9927358b95c4f7fc074b3d5f0cde0aeb751798000b4644f38b66faf6b54beff4f7d9e8135334009baf1e42fdf1425f167d22dbace4766dd31888e8c13a8cc553b5da74de121d96185a3d5caa479273dc28470d5dc0e7c636a8773cc752a56c76b25da4c093b89d1e7b53b11fe48cf28cf9df742986a82b7d97e89766575919a0547ff24a4902ccf3208bf9d9d070c75e5361f43c6c9f5a0183829e3c39fb65009835 + + + +rnd = 1 diff --git a/unittest/lib/callback.cpp b/unittest/lib/callback.cpp index 7bcd122..a31fffa 100644 --- a/unittest/lib/callback.cpp +++ b/unittest/lib/callback.cpp @@ -5,9 +5,6 @@ // #include "precomp.h" -#if SYMCRYPT_MS_VC -#include "msbignum_implementations.h" -#endif // // Format of checked allocation: @@ -150,7 +147,9 @@ SymCryptCallbackRandom( return NT_SUCCESS( status ) ? SYMCRYPT_NO_ERROR : SYMCRYPT_EXTERNAL_FAILURE; } -#if SYMCRYPT_MS_VC +#if INCLUDE_IMPL_MSBIGNUM + + // // Callback functions for MsBignum // @@ -212,6 +211,8 @@ void SetMpErrno_clue1(__in mp_errno_tc code, __in_opt const char *hint, PBIGCTX_ SetMpErrno(code, PBIGCTX_PASS); } +#endif // INCLUDE_IMPL_MSBIGNUM + #if defined(__cplusplus) extern "C" { #endif @@ -257,4 +258,3 @@ cleanup: #if defined(__cplusplus) } #endif -#endif diff --git a/unittest/lib/capi_implementations.cpp b/unittest/lib/capi_implementations.cpp index 79a2582..9e44ef4 100644 --- a/unittest/lib/capi_implementations.cpp +++ b/unittest/lib/capi_implementations.cpp @@ -5,7 +5,8 @@ // #include "precomp.h" -#include "capi_implementations.h" + +#if INCLUDE_IMPL_CAPI HCRYPTPROV g_capiProvider; @@ -543,7 +544,7 @@ addCapiAlgs() addImplementationToGlobalList>(); } - +#endif //INCLUDE_IMPL_CAPI diff --git a/unittest/lib/cng_implementations.cpp b/unittest/lib/cng_implementations.cpp index b8549c0..cb44bf8 100644 --- a/unittest/lib/cng_implementations.cpp +++ b/unittest/lib/cng_implementations.cpp @@ -5,7 +5,8 @@ // #include "precomp.h" -#include "cng_implementations.h" + +#if 1 | INCLUDE_IMPL_CNG char * ImpCng::name = "Cng"; @@ -1346,6 +1347,498 @@ cng_RsaKeyPerf( PBYTE buf1, PBYTE buf2, SIZE_T keySize ) CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); } + +typedef struct _CNG_HASH_INFO { + PCSTR name; + LPCWSTR wideName; +} CNG_HASH_INFO; +typedef const CNG_HASH_INFO * PCCNG_HASH_INFO; + +const CNG_HASH_INFO cngHashInfoTable[] = { + { "MD5", L"MD5" }, + { "SHA1", L"SHA1" }, + { "SHA256", L"SHA256" }, + { "SHA384", L"SHA384" }, + { "SHA512", L"SHA512" }, + { NULL }, +}; + +PCCNG_HASH_INFO getHashInfo( PCSTR pcstrName ) +{ + for( int i=0; cngHashInfoTable[i].name != NULL; i++ ) + { + if( STRICMP( pcstrName, cngHashInfoTable[i].name ) == 0 ) + { + return &cngHashInfoTable[i]; + } + } + CHECK( FALSE, "?" ); + return NULL; +} + + +//================================================ +// Rsa Pkcs1 Sign +template<> +VOID +algImpKeyPerfFunction( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T keySize ) +{ + NTSTATUS ntStatus = STATUS_SUCCESS; + ULONG cbDst = 0; + + PBYTE pTmp = NULL; + BCRYPT_PKCS1_PADDING_INFO * pPaddingInfo = NULL; + + cng_RsaKeyPerf( buf1, buf2, keySize ); + + // Create the padding info in the last bytes of buf2 + pTmp = buf2 + PERF_RSA_HASH_ALG_SIZE; + pPaddingInfo = (BCRYPT_PKCS1_PADDING_INFO *) pTmp; + + pPaddingInfo->pszAlgId = PERF_RSA_HASH_ALG_CNG; + + ntStatus = CngSignHashFn( + *((BCRYPT_KEY_HANDLE *) buf1), + (BCRYPT_PKCS1_PADDING_INFO *) (buf2+PERF_RSA_HASH_ALG_SIZE), + buf2, + PERF_RSA_HASH_ALG_SIZE, + buf3, + (ULONG) keySize, + &cbDst, + BCRYPT_PAD_PKCS1); + CHECK( ntStatus == STATUS_SUCCESS, "?" ); + CHECK( cbDst == keySize, "?" ); + + ntStatus = CngVerifySignatureFn( + *((BCRYPT_KEY_HANDLE *) buf1), + (BCRYPT_PKCS1_PADDING_INFO *) (buf2+PERF_RSA_HASH_ALG_SIZE), + buf2, + PERF_RSA_HASH_ALG_SIZE, + buf3, + (ULONG) keySize, + BCRYPT_PAD_PKCS1); + CHECK( ntStatus == STATUS_SUCCESS, "?" ); +} + +template<> +VOID +algImpDataPerfFunction< ImpCng, AlgRsaSignPkcs1>( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T dataSize ) +{ + ULONG cbDst = 0; + + CngSignHashFn( + *((BCRYPT_KEY_HANDLE *) buf1), + (BCRYPT_PKCS1_PADDING_INFO *) (buf2+PERF_RSA_HASH_ALG_SIZE), + buf2, + PERF_RSA_HASH_ALG_SIZE, + buf3, + (ULONG) dataSize, + &cbDst, + BCRYPT_PAD_PKCS1); +} + +template<> +VOID +algImpDecryptPerfFunction< ImpCng, AlgRsaSignPkcs1>( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T dataSize ) +{ + NTSTATUS ntStatus; + + ntStatus = CngVerifySignatureFn( + *((BCRYPT_KEY_HANDLE *) buf1), + (BCRYPT_PKCS1_PADDING_INFO *) (buf2+PERF_RSA_HASH_ALG_SIZE), + buf2, + PERF_RSA_HASH_ALG_SIZE, + buf3, + (ULONG) dataSize, + BCRYPT_PAD_PKCS1); + CHECK( ntStatus == STATUS_SUCCESS, "?" ); +} + + +template<> +VOID +algImpCleanPerfFunction( PBYTE buf1, PBYTE buf2, PBYTE buf3 ) +{ + UNREFERENCED_PARAMETER( buf1 ); + UNREFERENCED_PARAMETER( buf2 ); + UNREFERENCED_PARAMETER( buf3 ); +} + +template<> +RsaSignImp::RsaSignImp() +{ + m_perfDataFunction = &algImpDataPerfFunction ; + m_perfDecryptFunction = &algImpDecryptPerfFunction< ImpCng, AlgRsaSignPkcs1>; + m_perfKeyFunction = &algImpKeyPerfFunction ; + m_perfCleanFunction = &algImpCleanPerfFunction; + + state.hKey = NULL; +} + +template<> +RsaSignImp::~RsaSignImp() +{ + if( state.hKey != NULL ) + { + BCryptDestroyKey( state.hKey ); + state.hKey = NULL; + } +} + +template<> +NTSTATUS +RsaSignImp::setKey( PCRSAKEY_TESTBLOB pcKeyBlob ) +{ + NTSTATUS ntStatus; + BCRYPT_RSAKEY_BLOB * pBlob = NULL; + PBYTE pTmp; + + if( state.hKey != NULL ) + { + BCryptDestroyKey( state.hKey ); + state.hKey = NULL; + } + + if( pcKeyBlob == NULL ) + { + // Just used to clear the key state to do leak detection + return STATUS_SUCCESS; + } + + // Allocate memory for our blob + pBlob = (BCRYPT_RSAKEY_BLOB *) malloc( sizeof( *pBlob ) + 8 + 3 * RSAKEY_MAXKEYSIZE ); + CHECK( pBlob != NULL, "?" ); + + pBlob->Magic = BCRYPT_RSAPRIVATE_MAGIC; + pBlob->BitLength= pcKeyBlob->nBitsModulus; + pBlob->cbPublicExp = 8; + pBlob->cbModulus = pcKeyBlob->cbModulus; + pBlob->cbPrime1 = pcKeyBlob->cbPrime1; + pBlob->cbPrime2 = pcKeyBlob->cbPrime2; + + pTmp = (PBYTE) (pBlob + 1); + SYMCRYPT_STORE_MSBFIRST64( pTmp, pcKeyBlob->u64PubExp ); + pTmp += 8; + + memcpy( pTmp, &pcKeyBlob->abModulus[0], pBlob->cbModulus ); + pTmp += pBlob->cbModulus; + + memcpy( pTmp, &pcKeyBlob->abPrime1[0], pBlob->cbPrime1 ); + pTmp += pBlob->cbPrime1; + memcpy( pTmp, &pcKeyBlob->abPrime2[0], pBlob->cbPrime2 ); + pTmp += pBlob->cbPrime2; + + ntStatus = BCryptImportKeyPair( + BCRYPT_RSA_SIGN_ALG_HANDLE, + NULL, + BCRYPT_RSAPRIVATE_BLOB, + &state.hKey, + (PBYTE) pBlob, + (UINT32)(pTmp - (PBYTE) pBlob), + 0 ); + + CHECK( NT_SUCCESS( ntStatus ), "?" ); + + return ntStatus; +} + +template<> +NTSTATUS +RsaSignImp::sign( + _In_reads_( cbHash) PCBYTE pbHash, + SIZE_T cbHash, + PCSTR pcstrHashAlgName, + UINT32 u32Other, + _Out_writes_( cbSig ) PBYTE pbSig, + SIZE_T cbSig ) +{ + NTSTATUS ntStatus; + BCRYPT_PKCS1_PADDING_INFO paddingInfo; + PCCNG_HASH_INFO pInfo; + ULONG cbResult; + + UNREFERENCED_PARAMETER( u32Other ); + + pInfo = getHashInfo( pcstrHashAlgName); + paddingInfo.pszAlgId = pInfo->wideName; + + ntStatus = BCryptSignHash( + state.hKey, + &paddingInfo, + (PBYTE) pbHash, + (UINT32)cbHash, + pbSig, + (UINT32)cbSig, + &cbResult, + BCRYPT_PAD_PKCS1 ); + + CHECK( NT_SUCCESS( ntStatus ) && cbResult == cbSig, "?" ); + + return ntStatus; +} + +template<> +NTSTATUS +RsaSignImp::verify( + _In_reads_( cbHash) PCBYTE pbHash, + SIZE_T cbHash, + _In_reads_( cbSig ) PCBYTE pbSig, + SIZE_T cbSig, + PCSTR pcstrHashAlgName, + UINT32 u32Other ) +{ + NTSTATUS ntStatus; + BCRYPT_PKCS1_PADDING_INFO paddingInfo; + PCCNG_HASH_INFO pInfo; + + UNREFERENCED_PARAMETER( u32Other ); + + pInfo = getHashInfo( pcstrHashAlgName); + paddingInfo.pszAlgId = pInfo->wideName; + + ntStatus = BCryptVerifySignature( + state.hKey, + &paddingInfo, + (PBYTE)pbHash, + (UINT32)cbHash, + (PBYTE)pbSig, + (UINT32)cbSig, + BCRYPT_PAD_PKCS1 ); + + return ntStatus; +} + + +//================================================ +// Rsa PSS Sign +template<> +VOID +algImpKeyPerfFunction( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T keySize ) +{ + NTSTATUS ntStatus = STATUS_SUCCESS; + ULONG cbDst = 0; + + PBYTE pTmp = NULL; + BCRYPT_PSS_PADDING_INFO * pPaddingInfo = NULL; + + cng_RsaKeyPerf( buf1, buf2, keySize ); + + // Create the padding info in the last bytes of buf2 + pTmp = buf2 + PERF_RSA_HASH_ALG_SIZE; + pPaddingInfo = (BCRYPT_PSS_PADDING_INFO *) pTmp; + + pPaddingInfo->pszAlgId = PERF_RSA_HASH_ALG_CNG; + pPaddingInfo->cbSalt = PERF_RSA_HASH_ALG_SIZE; + + ntStatus = CngSignHashFn( + *((BCRYPT_KEY_HANDLE *) buf1), + (BCRYPT_PKCS1_PADDING_INFO *) (buf2+PERF_RSA_HASH_ALG_SIZE), + buf2, + PERF_RSA_HASH_ALG_SIZE, + buf3, + (ULONG) keySize, + &cbDst, + BCRYPT_PAD_PSS); + CHECK( ntStatus == STATUS_SUCCESS, "?" ); + CHECK( cbDst == keySize, "?" ); + + ntStatus = CngVerifySignatureFn( + *((BCRYPT_KEY_HANDLE *) buf1), + (BCRYPT_PKCS1_PADDING_INFO *) (buf2+PERF_RSA_HASH_ALG_SIZE), + buf2, + PERF_RSA_HASH_ALG_SIZE, + buf3, + (ULONG) keySize, + BCRYPT_PAD_PSS); + CHECK( ntStatus == STATUS_SUCCESS, "?" ); +} + +template<> +VOID +algImpDataPerfFunction< ImpCng, AlgRsaSignPss>( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T dataSize ) +{ + ULONG cbDst = 0; + + CngSignHashFn( + *((BCRYPT_KEY_HANDLE *) buf1), + (BCRYPT_PSS_PADDING_INFO *) (buf2+PERF_RSA_HASH_ALG_SIZE), + buf2, + PERF_RSA_HASH_ALG_SIZE, + buf3, + (ULONG) dataSize, + &cbDst, + BCRYPT_PAD_PSS); +} + +template<> +VOID +algImpDecryptPerfFunction< ImpCng, AlgRsaSignPss>( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T dataSize ) +{ + NTSTATUS ntStatus; + + ntStatus = CngVerifySignatureFn( + *((BCRYPT_KEY_HANDLE *) buf1), + (BCRYPT_PSS_PADDING_INFO *) (buf2+PERF_RSA_HASH_ALG_SIZE), + buf2, + PERF_RSA_HASH_ALG_SIZE, + buf3, + (ULONG) dataSize, + BCRYPT_PAD_PSS); + CHECK( ntStatus == STATUS_SUCCESS, "?" ); +} + + +template<> +VOID +algImpCleanPerfFunction( PBYTE buf1, PBYTE buf2, PBYTE buf3 ) +{ + UNREFERENCED_PARAMETER( buf1 ); + UNREFERENCED_PARAMETER( buf2 ); + UNREFERENCED_PARAMETER( buf3 ); +} + +template<> +RsaSignImp::RsaSignImp() +{ + m_perfDataFunction = &algImpDataPerfFunction ; + m_perfDecryptFunction = &algImpDecryptPerfFunction< ImpCng, AlgRsaSignPss>; + m_perfKeyFunction = &algImpKeyPerfFunction ; + m_perfCleanFunction = &algImpCleanPerfFunction; + + state.hKey = NULL; +} + +template<> +RsaSignImp::~RsaSignImp() +{ + if( state.hKey != NULL ) + { + BCryptDestroyKey( state.hKey ); + state.hKey = NULL; + } +} + +template<> +NTSTATUS +RsaSignImp::setKey( PCRSAKEY_TESTBLOB pcKeyBlob ) +{ + NTSTATUS ntStatus; + BCRYPT_RSAKEY_BLOB * pBlob = NULL; + PBYTE pTmp; + + if( state.hKey != NULL ) + { + BCryptDestroyKey( state.hKey ); + state.hKey = NULL; + } + + if( pcKeyBlob == NULL ) + { + // Just used to clear the key state to do leak detection + return STATUS_SUCCESS; + } + + // Allocate memory for our blob + pBlob = (BCRYPT_RSAKEY_BLOB *) malloc( sizeof( *pBlob ) + 8 + 3 * RSAKEY_MAXKEYSIZE ); + CHECK( pBlob != NULL, "?" ); + + pBlob->Magic = BCRYPT_RSAPRIVATE_MAGIC; + pBlob->BitLength= pcKeyBlob->nBitsModulus; + pBlob->cbPublicExp = 8; + pBlob->cbModulus = pcKeyBlob->cbModulus; + pBlob->cbPrime1 = pcKeyBlob->cbPrime1; + pBlob->cbPrime2 = pcKeyBlob->cbPrime2; + + pTmp = (PBYTE) (pBlob + 1); + SYMCRYPT_STORE_MSBFIRST64( pTmp, pcKeyBlob->u64PubExp ); + pTmp += 8; + + memcpy( pTmp, &pcKeyBlob->abModulus[0], pBlob->cbModulus ); + pTmp += pBlob->cbModulus; + + memcpy( pTmp, &pcKeyBlob->abPrime1[0], pBlob->cbPrime1 ); + pTmp += pBlob->cbPrime1; + memcpy( pTmp, &pcKeyBlob->abPrime2[0], pBlob->cbPrime2 ); + pTmp += pBlob->cbPrime2; + + ntStatus = BCryptImportKeyPair( + BCRYPT_RSA_SIGN_ALG_HANDLE, + NULL, + BCRYPT_RSAPRIVATE_BLOB, + &state.hKey, + (PBYTE) pBlob, + (UINT32)(pTmp - (PBYTE) pBlob), + 0 ); + + CHECK( NT_SUCCESS( ntStatus ), "?" ); + + return ntStatus; +} + +template<> +NTSTATUS +RsaSignImp::sign( + _In_reads_( cbHash) PCBYTE pbHash, + SIZE_T cbHash, + PCSTR pcstrHashAlgName, + UINT32 u32Other, + _Out_writes_( cbSig ) PBYTE pbSig, + SIZE_T cbSig ) +{ + NTSTATUS ntStatus; + BCRYPT_PSS_PADDING_INFO paddingInfo; + PCCNG_HASH_INFO pInfo; + ULONG cbResult; + + pInfo = getHashInfo( pcstrHashAlgName); + paddingInfo.pszAlgId = pInfo->wideName; + paddingInfo.cbSalt = u32Other; + + ntStatus = BCryptSignHash( + state.hKey, + &paddingInfo, + (PBYTE) pbHash, + (UINT32)cbHash, + pbSig, + (UINT32)cbSig, + &cbResult, + BCRYPT_PAD_PSS ); + + CHECK( NT_SUCCESS( ntStatus ) && cbResult == cbSig, "?" ); + + return ntStatus; +} + +template<> +NTSTATUS +RsaSignImp::verify( + _In_reads_( cbHash) PCBYTE pbHash, + SIZE_T cbHash, + _In_reads_( cbSig ) PCBYTE pbSig, + SIZE_T cbSig, + PCSTR pcstrHashAlgName, + UINT32 u32Other ) +{ + NTSTATUS ntStatus; + BCRYPT_PSS_PADDING_INFO paddingInfo; + PCCNG_HASH_INFO pInfo; + + pInfo = getHashInfo( pcstrHashAlgName); + paddingInfo.pszAlgId = pInfo->wideName; + paddingInfo.cbSalt = u32Other; + + ntStatus = BCryptVerifySignature( + state.hKey, + &paddingInfo, + (PBYTE)pbHash, + (UINT32)cbHash, + (PBYTE)pbSig, + (UINT32)cbSig, + BCRYPT_PAD_PSS ); + + return ntStatus; +} + // Rsa Encryption template<> @@ -1419,55 +1912,179 @@ algImpDataPerfFunction< ImpCng, AlgRsaEncRaw>( PBYTE buf1, PBYTE buf2, PBYTE buf } template<> -RsaImp::RsaImp() +VOID +algImpDecryptPerfFunction< ImpCng, AlgRsaEncRaw>( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T dataSize ) +{ + NTSTATUS ntStatus; + ULONG cbDst; + + ntStatus = CngDecryptFn( + *((BCRYPT_KEY_HANDLE *) buf1), + buf3, + (ULONG)dataSize, + NULL, + NULL, + 0, + buf2 + dataSize, + (ULONG)dataSize, + &cbDst, + BCRYPT_PAD_NONE ); + CHECK( ntStatus == STATUS_SUCCESS, "?" ); +} + +template<> +RsaEncImp::RsaEncImp() { m_perfDataFunction = &algImpDataPerfFunction ; - m_perfDecryptFunction = NULL; + m_perfDecryptFunction = &algImpDecryptPerfFunction; m_perfKeyFunction = &algImpKeyPerfFunction ; m_perfCleanFunction = &algImpCleanPerfFunction; + + state.hKey = NULL; } template<> -RsaImp::~RsaImp() +RsaEncImp::~RsaEncImp() { -} - -// Rsa Decryption (only the Data perf function is new) - -template<> -VOID -algImpDataPerfFunction< ImpCng, AlgRsaDecRaw>( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T dataSize ) -{ - ULONG cbDst = 0; - - CngDecryptFn( - *((BCRYPT_KEY_HANDLE *) buf1), - buf3, - (ULONG)dataSize, - NULL, - NULL, - 0, - buf2, - (ULONG)dataSize, - &cbDst, - BCRYPT_PAD_NONE ); + if( state.hKey != NULL ) + { + BCryptDestroyKey( state.hKey ); + state.hKey = NULL; + } } template<> -RsaImp::RsaImp() +NTSTATUS +RsaEncImp::setKey( PCRSAKEY_TESTBLOB pcKeyBlob ) { - m_perfDataFunction = &algImpDataPerfFunction ; - m_perfDecryptFunction = NULL; - m_perfKeyFunction = &algImpKeyPerfFunction ; - m_perfCleanFunction = &algImpCleanPerfFunction; + NTSTATUS ntStatus; + BCRYPT_RSAKEY_BLOB * pBlob = NULL; + PBYTE pTmp; + + if( state.hKey != NULL ) + { + BCryptDestroyKey( state.hKey ); + state.hKey = NULL; + } + + if( pcKeyBlob == NULL ) + { + // Just used to clear the key state to do leak detection + return STATUS_SUCCESS; + } + + // Allocate memory for our blob + pBlob = (BCRYPT_RSAKEY_BLOB *) malloc( sizeof( *pBlob ) + 8 + 3 * RSAKEY_MAXKEYSIZE ); + CHECK( pBlob != NULL, "?" ); + + pBlob->Magic = BCRYPT_RSAPRIVATE_MAGIC; + pBlob->BitLength= pcKeyBlob->nBitsModulus; + pBlob->cbPublicExp = 8; + pBlob->cbModulus = pcKeyBlob->cbModulus; + pBlob->cbPrime1 = pcKeyBlob->cbPrime1; + pBlob->cbPrime2 = pcKeyBlob->cbPrime2; + + pTmp = (PBYTE) (pBlob + 1); + SYMCRYPT_STORE_MSBFIRST64( pTmp, pcKeyBlob->u64PubExp ); + pTmp += 8; + + memcpy( pTmp, &pcKeyBlob->abModulus[0], pBlob->cbModulus ); + pTmp += pBlob->cbModulus; + + memcpy( pTmp, &pcKeyBlob->abPrime1[0], pBlob->cbPrime1 ); + pTmp += pBlob->cbPrime1; + memcpy( pTmp, &pcKeyBlob->abPrime2[0], pBlob->cbPrime2 ); + pTmp += pBlob->cbPrime2; + + ntStatus = BCryptImportKeyPair( + BCRYPT_RSA_ALG_HANDLE, + NULL, + BCRYPT_RSAPRIVATE_BLOB, + &state.hKey, + (PBYTE) pBlob, + (UINT32)(pTmp - (PBYTE) pBlob), + 0 ); + + CHECK( NT_SUCCESS( ntStatus ), "?" ); + + return ntStatus; } -template<> -RsaImp::~RsaImp() +NTSTATUS +RsaEncImp::encrypt( + _In_reads_( cbMsg ) PCBYTE pbMsg, + SIZE_T cbMsg, + PCSTR pcstrHashAlgName, + PCBYTE pbLabel, + SIZE_T cbLabel, + _Out_writes_( cbCiphertext ) PBYTE pbCiphertext, + SIZE_T cbCiphertext ) { -} + NTSTATUS ntStatus; + ULONG cbResult; + + UNREFERENCED_PARAMETER( pcstrHashAlgName ); + UNREFERENCED_PARAMETER( pbLabel ); + UNREFERENCED_PARAMETER( cbLabel ); + + CHECK( cbMsg == cbCiphertext, "?" ); + + ntStatus = CngEncryptFn( + state.hKey, + (PBYTE)pbMsg, (ULONG)cbMsg, + NULL, + NULL, 0, + pbCiphertext, (ULONG)cbCiphertext, + &cbResult, + 0 ); + + if( ntStatus != STATUS_SUCCESS ) + { + iprint( "ntStatus = %08x\n", ntStatus ); + iprint( "cbMsg = %d\n, cbResult = %d\n", cbMsg, cbResult ); + } + CHECK( ntStatus == STATUS_SUCCESS, "?" ); + CHECK( cbResult == cbMsg, "?" ); + + return ntStatus; +} + +NTSTATUS +RsaEncImp::decrypt( + _In_reads_( cbCiphertext ) PCBYTE pbCiphertext, + SIZE_T cbCiphertext, + PCSTR pcstrHashAlgName, + PCBYTE pbLabel, + SIZE_T cbLabel, + _Out_writes_to_(cbMsg,*pcbMsg) PBYTE pbMsg, + SIZE_T cbMsg, + SIZE_T *pcbMsg ) +{ + NTSTATUS ntStatus; + ULONG cbResult; + + UNREFERENCED_PARAMETER( pcstrHashAlgName ); + UNREFERENCED_PARAMETER( pbLabel ); + UNREFERENCED_PARAMETER( cbLabel ); + + ntStatus = CngDecryptFn( + state.hKey, + (PBYTE) pbCiphertext, (ULONG)cbCiphertext, + NULL, + NULL, 0, + pbMsg, (ULONG)cbMsg, + &cbResult, + 0 ); + + CHECK( ntStatus == STATUS_SUCCESS, "?" ); + CHECK( cbResult == cbCiphertext, "?" ); + + *pcbMsg = cbResult; + return ntStatus; +} + +// RSA Pkcs1 encryption -// Rsa Pkcs1 Encryption template<> VOID algImpKeyPerfFunction( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T keySize ) @@ -1538,6 +2155,538 @@ algImpCleanPerfFunction( PBYTE buf1, PBYTE buf2, PBYTE b UNREFERENCED_PARAMETER( buf3 ); } +template<> +VOID +algImpDecryptPerfFunction< ImpCng, AlgRsaEncPkcs1>( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T dataSize ) +{ + NTSTATUS ntStatus; + ULONG cbDst; + + ntStatus = CngDecryptFn( + *((BCRYPT_KEY_HANDLE *) buf1), + buf3, + (ULONG)dataSize, + NULL, + NULL, + 0, + buf2 + dataSize, + (ULONG)dataSize, + &cbDst, + BCRYPT_PAD_PKCS1 ); + CHECK( ntStatus == STATUS_SUCCESS, "?" ); +} + +template<> +RsaEncImp::RsaEncImp() +{ + m_perfDataFunction = &algImpDataPerfFunction ; + m_perfDecryptFunction = &algImpDecryptPerfFunction; + m_perfKeyFunction = &algImpKeyPerfFunction ; + m_perfCleanFunction = &algImpCleanPerfFunction; + + state.hKey = NULL; +} + +template<> +RsaEncImp::~RsaEncImp() +{ + if( state.hKey != NULL ) + { + BCryptDestroyKey( state.hKey ); + state.hKey = NULL; + } +} + +template<> +NTSTATUS +RsaEncImp::setKey( PCRSAKEY_TESTBLOB pcKeyBlob ) +{ + NTSTATUS ntStatus; + BCRYPT_RSAKEY_BLOB * pBlob = NULL; + PBYTE pTmp; + + if( state.hKey != NULL ) + { + BCryptDestroyKey( state.hKey ); + state.hKey = NULL; + } + + if( pcKeyBlob == NULL ) + { + // Just used to clear the key state to do leak detection + return STATUS_SUCCESS; + } + + // Allocate memory for our blob + pBlob = (BCRYPT_RSAKEY_BLOB *) malloc( sizeof( *pBlob ) + 8 + 3 * RSAKEY_MAXKEYSIZE ); + CHECK( pBlob != NULL, "?" ); + + pBlob->Magic = BCRYPT_RSAPRIVATE_MAGIC; + pBlob->BitLength= pcKeyBlob->nBitsModulus; + pBlob->cbPublicExp = 8; + pBlob->cbModulus = pcKeyBlob->cbModulus; + pBlob->cbPrime1 = pcKeyBlob->cbPrime1; + pBlob->cbPrime2 = pcKeyBlob->cbPrime2; + + pTmp = (PBYTE) (pBlob + 1); + SYMCRYPT_STORE_MSBFIRST64( pTmp, pcKeyBlob->u64PubExp ); + pTmp += 8; + + memcpy( pTmp, &pcKeyBlob->abModulus[0], pBlob->cbModulus ); + pTmp += pBlob->cbModulus; + + memcpy( pTmp, &pcKeyBlob->abPrime1[0], pBlob->cbPrime1 ); + pTmp += pBlob->cbPrime1; + memcpy( pTmp, &pcKeyBlob->abPrime2[0], pBlob->cbPrime2 ); + pTmp += pBlob->cbPrime2; + + ntStatus = BCryptImportKeyPair( + BCRYPT_RSA_ALG_HANDLE, + NULL, + BCRYPT_RSAPRIVATE_BLOB, + &state.hKey, + (PBYTE) pBlob, + (UINT32)(pTmp - (PBYTE) pBlob), + 0 ); + + CHECK( NT_SUCCESS( ntStatus ), "?" ); + + return ntStatus; +} + +NTSTATUS +RsaEncImp::encrypt( + _In_reads_( cbMsg ) PCBYTE pbMsg, + SIZE_T cbMsg, + PCSTR pcstrHashAlgName, + PCBYTE pbLabel, + SIZE_T cbLabel, + _Out_writes_( cbCiphertext ) PBYTE pbCiphertext, + SIZE_T cbCiphertext ) +{ + NTSTATUS ntStatus; + ULONG cbResult; + + UNREFERENCED_PARAMETER( pcstrHashAlgName ); + UNREFERENCED_PARAMETER( pbLabel ); + UNREFERENCED_PARAMETER( cbLabel ); + + CHECK( cbMsg < cbCiphertext, "?" ); + + ntStatus = CngEncryptFn( + state.hKey, + (PBYTE)pbMsg, (ULONG)cbMsg, + NULL, + NULL, 0, + pbCiphertext, (ULONG)cbCiphertext, + &cbResult, + BCRYPT_PAD_PKCS1 ); + + CHECK( ntStatus == STATUS_SUCCESS, "?" ); + CHECK( cbResult == cbCiphertext, "?" ); + + return ntStatus; +} + +NTSTATUS +RsaEncImp::decrypt( + _In_reads_( cbCiphertext ) PCBYTE pbCiphertext, + SIZE_T cbCiphertext, + PCSTR pcstrHashAlgName, + PCBYTE pbLabel, + SIZE_T cbLabel, + _Out_writes_to_(cbMsg,*pcbMsg) PBYTE pbMsg, + SIZE_T cbMsg, + SIZE_T *pcbMsg ) +{ + NTSTATUS ntStatus; + ULONG cbResult; + + UNREFERENCED_PARAMETER( pcstrHashAlgName ); + UNREFERENCED_PARAMETER( pbLabel ); + UNREFERENCED_PARAMETER( cbLabel ); + + ntStatus = CngDecryptFn( + state.hKey, + (PBYTE) pbCiphertext, (ULONG)cbCiphertext, + NULL, + NULL, 0, + pbMsg, (ULONG)cbMsg, + &cbResult, + BCRYPT_PAD_PKCS1 ); + + // Normalize error code to allow equality testing across different implementations + ntStatus = NT_SUCCESS( ntStatus ) ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL; + + *pcbMsg = cbResult; + return ntStatus; +} + + +// RSA Oaep encryption + +template<> +VOID +algImpKeyPerfFunction( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T keySize ) +{ + NTSTATUS ntStatus = STATUS_SUCCESS; + ULONG cbDst = 0; + + PBYTE pTmp = NULL; + BCRYPT_OAEP_PADDING_INFO * pPaddingInfo = NULL; + + cng_RsaKeyPerf( buf1, buf2, keySize ); + + // Set the padding info at the end of buf2 (after the plaintext) + pTmp = buf2 + keySize; + pPaddingInfo = (BCRYPT_OAEP_PADDING_INFO *) pTmp; + pPaddingInfo->pszAlgId = PERF_RSA_HASH_ALG_CNG; + pPaddingInfo->pbLabel = buf2 + 2*keySize; // Use buf2 bytes as label + pPaddingInfo->cbLabel = PERF_RSA_LABEL_LENGTH; + + ntStatus = CngEncryptFn( + *((BCRYPT_KEY_HANDLE *) buf1), + buf2, + (ULONG)keySize - PERF_RSA_OAEP_LESS_BYTES, // This is the maximum size for OAEP + (VOID *) (buf2 + keySize), + NULL, + 0, + buf3, + (ULONG)keySize, + &cbDst, + BCRYPT_PAD_OAEP ); + CHECK( ntStatus == STATUS_SUCCESS, "?" ); + CHECK( cbDst == keySize, "?" ); + + ntStatus = CngDecryptFn( + *((BCRYPT_KEY_HANDLE *) buf1), + buf3, + (ULONG)keySize, + (VOID *) (buf2 + keySize), + NULL, + 0, + buf3 + keySize, + (ULONG)keySize, + &cbDst, + BCRYPT_PAD_OAEP ); + CHECK( ntStatus == STATUS_SUCCESS, "?" ); + CHECK( cbDst == keySize - PERF_RSA_OAEP_LESS_BYTES, "?" ); + CHECK( memcmp(buf2, buf3 + keySize, cbDst) == 0, "?" ); +} + +template<> +VOID +algImpDataPerfFunction< ImpCng, AlgRsaEncOaep>( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T dataSize ) +{ + ULONG cbDst = 0; + NTSTATUS ntStatus = STATUS_SUCCESS; + + ntStatus = CngEncryptFn( + *((BCRYPT_KEY_HANDLE *) buf1), + buf2, + (ULONG)dataSize - PERF_RSA_OAEP_LESS_BYTES, // This is the maximum size for OAEP + (VOID *) (buf2 + dataSize), + NULL, + 0, + buf3, + (ULONG)dataSize, + &cbDst, + BCRYPT_PAD_OAEP ); + CHECK( ntStatus == STATUS_SUCCESS, "?" ); + CHECK( cbDst == dataSize, "?" ); +} + +template<> +VOID +algImpCleanPerfFunction( PBYTE buf1, PBYTE buf2, PBYTE buf3 ) +{ + UNREFERENCED_PARAMETER( buf1 ); + UNREFERENCED_PARAMETER( buf2 ); + UNREFERENCED_PARAMETER( buf3 ); +} + +template<> +VOID +algImpDecryptPerfFunction< ImpCng, AlgRsaEncOaep>( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T dataSize ) +{ + NTSTATUS ntStatus; + ULONG cbDst; + + ntStatus = CngDecryptFn( + *((BCRYPT_KEY_HANDLE *) buf1), + buf3, + (ULONG)dataSize, + (VOID *) (buf2 + dataSize), + NULL, + 0, + buf3 + dataSize, + (ULONG)dataSize, + &cbDst, + BCRYPT_PAD_OAEP ); + CHECK( ntStatus == STATUS_SUCCESS, "?" ); + CHECK( cbDst == dataSize - PERF_RSA_OAEP_LESS_BYTES, "?" ); +} + +template<> +RsaEncImp::RsaEncImp() +{ + m_perfDataFunction = &algImpDataPerfFunction ; + m_perfDecryptFunction = &algImpDecryptPerfFunction; + m_perfKeyFunction = &algImpKeyPerfFunction ; + m_perfCleanFunction = &algImpCleanPerfFunction; + + state.hKey = NULL; +} + +template<> +RsaEncImp::~RsaEncImp() +{ + if( state.hKey != NULL ) + { + BCryptDestroyKey( state.hKey ); + state.hKey = NULL; + } +} + +template<> +NTSTATUS +RsaEncImp::setKey( PCRSAKEY_TESTBLOB pcKeyBlob ) +{ + NTSTATUS ntStatus; + BCRYPT_RSAKEY_BLOB * pBlob = NULL; + PBYTE pTmp; + + if( state.hKey != NULL ) + { + BCryptDestroyKey( state.hKey ); + state.hKey = NULL; + } + + if( pcKeyBlob == NULL ) + { + // Just used to clear the key state to do leak detection + return STATUS_SUCCESS; + } + + // Allocate memory for our blob + pBlob = (BCRYPT_RSAKEY_BLOB *) malloc( sizeof( *pBlob ) + 8 + 3 * RSAKEY_MAXKEYSIZE ); + CHECK( pBlob != NULL, "?" ); + + pBlob->Magic = BCRYPT_RSAPRIVATE_MAGIC; + pBlob->BitLength= pcKeyBlob->nBitsModulus; + pBlob->cbPublicExp = 8; + pBlob->cbModulus = pcKeyBlob->cbModulus; + pBlob->cbPrime1 = pcKeyBlob->cbPrime1; + pBlob->cbPrime2 = pcKeyBlob->cbPrime2; + + pTmp = (PBYTE) (pBlob + 1); + SYMCRYPT_STORE_MSBFIRST64( pTmp, pcKeyBlob->u64PubExp ); + pTmp += 8; + + memcpy( pTmp, &pcKeyBlob->abModulus[0], pBlob->cbModulus ); + pTmp += pBlob->cbModulus; + + memcpy( pTmp, &pcKeyBlob->abPrime1[0], pBlob->cbPrime1 ); + pTmp += pBlob->cbPrime1; + memcpy( pTmp, &pcKeyBlob->abPrime2[0], pBlob->cbPrime2 ); + pTmp += pBlob->cbPrime2; + + ntStatus = BCryptImportKeyPair( + BCRYPT_RSA_ALG_HANDLE, + NULL, + BCRYPT_RSAPRIVATE_BLOB, + &state.hKey, + (PBYTE) pBlob, + (UINT32)(pTmp - (PBYTE) pBlob), + 0 ); + + CHECK( NT_SUCCESS( ntStatus ), "?" ); + + return ntStatus; +} + +NTSTATUS +RsaEncImp::encrypt( + _In_reads_( cbMsg ) PCBYTE pbMsg, + SIZE_T cbMsg, + PCSTR pcstrHashAlgName, + PCBYTE pbLabel, + SIZE_T cbLabel, + _Out_writes_( cbCiphertext ) PBYTE pbCiphertext, + SIZE_T cbCiphertext ) +{ + NTSTATUS ntStatus; + ULONG cbResult; + PCCNG_HASH_INFO pHashInfo; + BCRYPT_OAEP_PADDING_INFO padding; + + pHashInfo = getHashInfo( pcstrHashAlgName); + padding.pszAlgId = pHashInfo->wideName; + padding.pbLabel = (PBYTE)pbLabel; + padding.cbLabel = (ULONG)cbLabel; + + ntStatus = CngEncryptFn( + state.hKey, + (PBYTE)pbMsg, (ULONG)cbMsg, + &padding, + NULL, 0, + pbCiphertext, (ULONG)cbCiphertext, + &cbResult, + BCRYPT_PAD_OAEP ); + + CHECK( cbResult == cbCiphertext, "Wrong ciphertext size" ); + + return NT_SUCCESS( ntStatus ) ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL; +} + +NTSTATUS +RsaEncImp::decrypt( + _In_reads_( cbCiphertext ) PCBYTE pbCiphertext, + SIZE_T cbCiphertext, + PCSTR pcstrHashAlgName, + PCBYTE pbLabel, + SIZE_T cbLabel, + _Out_writes_to_(cbMsg,*pcbMsg) PBYTE pbMsg, + SIZE_T cbMsg, + SIZE_T *pcbMsg ) +{ + NTSTATUS ntStatus; + ULONG cbResult; + PCCNG_HASH_INFO pHashInfo; + BCRYPT_OAEP_PADDING_INFO padding; + + pHashInfo = getHashInfo( pcstrHashAlgName); + padding.pszAlgId = pHashInfo->wideName; + padding.pbLabel = (PBYTE)pbLabel; + padding.cbLabel = (ULONG)cbLabel; + + ntStatus = CngDecryptFn( + state.hKey, + (PBYTE) pbCiphertext, (ULONG)cbCiphertext, + &padding, + NULL, 0, + pbMsg, (ULONG)cbMsg, + &cbResult, + BCRYPT_PAD_OAEP ); + + // Normalize error code to allow equality testing across different implementations + ntStatus = NT_SUCCESS( ntStatus ) ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL; + + *pcbMsg = cbResult; + return ntStatus; +} + + +//=== +/* +template<> +VOID +algImpDataPerfFunction< ImpCng, AlgRsaDecRaw>( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T dataSize ) +{ + ULONG cbDst = 0; + + CngDecryptFn( + *((BCRYPT_KEY_HANDLE *) buf1), + buf3, + (ULONG)dataSize, + NULL, + NULL, + 0, + buf2, + (ULONG)dataSize, + &cbDst, + BCRYPT_PAD_NONE ); +} + +template<> +RsaImp::RsaImp() +{ + m_perfDataFunction = &algImpDataPerfFunction ; + m_perfDecryptFunction = NULL; + m_perfKeyFunction = &algImpKeyPerfFunction ; + m_perfCleanFunction = &algImpCleanPerfFunction; +} + +template<> +RsaImp::~RsaImp() +{ +} +*/ + +// Rsa Pkcs1 Encryption +/* +template<> +VOID +algImpKeyPerfFunction( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T keySize ) +{ + NTSTATUS ntStatus = STATUS_SUCCESS; + BYTE rbResult[1024] = { 0 }; + ULONG cbDst = 0; + + cng_RsaKeyPerf( buf1, buf2, keySize ); + + ntStatus = CngEncryptFn( + *((BCRYPT_KEY_HANDLE *) buf1), + buf2, + (ULONG)keySize - PERF_RSA_PKCS1_LESS_BYTES, // This is the maximum size for PKCS1 + NULL, + NULL, + 0, + buf3, + (ULONG)keySize, + &cbDst, + BCRYPT_PAD_PKCS1 ); + CHECK( ntStatus == STATUS_SUCCESS, "?" ); + CHECK( cbDst == keySize, "?" ); + + CHECK( sizeof(rbResult) >= keySize, "?" ); + + ntStatus = CngDecryptFn( + *((BCRYPT_KEY_HANDLE *) buf1), + buf3, + (ULONG)keySize, + NULL, + NULL, + 0, + rbResult, + (ULONG)keySize, + &cbDst, + BCRYPT_PAD_PKCS1 ); + CHECK( ntStatus == STATUS_SUCCESS, "?" ); + CHECK( cbDst == keySize - PERF_RSA_PKCS1_LESS_BYTES, "?" ); + CHECK( memcmp(buf2, rbResult, cbDst) == 0, "?" ); +} + +template<> +VOID +algImpDataPerfFunction< ImpCng, AlgRsaEncPkcs1>( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T dataSize ) +{ + ULONG cbDst = 0; + + CngEncryptFn( + *((BCRYPT_KEY_HANDLE *) buf1), + buf2, + (ULONG)dataSize - PERF_RSA_PKCS1_LESS_BYTES, // This is the maximum size for PKCS1 + NULL, + NULL, + 0, + buf3, + (ULONG)dataSize, + &cbDst, + BCRYPT_PAD_PKCS1 ); +} + +template<> +VOID +algImpCleanPerfFunction( PBYTE buf1, PBYTE buf2, PBYTE buf3 ) +{ + UNREFERENCED_PARAMETER( buf1 ); + UNREFERENCED_PARAMETER( buf2 ); + UNREFERENCED_PARAMETER( buf3 ); +} +*/ + +/* template<> RsaImp::RsaImp() { @@ -1551,7 +2700,9 @@ template<> RsaImp::~RsaImp() { } +*/ +/* // Rsa Pkcs1 Decryption template<> VOID @@ -1585,8 +2736,10 @@ template<> RsaImp::~RsaImp() { } +*/ // Rsa Oaep Encryption +/* template<> VOID algImpKeyPerfFunction( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T keySize ) @@ -1666,7 +2819,9 @@ algImpCleanPerfFunction( PBYTE buf1, PBYTE buf2, PBYTE bu UNREFERENCED_PARAMETER( buf2 ); UNREFERENCED_PARAMETER( buf3 ); } +*/ +/* template<> RsaImp::RsaImp() { @@ -1680,7 +2835,9 @@ template<> RsaImp::~RsaImp() { } +*/ +/* // Rsa Oaep Decryption template<> VOID @@ -1715,73 +2872,6 @@ RsaImp::~RsaImp() { } -// Rsa Pkcs1 Sign -template<> -VOID -algImpKeyPerfFunction( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T keySize ) -{ - NTSTATUS ntStatus = STATUS_SUCCESS; - ULONG cbDst = 0; - - PBYTE pTmp = NULL; - BCRYPT_PKCS1_PADDING_INFO * pPaddingInfo = NULL; - - cng_RsaKeyPerf( buf1, buf2, keySize ); - - // Create the padding info in the last bytes of buf2 - pTmp = buf2 + PERF_RSA_HASH_ALG_SIZE; - pPaddingInfo = (BCRYPT_PKCS1_PADDING_INFO *) pTmp; - - pPaddingInfo->pszAlgId = PERF_RSA_HASH_ALG_CNG; - - ntStatus = CngSignHashFn( - *((BCRYPT_KEY_HANDLE *) buf1), - (BCRYPT_PKCS1_PADDING_INFO *) (buf2+PERF_RSA_HASH_ALG_SIZE), - buf2, - PERF_RSA_HASH_ALG_SIZE, - buf3, - (ULONG) keySize, - &cbDst, - BCRYPT_PAD_PKCS1); - CHECK( ntStatus == STATUS_SUCCESS, "?" ); - CHECK( cbDst == keySize, "?" ); - - ntStatus = CngVerifySignatureFn( - *((BCRYPT_KEY_HANDLE *) buf1), - (BCRYPT_PKCS1_PADDING_INFO *) (buf2+PERF_RSA_HASH_ALG_SIZE), - buf2, - PERF_RSA_HASH_ALG_SIZE, - buf3, - (ULONG) keySize, - BCRYPT_PAD_PKCS1); - CHECK( ntStatus == STATUS_SUCCESS, "?" ); -} - -template<> -VOID -algImpDataPerfFunction< ImpCng, AlgRsaSignPkcs1>( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T dataSize ) -{ - ULONG cbDst = 0; - - CngSignHashFn( - *((BCRYPT_KEY_HANDLE *) buf1), - (BCRYPT_PKCS1_PADDING_INFO *) (buf2+PERF_RSA_HASH_ALG_SIZE), - buf2, - PERF_RSA_HASH_ALG_SIZE, - buf3, - (ULONG) dataSize, - &cbDst, - BCRYPT_PAD_PKCS1); -} - -template<> -VOID -algImpCleanPerfFunction( PBYTE buf1, PBYTE buf2, PBYTE buf3 ) -{ - UNREFERENCED_PARAMETER( buf1 ); - UNREFERENCED_PARAMETER( buf2 ); - UNREFERENCED_PARAMETER( buf3 ); -} template<> RsaImp::RsaImp() @@ -1825,7 +2915,9 @@ template<> RsaImp::~RsaImp() { } +*/ +/* // Rsa Pss Sign template<> VOID @@ -1908,9 +3000,10 @@ template<> RsaImp::~RsaImp() { } - +*/ // Rsa Pss Verify +/* template<> VOID algImpDataPerfFunction< ImpCng, AlgRsaVerifyPss>( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T dataSize ) @@ -1938,7 +3031,7 @@ template<> RsaImp::~RsaImp() { } - +*/ VOID addCngAlgs() @@ -2120,17 +3213,24 @@ addCngAlgs() addImplementationToGlobalList>(); addImplementationToGlobalList>(); } - addImplementationToGlobalList>(); - addImplementationToGlobalList>(); - addImplementationToGlobalList>(); - addImplementationToGlobalList>(); - addImplementationToGlobalList>(); - addImplementationToGlobalList>(); - addImplementationToGlobalList>(); - addImplementationToGlobalList>(); - addImplementationToGlobalList>(); - addImplementationToGlobalList>(); + //addImplementationToGlobalList>(); + //addImplementationToGlobalList>(); + //addImplementationToGlobalList>(); + //addImplementationToGlobalList>(); + //addImplementationToGlobalList>(); + //addImplementationToGlobalList>(); + + addImplementationToGlobalList>(); + addImplementationToGlobalList>(); + + addImplementationToGlobalList>(); + addImplementationToGlobalList>(); + addImplementationToGlobalList>(); + //addImplementationToGlobalList>(); + //addImplementationToGlobalList>(); + //addImplementationToGlobalList>(); + //addImplementationToGlobalList>(); } - +#endif //INCLUDE_IMPL_CNG diff --git a/unittest/lib/main.cpp b/unittest/lib/main.cpp index fdac1f6..c6cbfd9 100644 --- a/unittest/lib/main.cpp +++ b/unittest/lib/main.cpp @@ -38,10 +38,12 @@ developertest() // // Special extern declarations to allow us to disable AES-NI on the RSA32 library // +#if INCLUDE_IMPL_RSA32 extern "C" { extern BYTE AesUseXmm; extern BOOL AesDetectXmmDone; } +#endif const char * AlgMd2::name = "Md2"; @@ -154,23 +156,23 @@ const char * AlgWipe::name = "Wipe"; const char * AlgRsaEncRaw::name = "RsaEncRaw"; -const char * AlgRsaDecRaw::name = "RsaDecRaw"; +//const char * AlgRsaDecRaw::name = "RsaDecRaw"; const char * AlgRsaEncPkcs1::name = "RsaEncPkcs1"; -const char * AlgRsaDecPkcs1::name = "RsaDecPkcs1"; +//const char * AlgRsaDecPkcs1::name = "RsaDecPkcs1"; const char * AlgRsaEncOaep::name = "RsaEncOaep"; -const char * AlgRsaDecOaep::name = "RsaDecOaep"; +//const char * AlgRsaDecOaep::name = "RsaDecOaep"; const char * AlgRsaSignPkcs1::name = "RsaSignPkcs1"; -const char * AlgRsaVerifyPkcs1::name = "RsaVerifyPkcs1"; +//const char * AlgRsaVerifyPkcs1::name = "RsaVerifyPkcs1"; const char * AlgRsaSignPss::name = "RsaSignPss"; -const char * AlgRsaVerifyPss::name = "RsaVerifyPss"; +//const char * AlgRsaVerifyPss::name = "RsaVerifyPss"; const char * AlgDsaSign::name = "DsaSign"; @@ -484,15 +486,15 @@ const char * g_algorithmNames[] = { AlgTrialDivisionContext::name, AlgWipe::name, AlgRsaEncRaw::name, - AlgRsaDecRaw::name, + //AlgRsaDecRaw::name, AlgRsaEncPkcs1::name, - AlgRsaDecPkcs1::name, + //AlgRsaDecPkcs1::name, AlgRsaEncOaep::name, - AlgRsaDecOaep::name, + //AlgRsaDecOaep::name, AlgRsaSignPkcs1::name, - AlgRsaVerifyPkcs1::name, + //AlgRsaVerifyPkcs1::name, AlgRsaSignPss::name, - AlgRsaVerifyPss::name, + //AlgRsaVerifyPss::name, AlgDsaSign::name, AlgDsaVerify::name, AlgDh::name, @@ -648,7 +650,7 @@ processSingleOption( _In_ PSTR option ) { if( STRICMP( &option[0], "-aesni" ) == 0 ) { -#if SYMCRYPT_CPU_X86 | SYMCRYPT_CPU_AMD64 +#if INCLUDE_IMPL_RSA32 & (SYMCRYPT_CPU_X86 | SYMCRYPT_CPU_AMD64) // // Disable AES-NI for RSA32 and SymCrypt // @@ -1094,12 +1096,18 @@ testpbkdf2() } #endif +// +// Reach into the internals of Symcrypt to retrieve the build string +extern "C" { +extern const CHAR * SymCryptBuildString; +}; + VOID initTestInfrastructure( int argc, _In_reads_( argc ) char * argv[] ) { - iprint( "SymCrypt unit test program, " - "Built " __DATE__ " " __TIME__ "\n" - "Copyright (c) Microsoft Corporation. Licensed under the MIT license.\n"); + iprint( "SymCrypt unit test program, " + "Library version %s\n" + "Copyright (c) Microsoft Corporation. Licensed under the MIT license.\n", SymCryptBuildString ); #define SYMCRYPT_CHECK_ASM_OFFSET( a, b ) CHECK4( (a) == (b), "Assembler offset incorrect: %s should be %d", #a, (b) ); SYMCRYPT_CHECK_ASM_OFFSETS; @@ -1447,10 +1455,15 @@ runFunctionalTests() testScsTable(); testScsTools(); + + testRsaSignAlgorithms(); + + testRsaEncAlgorithms(); + // need these two #if SYMCRYPT_MS_VC - testRsa(); + // testRsa(); testDl(); #endif @@ -1820,6 +1833,16 @@ printHexArray( PCBYTE pData, SIZE_T nElements, SIZE_T elementSize ) } } +VOID +fprintHex( FILE * f, PCBYTE pbData, SIZE_T cbData ) +{ + for( SIZE_T i=0; i( PBYTE buf1, PBYTE buf2, PBYT } template<> -RsaImp::RsaImp() +VOID +algImpDecryptPerfFunction< ImpMsBignum, AlgRsaEncRaw>( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T dataSize ) { - m_perfDataFunction = &algImpDataPerfFunction ; - m_perfDecryptFunction = NULL; - m_perfKeyFunction = &algImpKeyPerfFunction ; - m_perfCleanFunction = &algImpCleanPerfFunction; + UNREFERENCED_PARAMETER( dataSize ); + + rsa_decryption( + *((PRSA_PRIVATE_KEY *) buf1), + buf3, + buf2 + dataSize, + &g_BignumCtx ); } template<> -RsaImp::~RsaImp() +RsaEncImp::RsaEncImp() { + m_perfDataFunction = &algImpDataPerfFunction ; + m_perfDecryptFunction = &algImpDecryptPerfFunction< ImpMsBignum, AlgRsaEncRaw>; + m_perfKeyFunction = &algImpKeyPerfFunction ; + m_perfCleanFunction = &algImpCleanPerfFunction; + + SymCryptWipe( (PBYTE) &state.key, sizeof( state.key ) ); +} + +template<> +RsaEncImp::~RsaEncImp() +{ + if( state.key.diglen_pubexp != 0 ) + { + rsa_destruction( &state.key, &g_BignumCtx ); + SymCryptWipe( (PBYTE) &state.key, sizeof( state.key ) ); + } +} + +template<> +NTSTATUS +RsaEncImp::setKey( PCRSAKEY_TESTBLOB pcKeyBlob ) +{ + BYTE buf[8]; + BOOL res; + + if( state.key.diglen_pubexp != 0 ) + { + rsa_destruction( &state.key, &g_BignumCtx ); + SymCryptWipe( (PBYTE) &state.key, sizeof( state.key ) ); + } + + if( pcKeyBlob == NULL ) + { + // Used to clear out any keys + goto cleanup; + } + + SYMCRYPT_STORE_MSBFIRST64( buf, pcKeyBlob->u64PubExp ); + + state.cbKey = pcKeyBlob->cbModulus; + res = rsa_import( buf, 8, + &pcKeyBlob->abModulus[0], pcKeyBlob->cbModulus, + &pcKeyBlob->abPrime1[0], pcKeyBlob->cbPrime1, + &pcKeyBlob->abPrime2[0], pcKeyBlob->cbPrime2, + &state.key, + TRUE, + &g_BignumCtx ); + CHECK( res, "Failed to import key" ); + +cleanup: + return STATUS_SUCCESS; +} + +template<> +NTSTATUS +RsaEncImp::encrypt( + _In_reads_( cbMsg ) PCBYTE pbMsg, + SIZE_T cbMsg, + PCSTR pcstrHashAlgName, + PCBYTE pbLabel, + SIZE_T cbLabel, + _Out_writes_( cbCiphertext ) PBYTE pbCiphertext, + SIZE_T cbCiphertext ) +{ + BOOL success; + + UNREFERENCED_PARAMETER( pcstrHashAlgName ); + UNREFERENCED_PARAMETER( pbLabel ); + UNREFERENCED_PARAMETER( cbLabel ); + + CHECK( cbMsg == state.cbKey, "Wrong message size" ); + CHECK( cbCiphertext == state.cbKey, "Wrong ciphertext size" ); + + success = rsa_encryption( + &state.key, + pbMsg, + pbCiphertext, + &g_BignumCtx ); + CHECK( success, "?" ); + + return STATUS_SUCCESS; +} + +template<> +NTSTATUS +RsaEncImp::decrypt( + _In_reads_( cbCiphertext ) PCBYTE pbCiphertext, + SIZE_T cbCiphertext, + PCSTR pcstrHashAlgName, + PCBYTE pbLabel, + SIZE_T cbLabel, + _Out_writes_to_(cbMsg,*pcbMsg) PBYTE pbMsg, + SIZE_T cbMsg, + SIZE_T *pcbMsg ) +{ + BOOL success; + + UNREFERENCED_PARAMETER( pcstrHashAlgName ); + UNREFERENCED_PARAMETER( pbLabel ); + UNREFERENCED_PARAMETER( cbLabel ); + + CHECK( cbCiphertext == state.cbKey, "Wrong ciphertext size" ); + CHECK( cbMsg >= state.cbKey, "Output buffer too small" ); + + success = rsa_decryption( + &state.key, + pbCiphertext, + pbMsg, + &g_BignumCtx ); + CHECK( success, "?" ); + + *pcbMsg = state.cbKey; + + return STATUS_SUCCESS; } // Rsa Decryption +/* template<> VOID algImpKeyPerfFunction( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T keySize ) @@ -178,6 +297,7 @@ algImpDataPerfFunction< ImpMsBignum, AlgRsaDecRaw>( PBYTE buf1, PBYTE buf2, PBYT &g_BignumCtx ); } + template<> RsaImp::RsaImp() { @@ -191,6 +311,7 @@ template<> RsaImp::~RsaImp() { } +*/ //============================ @@ -1298,8 +1419,7 @@ ArithImp::~ArithImp() VOID addMsBignumAlgs() { - addImplementationToGlobalList>(); - addImplementationToGlobalList>(); + addImplementationToGlobalList>(); addImplementationToGlobalList>(); addImplementationToGlobalList>(); diff --git a/unittest/lib/testRsa.cpp b/unittest/lib/old-testRsa.cpp similarity index 100% rename from unittest/lib/testRsa.cpp rename to unittest/lib/old-testRsa.cpp diff --git a/unittest/lib/testRsa_cng.cpp b/unittest/lib/old-testRsa_cng.cpp similarity index 100% rename from unittest/lib/testRsa_cng.cpp rename to unittest/lib/old-testRsa_cng.cpp diff --git a/unittest/lib/testRsa_msbignum.cpp b/unittest/lib/old-testRsa_msbignum.cpp similarity index 100% rename from unittest/lib/testRsa_msbignum.cpp rename to unittest/lib/old-testRsa_msbignum.cpp diff --git a/unittest/lib/testRsa_sc.cpp b/unittest/lib/old-testRsa_sc.cpp similarity index 100% rename from unittest/lib/testRsa_sc.cpp rename to unittest/lib/old-testRsa_sc.cpp diff --git a/unittest/lib/ref_implementations.cpp b/unittest/lib/ref_implementations.cpp index bed3e8d..a9f3523 100644 --- a/unittest/lib/ref_implementations.cpp +++ b/unittest/lib/ref_implementations.cpp @@ -5,7 +5,8 @@ // #include "precomp.h" -#include "ref_implementations.h" + +#if INCLUDE_IMPL_REF char * ImpRef::name = "Ref"; @@ -256,3 +257,5 @@ addRefAlgs() addImplementationToGlobalList>(); } + +#endif //INCLUDE_IMPL_REF diff --git a/unittest/lib/rsa32_implementations.cpp b/unittest/lib/rsa32_implementations.cpp index 660cf51..928a07c 100644 --- a/unittest/lib/rsa32_implementations.cpp +++ b/unittest/lib/rsa32_implementations.cpp @@ -5,7 +5,9 @@ // #include "precomp.h" -#include "rsa32_implementations.h" + +#if INCLUDE_IMPL_RSA32 + char * ImpRsa32::name = "Rsa32"; @@ -3157,6 +3159,7 @@ addRsa32Algs() addImplementationToGlobalList>(); } +#endif //INCLUDE_IMPL_RSA32 diff --git a/unittest/lib/sc_implementations.cpp b/unittest/lib/sc_implementations.cpp index 5239525..8e32028 100644 --- a/unittest/lib/sc_implementations.cpp +++ b/unittest/lib/sc_implementations.cpp @@ -5,7 +5,6 @@ // #include "precomp.h" -#include "sc_implementations.h" // // These ECB functions are not confused with the ones in Symcrypt.h because they have the pbChainingValue @@ -3727,6 +3726,7 @@ ArithImp::~ArithImp() { } + //============================ // Table with the RSA keys' sizes and pointers to keys @@ -3750,8 +3750,6 @@ SetupRsaKey( PBYTE buf1, SIZE_T keySize ) BOOLEAN bFound = FALSE; SYMCRYPT_ERROR scError = SYMCRYPT_NO_ERROR; - SYMCRYPT_RSA_PARAMS rsaParams = { 0 }; - PSYMCRYPT_RSAKEY pkRsakey = NULL; for( i=0; i < ARRAY_SIZE(g_precomputedRsaKeys); i++ ) { @@ -3761,6 +3759,9 @@ SetupRsaKey( PBYTE buf1, SIZE_T keySize ) if ( g_precomputedRsaKeys[i].pkRsakey == NULL ) { + SYMCRYPT_RSA_PARAMS rsaParams = { 0 }; + PSYMCRYPT_RSAKEY pkRsakey = NULL; + // Set the parameters rsaParams.version = 1; rsaParams.nBitsOfModulus = ((UINT32)keySize) * 8; @@ -3797,6 +3798,494 @@ sc_RsaKeyPerf( PBYTE buf1, PBYTE buf2, SIZE_T keySize ) CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); } +//================================================ + +typedef struct _HASH_INFO { + PCSTR name; + PCSYMCRYPT_HASH pcHash; + PCSYMCRYPT_OID pcOids; + UINT32 nOids; +} HASH_INFO; +typedef const HASH_INFO * PCHASH_INFO; + +const HASH_INFO hashInfoTable[] = { + { "MD5", SymCryptMd5Algorithm, SymCryptMd5OidList, SYMCRYPT_MD5_OID_COUNT }, + { "SHA1", SymCryptSha1Algorithm, SymCryptSha1OidList, SYMCRYPT_SHA1_OID_COUNT}, + { "SHA256", SymCryptSha256Algorithm, SymCryptSha256OidList, SYMCRYPT_SHA256_OID_COUNT}, + { "SHA384", SymCryptSha384Algorithm, SymCryptSha384OidList, SYMCRYPT_SHA384_OID_COUNT}, + { "SHA512", SymCryptSha512Algorithm, SymCryptSha512OidList, SYMCRYPT_SHA512_OID_COUNT}, + { NULL }, +}; + +PCHASH_INFO getHashInfo( PCSTR pcstrName ) +{ + for( int i=0; hashInfoTable[i].name != NULL; i++ ) + { + if( STRICMP( pcstrName, hashInfoTable[i].name ) == 0 ) + { + return &hashInfoTable[i]; + } + } + CHECK( FALSE, "?" ); + return NULL; +} + + +// Rsa Pkcs1 Sign +template<> +VOID +algImpKeyPerfFunction( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T keySize ) +{ + SYMCRYPT_ERROR scError = SYMCRYPT_NO_ERROR; + SIZE_T cbDst = 0; + + sc_RsaKeyPerf( buf1, buf2, keySize ); + + scError = SymCryptRsaPkcs1Sign( + *((PSYMCRYPT_RSAKEY *) buf1), + buf2, + PERF_RSA_HASH_ALG_SIZE, + PERF_RSA_HASH_ALG_OIDS_SC, + PERF_RSA_HASH_ALG_NOIDS_SC, + 0, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + buf3, + keySize, + &cbDst ); + CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); + CHECK( cbDst == keySize, "?" ); + + scError = SymCryptRsaPkcs1Verify( + *((PSYMCRYPT_RSAKEY *) buf1), + buf2, + PERF_RSA_HASH_ALG_SIZE, + buf3, + keySize, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + PERF_RSA_HASH_ALG_OIDS_SC, + PERF_RSA_HASH_ALG_NOIDS_SC, + 0 ); + CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); +} + +template<> +VOID +algImpCleanPerfFunction( PBYTE buf1, PBYTE buf2, PBYTE buf3 ) +{ + UNREFERENCED_PARAMETER( buf1 ); + UNREFERENCED_PARAMETER( buf2 ); + UNREFERENCED_PARAMETER( buf3 ); +} + +template<> +VOID +algImpDataPerfFunction< ImpSc, AlgRsaSignPkcs1>( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T dataSize ) +{ + SIZE_T cbDst = 0; + + SymCryptRsaPkcs1Sign( + *((PSYMCRYPT_RSAKEY *) buf1), + buf2, + PERF_RSA_HASH_ALG_SIZE, + PERF_RSA_HASH_ALG_OIDS_SC, + PERF_RSA_HASH_ALG_NOIDS_SC, + 0, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + buf3, + dataSize, + &cbDst ); +} + +template<> +VOID +algImpDecryptPerfFunction< ImpSc, AlgRsaSignPkcs1>( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T dataSize ) +{ + SYMCRYPT_ERROR scError; + + scError = SymCryptRsaPkcs1Verify( + *((PSYMCRYPT_RSAKEY *) buf1), + buf2, + PERF_RSA_HASH_ALG_SIZE, + buf3, + dataSize, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + PERF_RSA_HASH_ALG_OIDS_SC, + PERF_RSA_HASH_ALG_NOIDS_SC, + 0 ); + CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); +} + +template<> +RsaSignImp::RsaSignImp() +{ + m_perfDataFunction = &algImpDataPerfFunction ; + m_perfDecryptFunction = &algImpDecryptPerfFunction< ImpSc, AlgRsaSignPkcs1>; + m_perfKeyFunction = &algImpKeyPerfFunction ; + m_perfCleanFunction = &algImpCleanPerfFunction; + + state.pKey = NULL; +} + +template<> +RsaSignImp::~RsaSignImp() +{ + if( state.pKey != NULL ) + { + SymCryptRsakeyFree( state.pKey ); + state.pKey = NULL; + } +} + +template<> +NTSTATUS +RsaSignImp::setKey( PCRSAKEY_TESTBLOB pcKeyBlob ) +{ + SYMCRYPT_ERROR scError; + + if( state.pKey != NULL ) + { + SymCryptRsakeyFree( state.pKey ); + state.pKey = NULL; + } + + if( pcKeyBlob == NULL ) + { + // Just used to clear the key state to do leak detection + return STATUS_SUCCESS; + } + + SYMCRYPT_RSA_PARAMS params; + params.version = 1; + params.nBitsOfModulus = pcKeyBlob->nBitsModulus; + params.nPrimes = 2; + params.nPubExp = 1; + + state.pKey = SymCryptRsakeyAllocate( ¶ms, 0 ); + CHECK( state.pKey != NULL, "?" ); + + PCBYTE ppPrime[2] = {&pcKeyBlob->abPrime1[0], &pcKeyBlob->abPrime2[0] }; + SIZE_T cbPrime[2] = {pcKeyBlob->cbPrime1, pcKeyBlob->cbPrime2 }; + + scError = SymCryptRsakeySetValue( + &pcKeyBlob->abModulus[0], pcKeyBlob->cbModulus, + &pcKeyBlob->u64PubExp, 1, + ppPrime, cbPrime, 2, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + 0, + state.pKey ); + CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); + + return STATUS_SUCCESS; +} + +template<> +NTSTATUS +RsaSignImp::sign( + _In_reads_( cbHash) PCBYTE pbHash, + SIZE_T cbHash, + PCSTR pcstrHashAlgName, + UINT32 u32Other, + _Out_writes_( cbSig ) PBYTE pbSig, + SIZE_T cbSig ) +{ + PCHASH_INFO pInfo; + SYMCRYPT_ERROR scError; + SIZE_T cbTmp; + + UNREFERENCED_PARAMETER( u32Other ); + + pInfo = getHashInfo( pcstrHashAlgName); + scError = SymCryptRsaPkcs1Sign( + state.pKey, + pbHash, + cbHash, + pInfo->pcOids, + pInfo->nOids, + 0, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + pbSig, + cbSig, + &cbTmp ); + CHECK( scError == SYMCRYPT_NO_ERROR && cbTmp == cbSig, "?" ); + + return STATUS_SUCCESS; +} + +template<> +NTSTATUS +RsaSignImp::verify( + _In_reads_( cbHash) PCBYTE pbHash, + SIZE_T cbHash, + _In_reads_( cbSig ) PCBYTE pbSig, + SIZE_T cbSig, + PCSTR pcstrHashAlgName, + UINT32 u32Other ) +{ + SYMCRYPT_ERROR scError; + NTSTATUS ntStatus; + PCHASH_INFO pInfo; + + UNREFERENCED_PARAMETER( u32Other ); + + pInfo = getHashInfo( pcstrHashAlgName); + scError = SymCryptRsaPkcs1Verify( + state.pKey, + pbHash, + cbHash, + pbSig, + cbSig, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + pInfo->pcOids, + pInfo->nOids, + 0 ); + + switch( scError ) + { + case SYMCRYPT_NO_ERROR: + ntStatus = STATUS_SUCCESS; + break; + case SYMCRYPT_SIGNATURE_VERIFICATION_FAILURE: + ntStatus = STATUS_INVALID_SIGNATURE; + break; + case SYMCRYPT_INVALID_ARGUMENT: + ntStatus = STATUS_INVALID_PARAMETER; + break; + default: + iprint( "Unexpected SymCrypt error %08x, %d, %d, %s\n", scError, cbHash, cbSig, pcstrHashAlgName ); + CHECK( FALSE, "?" ); + ntStatus = STATUS_UNSUCCESSFUL; + } + + return ntStatus; +} + + +// Rsa Pss Sign +template<> +VOID +algImpKeyPerfFunction( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T keySize ) +{ + SYMCRYPT_ERROR scError = SYMCRYPT_NO_ERROR; + SIZE_T cbDst = 0; + + sc_RsaKeyPerf( buf1, buf2, keySize ); + + scError = SymCryptRsaPssSign( + *((PSYMCRYPT_RSAKEY *) buf1), + buf2, + PERF_RSA_HASH_ALG_SIZE, + PERF_RSA_HASH_ALG_SC, + PERF_RSA_HASH_ALG_SIZE, + 0, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + buf3, + keySize, + &cbDst ); + CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); + CHECK( cbDst == keySize, "?" ); + + scError = SymCryptRsaPssVerify( + *((PSYMCRYPT_RSAKEY *) buf1), + buf2, + PERF_RSA_HASH_ALG_SIZE, + buf3, + keySize, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + PERF_RSA_HASH_ALG_SC, + PERF_RSA_HASH_ALG_SIZE, + 0 ); + CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); +} + +template<> +VOID +algImpCleanPerfFunction( PBYTE buf1, PBYTE buf2, PBYTE buf3 ) +{ + UNREFERENCED_PARAMETER( buf1 ); + UNREFERENCED_PARAMETER( buf2 ); + UNREFERENCED_PARAMETER( buf3 ); +} + +template<> +VOID +algImpDataPerfFunction< ImpSc, AlgRsaSignPss>( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T dataSize ) +{ + SIZE_T cbDst = 0; + + SymCryptRsaPssSign( + *((PSYMCRYPT_RSAKEY *) buf1), + buf2, + PERF_RSA_HASH_ALG_SIZE, + PERF_RSA_HASH_ALG_SC, + PERF_RSA_HASH_ALG_SIZE, + 0, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + buf3, + dataSize, + &cbDst ); +} + +template<> +VOID +algImpDecryptPerfFunction< ImpSc, AlgRsaSignPss>( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T dataSize ) +{ + SYMCRYPT_ERROR scError; + + scError = SymCryptRsaPssVerify( + *((PSYMCRYPT_RSAKEY *) buf1), + buf2, + PERF_RSA_HASH_ALG_SIZE, + buf3, + dataSize, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + PERF_RSA_HASH_ALG_SC, + PERF_RSA_HASH_ALG_SIZE, + 0 ); + CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); +} + +template<> +RsaSignImp::RsaSignImp() +{ + m_perfDataFunction = &algImpDataPerfFunction ; + m_perfDecryptFunction = &algImpDecryptPerfFunction< ImpSc, AlgRsaSignPss>; + m_perfKeyFunction = &algImpKeyPerfFunction ; + m_perfCleanFunction = &algImpCleanPerfFunction; + + state.pKey = NULL; +} + +template<> +RsaSignImp::~RsaSignImp() +{ + if( state.pKey != NULL ) + { + SymCryptRsakeyFree( state.pKey ); + state.pKey = NULL; + } +} + +template<> +NTSTATUS +RsaSignImp::setKey( PCRSAKEY_TESTBLOB pcKeyBlob ) +{ + SYMCRYPT_ERROR scError; + + if( state.pKey != NULL ) + { + SymCryptRsakeyFree( state.pKey ); + state.pKey = NULL; + } + + if( pcKeyBlob == NULL ) + { + // Just used to clear the key state to do leak detection + return STATUS_SUCCESS; + } + + SYMCRYPT_RSA_PARAMS params; + params.version = 1; + params.nBitsOfModulus = pcKeyBlob->nBitsModulus; + params.nPrimes = 2; + params.nPubExp = 1; + + state.pKey = SymCryptRsakeyAllocate( ¶ms, 0 ); + CHECK( state.pKey != NULL, "?" ); + + PCBYTE ppPrime[2] = {&pcKeyBlob->abPrime1[0], &pcKeyBlob->abPrime2[0] }; + SIZE_T cbPrime[2] = {pcKeyBlob->cbPrime1, pcKeyBlob->cbPrime2 }; + + scError = SymCryptRsakeySetValue( + &pcKeyBlob->abModulus[0], pcKeyBlob->cbModulus, + &pcKeyBlob->u64PubExp, 1, + ppPrime, cbPrime, 2, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + 0, + state.pKey ); + CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); + + return STATUS_SUCCESS; +} + +template<> +NTSTATUS +RsaSignImp::sign( + _In_reads_( cbHash) PCBYTE pbHash, + SIZE_T cbHash, + PCSTR pcstrHashAlgName, + UINT32 u32Other, + _Out_writes_( cbSig ) PBYTE pbSig, + SIZE_T cbSig ) +{ + PCHASH_INFO pInfo; + SYMCRYPT_ERROR scError; + SIZE_T cbTmp; + + pInfo = getHashInfo( pcstrHashAlgName); + scError = SymCryptRsaPssSign( + state.pKey, + pbHash, + cbHash, + pInfo->pcHash, + u32Other, + 0, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + pbSig, + cbSig, + &cbTmp ); + CHECK( scError == SYMCRYPT_NO_ERROR && cbTmp == cbSig, "?" ); + + return STATUS_SUCCESS; +} + +template<> +NTSTATUS +RsaSignImp::verify( + _In_reads_( cbHash) PCBYTE pbHash, + SIZE_T cbHash, + _In_reads_( cbSig ) PCBYTE pbSig, + SIZE_T cbSig, + PCSTR pcstrHashAlgName, + UINT32 u32Other ) +{ + SYMCRYPT_ERROR scError; + NTSTATUS ntStatus; + PCHASH_INFO pInfo; + + pInfo = getHashInfo( pcstrHashAlgName); + scError = SymCryptRsaPssVerify( + state.pKey, + pbHash, + cbHash, + pbSig, + cbSig, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + pInfo->pcHash, + u32Other, + 0 ); + + switch( scError ) + { + case SYMCRYPT_NO_ERROR: + ntStatus = STATUS_SUCCESS; + break; + case SYMCRYPT_SIGNATURE_VERIFICATION_FAILURE: + ntStatus = STATUS_INVALID_SIGNATURE; + break; + case SYMCRYPT_INVALID_ARGUMENT: + ntStatus = STATUS_INVALID_PARAMETER; + break; + default: + iprint( "Unexpected SymCrypt error %08x, %d, %d, %s\n", scError, cbHash, cbSig, pcstrHashAlgName ); + CHECK( FALSE, "?" ); + ntStatus = STATUS_UNSUCCESSFUL; + } + + return ntStatus; +} + + + // Rsa Encryption template<> @@ -3804,7 +4293,6 @@ VOID algImpKeyPerfFunction( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T keySize ) { SYMCRYPT_ERROR scError = SYMCRYPT_NO_ERROR; - BYTE rbResult[1024] = { 0 }; sc_RsaKeyPerf( buf1, buf2, keySize ); @@ -3818,18 +4306,16 @@ algImpKeyPerfFunction( PBYTE buf1, PBYTE buf2, PBYTE buf3, keySize ); CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); - CHECK( sizeof(rbResult) >= keySize, "?" ); - scError = SymCryptRsaRawDecrypt( *((PSYMCRYPT_RSAKEY *) buf1), buf3, keySize, SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, 0, - rbResult, + buf2 + keySize, keySize ); CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); - CHECK( memcmp(buf2, rbResult, keySize) == 0, "?" ); + CHECK( memcmp(buf2, buf2 + keySize, keySize) == 0, "?" ); } template<> @@ -3856,56 +4342,157 @@ algImpDataPerfFunction< ImpSc, AlgRsaEncRaw>( PBYTE buf1, PBYTE buf2, PBYTE buf3 } template<> -RsaImp::RsaImp() +VOID +algImpDecryptPerfFunction< ImpSc, AlgRsaEncRaw>( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T dataSize ) +{ + SYMCRYPT_ERROR scError; + + scError = SymCryptRsaRawDecrypt( + *((PSYMCRYPT_RSAKEY *) buf1), + buf3, + dataSize, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + 0, + buf2 + dataSize, + dataSize ); + CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); +} + + +template<> +RsaEncImp::RsaEncImp() { m_perfDataFunction = &algImpDataPerfFunction ; - m_perfDecryptFunction = NULL; + m_perfDecryptFunction = &algImpDecryptPerfFunction; m_perfKeyFunction = &algImpKeyPerfFunction ; m_perfCleanFunction = &algImpCleanPerfFunction; + + state.pKey = NULL; } template<> -RsaImp::~RsaImp() +RsaEncImp::~RsaEncImp() { -} - -// Rsa Decryption (only the Data perf function is new) - -template<> -VOID -algImpDataPerfFunction< ImpSc, AlgRsaDecRaw>( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T dataSize ) -{ - SymCryptRsaRawDecrypt( - *((PSYMCRYPT_RSAKEY *) buf1), - buf3, - dataSize, - SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, - 0, - buf2, - dataSize ); + if( state.pKey != NULL ) + { + SymCryptRsakeyFree( state.pKey ); + state.pKey = NULL; + } } template<> -RsaImp::RsaImp() +NTSTATUS +RsaEncImp::setKey( PCRSAKEY_TESTBLOB pcKeyBlob ) { - m_perfDataFunction = &algImpDataPerfFunction ; - m_perfDecryptFunction = NULL; - m_perfKeyFunction = &algImpKeyPerfFunction ; - m_perfCleanFunction = &algImpCleanPerfFunction; + SYMCRYPT_ERROR scError; + + if( state.pKey != NULL ) + { + SymCryptRsakeyFree( state.pKey ); + state.pKey = NULL; + } + + if( pcKeyBlob == NULL ) + { + // Just used to clear the key state to do leak detection + return STATUS_SUCCESS; + } + + SYMCRYPT_RSA_PARAMS params; + params.version = 1; + params.nBitsOfModulus = pcKeyBlob->nBitsModulus; + params.nPrimes = 2; + params.nPubExp = 1; + + state.pKey = SymCryptRsakeyAllocate( ¶ms, 0 ); + CHECK( state.pKey != NULL, "?" ); + + PCBYTE ppPrime[2] = {&pcKeyBlob->abPrime1[0], &pcKeyBlob->abPrime2[0] }; + SIZE_T cbPrime[2] = {pcKeyBlob->cbPrime1, pcKeyBlob->cbPrime2 }; + + scError = SymCryptRsakeySetValue( + &pcKeyBlob->abModulus[0], pcKeyBlob->cbModulus, + &pcKeyBlob->u64PubExp, 1, + ppPrime, cbPrime, 2, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + 0, + state.pKey ); + CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); + + return STATUS_SUCCESS; } template<> -RsaImp::~RsaImp() +NTSTATUS +RsaEncImp::encrypt( + _In_reads_( cbMsg ) PCBYTE pbMsg, + SIZE_T cbMsg, + PCSTR pcstrHashAlgName, + PCBYTE pbLabel, + SIZE_T cbLabel, + _Out_writes_( cbCiphertext ) PBYTE pbCiphertext, + SIZE_T cbCiphertext ) { + SYMCRYPT_ERROR scError; + + UNREFERENCED_PARAMETER( pcstrHashAlgName ); + UNREFERENCED_PARAMETER( pbLabel ); + UNREFERENCED_PARAMETER( cbLabel ); + + SIZE_T cbKey = SymCryptRsakeySizeofModulus( state.pKey ); + CHECK( cbCiphertext == cbKey, "Wrong ciphertext size" ); + CHECK( cbMsg == cbKey, "Wrong message size" ); + + scError = SymCryptRsaRawEncrypt( state.pKey, + pbMsg, cbMsg, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + 0, + pbCiphertext, cbCiphertext ); + + return scError == SYMCRYPT_NO_ERROR ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL; } -// Rsa Pkcs1 Encryption +template<> +NTSTATUS +RsaEncImp::decrypt( + _In_reads_( cbCiphertext ) PCBYTE pbCiphertext, + SIZE_T cbCiphertext, + PCSTR pcstrHashAlgName, + PCBYTE pbLabel, + SIZE_T cbLabel, + _Out_writes_to_(cbMsg,*pcbMsg) PBYTE pbMsg, + SIZE_T cbMsg, + SIZE_T *pcbMsg ) +{ + SYMCRYPT_ERROR scError; + + UNREFERENCED_PARAMETER( pcstrHashAlgName ); + UNREFERENCED_PARAMETER( pbLabel ); + UNREFERENCED_PARAMETER( cbLabel ); + + SIZE_T cbKey = SymCryptRsakeySizeofModulus( state.pKey ); + CHECK( cbCiphertext == cbKey, "Wrong ciphertext size" ); + CHECK( cbMsg >= cbKey, "Wrong message size" ); + + scError = SymCryptRsaRawDecrypt( state.pKey, + pbCiphertext, cbCiphertext, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + 0, + pbMsg, cbKey ); + + *pcbMsg = cbKey; + + return scError == SYMCRYPT_NO_ERROR ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL; +} + + +// RSA PKCS1 encryption + template<> VOID algImpKeyPerfFunction( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T keySize ) { SYMCRYPT_ERROR scError = SYMCRYPT_NO_ERROR; - BYTE rbResult[1024] = { 0 }; SIZE_T cbDst = 0; sc_RsaKeyPerf( buf1, buf2, keySize ); @@ -3922,20 +4509,18 @@ algImpKeyPerfFunction( PBYTE buf1, PBYTE buf2, PBYTE buf3 CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); CHECK( cbDst == keySize, "?" ); - CHECK( sizeof(rbResult) >= keySize, "?" ); - scError = SymCryptRsaPkcs1Decrypt( *((PSYMCRYPT_RSAKEY *) buf1), buf3, keySize, SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, 0, - rbResult, + buf2 + keySize, keySize, &cbDst ); CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); CHECK( cbDst == keySize - PERF_RSA_PKCS1_LESS_BYTES, "?" ); - CHECK( memcmp(buf2, rbResult, cbDst) == 0, "?" ); + CHECK( memcmp(buf2, buf2 + keySize, cbDst) == 0, "?" ); } template<> @@ -3964,6 +4549,397 @@ algImpDataPerfFunction< ImpSc, AlgRsaEncPkcs1>( PBYTE buf1, PBYTE buf2, PBYTE bu &cbDst ); } +template<> +VOID +algImpDecryptPerfFunction< ImpSc, AlgRsaEncPkcs1>( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T dataSize ) +{ + SYMCRYPT_ERROR scError; + SIZE_T cbDst; + + scError = SymCryptRsaPkcs1Decrypt( + *((PSYMCRYPT_RSAKEY *) buf1), + buf3, + dataSize, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + 0, + buf2 + dataSize, + dataSize, + &cbDst ); + CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); + CHECK( cbDst == dataSize - PERF_RSA_PKCS1_LESS_BYTES, "?" ); +} + + +template<> +RsaEncImp::RsaEncImp() +{ + m_perfDataFunction = &algImpDataPerfFunction ; + m_perfDecryptFunction = &algImpDecryptPerfFunction; + m_perfKeyFunction = &algImpKeyPerfFunction ; + m_perfCleanFunction = &algImpCleanPerfFunction; + + state.pKey = NULL; +} + +template<> +RsaEncImp::~RsaEncImp() +{ + if( state.pKey != NULL ) + { + SymCryptRsakeyFree( state.pKey ); + state.pKey = NULL; + } +} + +template<> +NTSTATUS +RsaEncImp::setKey( PCRSAKEY_TESTBLOB pcKeyBlob ) +{ + SYMCRYPT_ERROR scError; + + if( state.pKey != NULL ) + { + SymCryptRsakeyFree( state.pKey ); + state.pKey = NULL; + } + + if( pcKeyBlob == NULL ) + { + // Just used to clear the key state to do leak detection + return STATUS_SUCCESS; + } + + SYMCRYPT_RSA_PARAMS params; + params.version = 1; + params.nBitsOfModulus = pcKeyBlob->nBitsModulus; + params.nPrimes = 2; + params.nPubExp = 1; + + state.pKey = SymCryptRsakeyAllocate( ¶ms, 0 ); + CHECK( state.pKey != NULL, "?" ); + + PCBYTE ppPrime[2] = {&pcKeyBlob->abPrime1[0], &pcKeyBlob->abPrime2[0] }; + SIZE_T cbPrime[2] = {pcKeyBlob->cbPrime1, pcKeyBlob->cbPrime2 }; + + scError = SymCryptRsakeySetValue( + &pcKeyBlob->abModulus[0], pcKeyBlob->cbModulus, + &pcKeyBlob->u64PubExp, 1, + ppPrime, cbPrime, 2, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + 0, + state.pKey ); + CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); + + return STATUS_SUCCESS; +} + +template<> +NTSTATUS +RsaEncImp::encrypt( + _In_reads_( cbMsg ) PCBYTE pbMsg, + SIZE_T cbMsg, + PCSTR pcstrHashAlgName, + PCBYTE pbLabel, + SIZE_T cbLabel, + _Out_writes_( cbCiphertext ) PBYTE pbCiphertext, + SIZE_T cbCiphertext ) +{ + SYMCRYPT_ERROR scError; + SIZE_T cbResult; + + UNREFERENCED_PARAMETER( pcstrHashAlgName ); + UNREFERENCED_PARAMETER( pbLabel ); + UNREFERENCED_PARAMETER( cbLabel ); + + SIZE_T cbKey = SymCryptRsakeySizeofModulus( state.pKey ); + CHECK( cbCiphertext == cbKey, "Wrong ciphertext size" ); + + scError = SymCryptRsaPkcs1Encrypt( state.pKey, + pbMsg, cbMsg, + 0, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + pbCiphertext, cbCiphertext, + &cbResult ); + + CHECK( cbResult == cbKey, "Unexpected ciphertext size" ); + + return scError == SYMCRYPT_NO_ERROR ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL; +} + +template<> +NTSTATUS +RsaEncImp::decrypt( + _In_reads_( cbCiphertext ) PCBYTE pbCiphertext, + SIZE_T cbCiphertext, + PCSTR pcstrHashAlgName, + PCBYTE pbLabel, + SIZE_T cbLabel, + _Out_writes_to_(cbMsg,*pcbMsg) PBYTE pbMsg, + SIZE_T cbMsg, + SIZE_T *pcbMsg ) +{ + SYMCRYPT_ERROR scError; + SIZE_T cbResult; + + UNREFERENCED_PARAMETER( pcstrHashAlgName ); + UNREFERENCED_PARAMETER( pbLabel ); + UNREFERENCED_PARAMETER( cbLabel ); + + SIZE_T cbKey = SymCryptRsakeySizeofModulus( state.pKey ); + CHECK( cbCiphertext == cbKey, "Wrong ciphertext size" ); + + scError = SymCryptRsaPkcs1Decrypt( state.pKey, + pbCiphertext, cbCiphertext, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + 0, + pbMsg, cbMsg, + &cbResult ); + + *pcbMsg = cbResult; + + return scError == SYMCRYPT_NO_ERROR ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL; +} + +// RSA OAEP encryption + +template<> +VOID +algImpKeyPerfFunction( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T keySize ) +{ + SYMCRYPT_ERROR scError = SYMCRYPT_NO_ERROR; + SIZE_T cbDst = 0; + + sc_RsaKeyPerf( buf1, buf2, keySize ); + + scError = SymCryptRsaOaepEncrypt( + *((PSYMCRYPT_RSAKEY *) buf1), + buf2, + keySize - PERF_RSA_OAEP_LESS_BYTES, // This is the maximum size for OAEP + PERF_RSA_HASH_ALG_SC, + buf2 + keySize, // Use buf2 bytes as the label + PERF_RSA_LABEL_LENGTH, + 0, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + buf3, + keySize, + &cbDst ); + CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); + CHECK( cbDst == keySize, "?" ); + + scError = SymCryptRsaOaepDecrypt( + *((PSYMCRYPT_RSAKEY *) buf1), + buf3, + keySize, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + PERF_RSA_HASH_ALG_SC, + buf2 + keySize, + PERF_RSA_LABEL_LENGTH, + 0, + buf3 + keySize, + keySize, + &cbDst ); + CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); + CHECK( cbDst == keySize - PERF_RSA_OAEP_LESS_BYTES, "?" ); + CHECK( memcmp(buf2, buf3 + keySize, cbDst) == 0, "?" ); +} + +template<> +VOID +algImpCleanPerfFunction( PBYTE buf1, PBYTE buf2, PBYTE buf3 ) +{ + UNREFERENCED_PARAMETER( buf1 ); + UNREFERENCED_PARAMETER( buf2 ); + UNREFERENCED_PARAMETER( buf3 ); +} + +template<> +VOID +algImpDataPerfFunction< ImpSc, AlgRsaEncOaep>( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T dataSize ) +{ + SIZE_T cbDst = 0; + SYMCRYPT_ERROR scError; + + scError = SymCryptRsaOaepEncrypt( + *((PSYMCRYPT_RSAKEY *) buf1), + buf2, + dataSize - PERF_RSA_OAEP_LESS_BYTES, // This is the maximum size for OAEP + PERF_RSA_HASH_ALG_SC, + buf2 + dataSize, // Use buf2 bytes as the label + PERF_RSA_LABEL_LENGTH, + 0, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + buf3, + dataSize, + &cbDst ); + CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); + CHECK( cbDst == dataSize, "?" ); +} + +template<> +VOID +algImpDecryptPerfFunction< ImpSc, AlgRsaEncOaep>( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T dataSize ) +{ + SYMCRYPT_ERROR scError; + SIZE_T cbDst; + + scError = SymCryptRsaOaepDecrypt( + *((PSYMCRYPT_RSAKEY *) buf1), + buf3, + dataSize, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + PERF_RSA_HASH_ALG_SC, + buf2 + dataSize, // label + PERF_RSA_LABEL_LENGTH, + 0, + buf3 + dataSize, + dataSize, + &cbDst ); + CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); + CHECK( cbDst == dataSize - PERF_RSA_OAEP_LESS_BYTES, "?" ); +} + + +template<> +RsaEncImp::RsaEncImp() +{ + m_perfDataFunction = &algImpDataPerfFunction ; + m_perfDecryptFunction = &algImpDecryptPerfFunction; + m_perfKeyFunction = &algImpKeyPerfFunction ; + m_perfCleanFunction = &algImpCleanPerfFunction; + + state.pKey = NULL; +} + +template<> +RsaEncImp::~RsaEncImp() +{ + if( state.pKey != NULL ) + { + SymCryptRsakeyFree( state.pKey ); + state.pKey = NULL; + } +} + +template<> +NTSTATUS +RsaEncImp::setKey( PCRSAKEY_TESTBLOB pcKeyBlob ) +{ + SYMCRYPT_ERROR scError; + + if( state.pKey != NULL ) + { + SymCryptRsakeyFree( state.pKey ); + state.pKey = NULL; + } + + if( pcKeyBlob == NULL ) + { + // Just used to clear the key state to do leak detection + return STATUS_SUCCESS; + } + + SYMCRYPT_RSA_PARAMS params; + params.version = 1; + params.nBitsOfModulus = pcKeyBlob->nBitsModulus; + params.nPrimes = 2; + params.nPubExp = 1; + + state.pKey = SymCryptRsakeyAllocate( ¶ms, 0 ); + CHECK( state.pKey != NULL, "?" ); + + PCBYTE ppPrime[2] = {&pcKeyBlob->abPrime1[0], &pcKeyBlob->abPrime2[0] }; + SIZE_T cbPrime[2] = {pcKeyBlob->cbPrime1, pcKeyBlob->cbPrime2 }; + + scError = SymCryptRsakeySetValue( + &pcKeyBlob->abModulus[0], pcKeyBlob->cbModulus, + &pcKeyBlob->u64PubExp, 1, + ppPrime, cbPrime, 2, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + 0, + state.pKey ); + CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); + + return STATUS_SUCCESS; +} + +template<> +NTSTATUS +RsaEncImp::encrypt( + _In_reads_( cbMsg ) PCBYTE pbMsg, + SIZE_T cbMsg, + PCSTR pcstrHashAlgName, + PCBYTE pbLabel, + SIZE_T cbLabel, + _Out_writes_( cbCiphertext ) PBYTE pbCiphertext, + SIZE_T cbCiphertext ) +{ + SYMCRYPT_ERROR scError; + SIZE_T cbResult; + PCHASH_INFO pInfo; + + UNREFERENCED_PARAMETER( pcstrHashAlgName ); + UNREFERENCED_PARAMETER( pbLabel ); + UNREFERENCED_PARAMETER( cbLabel ); + + SIZE_T cbKey = SymCryptRsakeySizeofModulus( state.pKey ); + CHECK( cbCiphertext == cbKey, "Wrong ciphertext size" ); + + pInfo = getHashInfo( pcstrHashAlgName); + scError = SymCryptRsaOaepEncrypt( state.pKey, + pbMsg, cbMsg, + pInfo->pcHash, + pbLabel, cbLabel, + 0, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + pbCiphertext, cbCiphertext, + &cbResult ); + + CHECK( cbResult == cbKey, "Unexpected ciphertext size" ); + + return scError == SYMCRYPT_NO_ERROR ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL; +} + +template<> +NTSTATUS +RsaEncImp::decrypt( + _In_reads_( cbCiphertext ) PCBYTE pbCiphertext, + SIZE_T cbCiphertext, + PCSTR pcstrHashAlgName, + PCBYTE pbLabel, + SIZE_T cbLabel, + _Out_writes_to_(cbMsg,*pcbMsg) PBYTE pbMsg, + SIZE_T cbMsg, + SIZE_T *pcbMsg ) +{ + SYMCRYPT_ERROR scError; + SIZE_T cbResult; + PCHASH_INFO pInfo; + + UNREFERENCED_PARAMETER( pcstrHashAlgName ); + UNREFERENCED_PARAMETER( pbLabel ); + UNREFERENCED_PARAMETER( cbLabel ); + + SIZE_T cbKey = SymCryptRsakeySizeofModulus( state.pKey ); + CHECK( cbCiphertext == cbKey, "Wrong ciphertext size" ); + + pInfo = getHashInfo( pcstrHashAlgName); + scError = SymCryptRsaOaepDecrypt( state.pKey, + pbCiphertext, cbCiphertext, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + pInfo->pcHash, + pbLabel, cbLabel, + 0, + pbMsg, cbMsg, + &cbResult ); + + *pcbMsg = cbResult; + + return scError == SYMCRYPT_NO_ERROR ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL; +} + + +// Rsa Pkcs1 Encryption +/* template<> RsaImp::RsaImp() { @@ -4010,8 +4986,10 @@ template<> RsaImp::~RsaImp() { } +*/ // Rsa Oaep Encryption +/* template<> VOID algImpKeyPerfFunction( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T keySize ) @@ -4084,7 +5062,9 @@ algImpDataPerfFunction< ImpSc, AlgRsaEncOaep>( PBYTE buf1, PBYTE buf2, PBYTE buf dataSize, &cbDst ); } +*/ +/* template<> RsaImp::RsaImp() { @@ -4135,87 +5115,6 @@ RsaImp::~RsaImp() { } -// Rsa Pkcs1 Sign -template<> -VOID -algImpKeyPerfFunction( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T keySize ) -{ - SYMCRYPT_ERROR scError = SYMCRYPT_NO_ERROR; - SIZE_T cbDst = 0; - - PBYTE pTmp = NULL; - PSYMCRYPT_OID pOid = NULL; - - // The first OID for the SHA256 algorithm (PERF_RSA_HASH_ALG_SC)used by Cng - BYTE rbOid[] = { 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00 }; - - sc_RsaKeyPerf( buf1, buf2, keySize ); - - // Create an OID in the last bytes of buf2 - pTmp = buf2 + PERF_RSA_HASH_ALG_SIZE; - pOid = (PSYMCRYPT_OID) pTmp; - - pTmp += sizeof(SYMCRYPT_OID); - pOid->cbOID = sizeof(rbOid); - pOid->pbOID = pTmp; - memcpy( pTmp, rbOid, sizeof(rbOid)); - - scError = SymCryptRsaPkcs1Sign( - *((PSYMCRYPT_RSAKEY *) buf1), - buf2, - PERF_RSA_HASH_ALG_SIZE, - (PSYMCRYPT_OID) (buf2+PERF_RSA_HASH_ALG_SIZE), - 1, - 0, - SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, - buf3, - keySize, - &cbDst ); - CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); - CHECK( cbDst == keySize, "?" ); - - scError = SymCryptRsaPkcs1Verify( - *((PSYMCRYPT_RSAKEY *) buf1), - buf2, - PERF_RSA_HASH_ALG_SIZE, - buf3, - keySize, - SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, - (PSYMCRYPT_OID) (buf2+PERF_RSA_HASH_ALG_SIZE), - 1, - 0 ); - CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); - -} - -template<> -VOID -algImpCleanPerfFunction( PBYTE buf1, PBYTE buf2, PBYTE buf3 ) -{ - UNREFERENCED_PARAMETER( buf1 ); - UNREFERENCED_PARAMETER( buf2 ); - UNREFERENCED_PARAMETER( buf3 ); -} - -template<> -VOID -algImpDataPerfFunction< ImpSc, AlgRsaSignPkcs1>( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T dataSize ) -{ - SIZE_T cbDst = 0; - - SymCryptRsaPkcs1Sign( - *((PSYMCRYPT_RSAKEY *) buf1), - buf2, - PERF_RSA_HASH_ALG_SIZE, - (PSYMCRYPT_OID) (buf2+PERF_RSA_HASH_ALG_SIZE), - 1, - 0, - SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, - buf3, - dataSize, - &cbDst ); -} - template<> RsaImp::RsaImp() { @@ -4262,72 +5161,6 @@ RsaImp::~RsaImp() { } -// Rsa Pss Sign -template<> -VOID -algImpKeyPerfFunction( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T keySize ) -{ - SYMCRYPT_ERROR scError = SYMCRYPT_NO_ERROR; - SIZE_T cbDst = 0; - - sc_RsaKeyPerf( buf1, buf2, keySize ); - - scError = SymCryptRsaPssSign( - *((PSYMCRYPT_RSAKEY *) buf1), - buf2, - PERF_RSA_HASH_ALG_SIZE, - PERF_RSA_HASH_ALG_SC, - PERF_RSA_SALT_LENGTH, - 0, - SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, - buf3, - keySize, - &cbDst ); - CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); - CHECK( cbDst == keySize, "?" ); - - scError = SymCryptRsaPssVerify( - *((PSYMCRYPT_RSAKEY *) buf1), - buf2, - PERF_RSA_HASH_ALG_SIZE, - buf3, - keySize, - SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, - PERF_RSA_HASH_ALG_SC, - PERF_RSA_SALT_LENGTH, - 0 ); - CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); - -} - -template<> -VOID -algImpCleanPerfFunction( PBYTE buf1, PBYTE buf2, PBYTE buf3 ) -{ - UNREFERENCED_PARAMETER( buf1 ); - UNREFERENCED_PARAMETER( buf2 ); - UNREFERENCED_PARAMETER( buf3 ); -} - -template<> -VOID -algImpDataPerfFunction< ImpSc, AlgRsaSignPss>( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T dataSize ) -{ - SIZE_T cbDst = 0; - - SymCryptRsaPssSign( - *((PSYMCRYPT_RSAKEY *) buf1), - buf2, - PERF_RSA_HASH_ALG_SIZE, - PERF_RSA_HASH_ALG_SC, - PERF_RSA_SALT_LENGTH, - 0, - SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, - buf3, - dataSize, - &cbDst ); -} - template<> RsaImp::RsaImp() { @@ -4373,6 +5206,7 @@ template<> RsaImp::~RsaImp() { } +*/ //============================ @@ -5658,17 +6492,24 @@ addSymCryptAlgs() addImplementationToGlobalList>(); - addImplementationToGlobalList>(); - addImplementationToGlobalList>(); - addImplementationToGlobalList>(); - addImplementationToGlobalList>(); - addImplementationToGlobalList>(); - addImplementationToGlobalList>(); + //addImplementationToGlobalList>(); + //addImplementationToGlobalList>(); + //addImplementationToGlobalList>(); + //addImplementationToGlobalList>(); + //addImplementationToGlobalList>(); + //addImplementationToGlobalList>(); - addImplementationToGlobalList>(); - addImplementationToGlobalList>(); - addImplementationToGlobalList>(); - addImplementationToGlobalList>(); + addImplementationToGlobalList>(); + addImplementationToGlobalList>(); + + addImplementationToGlobalList>(); + addImplementationToGlobalList>(); + addImplementationToGlobalList>(); + + //addImplementationToGlobalList>(); + //addImplementationToGlobalList>(); + //addImplementationToGlobalList>(); + //addImplementationToGlobalList>(); addImplementationToGlobalList>(); addImplementationToGlobalList>(); diff --git a/unittest/lib/sources b/unittest/lib/sources index 309ff3c..e038601 100644 --- a/unittest/lib/sources +++ b/unittest/lib/sources @@ -56,10 +56,10 @@ SOURCES= \ testArithmetic.cpp \ testEcc.cpp \ testInterop.cpp \ - testRsa.cpp \ - testRsa_sc.cpp \ - testRsa_msbignum.cpp \ - testRsa_cng.cpp \ +# testRsa.cpp \ +# testRsa_sc.cpp \ +# testRsa_msbignum.cpp \ +# testRsa_cng.cpp \ testDl.cpp \ testDl_sc.cpp \ testDl_msbignum.cpp \ @@ -69,6 +69,8 @@ SOURCES= \ testScsTable.cpp \ testIEEE802_11SaeCustom.cpp \ testScsTools.cpp \ + testRsaSign.cpp \ + testRsaEnc.cpp \ I386_SOURCES = \ savexmm.asm \ diff --git a/unittest/lib/testArithmetic.cpp b/unittest/lib/testArithmetic.cpp index 9214879..ab2945a 100644 --- a/unittest/lib/testArithmetic.cpp +++ b/unittest/lib/testArithmetic.cpp @@ -3,10 +3,6 @@ // #include "precomp.h" -#if SYMCRYPT_MS_VC -#include "msbignum_implementations.h" -#endif - #if 0 #define TEST_CHECK_WOOP( p ) {(p)->checkWoop();} @@ -3703,7 +3699,7 @@ VOID testCompositeModInv() PSYMCRYPT_MODELEMENT pEl = SymCryptModElementAllocate( pMod ); PSYMCRYPT_MODELEMENT pInv = SymCryptModElementAllocate( pMod ); SIZE_T cbScratch = 1 << 20; - PBYTE pbScratch = (PBYTE) malloc( cbScratch ); + PBYTE pbScratch = (PBYTE) SymCryptCallbackAlloc( cbScratch ); // this allocator provides the necessary alignment SYMCRYPT_ERROR scError; CHECK( pMod != NULL && pEl != NULL && pbScratch != NULL, "Out of memory" ); @@ -3776,7 +3772,8 @@ VOID testCompositeModInv() scError == SYMCRYPT_NO_ERROR, "Unexpected error for modinverse" ); } - free( pbScratch ); + SymCryptWipe(pbScratch,cbScratch); + SymCryptCallbackFree(pbScratch); SymCryptModElementFree( pMod, pEl ); SymCryptModElementFree( pMod, pInv ); SymCryptModulusFree( pMod ); @@ -3931,4 +3928,4 @@ testArithmetic() testCompositeModInv(); iprint( "\n" ); -} \ No newline at end of file +} diff --git a/unittest/lib/testRsaEnc.cpp b/unittest/lib/testRsaEnc.cpp new file mode 100644 index 0000000..d386132 --- /dev/null +++ b/unittest/lib/testRsaEnc.cpp @@ -0,0 +1,970 @@ +// +// TestRsaEnc.cpp +// +// Copyright (c) Microsoft Corporation. Licensed under the MIT license. +// + +// +// Test code for hash functions. +// + +#include "precomp.h" + +class RsaEncMultiImp: public RsaEncImplementation +{ +public: + RsaEncMultiImp( String algName ); + ~RsaEncMultiImp(); + +private: + RsaEncMultiImp( const RsaEncMultiImp & ); + VOID operator=( const RsaEncMultiImp & ); + +public: + + typedef std::vector ImpPtrVector; + + ImpPtrVector m_imps; // Implementations we use + + ImpPtrVector m_comps; // Subset of m_imps; set of ongoing computations + + virtual NTSTATUS setKey( PCRSAKEY_TESTBLOB pcKeyBlob ); + + virtual NTSTATUS encrypt( + _In_reads_( cbMsg ) PCBYTE pbMsg, + SIZE_T cbMsg, + PCSTR pcstrHashAlgName, + PCBYTE pbLabel, + SIZE_T cbLabel, + _Out_writes_( cbCiphertext ) PBYTE pbCiphertext, + SIZE_T cbCiphertext ); // == cbModulus of key + + virtual NTSTATUS decrypt( + _In_reads_( cbCiphertext ) PCBYTE pbCiphertext, + SIZE_T cbCiphertext, + PCSTR pcstrHashAlgName, + PCBYTE pbLabel, + SIZE_T cbLabel, + _Out_writes_to_(cbMsg,*pcbMsg) PBYTE pbMsg, + SIZE_T cbMsg, + SIZE_T *pcbMsg ); + + SIZE_T m_cbCiphertext; + +}; + +RsaEncMultiImp::RsaEncMultiImp( String algName ) +{ + m_algorithmName = algName; + + getAllImplementations( algName, &m_imps ); +} + + +RsaEncMultiImp::~RsaEncMultiImp() +{ + // + // Propagate the # KAT failures to the individual algorithms. + // + for( ImpPtrVector::iterator i = m_imps.begin(); i != m_imps.end(); ++i ) + { + (*i)->m_nErrorKatFailure += m_nErrorKatFailure; + } +} + +NTSTATUS +RsaEncMultiImp::setKey( PCRSAKEY_TESTBLOB pcKeyBlob ) +{ + // m_imps is the set of implementations we support, but an implementation can opt out of any one key. + // m_comps is the set of algorithm implementations that we are working with. + + m_comps.clear(); + + if( pcKeyBlob != NULL ) + { + m_cbCiphertext = pcKeyBlob->cbModulus; + CHECK( m_cbCiphertext <= RSAKEY_MAXKEYSIZE, "Modulus too big" ); + } + + for( ImpPtrVector::iterator i = m_imps.begin(); i != m_imps.end(); ++i ) + { + if( (*i)->setKey( pcKeyBlob ) == STATUS_SUCCESS ) + { + m_comps.push_back( *i ); + } + } + + return m_comps.size() == 0 ? STATUS_NOT_SUPPORTED : STATUS_SUCCESS; +} + + NTSTATUS + RsaEncMultiImp::decrypt( + _In_reads_( cbCiphertext ) PCBYTE pbCiphertext, + SIZE_T cbCiphertext, + PCSTR pcstrHashAlgName, + PCBYTE pbLabel, + SIZE_T cbLabel, + _Out_writes_to_(cbMsg,*pcbMsg) PBYTE pbMsg, + SIZE_T cbMsg, + SIZE_T *pcbMsg ) +{ + BYTE msg[RSAKEY_MAXKEYSIZE]; + ResultMerge resMsg; + ResultMerge resStatus; + NTSTATUS ntStatus; + SIZE_T cbResMsg = cbMsg + 1; + BYTE b[4]; + + CHECK( cbCiphertext == m_cbCiphertext, "Wrong ciphertext size" ); + + // Process result as MSBfirst array to get errors to print correctly. + for( ImpPtrVector::iterator i = m_comps.begin(); i != m_comps.end(); ++i ) + { + ntStatus = (*i)->decrypt( pbCiphertext, cbCiphertext, + pcstrHashAlgName, + pbLabel, cbLabel, + msg, sizeof( msg ), + &cbResMsg ); + SYMCRYPT_STORE_MSBFIRST32( b, ntStatus ); + resStatus.addResult( *i, b, 4 ); + resMsg.addResult( *i, msg, cbResMsg ); + } + + CHECK( cbResMsg <= cbMsg, "Buffer too small" ); + resMsg.getResult( pbMsg, cbResMsg ); + *pcbMsg = cbResMsg; + + resStatus.getResult( b, 4, FALSE ); + ntStatus = SYMCRYPT_LOAD_MSBFIRST32( b ); + return ntStatus; +} + +NTSTATUS +RsaEncMultiImp::encrypt( + _In_reads_( cbMsg ) PCBYTE pbMsg, + SIZE_T cbMsg, + PCSTR pcstrHashAlgName, + PCBYTE pbLabel, + SIZE_T cbLabel, + _Out_writes_( cbCiphertext ) PBYTE pbCiphertext, + SIZE_T cbCiphertext ) +{ + BYTE ciphertext[RSAKEY_MAXKEYSIZE]; + BYTE msg[ RSAKEY_MAXKEYSIZE ]; + SIZE_T cbMsgRes; + int nEncs = 0; + NTSTATUS ntStatus; + NTSTATUS ntStatusRes = -1; + + CHECK( cbCiphertext == m_cbCiphertext, "Wrong ciphertext length" ); + + for( ImpPtrVector::iterator i = m_comps.begin(); i != m_comps.end(); i++ ) + { + ntStatus = (*i)->encrypt( pbMsg, cbMsg, pcstrHashAlgName, pbLabel, cbLabel, ciphertext, m_cbCiphertext ); + if( ntStatusRes == -1 ) + { + ntStatusRes = ntStatus; + } else { + CHECK4( ntStatus == ntStatusRes, "Inconsistent encryption error %08x %08x", ntStatus, ntStatusRes ); + } + + if( NT_SUCCESS( ntStatus ) ) + { + for( ImpPtrVector::iterator j = m_comps.begin(); j != m_comps.end(); j++ ) + { + ntStatus = (*j)->decrypt( ciphertext, cbCiphertext, pcstrHashAlgName, pbLabel, cbLabel, msg, sizeof( msg ), &cbMsgRes ); + CHECK( ntStatus == STATUS_SUCCESS, "Failure during RSA decryption" ); + CHECK( cbMsgRes == cbMsg, "Wrong message length" ); + CHECK( memcmp( pbMsg, msg, cbMsg ) == 0, "Wrong message data" ); + } + } + + // Copy a random encryption to the output + nEncs += 1; + if( (g_rng.byte() % nEncs ) == 0 ) + { + memcpy( pbCiphertext, ciphertext, cbCiphertext ); + } + } + + return ntStatusRes; +} + + +VOID +createKatFileSingleRawEnc( FILE * f, PCRSAKEY_TESTBLOB pBlob ) +{ + BYTE buf[RSAKEY_MAXKEYSIZE]; + + SYMCRYPT_ERROR scError; + + UINT32 cbMod = pBlob->cbModulus; + UINT32 nDigits = SymCryptDigitsFromBits( pBlob->nBitsModulus ); + + SIZE_T cbScratch = SYMCRYPT_SCRATCH_BYTES_FOR_INT_TO_MODULUS( nDigits ); + cbScratch = max( cbScratch, SYMCRYPT_SCRATCH_BYTES_FOR_COMMON_MOD_OPERATIONS( nDigits ) ); + PBYTE pbScratch = (PBYTE) SymCryptCallbackAlloc( cbScratch ); + CHECK( pbScratch != NULL, "?" ); + + PSYMCRYPT_MODULUS pMod = SymCryptModulusAllocate( nDigits ); + CHECK( pMod != NULL, "?" ); + + PSYMCRYPT_INT pModInt = SymCryptIntFromModulus( pMod ); + CHECK( pModInt != NULL, "?" ); + + scError = SymCryptIntSetValue( pBlob->abModulus, cbMod, SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, pModInt ); + CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); + + SymCryptIntToModulus( pModInt, pMod, 20, SYMCRYPT_FLAG_DATA_PUBLIC, pbScratch, cbScratch ); + + // We have a modulus; now we need two modElement + PSYMCRYPT_MODELEMENT pMsg = SymCryptModElementAllocate( pMod ); + PSYMCRYPT_MODELEMENT pTmp = SymCryptModElementAllocate( pMod ); + CHECK( pMsg != NULL && pTmp != NULL, "Out of memory" ); + + SymCryptModSetRandom( pMod, pMsg, SYMCRYPT_FLAG_MODRANDOM_ALLOW_MINUSONE | SYMCRYPT_FLAG_MODRANDOM_ALLOW_ONE, pbScratch, cbScratch ); + + + fprintf( f, "N = " ); + fprintHex( f, pBlob->abModulus, cbMod ); + + + UINT64 exp = pBlob->u64PubExp; + SIZE_T cbTmp = SymCryptUint64Bytesize( exp ); + SymCryptStoreMsbFirstUint64( exp, buf, cbTmp ); + fprintf( f, "e = " ); + fprintHex( f, buf, cbTmp ); + + fprintf( f, "P1 = " ); + fprintHex( f, pBlob->abPrime1, pBlob->cbPrime1 ); + + fprintf( f, "P2 = " ); + fprintHex( f, pBlob->abPrime2, pBlob->cbPrime2 ); + + scError = SymCryptModElementGetValue( pMod, pMsg, buf, cbMod, SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, pbScratch, cbScratch ); + CHECK( scError == SYMCRYPT_NO_ERROR, "Failed to export random mod element" ); + fprintf( f, "Msg = " ); + fprintHex( f, buf, cbMod ); + + // Now compute Msg^exp + SymCryptModElementSetValueUint32( 1, pMod, pTmp, pbScratch, cbScratch ); + + // Invariant: ciphertext = Tmp * Msg^exp + while( exp != 0 ) + { + if( (exp & 1) != 0 ) + { + SymCryptModMul( pMod, pTmp, pMsg, pTmp, pbScratch, cbScratch ); + exp -= 1; + } + SymCryptModSquare( pMod, pMsg, pMsg, pbScratch, cbScratch ); + exp /= 2; + } + + scError = SymCryptModElementGetValue( pMod, pTmp, buf, cbMod, SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, pbScratch, cbScratch ); + CHECK( scError == SYMCRYPT_NO_ERROR, "Failed to export random mod element" ); + fprintf( f, "Ciphertext = " ); + fprintHex( f, buf, cbMod ); + + fprintf( f, "\n" ); + + if( pTmp != NULL ) + { + SymCryptModElementFree( pMod, pTmp ); + pTmp = NULL; + } + + if( pMsg != NULL ) + { + SymCryptModElementFree( pMod, pMsg ); + pMsg = NULL; + } + + if( pMod != NULL ) + { + SymCryptModulusFree( pMod ); + pMod = NULL; + } + + if( pbScratch != NULL ) + { + SymCryptWipe( pbScratch, cbScratch ); + SymCryptCallbackFree( pbScratch ); + pbScratch = NULL; + } +} + +VOID +createKatFileSinglePkcs1Enc( FILE * f, PCRSAKEY_TESTBLOB pBlob ) +{ + BYTE msg[RSAKEY_MAXKEYSIZE]; + BYTE ciphertext[RSAKEY_MAXKEYSIZE]; + SIZE_T cbCiphertext; + SYMCRYPT_ERROR scError; + PSYMCRYPT_RSAKEY pKey = NULL; + SIZE_T cbMsg; + + + cbCiphertext = pBlob->cbModulus; + CHECK( cbCiphertext >= 64, "?" ); + CHECK( cbCiphertext <= sizeof( ciphertext ), "?" ); + + // Pick random message size; must be <= cbCiphertext - 11 + cbMsg = g_rng.uint32() % (cbCiphertext - 10); + + GENRANDOM( msg, (ULONG) cbMsg ); + + fprintf( f, "N = " ); + fprintHex( f, pBlob->abModulus, pBlob->cbModulus ); + + // Use ciphertext buffer as temp space + SIZE_T cbTmp = SymCryptUint64Bytesize( pBlob->u64PubExp ); + SymCryptStoreMsbFirstUint64( pBlob->u64PubExp, ciphertext, cbTmp ); + fprintf( f, "e = " ); + fprintHex( f, ciphertext, cbTmp ); + + fprintf( f, "P1 = " ); + fprintHex( f, pBlob->abPrime1, pBlob->cbPrime1 ); + + fprintf( f, "P2 = " ); + fprintHex( f, pBlob->abPrime2, pBlob->cbPrime2 ); + + fprintf( f, "Msg = " ); + fprintHex( f, msg, cbMsg ); + + pKey = rsaKeyFromTestBlob( pBlob ); + + scError = SymCryptRsaPkcs1Encrypt( pKey, msg, cbMsg, 0, SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, ciphertext, cbCiphertext, &cbTmp ); + CHECK( scError == SYMCRYPT_NO_ERROR, "PKCS1 encryption failed" ); + CHECK( cbTmp == cbCiphertext, "?" ); + + fprintf( f, "Ciphertext = " ); + fprintHex( f, ciphertext, cbCiphertext ); + + fprintf( f, "\n" ); + + if( pKey != NULL ) + { + SymCryptRsakeyFree( pKey ); + pKey = NULL; + } +} + +VOID +createKatFileSingleOaep( FILE * f, PCRSAKEY_TESTBLOB pBlob, PCSTR hashName, PCSYMCRYPT_HASH pcHash, SIZE_T cbHash ) +{ + BYTE msg[RSAKEY_MAXKEYSIZE]; + BYTE label[RSAKEY_MAXKEYSIZE]; + BYTE ciphertext[RSAKEY_MAXKEYSIZE]; + + SIZE_T cbMsg; + SIZE_T cbLabel; + SIZE_T cbCiphertext; + SIZE_T cbTmp; + SYMCRYPT_ERROR scError; + PSYMCRYPT_RSAKEY pKey = NULL; + + cbCiphertext = pBlob->cbModulus; + CHECK( cbCiphertext <= sizeof( ciphertext ), "?" ); + + if( cbHash * 2 + 2 > cbCiphertext ) + { + // Doesn't fit, skip this test case + goto cleanup; + } + + cbMsg = g_rng.sizet( 0, cbCiphertext - 2 - 2 * cbHash ); + GENRANDOM( msg, (ULONG) cbMsg ); + + cbLabel = g_rng.sizet( 0, sizeof( label ) ); + GENRANDOM( label, (ULONG) cbLabel ); + + fprintf( f, "N = " ); + fprintHex( f, pBlob->abModulus, pBlob->cbModulus ); + + cbTmp = SymCryptUint64Bytesize( pBlob->u64PubExp ); + SymCryptStoreMsbFirstUint64( pBlob->u64PubExp, ciphertext, cbTmp ); + fprintf( f, "e = " ); + fprintHex( f, ciphertext, cbTmp ); + + fprintf( f, "P1 = " ); + fprintHex( f, pBlob->abPrime1, pBlob->cbPrime1 ); + + fprintf( f, "P2 = " ); + fprintHex( f, pBlob->abPrime2, pBlob->cbPrime2 ); + + fprintf( f, "HashAlg = \"%s\"\n", hashName ); + + fprintf( f, "Msg = " ); + fprintHex( f, msg, cbMsg ); + + fprintf( f, "Label = " ); + fprintHex( f, label, cbLabel ); + + pKey = rsaKeyFromTestBlob( pBlob ); + + scError = SymCryptRsaOaepEncrypt( pKey, msg, cbMsg, pcHash, label, cbLabel, 0, SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, ciphertext, cbCiphertext, &cbTmp ); + CHECK( scError == SYMCRYPT_NO_ERROR, "OAEP encryption failed" ); + CHECK( cbTmp == cbCiphertext, "?" ); + + fprintf( f, "Ciphertext = " ); + fprintHex( f, ciphertext, cbCiphertext ); + + fprintf( f, "\n" ); + +cleanup: + if( pKey != NULL ) + { + SymCryptRsakeyFree( pKey ); + pKey = NULL; + } +} + +VOID +createKatFileRsaEnc() +// This function is not normally used, but available for use whenever we want to re-generate +// new test vectors. +{ + // The NIST downloadable test vectors contain (N,e,d) and not (N,e,p,q). + // Converting them is more work then generating our own. We test against known + // good implementations, so we can rely on our newly generated vectors. + FILE * f = fopen( "generated_kat_RsaEnc.dat", "wt" ); + CHECK( f != NULL, "Could not create output file" ); + + + fprintf( f, "#\n" + "# DO NOT EDIT: Generated test vectors for RSA encryption\n" + "#\n" + ); + + fprintf( f, "\n\n[RsaEncRaw]\n\n" ); + + for( int i=0; icbModulus; + CHECK( cbCiphertext == cbKey, "?" ); + + ntStatus = pRsaEnc->setKey( pcRsaKeyBlob ); + CHECK( ntStatus == STATUS_SUCCESS, "Error setting key" ); + + ntStatus = pRsaEnc->decrypt( pbCiphertext, cbCiphertext, pcstrHashAlgName, pbLabel, cbLabel, buf, cbKey, &cbRes ); + CHECK3( ntStatus == STATUS_SUCCESS, "Decryption failure in line %lld", line); + CHECK3( cbRes == cbMsg, "Wrong message length in line %lld", line ); + CHECK3( memcmp( buf, pbMsg, cbMsg ) == 0, "Wrong message in line %lld", line ); + + // Check that we get an error when the ciphertext is modified. + // This doesn't work in general as RsaRaw doesn't return an error, but we cheat and use cbMsg to + // see whether we expect an error or not. + + // Modify the ciphertext, not in the first byte to avoid values > modulus + memcpy( buf, pbCiphertext, cbKey ); + UINT32 t = g_rng.uint32(); + buf[ 1 + ((t/8) % (cbKey - 1)) ] ^= 1 << (t%8); + ntStatus = pRsaEnc->decrypt( buf, cbKey, pcstrHashAlgName, pbLabel, cbLabel, buf, cbKey, &cbRes ); + if( cbMsg == cbKey ) + { + // We are handling RsaRaw + CHECK( ntStatus == STATUS_SUCCESS, "Error decrypting modified RsaRaw ciphertext" ); + } else { + CHECK( !NT_SUCCESS( ntStatus ), "Modified ciphertext did not generate an Rsa decryption error" ); + } + + // Encrypt; the multi-imp will do cross-verification of all implementations. + ntStatus = pRsaEnc->encrypt( pbMsg, cbMsg, pcstrHashAlgName, pbLabel, cbLabel, buf, cbKey ); + CHECK3( ntStatus == STATUS_SUCCESS, "error encrypting message in line %lld", line ); + + CHECK( pRsaEnc->setKey( NULL ) == STATUS_SUCCESS, "Failed to clear key" ); +} + +VOID +testRsaEncTestkeys( + RsaEncImplementation * pRsaEnc, + UINT32 rnd, + INT64 line ) +{ + NTSTATUS ntStatus; + BYTE msg[RSAKEY_MAXKEYSIZE]; + BYTE ciph[RSAKEY_MAXKEYSIZE]; + + UNREFERENCED_PARAMETER( line ); + + for( int i=0; isetKey( pBlob ); + CHECK( ntStatus == STATUS_SUCCESS, "Error setting key" ); + + PCSTR strHash = "SHA256"; + + GENRANDOM( msg, sizeof( msg ) ); + + UINT32 cbMsg = 1 << 30; // Catch errors when this is not further set + UINT32 cbLabel = (UINT32) g_rng.sizet( 0, 64 ); + + // Special case for RAW encryption + if( rnd == 1 ) + { + cbMsg = pBlob->cbModulus; + msg[0] = 0; // Make sure it is < modulus + } + + // special case for OAEP encryption + if( rnd == 2 ) + { + // Overhead <= 30 bytes, 11 bytes for padding plus rest for OID & encoding + cbMsg = (UINT32) g_rng.sizet( 0, pBlob->cbModulus - 30 ); + } + + // Special case for OAEP encryption + if( rnd == 3 ) + { + // Overhead = 2 + 2 * hashSize + if( pBlob->cbModulus < 70 ) + { + strHash = "SHA1"; + cbMsg = (UINT32) g_rng.sizet( 0, pBlob->cbModulus - 42 ); + } else { + cbMsg = (UINT32) g_rng.sizet( 0, pBlob->cbModulus - 66 ); + } + } + + // Calling the 'encrypt' function performs encrypt-and-decrypt, which is what we want to do. + // iprint( "(%d, %d, %d)", pBlob->cbModulus, cbMsg, cbLabel ); + ntStatus = pRsaEnc->encrypt( msg, cbMsg, strHash, (msg + 1), cbLabel, ciph, pBlob->cbModulus ); + CHECK( NT_SUCCESS( ntStatus ), "Error in RSA encryption validation" ); + } + CHECK( pRsaEnc->setKey( NULL ) == STATUS_SUCCESS, "Failed to clear key" ); +} + +VOID +testRsaEncKats() +{ + // fix this. + KatData *katRsaEnc = getCustomResource( "kat_RsaEnc.dat", "KAT_RSA_ENC" ); + KAT_ITEM katItem; + SYMCRYPT_ERROR scError; + + static String g_currentCategory; + BOOL skipData = TRUE; + String sep = " "; + BOOL doneAnything = FALSE; + + std::auto_ptr pRsaEncMultiImp; + + while( 1 ) + { + katRsaEnc->getKatItem( & katItem ); + if( katItem.type == KAT_TYPE_END ) + { + break; + } + + if( katItem.type == KAT_TYPE_CATEGORY ) + { + g_currentCategory = katItem.categoryName; + pRsaEncMultiImp.reset( new RsaEncMultiImp( g_currentCategory ) ); + + // + // If we have no algorithms, we skip all the data until the next category + // + skipData = (pRsaEncMultiImp->m_imps.size() == 0); + if( !skipData ) + { + iprint( "%s%s", sep.c_str(), g_currentCategory.c_str() ); + sep = ", "; + doneAnything = TRUE; + } + + //print( "%s, %d\n", g_currentCategory.c_str(), pRsaEncMultiImp->m_imps.size() ); + } + + if( katItem.type == KAT_TYPE_DATASET && !skipData ) + { + if( katIsFieldPresent( katItem, "n" ) ) + { + BString N = katParseData( katItem, "n" ); + BString e = katParseData( katItem, "e" ); + BString P1 = katParseData( katItem, "p1" ); + BString P2 = katParseData( katItem, "p2" ); + BString Ciphertext = katParseData( katItem, "ciphertext" ); + BString Msg = katParseData( katItem, "msg" ); + + BString hashAlg; + BString Label; + + if( katIsFieldPresent( katItem, "hashalg") ) + { + hashAlg = katParseData( katItem, "hashalg" ); + Label = katParseData( katItem, "label" ); + } + + RSAKEY_TESTBLOB blob; + blob.nBitsModulus = (UINT32)N.size() * 8; + scError = SymCryptLoadMsbFirstUint64( e.data(), e.size(), &blob.u64PubExp ); + CHECK( scError == SYMCRYPT_NO_ERROR, "Error reading public exponent" ); + blob.cbModulus = (UINT32) N.size(); + blob.cbPrime1 = (UINT32) P1.size(); + blob.cbPrime2 = (UINT32) P2.size(); + + CHECK( blob.cbModulus <= RSAKEY_MAXKEYSIZE && blob.cbPrime1 <= RSAKEY_MAXKEYSIZE && blob.cbPrime2 <= RSAKEY_MAXKEYSIZE, + "Test vector too large" ); + memcpy( blob.abModulus, N.data(), blob.cbModulus ); + memcpy( blob.abPrime1, P1.data(), blob.cbPrime1 ); + memcpy( blob.abPrime2, P2.data(), blob.cbPrime2 ); + + char acStringName[100]; + memset( acStringName, 0, sizeof( acStringName ) ); + CHECK( hashAlg.size() < sizeof(acStringName) - 1, "?" ); + memcpy( acStringName, hashAlg.data(), hashAlg.size() ); + + testRsaEncSingle( pRsaEncMultiImp.get(), + &blob, + Msg.data(), Msg.size(), + acStringName, + Label.data(), Label.size(), + Ciphertext.data(), Ciphertext.size(), + katItem.line ); + } else if( katIsFieldPresent( katItem, "rnd" ) ) + { + testRsaEncTestkeys( pRsaEncMultiImp.get(), (UINT32) katParseInteger( katItem, "rnd" ), katItem.line ); + } else { + CHECK( FALSE, "Invalid KAT record" ); + } + } + } + + if( doneAnything ) + { + iprint( "\n" ); + } + + delete katRsaEnc; +} + +VOID +testRsaEncRaw() +// Corner-case testing for raw encryption +// - test values 0, 1, 2, 3, N-3, N-2, N-1 +{ + NTSTATUS ntStatus; + + iprint( " RsaEncRaw+" ); + + std::auto_ptr pRsaEncMultiImp; + pRsaEncMultiImp.reset( new RsaEncMultiImp( "RsaEncRaw" ) ); + CHECK( pRsaEncMultiImp->m_imps.size() > 0, "No RsaEncRaw impls?" ); + + // Choose a random test key + rsaTestKeysGenerate(); + PCRSAKEY_TESTBLOB pBlob = &g_RsaTestKeys[ g_rng.uint32() % ARRAY_SIZE( g_RsaTestKeys ) ]; + + pRsaEncMultiImp->setKey( pBlob ); + + SIZE_T cbKey = pBlob->cbModulus; + + BYTE abMsg[RSAKEY_MAXKEYSIZE]; + BYTE abCph[RSAKEY_MAXKEYSIZE]; + BYTE abRes[RSAKEY_MAXKEYSIZE]; + SIZE_T cbRes; + + for( int i=-3; i<=3; i++ ) + { + if( i < 0 ) + { + memcpy( abMsg, pBlob->abModulus, cbKey ); + // Manual subtraction + SIZE_T j = cbKey; + int c = i; + do { + j--; + abMsg[j] = (BYTE)(abMsg[j] + c); + c = -1; + } while( abMsg[j] > pBlob->abModulus[j] ); + } else { + SymCryptWipe( abMsg, cbKey ); + abMsg[cbKey-1] = (BYTE) i; + } + + ntStatus = pRsaEncMultiImp->encrypt( abMsg, cbKey, NULL, NULL, 0, abCph, cbKey ); + CHECK3( NT_SUCCESS( ntStatus ), "Error encrypting RSA raw corner case %d", i ); + + ntStatus = pRsaEncMultiImp->decrypt( abCph, cbKey, NULL, NULL, 0, abRes, cbKey, &cbRes ); + CHECK3( NT_SUCCESS( ntStatus ) && cbRes == cbKey, "Error decrypting RSA raw corner case %d", i ); + CHECK3( memcmp( abMsg, abRes, cbKey ) == 0, "Wrong message decrypt %d", i ); + + if( i == 0 || i == 1) + { + for( SIZE_T j=0; jsetKey( NULL ) == STATUS_SUCCESS, "Failed to clear key" ); + iprint( "\n" ); +} + +VOID +testRsaEncPkcs1Errors() +{ + // We check various PKCS1 padding errors + SYMCRYPT_ERROR scError; + PSYMCRYPT_RSAKEY pKey = NULL; + + BYTE paddedData[256]; + BYTE ciphertext[256]; + BYTE res[256]; + SIZE_T cbRes; + BYTE b; + UINT32 i; + + // Choose a random test key + rsaTestKeysGenerate(); + PCRSAKEY_TESTBLOB pBlob = &g_RsaTestKeys[ g_rng.uint32() % ARRAY_SIZE( g_RsaTestKeys ) ]; + + UINT32 cbitModulus = pBlob->nBitsModulus; + UINT32 cbModulus = pBlob->cbModulus; + + pKey = rsaKeyFromTestBlob( pBlob ); + CHECK( pKey != NULL, "No 2048-bit test key found" ); + + for( i=0; i 0 ) + { + scError = SymCryptRsaPkcs1Decrypt( pKey, ciphertext, cbModulus, SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, 0, res, cbRes-1, &cbRes ); + CHECK( scError == SYMCRYPT_BUFFER_TOO_SMALL, "No buffer-too-small error message" ); + } + + cbRes = 1<<30; // Big value to check that cbRes is actually being written to. + scError = SymCryptRsaPkcs1Decrypt( pKey, ciphertext, cbModulus, SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, 0, NULL, g_rng.byte(), &cbRes ); + CHECK( scError == SYMCRYPT_NO_ERROR && cbRes == cbModulus - i - 1, "Error when querying PKCS1 decryption length" ); + } + + paddedData[i] = b; + } + +//cleanup: + if( pKey != NULL ) + { + SymCryptRsakeyFree( pKey ); + pKey = NULL; + } +} + +VOID +testRsaEncOaep() +// Test many different message & label sizes +{ + NTSTATUS ntStatus; + + iprint( " RsaEncOaep+" ); + + std::auto_ptr pRsaEncMultiImp; + pRsaEncMultiImp.reset( new RsaEncMultiImp( "RsaEncOaep" ) ); + CHECK( pRsaEncMultiImp->m_imps.size() > 0, "No RsaEncOaep impls?" ); + + // Choose a random test key + rsaTestKeysGenerate(); + PCRSAKEY_TESTBLOB pBlob = &g_RsaTestKeys[ g_rng.uint32() % ARRAY_SIZE( g_RsaTestKeys ) ]; + + pRsaEncMultiImp->setKey( pBlob ); + + SIZE_T cbKey = pBlob->cbModulus; + + BYTE abMsg[RSAKEY_MAXKEYSIZE]; + BYTE abCph[RSAKEY_MAXKEYSIZE]; + BYTE abRes[RSAKEY_MAXKEYSIZE]; + BYTE abLabel[RSAKEY_MAXKEYSIZE]; + SIZE_T cbRes; + + GENRANDOM( abMsg, sizeof( abMsg ) ); + GENRANDOM( abLabel, sizeof( abLabel ) ); + + for( int i=0; i<30; i++ ) + { + UINT32 cbMsg = g_rng.uint32() % cbKey; + UINT32 cbLabel = g_rng.uint32() % cbKey; + + ntStatus = pRsaEncMultiImp->encrypt( abMsg, cbMsg, "SHA256", abLabel, cbLabel, abCph, cbKey ); + CHECK5( NT_SUCCESS( ntStatus ) == (cbMsg + 66) <= cbKey, "OAEP encryption error %d, %d, %d", cbKey, cbMsg, cbLabel ); + if( NT_SUCCESS( ntStatus ) ) + { + ntStatus = pRsaEncMultiImp->decrypt( abCph, cbKey, "SHA256", abLabel, cbLabel, abRes, cbKey, &cbRes ); + CHECK( NT_SUCCESS( ntStatus ) && cbRes == cbMsg, "?" ); + } + + ntStatus = pRsaEncMultiImp->encrypt( abMsg, cbMsg, "SHA384", abLabel, cbLabel, abCph, cbKey ); + CHECK5( NT_SUCCESS( ntStatus ) == (cbMsg + 2 + 2*48) <= cbKey, "OAEP encryption error %d, %d, %d", cbKey, cbMsg, cbLabel ); + if( NT_SUCCESS( ntStatus ) ) + { + ntStatus = pRsaEncMultiImp->decrypt( abCph, cbKey, "SHA384", abLabel, cbLabel, abRes, cbKey, &cbRes ); + CHECK( NT_SUCCESS( ntStatus ) && cbRes == cbMsg, "?" ); + } + } + + CHECK( pRsaEncMultiImp->setKey( NULL ) == STATUS_SUCCESS, "Failed to clear key" ); + iprint( "\n" ); + +} + + +VOID +testRsaEncAlgorithms() +{ + String sep; + + // Generate our test keys if they haven't been generated before. + rsaTestKeysGenerate(); + + // Uncomment this function to generate a new KAT file + // createKatFileRsaEnc(); + + + CHECK( g_nOutstandingCheckedAllocs == 0, "Memory leak" ); + testRsaEncKats(); + CHECK3( g_nOutstandingCheckedAllocs == 0, "Memory leak %d", g_nOutstandingCheckedAllocs ); + + if( isAlgorithmPresent( "RsaEncRaw", FALSE ) ) + { + testRsaEncRaw(); + } + + if( isAlgorithmPresent( "RsaEncPkcs1", FALSE ) ) + { + testRsaEncPkcs1Errors(); + } + + if( isAlgorithmPresent( "RsaEncOaep", FALSE ) ) + { + testRsaEncOaep(); + } + + CHECK( g_nOutstandingCheckedAllocs == 0, "Memory leak" ); +} + diff --git a/unittest/lib/testRsaSign.cpp b/unittest/lib/testRsaSign.cpp new file mode 100644 index 0000000..4cd6f83 --- /dev/null +++ b/unittest/lib/testRsaSign.cpp @@ -0,0 +1,1028 @@ +// +// TestRsaSign.cpp +// +// Copyright (c) Microsoft Corporation. Licensed under the MIT license. +// + +// +// Test code for hash functions. +// + +#include "precomp.h" + +#define MAX_RSA_TESTKEYS (50) +RSAKEY_TESTBLOB g_RsaTestKeys[ MAX_RSA_TESTKEYS ] = {0}; +UINT32 g_nRsaTestKeys = 0; + +// RSA test keys for all RSA tests + +VOID +rsaTestKeysAddOneFunky( UINT32 nBitsOfModulus ) +{ + SYMCRYPT_ERROR scError = SYMCRYPT_NO_ERROR; + + PBYTE pbScratch = NULL; + UINT32 cbScratch = 0; + PBYTE pbScratchInternal = NULL; + UINT32 cbScratchInternal = 0; + + CHECK( nBitsOfModulus > 1500, "Invalid key size" ); + UINT32 nBitsOfPrime1 = 512 + g_rng.uint32() % (nBitsOfModulus - 1024); + UINT32 nBitsOfPrime2 = nBitsOfModulus - nBitsOfPrime1; + + UINT32 ndModulus = 0; + UINT32 ndPrime1 = 0; + UINT32 ndPrime2 = 0; + + UINT32 cbModulus = 0; + UINT32 cbPrime1 = 0; + UINT32 cbPrime2 = 0; + + // Set the public exponent to either 3 or 65537 + UINT64 pubExp = (g_rng.byte() & 1) ? 3 : (1 << 16) + 1; + + PSYMCRYPT_INT piModulus = NULL; + PSYMCRYPT_INT piPrime1 = NULL; + PSYMCRYPT_INT piPrime2 = NULL; + + PSYMCRYPT_INT piLow = NULL; + PSYMCRYPT_INT piHigh = NULL; + + PRSAKEY_TESTBLOB pBlob = &g_RsaTestKeys[ g_nRsaTestKeys++ ]; + SymCryptWipe( (PBYTE) pBlob, sizeof( *pBlob ) ); + + // Calculate the needed sizes + ndPrime1 = SymCryptDigitsFromBits( nBitsOfPrime1 ); + ndPrime2 = SymCryptDigitsFromBits( nBitsOfPrime2 ); + ndModulus = ndPrime1 + ndPrime2; + + cbModulus = SymCryptSizeofIntFromDigits(ndModulus); + cbPrime1 = SymCryptSizeofIntFromDigits(ndPrime1); + cbPrime2 = SymCryptSizeofIntFromDigits(ndPrime2); + + // Calculate scratch space + cbScratch = 3*cbModulus + cbPrime1 + cbPrime2 + + max(SYMCRYPT_SCRATCH_BYTES_FOR_INT_PRIME_GEN(ndModulus), + SYMCRYPT_SCRATCH_BYTES_FOR_INT_MUL(ndModulus)); + + // Allocate + pbScratch = (PBYTE) SymCryptCallbackAlloc( cbScratch ); + CHECK(pbScratch!=NULL,"?"); + + // Create objects + pbScratchInternal = pbScratch; + cbScratchInternal = cbScratch; + + piModulus = SymCryptIntCreate( pbScratchInternal, cbModulus, ndModulus ); + pbScratchInternal += cbModulus; + cbScratchInternal -= cbModulus; + piLow = SymCryptIntCreate( pbScratchInternal, cbModulus, ndModulus ); + pbScratchInternal += cbModulus; + cbScratchInternal -= cbModulus; + piHigh = SymCryptIntCreate( pbScratchInternal, cbModulus, ndModulus ); + pbScratchInternal += cbModulus; + cbScratchInternal -= cbModulus; + piPrime1 = SymCryptIntCreate( pbScratchInternal, cbPrime1, ndPrime1 ); + pbScratchInternal += cbPrime1; + cbScratchInternal -= cbPrime1; + piPrime2 = SymCryptIntCreate( pbScratchInternal, cbPrime2, ndPrime2 ); + pbScratchInternal += cbPrime2; + cbScratchInternal -= cbPrime2; + + do + { + SymCryptIntSetValueUint32( 1, piLow ); + SymCryptIntMulPow2( piLow, nBitsOfPrime1 - 1, piLow ); + + SymCryptIntSetValueUint32( 1, piHigh ); + SymCryptIntMulPow2( piHigh, nBitsOfPrime1, piHigh ); + SymCryptIntSubUint32( piHigh, 1, piHigh ); + + scError = SymCryptIntGenerateRandomPrime( + piLow, + piHigh, + &pubExp, + 1, + 100*nBitsOfPrime1, + 0, + piPrime1, + pbScratchInternal, + cbScratchInternal ); + CHECK(scError==SYMCRYPT_NO_ERROR, "Prime1 generation failed"); + + SymCryptIntSetValueUint32( 1, piLow ); + SymCryptIntMulPow2( piLow, nBitsOfPrime2 - 1, piLow ); + + SymCryptIntSetValueUint32( 1, piHigh ); + SymCryptIntMulPow2( piHigh, nBitsOfPrime2, piHigh ); + SymCryptIntSubUint32( piHigh, 1, piHigh ); + + scError = SymCryptIntGenerateRandomPrime( + piLow, + piHigh, + &pubExp, + 1, + 100*nBitsOfPrime2, + 0, + piPrime2, + pbScratchInternal, + cbScratchInternal ); + CHECK(scError==SYMCRYPT_NO_ERROR, "Prime2 generation failed"); + + SymCryptIntMulMixedSize( + piPrime1, + piPrime2, + piModulus, + pbScratchInternal, + cbScratchInternal ); + CHECK(scError==SYMCRYPT_NO_ERROR, "Modulus multiplication failed"); + } + while (SymCryptIntBitsizeOfValue(piModulus)!=nBitsOfModulus); + + pBlob->nBitsModulus = nBitsOfModulus; + pBlob->u64PubExp = pubExp; + + pBlob->cbModulus = (nBitsOfModulus+7)/8; + scError = SymCryptIntGetValue( piModulus, &pBlob->abModulus[0], pBlob->cbModulus, SYMCRYPT_NUMBER_FORMAT_MSB_FIRST ); + CHECK(scError==SYMCRYPT_NO_ERROR, "?"); + + pBlob->cbPrime1 = (nBitsOfPrime1+7)/8; + scError = SymCryptIntGetValue( piPrime1, &pBlob->abPrime1[0], pBlob->cbPrime1, SYMCRYPT_NUMBER_FORMAT_MSB_FIRST ); + CHECK(scError==SYMCRYPT_NO_ERROR, "?"); + + pBlob->cbPrime2 = (nBitsOfPrime2+7)/8; + scError = SymCryptIntGetValue( piPrime2, &pBlob->abPrime2[0], pBlob->cbPrime2, SYMCRYPT_NUMBER_FORMAT_MSB_FIRST ); + CHECK(scError==SYMCRYPT_NO_ERROR, "?"); + + SymCryptWipe( pbScratch, cbScratch ); + SymCryptCallbackFree( pbScratch ); + + iprint( "/%d", nBitsOfPrime1 ); +} + + +VOID +rsaTestKeysAddOne( UINT32 bitSize ) +{ + //iprint( "RSA key gen %d\n", bitSize ); + CHECK( g_nRsaTestKeys < MAX_RSA_TESTKEYS, "?" ); + + SYMCRYPT_ERROR scError; + SYMCRYPT_RSA_PARAMS params; + params.version = 1; + params.nBitsOfModulus = bitSize; + params.nPrimes = 2; + params.nPubExp = 1; + + PSYMCRYPT_RSAKEY pKey = SymCryptRsakeyAllocate( ¶ms, 0 ); + CHECK( pKey != NULL, "?" ); + + UINT64 u64PubExp; + + // Pick a random-ish public exponent + BYTE tmp[9]; + GENRANDOM( tmp, sizeof( tmp ) ); + u64PubExp = SYMCRYPT_LOAD_LSBFIRST64( tmp ); + UINT32 b = tmp[8]; + if( (b & 0xc0) != 0) + { + u64PubExp >>= b & 63; + u64PubExp |= 1; + if( u64PubExp == 1 ) + { + u64PubExp = 3; + } + } else { + u64PubExp = 65537; + } + + scError = SymCryptRsakeyGenerate( pKey, &u64PubExp, 1, 0 ); + CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); + + PRSAKEY_TESTBLOB pBlob = &g_RsaTestKeys[ g_nRsaTestKeys++ ]; + SymCryptWipe( (PBYTE) pBlob, sizeof( *pBlob ) ); + + pBlob->nBitsModulus = SymCryptRsakeyModulusBits( pKey ); + pBlob->cbModulus = SymCryptRsakeySizeofModulus( pKey ); + pBlob->cbPrime1 = SymCryptRsakeySizeofPrime( pKey, 0 ); + pBlob->cbPrime2 = SymCryptRsakeySizeofPrime( pKey, 1 ); + + PBYTE ppPrime[2] = {&pBlob->abPrime1[0], &pBlob->abPrime2[0] }; + SIZE_T cbPrime[2] = {pBlob->cbPrime1, pBlob->cbPrime2 }; + + scError = SymCryptRsakeyGetValue( pKey, &pBlob->abModulus[0], pBlob->cbModulus, &pBlob->u64PubExp, 1, ppPrime, cbPrime, 2, SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, 0 ); + CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); + + SymCryptRsakeyFree( pKey ); +} + +VOID rsaTestKeysGenerate() +{ + // Fill up our array of key blobs with generated keys + UINT32 desiredFixedKeySizes[] = { + (8192 << 16) + 1, // 1 key of 8192 bits + (4096 << 16) + 2, // 2 keys of 4096 bits + (3072 << 16) + 3, + (2048 << 16) + 5, + (1536 << 16) + 2, + (1024 << 16) + 5, + (768 << 16) + 2, + (512 << 16) + 2, + 0, + }; + UINT32 bitSize; + + char * sep = " RSA test key gen: "; + UINT32 previousSize = 0; + + if( g_nRsaTestKeys >= MAX_RSA_TESTKEYS ) + { + goto cleanup; + } + + for( int i = 0; desiredFixedKeySizes[i] != 0; i++ ) + { + bitSize = desiredFixedKeySizes[i] >> 16; + int n = desiredFixedKeySizes[i] & 0xff; + while( n-- && g_nRsaTestKeys < MAX_RSA_TESTKEYS ) + { + if( bitSize == previousSize ) + { + iprint( "." ); + } else { + iprint( "%s%d", sep, bitSize ); + sep = ", "; + previousSize = bitSize; + } + + rsaTestKeysAddOne( bitSize ); + } + } + + // And we fill the rest with randomly-sized keys + // For performance we favor the smaller key sizes. + // The last 10% of the keys are reserved for funky keys + while( g_nRsaTestKeys < MAX_RSA_TESTKEYS - MAX_RSA_TESTKEYS / 10 ) + { + UINT32 r = g_rng.uint32(); + // We use prime moduli as they are almost independent + if( (r % 53) == 0 ) + { + bitSize = (UINT32) g_rng.sizet( 4096, 8192 ); + } else if ( (r % 11) == 0 ) { + bitSize = (UINT32) g_rng.sizet( 2048, 4096 ); + } else if( (r % 3) == 0 ) { + bitSize = (UINT32) g_rng.sizet( 1024, 2048 ); + } else { + bitSize = (UINT32) g_rng.sizet( 512, 2048 ); + } + + if( bitSize == previousSize ) + { + iprint( "." ); + } else { + iprint( "%s%d", sep, bitSize ); + sep = ", "; + previousSize = bitSize; + } + rsaTestKeysAddOne( bitSize ); + } + + while( g_nRsaTestKeys < MAX_RSA_TESTKEYS ) + { + bitSize = (UINT32) g_rng.sizet( 3 * 512, 6 * 512 ); + iprint( ", F%d", bitSize ); + rsaTestKeysAddOneFunky( bitSize ); + } + + iprint( "\n" ); + +cleanup: + return; +} + +PSYMCRYPT_RSAKEY +rsaKeyFromTestBlob( PCRSAKEY_TESTBLOB pBlob ) +{ + SYMCRYPT_ERROR scError; + SYMCRYPT_RSA_PARAMS params; + + params.version = 1; + params.nBitsOfModulus = pBlob->nBitsModulus; + params.nPrimes = 2; + params.nPubExp = 1; + + PSYMCRYPT_RSAKEY pKey = SymCryptRsakeyAllocate( ¶ms, 0 ); + CHECK( pKey != NULL, "?" ); + + PCBYTE ppPrime[2] = {&pBlob->abPrime1[0], &pBlob->abPrime2[0] }; + SIZE_T cbPrime[2] = {pBlob->cbPrime1, pBlob->cbPrime2 }; + + scError = SymCryptRsakeySetValue( + &pBlob->abModulus[0], pBlob->cbModulus, + &pBlob->u64PubExp, 1, + ppPrime, cbPrime, 2, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + 0, + pKey ); + CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); + + return pKey; +} + +PSYMCRYPT_RSAKEY +rsaTestKeyRandom() +{ + return rsaKeyFromTestBlob( &g_RsaTestKeys[ g_rng.uint32() % ARRAY_SIZE( g_RsaTestKeys ) ] ); +} + +PSYMCRYPT_RSAKEY +rsaTestKeyForSize( SIZE_T nBits ) +{ + for( UINT32 i=0; i ImpPtrVector; + + ImpPtrVector m_imps; // Implementations we use + + ImpPtrVector m_comps; // Subset of m_imps; set of ongoing computations + + virtual NTSTATUS setKey( PCRSAKEY_TESTBLOB pcKeyBlob ); + + virtual NTSTATUS sign( + _In_reads_( cbHash) PCBYTE pbHash, + SIZE_T cbHash, + PCSTR pcstrHashAlgName, + UINT32 u32Other, + _Out_writes_( cbSig ) PBYTE pbSig, + SIZE_T cbSig ); // cbSig == cbModulus of key + + virtual NTSTATUS verify( + _In_reads_( cbHash) PCBYTE pbHash, + SIZE_T cbHash, + _In_reads_( cbSig ) PCBYTE pbSig, + SIZE_T cbSig, + PCSTR pcstrHashAlgName, + UINT32 u32Other ); + + SIZE_T m_cbSig; +}; + +RsaSignMultiImp::RsaSignMultiImp( String algName ) +{ + m_algorithmName = algName; + + getAllImplementations( algName, &m_imps ); +} + + +RsaSignMultiImp::~RsaSignMultiImp() +{ + // + // Propagate the # KAT failures to the individual algorithms. + // + for( ImpPtrVector::iterator i = m_imps.begin(); i != m_imps.end(); ++i ) + { + (*i)->m_nErrorKatFailure += m_nErrorKatFailure; + } +} + +NTSTATUS +RsaSignMultiImp::setKey( PCRSAKEY_TESTBLOB pcKeyBlob ) +{ + // m_imps is the set of implementations we support, but an implementation can opt out of any one key. + // m_comps is the set of algorithm implementations that we are working with. + + m_comps.clear(); + + if( pcKeyBlob != NULL ) + { + m_cbSig = pcKeyBlob->cbModulus; + CHECK( m_cbSig <= RSAKEY_MAXKEYSIZE, "Modulus too big" ); + } + + for( ImpPtrVector::iterator i = m_imps.begin(); i != m_imps.end(); ++i ) + { + if( (*i)->setKey( pcKeyBlob ) == STATUS_SUCCESS ) + { + m_comps.push_back( *i ); + } + } + + return m_comps.size() == 0 ? STATUS_NOT_SUPPORTED : STATUS_SUCCESS; +} + +NTSTATUS +RsaSignMultiImp::verify( + _In_reads_( cbHash) PCBYTE pbHash, + SIZE_T cbHash, + _In_reads_( cbSig ) PCBYTE pbSig, + SIZE_T cbSig, + PCSTR pcstrHashAlgName, + UINT32 u32Other ) +{ + ResultMerge res; + NTSTATUS ntStatus; + BYTE b[4]; + + // Process result as MSBfirst array to get errors to print correctly. + for( ImpPtrVector::iterator i = m_comps.begin(); i != m_comps.end(); ++i ) + { + ntStatus = (*i)->verify( pbHash, cbHash, pbSig, cbSig, pcstrHashAlgName, u32Other ); + SYMCRYPT_STORE_MSBFIRST32( b, ntStatus ); + res.addResult( *i, b, 4 ); + } + + res.getResult( b, 4 ); + ntStatus = SYMCRYPT_LOAD_MSBFIRST32( b ); + return ntStatus; +} + +NTSTATUS +RsaSignMultiImp::sign( + _In_reads_( cbHash) PCBYTE pbHash, + SIZE_T cbHash, + PCSTR pcstrHashAlgName, + UINT32 u32Other, + _Out_writes_( cbSig ) PBYTE pbSig, + SIZE_T cbSig ) +{ + // RSA signatures are not necesarilly deterministic (PSS) so we do the following: + // - Have every implementation sign + // - Have every implementation verify each signature + // - return a random signature + BYTE sig[ RSAKEY_MAXKEYSIZE ]; + int nSigs = 0; + NTSTATUS ntStatus; + + for( ImpPtrVector::iterator i = m_comps.begin(); i != m_comps.end(); ++i ) + { + ntStatus = (*i)->sign( pbHash, cbHash, pcstrHashAlgName, u32Other, &sig[0], m_cbSig ); + CHECK( ntStatus == STATUS_SUCCESS, "Failure during RSA signature" ); + for( ImpPtrVector::iterator j = m_comps.begin(); j != m_comps.end(); ++j ) + { + ntStatus = (*j)->verify( pbHash, cbHash, &sig[0], m_cbSig, pcstrHashAlgName, u32Other ); + CHECK4( ntStatus == STATUS_SUCCESS, "RSA sig verification failure %s, %s", + (*i)->m_implementationName.c_str(), + (*j)->m_implementationName.c_str() ); + } + + // Copy a random sig to the output + nSigs += 1; + if( (g_rng.byte() % nSigs) == 0 ) + { + CHECK5( cbSig == m_cbSig, "Signature mismatch, %d, %d, %s", cbSig, m_cbSig, (*i)->m_implementationName.c_str() ); + memcpy( pbSig, &sig[0], m_cbSig ); + } + } + + return STATUS_SUCCESS; +} + + +VOID +createKatFileSinglePkcs1( FILE * f, PCRSAKEY_TESTBLOB pBlob, PCSTR hashName, UINT32 cbHash, PCSYMCRYPT_OID pOids, UINT32 nOids ) +{ + BYTE hash[64]; + BYTE sig[1024]; + SIZE_T cbSig; + SYMCRYPT_ERROR scError; + PSYMCRYPT_RSAKEY pKey = NULL; + + if( cbHash + 30 > pBlob->cbModulus ) + { + // Hash is too large for this key, the padding will fail. + // (The value 30 consists of up to 13 bytes OID, 6 bytes ASN.1 overhead, and 11 bytes padding.) + goto cleanup; + } + + CHECK( cbHash <= sizeof( hash ), "?" ); + GENRANDOM( hash, cbHash ); + + fprintf( f, "N = " ); + fprintHex( f, pBlob->abModulus, pBlob->cbModulus ); + + SIZE_T cbTmp = SymCryptUint64Bytesize( pBlob->u64PubExp ); + SymCryptStoreMsbFirstUint64( pBlob->u64PubExp, sig, cbTmp ); + fprintf( f, "e = " ); + fprintHex( f, sig, cbTmp ); + + fprintf( f, "P1 = " ); + fprintHex( f, pBlob->abPrime1, pBlob->cbPrime1 ); + + fprintf( f, "P2 = " ); + fprintHex( f, pBlob->abPrime2, pBlob->cbPrime2 ); + + fprintf( f, "HashAlg = \"%s\"\n", hashName ); + + fprintf( f, "Hash = " ); + fprintHex( f, hash, cbHash ); + + pKey = rsaKeyFromTestBlob( pBlob ); + + scError = SymCryptRsaPkcs1Sign( pKey, hash, cbHash, pOids, nOids, 0, SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, sig, pBlob->cbModulus, &cbSig ); + CHECK4( scError == SYMCRYPT_NO_ERROR, "PKCS1 signature failed %d %d", cbHash, pBlob->cbModulus ); + + fprintf( f, "Sig = " ); + fprintHex( f, sig, cbSig ); + + fprintf( f, "\n" ); + +cleanup: + if( pKey != NULL ) + { + SymCryptRsakeyFree( pKey ); + pKey = NULL; + } +} + +VOID +createKatFileSinglePss( FILE * f, PCRSAKEY_TESTBLOB pBlob, PCSTR hashName, PCSYMCRYPT_HASH pcHash, UINT32 cbHash, UINT32 cbSalt ) +{ + BYTE hash[64]; + BYTE salt[64]; + BYTE sig[1024]; + SIZE_T cbSig; + SYMCRYPT_ERROR scError; + PSYMCRYPT_RSAKEY pKey = NULL; + + if( cbHash + cbSalt + 3 > pBlob->cbModulus ) + { + // Hash/salt is too large for this key, the padding will fail. + goto cleanup; + } + + CHECK( cbHash <= sizeof( hash ), "?" ); + GENRANDOM( hash, cbHash ); + GENRANDOM( salt, cbSalt ); + + fprintf( f, "N = " ); + fprintHex( f, pBlob->abModulus, pBlob->cbModulus ); + + SIZE_T cbTmp = SymCryptUint64Bytesize( pBlob->u64PubExp ); + SymCryptStoreMsbFirstUint64( pBlob->u64PubExp, sig, cbTmp ); + fprintf( f, "e = " ); + fprintHex( f, sig, cbTmp ); + + fprintf( f, "P1 = " ); + fprintHex( f, pBlob->abPrime1, pBlob->cbPrime1 ); + + fprintf( f, "P2 = " ); + fprintHex( f, pBlob->abPrime2, pBlob->cbPrime2 ); + + fprintf( f, "HashAlg = \"%s\"\n", hashName ); + + fprintf( f, "Hash = " ); + fprintHex( f, hash, cbHash ); + + fprintf( f, "cbSalt = %d\n", cbSalt ); + + pKey = rsaKeyFromTestBlob( pBlob ); + scError = SymCryptRsaPssSign( pKey, hash, cbHash, pcHash, cbSalt, 0, SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, sig, pBlob->cbModulus, &cbSig ); + CHECK4( scError == SYMCRYPT_NO_ERROR, "PSS signature failed %d %d", cbHash, pBlob->cbModulus ); + + fprintf( f, "Sig = " ); + fprintHex( f, sig, cbSig ); + + fprintf( f, "\n" ); + +cleanup: + if( pKey != NULL ) + { + SymCryptRsakeyFree( pKey ); + pKey = NULL; + } +} + +VOID +createKatFileRsaSign() +// This function is not normally used, but available for use whenever we want to re-generate +// new test vectors. +{ + // The NIST downloadable test vectors contain (N,e,d) and not (N,e,p,q). + // Converting them is more work then generating our own. We test against known + // good implementations, so we can rely on our newly generated vectors. + FILE * f = fopen( "generated_kat_rsasign.dat", "wt" ); + CHECK( f != NULL, "Could not create output file" ); + + fprintf( f, "#\n" + "# DO NOT EDIT: Generated test vectors for RSA signatures\n" + "#\n" + "\n" + ); + fprintf( f, "[RsaSignPkcs1]\n\n" ); + + for( int i=0; icbModulus, "?" ); + + ntStatus = pRsaSign->setKey( pcRsaKeyBlob ); + CHECK( ntStatus == STATUS_SUCCESS, "Error setting key" ); + + + ntStatus = pRsaSign->verify( pbHash, cbHash, pbSig, cbSig, pcstrHashAlgName, u32Other ); + CHECK3( ntStatus == STATUS_SUCCESS, "Signature verification failure in line %lld", line) + + // Sign; the multi-imp will do cross-verification of all implementations. + ntStatus = pRsaSign->sign( pbHash, cbHash, pcstrHashAlgName, u32Other, &sig[0], cbSig ); + CHECK( ntStatus == STATUS_SUCCESS, "?" ); + + // modify the signature and the hash, and verify errors + CHECK( cbHash <= cbSig, "?" ); + memcpy( hash, pbHash, cbHash ); + UINT32 t = g_rng.uint32(); + hash[ (t/8) % cbHash ] ^= 1 << (t%8); + ntStatus = pRsaSign->verify( hash, cbHash, pbSig, cbSig, pcstrHashAlgName, u32Other ); + CHECK3( ntStatus != STATUS_SUCCESS, "Signature verification success with modified hash value", line) + hash[ (t/8) % cbHash ] ^= 1 << (t%8); + + t = g_rng.uint32(); + sig[ (t/8) % cbSig ] ^= 1 << (t%8); + ntStatus = pRsaSign->verify( pbHash, cbHash, sig, cbSig, pcstrHashAlgName, u32Other ); + CHECK3( ntStatus != STATUS_SUCCESS, "Signature verification success with modified sig value", line) + sig[ (t/8) % cbSig ] ^= 1 << (t%8); + CHECK( pRsaSign->setKey( NULL ) == STATUS_SUCCESS, "Failed to clear key" ); + //CHECK( g_nOutstandingCheckedAllocs == 0, "Memory leak" ); +} + +VOID +testRsaSignTestkeys( + RsaSignImplementation * pRsaSign, + INT64 line ) +{ + NTSTATUS ntStatus; + BYTE sig[RSAKEY_MAXKEYSIZE]; + BYTE hash[RSAKEY_MAXKEYSIZE]; + + UNREFERENCED_PARAMETER( line ); + + for( int i=0; isetKey( pBlob ); + CHECK( ntStatus == STATUS_SUCCESS, "Error setting key" ); + + GENRANDOM( hash, sizeof( hash ) ); + UINT32 cbHash = 32; + UINT32 cbSalt = (UINT32) g_rng.sizet( 0, pBlob->cbModulus - 48 ); + + // Calling the 'sign' function performs sign-and-verify, which is what we want to do. + // We always use the SHA256 alg for MGF as we've tested the others already + // iprint( "%d, ", i ); + ntStatus = pRsaSign->sign( hash, cbHash, "SHA256", cbSalt, &sig[0], pBlob->cbModulus ); + CHECK( NT_SUCCESS( ntStatus ), "Error in RSA signing validation" ); + } + CHECK( pRsaSign->setKey( NULL ) == STATUS_SUCCESS, "Failed to clear key" ); +} + +VOID +testRsaSignKats() +{ + // fix this. + KatData *katRsaSign = getCustomResource( "kat_rsaSign.dat", "KAT_RSA_SIGN" ); + KAT_ITEM katItem; + SYMCRYPT_ERROR scError; + + static String g_currentCategory; + BOOL skipData = TRUE; + String sep = " "; + BOOL doneAnything = FALSE; + + std::auto_ptr pRsaSignMultiImp; + + while( 1 ) + { + katRsaSign->getKatItem( & katItem ); + if( katItem.type == KAT_TYPE_END ) + { + break; + } + + if( katItem.type == KAT_TYPE_CATEGORY ) + { + g_currentCategory = katItem.categoryName; + pRsaSignMultiImp.reset( new RsaSignMultiImp( g_currentCategory ) ); + + // + // If we have no algorithms, we skip all the data until the next category + // + skipData = (pRsaSignMultiImp->m_imps.size() == 0); + if( !skipData ) + { + iprint( "%s%s", sep.c_str(), g_currentCategory.c_str() ); + sep = ", "; + doneAnything = TRUE; + } + + //print( "%s, %d\n", g_currentCategory.c_str(), pRsaSignMultiImp->m_imps.size() ); + } + + if( katItem.type == KAT_TYPE_DATASET && !skipData ) + { + if( katIsFieldPresent( katItem, "n" ) ) + { + BString N = katParseData( katItem, "n" ); + BString e = katParseData( katItem, "e" ); + BString P1 = katParseData( katItem, "p1" ); + BString P2 = katParseData( katItem, "p2" ); + BString hashAlg = katParseData( katItem, "hashalg" ); + BString hash = katParseData( katItem, "hash" ); + BString sig = katParseData( katItem, "sig" ); + + // Parse the optional cbSalt entry for PSS + UINT32 u32Other = 0; + if( findDataItem( katItem, "cbsalt" ) != NULL ) + { + u32Other = (UINT32) katParseInteger( katItem, "cbsalt" ); + } + + RSAKEY_TESTBLOB blob; + blob.nBitsModulus = (UINT32)N.size() * 8; + scError = SymCryptLoadMsbFirstUint64( e.data(), e.size(), &blob.u64PubExp ); + CHECK( scError == SYMCRYPT_NO_ERROR, "Error reading public exponent" ); + blob.cbModulus = (UINT32) N.size(); + blob.cbPrime1 = (UINT32) P1.size(); + blob.cbPrime2 = (UINT32) P2.size(); + + CHECK( blob.cbModulus <= RSAKEY_MAXKEYSIZE && blob.cbPrime1 <= RSAKEY_MAXKEYSIZE && blob.cbPrime2 <= RSAKEY_MAXKEYSIZE, + "Test vector too large" ); + memcpy( blob.abModulus, N.data(), blob.cbModulus ); + memcpy( blob.abPrime1, P1.data(), blob.cbPrime1 ); + memcpy( blob.abPrime2, P2.data(), blob.cbPrime2 ); + + char acStringName[100]; + memset( acStringName, 0, sizeof( acStringName ) ); + CHECK( hashAlg.size() < sizeof(acStringName) - 1, "?" ); + memcpy( acStringName, hashAlg.data(), hashAlg.size() ); + + testRsaSignSingle( pRsaSignMultiImp.get(), + &blob, + acStringName, + u32Other, + hash.data(), hash.size(), + sig.data(), sig.size(), + katItem.line ); + + //FATAL2( "Unknown data record ending at line %lld", katRsaSign->m_line ); + } else if( katIsFieldPresent( katItem, "rnd" ) ) + { + testRsaSignTestkeys( pRsaSignMultiImp.get(), katItem.line ); + } else { + CHECK( FALSE, "Invalid KAT record" ); + } + } + } + + if( doneAnything ) + { + iprint( "\n" ); + } + + delete katRsaSign; +} + +VOID +testRsaSignPkcs1() +{ + // All normal cases are tested by the test vectors. + // We just verify that the OID handling is correct + // + // The SymCrypt PKCS1 signature verification code does not parse the result of + // the RSA public key operation. Rather, it encodes the hash with each + // of the OIDs in turn and compares the encodings for equality. + // This removes any parsing errors, so we don't need tests that try to find + // the corner-cases of the parser. + // + iprint( " RsaSignPkcs1+" ); + + BYTE sig[ RSAKEY_MAXKEYSIZE ]; + PSYMCRYPT_RSAKEY pKey; + BYTE hash[32]; + SIZE_T cbSig; + SYMCRYPT_ERROR scError; + + for( int i = 0; i < 20; i++ ) + { + pKey = rsaTestKeyRandom(); + + GENRANDOM( hash, sizeof( hash ) ); + scError = SymCryptRsaPkcs1Sign( + pKey, + hash, sizeof( hash ), + SymCryptSha256OidList, SYMCRYPT_SHA256_OID_COUNT, + 0, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + sig, SymCryptRsakeySizeofModulus( pKey ), + &cbSig ); + CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); + + scError = SymCryptRsaPkcs1Verify( + pKey, + hash, sizeof( hash ), + sig, cbSig, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + SymCryptSha256OidList, SYMCRYPT_SHA256_OID_COUNT, + 0 ); + CHECK3( scError == SYMCRYPT_NO_ERROR, "ScError = %08x", scError ); + + // Now check for an error if we don't include the first OID that the signing used + + scError = SymCryptRsaPkcs1Verify( + pKey, + hash, sizeof( hash ), + sig, cbSig, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + SymCryptSha256OidList + 1, SYMCRYPT_SHA256_OID_COUNT - 1, + 0 ); + CHECK( scError != SYMCRYPT_NO_ERROR, "?" ); + + // Sign with the second OID + scError = SymCryptRsaPkcs1Sign( + pKey, + hash, sizeof( hash ), + SymCryptSha256OidList + 1, SYMCRYPT_SHA256_OID_COUNT - 1, + 0, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + sig, SymCryptRsakeySizeofModulus( pKey ), + &cbSig ); + CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); + + scError = SymCryptRsaPkcs1Verify( + pKey, + hash, sizeof( hash ), + sig, cbSig, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + SymCryptSha256OidList+ 1, SYMCRYPT_SHA256_OID_COUNT - 1, + 0 ); + CHECK3( scError == SYMCRYPT_NO_ERROR, "ScError = %08x", scError ); + + // Now check for success if we verify with both + + scError = SymCryptRsaPkcs1Verify( + pKey, + hash, sizeof( hash ), + sig, cbSig, + SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, + SymCryptSha256OidList, SYMCRYPT_SHA256_OID_COUNT, + 0 ); + CHECK( scError == SYMCRYPT_NO_ERROR, "?" ); + + SymCryptRsakeyFree( pKey ); + pKey = NULL; + } + + iprint( "\n" ); +} + +VOID +testRsaSignPss() +{ + iprint( " RsaSignPss+" ); + + BYTE sig[ RSAKEY_MAXKEYSIZE ]; + PSYMCRYPT_RSAKEY pKey = NULL; + BYTE hash[64]; + UINT32 cbModulus; + NTSTATUS ntStatus; + + + std::auto_ptr pRsaSignMultiImp; + pRsaSignMultiImp.reset( new RsaSignMultiImp( "RsaSignPss" ) ); + CHECK( pRsaSignMultiImp->m_imps.size() > 0, "No PSS impls?" ); + + GENRANDOM( hash, sizeof( hash ) ); + + for( int k = 0; k<20; k++ ) + { + pKey = rsaTestKeyRandom(); + cbModulus = SymCryptRsakeySizeofModulus( pKey ); + CHECK( cbModulus <= sizeof( sig ), "?" ); + + // Generate some random hash size/salt size values + UINT32 cbHash; + UINT32 cbSalt; + cbHash = g_rng.uint32() % sizeof( hash ); + cbHash = min( cbHash, cbModulus - 3); + cbSalt = g_rng.uint32() % (cbModulus - 2 - cbHash ); + + // The multi-imp sign automatically does a cross-verification of all + // implementations + ntStatus = pRsaSignMultiImp->sign( hash, cbHash, + "SHA256", + cbSalt, + sig, cbModulus ); + + CHECK( NT_SUCCESS( ntStatus ), "Signature failure" ); + + SymCryptRsakeyFree( pKey ); + pKey = NULL; + } + iprint( "\n" ); +} + +VOID +testRsaSignAlgorithms() +{ + String sep; + + rsaTestKeysGenerate(); + + // Uncomment this function to generate a new KAT file + // createKatFileRsaSign(); + + CHECK( g_nOutstandingCheckedAllocs == 0, "Memory leak" ); + testRsaSignKats(); + CHECK( g_nOutstandingCheckedAllocs == 0, "Memory leak" ); + + if( isAlgorithmPresent( "RsaSignPkcs1", FALSE ) ) + { + testRsaSignPkcs1(); + } + + if( isAlgorithmPresent( "RsaSignPss", FALSE ) ) + { + testRsaSignPss(); + } + + CHECK( g_nOutstandingCheckedAllocs == 0, "Memory leak" ); +} + diff --git a/unittest/symcryptunittest.rc b/unittest/symcryptunittest.rc index 99e0fd5..5f7e3ac 100644 --- a/unittest/symcryptunittest.rc +++ b/unittest/symcryptunittest.rc @@ -14,7 +14,8 @@ kat_kdf.dat KAT_KDF "..\kat_kdf.dat" kat_xts.dat KAT_XTS "..\kat_xts.dat" kat_ecdsa.dat KAT_ECDSA "..\kat_ecdsa.dat" kat_IEEE802_11SaeCustom.dat KAT_SAE_CUSTOM "..\kat_IEEE802_11SaeCustom.dat" - +kat_rsaSign.dat KAT_RSA_SIGN "..\kat_rsaSign.dat" +kat_rsaEnc.dat KAT_RSA_ENC "..\kat_rsaEnc.dat"