Merged PR 3919453: Modularize RSA tests

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
This commit is contained in:
Niels Ferguson 2019-10-24 01:49:21 +00:00
Родитель bc35cd8786
Коммит f87701444b
37 изменённых файлов: 6820 добавлений и 504 удалений

Просмотреть файл

@ -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

Просмотреть файл

@ -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.

Просмотреть файл

@ -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;
}

Просмотреть файл

@ -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.

Просмотреть файл

@ -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(

Просмотреть файл

@ -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" );

Просмотреть файл

@ -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)
{

Просмотреть файл

@ -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)
{

Просмотреть файл

@ -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)
{

Просмотреть файл

@ -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)
{

Просмотреть файл

@ -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<Implementation,Algorithm> 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<Implementation,Algorithm> state;
};
template< class Implementation, class Algorithm>
class EccImp: public EccImplementation
{
@ -1109,12 +1284,14 @@ const String ArithImp<Implementation, Algorithm>::s_algName = Algorithm::name;
template< class Implementation, class Algorithm>
const String ArithImp<Implementation, Algorithm>::s_modeName;
/*
template< class Implementation, class Algorithm>
const String RsaImp<Implementation, Algorithm>::s_impName = Implementation::name;
template< class Implementation, class Algorithm>
const String RsaImp<Implementation, Algorithm>::s_algName = Algorithm::name;
template< class Implementation, class Algorithm>
const String RsaImp<Implementation, Algorithm>::s_modeName;
*/
template< class Implementation, class Algorithm>
const String DlImp<Implementation, Algorithm>::s_impName = Implementation::name;
@ -1130,6 +1307,20 @@ const String EccImp<Implementation, Algorithm>::s_algName = Algorithm::name;
template< class Implementation, class Algorithm>
const String EccImp<Implementation, Algorithm>::s_modeName;
template< class Imp, class Alg>
const String RsaSignImp<Imp,Alg>::s_impName = Imp::name;
template< class Imp, class Alg>
const String RsaSignImp<Imp,Alg>::s_algName = Alg::name;
template< class Imp, class Alg>
const String RsaSignImp<Imp,Alg>::s_modeName;
template< class Imp, class Alg>
const String RsaEncImp<Imp,Alg>::s_impName = Imp::name;
template< class Imp, class Alg>
const String RsaEncImp<Imp,Alg>::s_algName = Alg::name;
template< class Imp, class Alg>
const String RsaEncImp<Imp,Alg>::s_modeName;
//
// Template declaration for performance functions (for those implementations that wish to use them)
//

Просмотреть файл

@ -128,3 +128,34 @@ public:
//
};
template<>
class RsaSignImpState<ImpCng, AlgRsaSignPkcs1> {
public:
BCRYPT_KEY_HANDLE hKey;
};
template<>
class RsaSignImpState<ImpCng, AlgRsaSignPss> {
public:
BCRYPT_KEY_HANDLE hKey;
};
template<>
class RsaEncImpState<ImpCng, AlgRsaEncRaw> {
public:
BCRYPT_KEY_HANDLE hKey;
};
template<>
class RsaEncImpState<ImpCng, AlgRsaEncPkcs1> {
public:
BCRYPT_KEY_HANDLE hKey;
};
template<>
class RsaEncImpState<ImpCng, AlgRsaEncOaep> {
public:
BCRYPT_KEY_HANDLE hKey;
};

Просмотреть файл

@ -10,6 +10,7 @@
#include <msbignum.h>
#include <ms_rsa.h>
#include <ecurve.h>
#include <ms_generic_ecc.h>
@ -17,3 +18,10 @@ class ImpMsBignum{
public:
static char * name;
};
template<>
class RsaEncImpState<ImpMsBignum, AlgRsaEncRaw> {
public:
SIZE_T cbKey; // Size of modulus
RSA_PRIVATE_KEY key;
};

Просмотреть файл

@ -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

Просмотреть файл

@ -272,3 +272,33 @@ class XtsImpState<ImpSc, AlgXtsAes> {
public:
SYMCRYPT_XTS_AES_EXPANDED_KEY key;
};
template<>
class RsaSignImpState<ImpSc, AlgRsaSignPkcs1> {
public:
PSYMCRYPT_RSAKEY pKey;
};
template<>
class RsaSignImpState<ImpSc, AlgRsaSignPss> {
public:
PSYMCRYPT_RSAKEY pKey;
};
template<>
class RsaEncImpState<ImpSc, AlgRsaEncRaw> {
public:
PSYMCRYPT_RSAKEY pKey;
};
template<>
class RsaEncImpState<ImpSc, AlgRsaEncPkcs1> {
public:
PSYMCRYPT_RSAKEY pKey;
};
template<>
class RsaEncImpState<ImpSc, AlgRsaEncOaep> {
public:
PSYMCRYPT_RSAKEY pKey;
};

