⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fipstest.c

📁 支持SSL v2/v3, TLS, PKCS #5, PKCS #7, PKCS #11, PKCS #12, S/MIME, X.509v3证书等安全协议或标准的开发库编译用到NSPR
💻 C
📖 第 1 页 / 共 3 页
字号:
					 0x0a,0xcd,0x5d,0x26,0x9d,0x69,					 0x6c,0x6c,0x0e,0x35,0xd8,0xa9,					 0x46,0x0f,0x79,0xbe,0x51,0x71,					 0x44,0x4f,0x47};    static PRUint8 rsa_coefficient[FIPS_RSA_COEFFICIENT_LENGTH] = {					 0x54,0x8d,0xb8,0xdc,0x8b,0xde,0xbb,					 0x08,0xc9,0x67,0xb7,0xa9,0x5f,0xa5,					 0xc4,0x5e,0x67,0xaa,0xfe,0x1a,0x08,					 0xeb,0x48,0x43,0xcb,0xb0,0xb9,0x38,					 0x3a,0x31,0x39,0xde};    /* RSA Known Plaintext (512-bits). */    static PRUint8 rsa_known_plaintext[] = {                                         "Known plaintext utilized for RSA"                                         " Encryption and Decryption test." };    /* RSA Known Ciphertext (512-bits). */    static PRUint8 rsa_known_ciphertext[] = {				      0x12,0x80,0x3a,0x53,0xee,0x93,0x81,0xa5,				      0xf7,0x40,0xc5,0xb1,0xef,0xd9,0x27,0xaf,				      0xef,0x4b,0x87,0x44,0x00,0xd0,0xda,0xcf,				      0x10,0x57,0x4c,0xd5,0xc3,0xed,0x84,0xdc,				      0x74,0x03,0x19,0x69,0x2c,0xd6,0x54,0x3e,				      0xd2,0xe3,0x90,0xb6,0x67,0x91,0x2f,0x1f,				      0x54,0x13,0x99,0x00,0x0b,0xfd,0x52,0x7f,				      0xd8,0xc6,0xdb,0x8a,0xfe,0x06,0xf3,0xb1};    /* RSA Known Message (128-bits). */    static PRUint8 rsa_known_message[]  = { "Netscape Forever" };    /* RSA Known Signed Hash (512-bits). */    static PRUint8 rsa_known_signature[] = {				     0x27,0x23,0xa6,0x71,0x57,0xc8,0x70,0x5f,				     0x70,0x0e,0x06,0x7b,0x96,0x6a,0xaa,0x41,				     0x6e,0xab,0x67,0x4b,0x5f,0x76,0xc4,0x53,				     0x23,0xd7,0x57,0x7a,0x3a,0xbc,0x4c,0x27,				     0x65,0xca,0xde,0x9f,0xd3,0x1d,0xa4,0x5a,				     0xf9,0x8f,0xb2,0x05,0xa3,0x86,0xf9,0x66,				     0x55,0x4c,0x68,0x50,0x66,0xa4,0xe9,0x17,				     0x45,0x11,0xb8,0x1a,0xfc,0xbc,0x79,0x3b};    static RSAPublicKey    bl_public_key = { NULL,       { FIPS_RSA_TYPE, rsa_modulus,         FIPS_RSA_MODULUS_LENGTH },      { FIPS_RSA_TYPE, rsa_public_exponent, FIPS_RSA_PUBLIC_EXPONENT_LENGTH }    };    static RSAPrivateKey   bl_private_key = { NULL,      { FIPS_RSA_TYPE, rsa_version,          FIPS_RSA_PRIVATE_VERSION_LENGTH },      { FIPS_RSA_TYPE, rsa_modulus,          FIPS_RSA_MODULUS_LENGTH },      { FIPS_RSA_TYPE, rsa_public_exponent,  FIPS_RSA_PUBLIC_EXPONENT_LENGTH },      { FIPS_RSA_TYPE, rsa_private_exponent, FIPS_RSA_PRIVATE_EXPONENT_LENGTH },      { FIPS_RSA_TYPE, rsa_prime0,           FIPS_RSA_PRIME0_LENGTH },      { FIPS_RSA_TYPE, rsa_prime1,           FIPS_RSA_PRIME1_LENGTH },      { FIPS_RSA_TYPE, rsa_exponent0,        FIPS_RSA_EXPONENT0_LENGTH },      { FIPS_RSA_TYPE, rsa_exponent1,        FIPS_RSA_EXPONENT1_LENGTH },      { FIPS_RSA_TYPE, rsa_coefficient,      FIPS_RSA_COEFFICIENT_LENGTH }    };    /* RSA variables. */#ifdef CREATE_TEMP_ARENAS    PLArenaPool *         rsa_public_arena;    PLArenaPool *         rsa_private_arena;#endif    SECKEYLowPublicKey *  rsa_public_key;    SECKEYLowPrivateKey * rsa_private_key;    unsigned int          rsa_bytes_signed;    SECStatus             rsa_status;    SECKEYLowPublicKey    low_public_key   = { NULL, rsaKey, };    SECKEYLowPrivateKey   low_private_key  = { NULL, rsaKey, };    PRUint8               rsa_computed_ciphertext[FIPS_RSA_ENCRYPT_LENGTH];    PRUint8               rsa_computed_plaintext[FIPS_RSA_DECRYPT_LENGTH];    PRUint8               rsa_computed_signature[FIPS_RSA_SIGNATURE_LENGTH];    /****************************************/    /* Compose RSA Public/Private Key Pair. */    /****************************************/    low_public_key.u.rsa  = bl_public_key;    low_private_key.u.rsa = bl_private_key;    rsa_public_key  = &low_public_key;    rsa_private_key = &low_private_key;#ifdef CREATE_TEMP_ARENAS    /* Create some space for the RSA public key. */    rsa_public_arena = PORT_NewArena( NSS_SOFTOKEN_DEFAULT_CHUNKSIZE );    if( rsa_public_arena == NULL ) {        PORT_SetError( SEC_ERROR_NO_MEMORY );        return( CKR_HOST_MEMORY );    }    /* Create some space for the RSA private key. */    rsa_private_arena = PORT_NewArena( NSS_SOFTOKEN_DEFAULT_CHUNKSIZE );    if( rsa_private_arena == NULL ) {        PORT_FreeArena( rsa_public_arena, PR_TRUE );        PORT_SetError( SEC_ERROR_NO_MEMORY );        return( CKR_HOST_MEMORY );    }    rsa_public_key->arena = rsa_public_arena;    rsa_private_key->arena = rsa_private_arena;#endif    /**************************************************/    /* RSA Single-Round Known Answer Encryption Test. */    /**************************************************/    /* Perform RSA Public Key Encryption. */    rsa_status = RSA_PublicKeyOp(&rsa_public_key->u.rsa,                                  rsa_computed_ciphertext, rsa_known_plaintext);    if( ( rsa_status != SECSuccess ) ||        ( PORT_Memcmp( rsa_computed_ciphertext, rsa_known_ciphertext,                       FIPS_RSA_ENCRYPT_LENGTH ) != 0 ) )        goto rsa_loser;    /**************************************************/    /* RSA Single-Round Known Answer Decryption Test. */    /**************************************************/    /* Perform RSA Private Key Decryption. */    rsa_status = RSA_PrivateKeyOp(&rsa_private_key->u.rsa,                                   rsa_computed_plaintext, rsa_known_ciphertext);    if( ( rsa_status != SECSuccess ) ||        ( PORT_Memcmp( rsa_computed_plaintext, rsa_known_plaintext,                       FIPS_RSA_DECRYPT_LENGTH ) != 0 ) )        goto rsa_loser;    /*************************************************/    /* RSA Single-Round Known Answer Signature Test. */    /*************************************************/    /* Perform RSA signature with the RSA private key. */    rsa_status = RSA_Sign( rsa_private_key, rsa_computed_signature,                           &rsa_bytes_signed,                           FIPS_RSA_SIGNATURE_LENGTH, rsa_known_message,                           FIPS_RSA_MESSAGE_LENGTH );    if( ( rsa_status != SECSuccess ) ||        ( rsa_bytes_signed != FIPS_RSA_SIGNATURE_LENGTH ) ||        ( PORT_Memcmp( rsa_computed_signature, rsa_known_signature,                       FIPS_RSA_SIGNATURE_LENGTH ) != 0 ) )        goto rsa_loser;    /****************************************************/    /* RSA Single-Round Known Answer Verification Test. */    /****************************************************/    /* Perform RSA verification with the RSA public key. */    rsa_status = RSA_CheckSign( rsa_public_key,                                rsa_computed_signature,                                FIPS_RSA_SIGNATURE_LENGTH,                                rsa_known_message,                                FIPS_RSA_MESSAGE_LENGTH );    if( rsa_status != SECSuccess )        goto rsa_loser;    /* Dispose of all RSA key material. */    SECKEY_LowDestroyPublicKey( rsa_public_key );    SECKEY_LowDestroyPrivateKey( rsa_private_key );    return( CKR_OK );rsa_loser:    SECKEY_LowDestroyPublicKey( rsa_public_key );    SECKEY_LowDestroyPrivateKey( rsa_private_key );    return( CKR_DEVICE_ERROR );}static CK_RVpk11_fips_DSA_PowerUpSelfTest( void ){    /* DSA Known P (512-bits), Q (160-bits), and G (512-bits) Values. */    static PRUint8 dsa_P[] = {                           0x8d,0xf2,0xa4,0x94,0x49,0x22,0x76,0xaa,                           0x3d,0x25,0x75,0x9b,0xb0,0x68,0x69,0xcb,                           0xea,0xc0,0xd8,0x3a,0xfb,0x8d,0x0c,0xf7,                           0xcb,0xb8,0x32,0x4f,0x0d,0x78,0x82,0xe5,                           0xd0,0x76,0x2f,0xc5,0xb7,0x21,0x0e,0xaf,                           0xc2,0xe9,0xad,0xac,0x32,0xab,0x7a,0xac,                           0x49,0x69,0x3d,0xfb,0xf8,0x37,0x24,0xc2,                           0xec,0x07,0x36,0xee,0x31,0xc8,0x02,0x91};    static PRUint8 dsa_Q[] = {                           0xc7,0x73,0x21,0x8c,0x73,0x7e,0xc8,0xee,                           0x99,0x3b,0x4f,0x2d,0xed,0x30,0xf4,0x8e,                           0xda,0xce,0x91,0x5f};    static PRUint8 dsa_G[] = {                           0x62,0x6d,0x02,0x78,0x39,0xea,0x0a,0x13,                           0x41,0x31,0x63,0xa5,0x5b,0x4c,0xb5,0x00,                           0x29,0x9d,0x55,0x22,0x95,0x6c,0xef,0xcb,                           0x3b,0xff,0x10,0xf3,0x99,0xce,0x2c,0x2e,                           0x71,0xcb,0x9d,0xe5,0xfa,0x24,0xba,0xbf,                           0x58,0xe5,0xb7,0x95,0x21,0x92,0x5c,0x9c,                           0xc4,0x2e,0x9f,0x6f,0x46,0x4b,0x08,0x8c,                           0xc5,0x72,0xaf,0x53,0xe6,0xd7,0x88,0x02};    /* DSA Known Random Values (known random key block       is 160-bits)  */    /*                     and (known random signature block is 160-bits). */    static PRUint8 dsa_known_random_key_block[] = {                                                      "Mozilla Rules World!"};    static PRUint8 dsa_known_random_signature_block[] = {                                                      "Random DSA Signature"};    /* DSA Known Digest (160-bits) */    static PRUint8 dsa_known_digest[] = { "DSA Signature Digest" };    /* DSA Known Signature (320-bits). */    static PRUint8 dsa_known_signature[] = {			     0x39,0x0d,0x84,0xb1,0xf7,0x52,0x89,0xba,			     0xec,0x1e,0xa8,0xe2,0x00,0x8e,0x37,0x8f,			     0xc2,0xf5,0xf8,0x70,0x11,0xa8,0xc7,0x02,			     0x0e,0x75,0xcf,0x6b,0x54,0x4a,0x52,0xe8,			     0xd8,0x6d,0x4a,0xe8,0xee,0x56,0x8e,0x59};    /* DSA variables. */    DSAPrivateKey *        dsa_private_key;    SECStatus              dsa_status;    SECItem                dsa_signature_item;    SECItem                dsa_digest_item;    DSAPublicKey           dsa_public_key;    PRUint8                dsa_computed_signature[FIPS_DSA_SIGNATURE_LENGTH];    static PQGParams       dsa_pqg = { NULL,			    { FIPS_DSA_TYPE, dsa_P, FIPS_DSA_PRIME_LENGTH },			    { FIPS_DSA_TYPE, dsa_Q, FIPS_DSA_SUBPRIME_LENGTH },			    { FIPS_DSA_TYPE, dsa_G, FIPS_DSA_BASE_LENGTH }};    /*******************************************/    /* Generate a DSA public/private key pair. */    /*******************************************/    /* Generate a DSA public/private key pair. */    dsa_status = DSA_NewKeyFromSeed(&dsa_pqg, dsa_known_random_key_block,                                    &dsa_private_key);    if( dsa_status != SECSuccess )	return( CKR_HOST_MEMORY );    /* construct public key from private key. */    dsa_public_key.params      = dsa_private_key->params;    dsa_public_key.publicValue = dsa_private_key->publicValue;    /*************************************************/    /* DSA Single-Round Known Answer Signature Test. */    /*************************************************/    dsa_signature_item.data = dsa_computed_signature;    dsa_signature_item.len  = sizeof dsa_computed_signature;    dsa_digest_item.data    = dsa_known_digest;    dsa_digest_item.len     = SHA1_LENGTH;    /* Perform DSA signature process. */    dsa_status = DSA_SignDigestWithSeed( dsa_private_key,                                          &dsa_signature_item,					 &dsa_digest_item,					 dsa_known_random_signature_block );    if( ( dsa_status != SECSuccess ) ||        ( dsa_signature_item.len != FIPS_DSA_SIGNATURE_LENGTH ) ||        ( PORT_Memcmp( dsa_computed_signature, dsa_known_signature,                       FIPS_DSA_SIGNATURE_LENGTH ) != 0 ) ) {        dsa_status = SECFailure;    } else {    /****************************************************/    /* DSA Single-Round Known Answer Verification Test. */    /****************************************************/    /* Perform DSA verification process. */    dsa_status = DSA_VerifyDigest( &dsa_public_key,                                    &dsa_signature_item,				   &dsa_digest_item);    }    PORT_FreeArena(dsa_private_key->params.arena, PR_TRUE);    /* Don't free public key, it uses same arena as private key */    /* Verify DSA signature. */    if( dsa_status != SECSuccess )        return( CKR_DEVICE_ERROR );    return( CKR_OK );}CK_RVpk11_fipsPowerUpSelfTest( void ){    CK_RV rv;    /* RC2 Power-Up SelfTest(s). */    rv = pk11_fips_RC2_PowerUpSelfTest();    if( rv != CKR_OK )        return rv;    /* RC4 Power-Up SelfTest(s). */    rv = pk11_fips_RC4_PowerUpSelfTest();    if( rv != CKR_OK )        return rv;    /* DES Power-Up SelfTest(s). */    rv = pk11_fips_DES_PowerUpSelfTest();    if( rv != CKR_OK )        return rv;    /* DES3 Power-Up SelfTest(s). */    rv = pk11_fips_DES3_PowerUpSelfTest();    if( rv != CKR_OK )        return rv;    /* MD2 Power-Up SelfTest(s). */    rv = pk11_fips_MD2_PowerUpSelfTest();    if( rv != CKR_OK )        return rv;    /* MD5 Power-Up SelfTest(s). */    rv = pk11_fips_MD5_PowerUpSelfTest();    if( rv != CKR_OK )        return rv;    /* SHA-1 Power-Up SelfTest(s). */    rv = pk11_fips_SHA1_PowerUpSelfTest();    if( rv != CKR_OK )        return rv;    /* RSA Power-Up SelfTest(s). */    rv = pk11_fips_RSA_PowerUpSelfTest();    if( rv != CKR_OK )        return rv;    /* DSA Power-Up SelfTest(s). */    rv = pk11_fips_DSA_PowerUpSelfTest();    if( rv != CKR_OK )        return rv;    /* Passed Power-Up SelfTest(s). */    return( CKR_OK );}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -