📄 fipstest.c
字号:
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 + -