Просмотреть файл

@ -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)

Просмотреть файл

@ -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 );

1120
unittest/kat_rsaenc.dat Normal file

Разница между файлами не показана из-за своего большого размера Загрузить разницу

822
unittest/kat_rsasign.dat Normal file
Просмотреть файл

@ -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

Просмотреть файл

@ -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

Просмотреть файл

@ -5,7 +5,8 @@
//
#include "precomp.h"
#include "capi_implementations.h"
#if INCLUDE_IMPL_CAPI
HCRYPTPROV g_capiProvider;
@ -543,7 +544,7 @@ addCapiAlgs()
addImplementationToGlobalList<StreamCipherImp<ImpCapi, AlgRc4>>();
}
#endif //INCLUDE_IMPL_CAPI

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -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<cbData; i++ )
{
fprintf( f, "%02x", pbData[i] );
}
fprintf( f, "\n" );
}
#if SYMCRYPT_CPU_X86
// XMM registers are never a problem on amd64, and we don't have the save-xmm asm code
VOID

Просмотреть файл

@ -5,6 +5,58 @@
PSTR testDriverName = TESTDRIVER_NAME;
const char * g_implementationNames[] =
{
ImpSc::name,
#if INCLUDE_IMPL_RSA32
ImpRsa32::name,
ImpRsa32b::name,
#endif
#if INCLUDE_IMPL_CAPI
ImpCapi::name,
#endif
#if INCLUDE_IMPL_CNG
ImpCng::name,
#endif
#if INCLUDE_IMPL_REF
ImpRef::name,
#endif
#if INCLUDE_IMPL_MSBIGNUM
ImpMsBignum::name,
#endif
NULL,
};
VOID
addAllAlgs()
{
addSymCryptAlgs();
if( !g_sgx )
{
// 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 INCLUDE_IMPL_RSA32
addRsa32Algs();
#endif
#if INCLUDE_IMPL_CAPI
addCapiAlgs();
#endif
}
#if INCLUDE_IMPL_CNG
addCngAlgs();
#endif
#if INCLUDE_IMPL_REF
addRefAlgs();
#endif
#if INCLUDE_IMPL_MSBIGNUM
addMsBignumAlgs();
#endif
}
DWORD WINAPI umThreadFunc( LPVOID param )
{
runTestThread( param );
@ -47,4 +99,4 @@ testMultiThread()
CloseHandle( threads[i] );
}
iprint( " done. %lld tests run.\n", g_nMultithreadTestsRun );
}
}

Просмотреть файл

@ -134,21 +134,140 @@ algImpDataPerfFunction< ImpMsBignum, AlgRsaEncRaw>( PBYTE buf1, PBYTE buf2, PBYT
}
template<>
RsaImp<ImpMsBignum, AlgRsaEncRaw>::RsaImp()
VOID
algImpDecryptPerfFunction< ImpMsBignum, AlgRsaEncRaw>( PBYTE buf1, PBYTE buf2, PBYTE buf3, SIZE_T dataSize )
{
m_perfDataFunction = &algImpDataPerfFunction <ImpMsBignum, AlgRsaEncRaw>;
m_perfDecryptFunction = NULL;
m_perfKeyFunction = &algImpKeyPerfFunction <ImpMsBignum, AlgRsaEncRaw>;
m_perfCleanFunction = &algImpCleanPerfFunction<ImpMsBignum, AlgRsaEncRaw>;
UNREFERENCED_PARAMETER( dataSize );
rsa_decryption(
*((PRSA_PRIVATE_KEY *) buf1),
buf3,
buf2 + dataSize,
&g_BignumCtx );
}
template<>
RsaImp<ImpMsBignum, AlgRsaEncRaw>::~RsaImp()
RsaEncImp<ImpMsBignum, AlgRsaEncRaw>::RsaEncImp()
{
m_perfDataFunction = &algImpDataPerfFunction <ImpMsBignum, AlgRsaEncRaw>;
m_perfDecryptFunction = &algImpDecryptPerfFunction< ImpMsBignum, AlgRsaEncRaw>;
m_perfKeyFunction = &algImpKeyPerfFunction <ImpMsBignum, AlgRsaEncRaw>;
m_perfCleanFunction = &algImpCleanPerfFunction<ImpMsBignum, AlgRsaEncRaw>;
SymCryptWipe( (PBYTE) &state.key, sizeof( state.key ) );
}
template<>
RsaEncImp<ImpMsBignum, AlgRsaEncRaw>::~RsaEncImp()
{
if( state.key.diglen_pubexp != 0 )
{
rsa_destruction( &state.key, &g_BignumCtx );
SymCryptWipe( (PBYTE) &state.key, sizeof( state.key ) );
}
}
template<>
NTSTATUS
RsaEncImp<ImpMsBignum, AlgRsaEncRaw>::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<ImpMsBignum, AlgRsaEncRaw>::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<ImpMsBignum, AlgRsaEncRaw>::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<ImpMsBignum, AlgRsaDecRaw>( 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<ImpMsBignum, AlgRsaDecRaw>::RsaImp()
{
@ -191,6 +311,7 @@ template<>
RsaImp<ImpMsBignum, AlgRsaDecRaw>::~RsaImp()
{
}
*/
//============================
@ -1298,8 +1419,7 @@ ArithImp<ImpMsBignum, AlgScsTable>::~ArithImp()
VOID
addMsBignumAlgs()
{
addImplementationToGlobalList<RsaImp<ImpMsBignum, AlgRsaEncRaw>>();
addImplementationToGlobalList<RsaImp<ImpMsBignum, AlgRsaDecRaw>>();
addImplementationToGlobalList<RsaEncImp<ImpMsBignum, AlgRsaEncRaw>>();
addImplementationToGlobalList<DlImp<ImpMsBignum, AlgDsaSign>>();
addImplementationToGlobalList<DlImp<ImpMsBignum, AlgDsaVerify>>();

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

@ -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<MacImp<ImpRef, AlgPoly1305>>();
}
#endif //INCLUDE_IMPL_REF

Просмотреть файл

@ -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<StreamCipherImp<ImpRsa32, AlgRc4>>();
}
#endif //INCLUDE_IMPL_RSA32

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -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 \

Просмотреть файл

@ -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" );
}
}

970
unittest/lib/testRsaEnc.cpp Normal file
Просмотреть файл

@ -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<RsaEncImplementation *> 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<RsaEncImplementation>( 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; i<MAX_RSA_TESTKEYS; i++ )
{
PRSAKEY_TESTBLOB pBlob = &g_RsaTestKeys[ i ];
createKatFileSingleRawEnc( f, pBlob );
}
fprintf( f, "\n\nrnd = 1\n" ); // Trigger random-key test; 1 = RAW
fprintf( f, "\n\n[RsaEncPkcs1]\n\n" );
for( int i=0; i<MAX_RSA_TESTKEYS; i++ )
{
PRSAKEY_TESTBLOB pBlob = &g_RsaTestKeys[ i ];
createKatFileSinglePkcs1Enc( f, pBlob );
}
fprintf( f, "\n\nrnd = 2\n" ); // Trigger random-key test, 2 = PKCS1
fprintf( f, "\n\n[RsaEncOaep]\n\n" );
for( int i=0; i<MAX_RSA_TESTKEYS; i++ )
{
PRSAKEY_TESTBLOB pBlob = &g_RsaTestKeys[ i ];
switch( g_rng.byte() % 5 )
{
case 0: createKatFileSingleOaep( f, pBlob, "MD5" , SymCryptMd5Algorithm, 16 ); break;
case 1: createKatFileSingleOaep( f, pBlob, "SHA1" , SymCryptSha1Algorithm, 20 ); break;
case 2: createKatFileSingleOaep( f, pBlob, "SHA256", SymCryptSha256Algorithm, 32 ); break;
case 3: createKatFileSingleOaep( f, pBlob, "SHA384", SymCryptSha384Algorithm, 48 ); break;
case 4: createKatFileSingleOaep( f, pBlob, "SHA512", SymCryptSha512Algorithm, 64 ); break;
}
}
fprintf( f, "\n\nrnd = 3\n" ); // Trigger random-key test, 3 = OAEP
// Generating test vectors is not normal program flow, so we abort here to avoid getting into
// non-standard states.
CHECK( FALSE, "Written test vector file" );
}
VOID
testRsaEncSingle(
RsaEncImplementation * pRsaEnc,
_In_ PCRSAKEY_TESTBLOB pcRsaKeyBlob,
_In_reads_( cbMsg ) PCBYTE pbMsg,
SIZE_T cbMsg,
_In_ PCSTR pcstrHashAlgName,
_In_reads_( cbLabel ) PCBYTE pbLabel,
SIZE_T cbLabel,
_In_reads_( cbCiphertext ) PCBYTE pbCiphertext,
SIZE_T cbCiphertext,
INT64 line )
{
NTSTATUS ntStatus;
BYTE buf[RSAKEY_MAXKEYSIZE];
SIZE_T cbRes;
SIZE_T cbKey;
//iprint( "Single... " );
cbKey = pcRsaKeyBlob->cbModulus;
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; i<MAX_RSA_TESTKEYS; i++ )
{
PRSAKEY_TESTBLOB pBlob = &g_RsaTestKeys[ i ];
ntStatus = pRsaEnc->setKey( 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<RsaEncMultiImp> 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<RsaEncMultiImp> 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; j<cbKey - 1; j++ )
{
CHECK( abCph[j] == 0, "Wrong ciphertext?" );
}
CHECK( abCph[cbKey-1] == i, "Wrong ciphertext?" );
}
}
CHECK( pRsaEncMultiImp->setKey( 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<sizeof( paddedData ); i++ )
{
do {
paddedData[i] = g_rng.byte();
} while( paddedData[i] == 0 );
}
paddedData[0] = 0;
paddedData[1] = 2;
paddedData[cbModulus - 1] = 0;
scError = SymCryptRsaRawEncrypt( pKey, paddedData, cbModulus, SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, 0, ciphertext, cbModulus );
CHECK( scError == SYMCRYPT_NO_ERROR, "?" );
scError = SymCryptRsaPkcs1Decrypt( pKey, ciphertext, cbModulus, SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, 0, res, cbModulus, &cbRes );
CHECK( scError == SYMCRYPT_NO_ERROR && cbRes == 0, "?" );
// Test first byte not zero
if( cbitModulus % 8 != 1 )
{
// Setting the first byte to 1 might now work if the modulus starts with 0x01, 0x00, ...
paddedData[0]++;
scError = SymCryptRsaRawEncrypt( pKey, paddedData, cbModulus, SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, 0, ciphertext, cbModulus );
CHECK( scError == SYMCRYPT_NO_ERROR, "?" );
scError = SymCryptRsaPkcs1Decrypt( pKey, ciphertext, cbModulus, SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, 0, res, cbModulus, &cbRes );
CHECK( scError == SYMCRYPT_INVALID_ARGUMENT, "?" );
paddedData[0]--;
}
// pick random nonzero b
do{ b = g_rng.byte(); } while( b==0 );
// Test second byte not 2
paddedData[1] ^= b;
scError = SymCryptRsaRawEncrypt( pKey, paddedData, cbModulus, SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, 0, ciphertext, cbModulus );
CHECK( scError == SYMCRYPT_NO_ERROR, "?" );
scError = SymCryptRsaPkcs1Decrypt( pKey, ciphertext, cbModulus, SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, 0, res, cbModulus, &cbRes );
CHECK( scError == SYMCRYPT_INVALID_ARGUMENT, "?" );
paddedData[1] ^= b;
// Test no zero byte
paddedData[cbModulus - 1] ^= b;
scError = SymCryptRsaRawEncrypt( pKey, paddedData, cbModulus, SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, 0, ciphertext, cbModulus );
CHECK( scError == SYMCRYPT_NO_ERROR, "?" );
scError = SymCryptRsaPkcs1Decrypt( pKey, ciphertext, cbModulus, SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, 0, res, cbModulus, &cbRes );
CHECK( scError == SYMCRYPT_INVALID_ARGUMENT, "?" );
paddedData[cbModulus - 1] ^= b;
// Set each subsequent byte to 0 and check result
for( UINT32 i = 2; i < cbModulus; i++ )
{
b = paddedData[ i ];
paddedData[i] = 0;
scError = SymCryptRsaRawEncrypt( pKey, paddedData, cbModulus, SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, 0, ciphertext, cbModulus );
CHECK( scError == SYMCRYPT_NO_ERROR, "?" );
scError = SymCryptRsaPkcs1Decrypt( pKey, ciphertext, cbModulus, SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, 0, res, cbModulus, &cbRes );
if( i <= 9 )
{
CHECK( scError == SYMCRYPT_INVALID_ARGUMENT, "No error when pkcs1 padding is too short" );
} else {
CHECK5( scError == SYMCRYPT_NO_ERROR && cbRes == cbModulus - i - 1, "Wrong length %d %d %d", cbModulus, i, cbRes );
// Now check for the buffer-too-small error
scError = SymCryptRsaPkcs1Decrypt( pKey, ciphertext, cbModulus, SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, 0, res, cbRes, &cbRes );
CHECK( scError == SYMCRYPT_NO_ERROR, "?" );
if( cbRes > 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<RsaEncMultiImp> 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" );
}

1028
unittest/lib/testRsaSign.cpp Normal file

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -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"