📄 fipstest.c
字号:
des_status = DES_Decrypt( des_context, des_computed_plaintext, &des_bytes_decrypted, FIPS_DES_DECRYPT_LENGTH, des_ecb_known_ciphertext, FIPS_DES_ENCRYPT_LENGTH ); DES_DestroyContext( des_context, PR_TRUE ); if( ( des_status != SECSuccess ) || ( des_bytes_decrypted != FIPS_DES_DECRYPT_LENGTH ) || ( PORT_Memcmp( des_computed_plaintext, des_ecb_known_plaintext, FIPS_DES_DECRYPT_LENGTH ) != 0 ) ) return( CKR_DEVICE_ERROR ); /******************************************************/ /* DES-CBC Single-Round Known Answer Encryption Test. */ /******************************************************/ des_context = DES_CreateContext( des_known_key, des_cbc_known_initialization_vector, NSS_DES_CBC, PR_TRUE ); if( des_context == NULL ) return( CKR_HOST_MEMORY ); des_status = DES_Encrypt( des_context, des_computed_ciphertext, &des_bytes_encrypted, FIPS_DES_ENCRYPT_LENGTH, des_cbc_known_plaintext, FIPS_DES_DECRYPT_LENGTH ); DES_DestroyContext( des_context, PR_TRUE ); if( ( des_status != SECSuccess ) || ( des_bytes_encrypted != FIPS_DES_ENCRYPT_LENGTH ) || ( PORT_Memcmp( des_computed_ciphertext, des_cbc_known_ciphertext, FIPS_DES_ENCRYPT_LENGTH ) != 0 ) ) return( CKR_DEVICE_ERROR ); /******************************************************/ /* DES-CBC Single-Round Known Answer Decryption Test. */ /******************************************************/ des_context = DES_CreateContext( des_known_key, des_cbc_known_initialization_vector, NSS_DES_CBC, PR_FALSE ); if( des_context == NULL ) return( CKR_HOST_MEMORY ); des_status = DES_Decrypt( des_context, des_computed_plaintext, &des_bytes_decrypted, FIPS_DES_DECRYPT_LENGTH, des_cbc_known_ciphertext, FIPS_DES_ENCRYPT_LENGTH ); DES_DestroyContext( des_context, PR_TRUE ); if( ( des_status != SECSuccess ) || ( des_bytes_decrypted != FIPS_DES_DECRYPT_LENGTH ) || ( PORT_Memcmp( des_computed_plaintext, des_cbc_known_plaintext, FIPS_DES_DECRYPT_LENGTH ) != 0 ) ) return( CKR_DEVICE_ERROR ); return( CKR_OK );}static CK_RVpk11_fips_DES3_PowerUpSelfTest( void ){ /* DES3 Known Key (56-bits). */ static PRUint8 des3_known_key[] = { "ANSI Triple-DES Key Data" }; /* DES3-CBC Known Initialization Vector (64-bits). */ static PRUint8 des3_cbc_known_initialization_vector[] = { "Security" }; /* DES3 Known Plaintext (64-bits). */ static PRUint8 des3_ecb_known_plaintext[] = { "Netscape" }; static PRUint8 des3_cbc_known_plaintext[] = { "Netscape" }; /* DES3 Known Ciphertext (64-bits). */ static PRUint8 des3_ecb_known_ciphertext[] = { 0x55,0x8e,0xad,0x3c,0xee,0x49,0x69,0xbe}; static PRUint8 des3_cbc_known_ciphertext[] = { 0x43,0xdc,0x6a,0xc1,0xaf,0xa6,0x32,0xf5}; /* DES3 variables. */ PRUint8 des3_computed_ciphertext[FIPS_DES3_ENCRYPT_LENGTH]; PRUint8 des3_computed_plaintext[FIPS_DES3_DECRYPT_LENGTH]; DESContext * des3_context; unsigned int des3_bytes_encrypted; unsigned int des3_bytes_decrypted; SECStatus des3_status; /*******************************************************/ /* DES3-ECB Single-Round Known Answer Encryption Test. */ /*******************************************************/ des3_context = DES_CreateContext( des3_known_key, NULL, NSS_DES_EDE3, PR_TRUE ); if( des3_context == NULL ) return( CKR_HOST_MEMORY ); des3_status = DES_Encrypt( des3_context, des3_computed_ciphertext, &des3_bytes_encrypted, FIPS_DES3_ENCRYPT_LENGTH, des3_ecb_known_plaintext, FIPS_DES3_DECRYPT_LENGTH ); DES_DestroyContext( des3_context, PR_TRUE ); if( ( des3_status != SECSuccess ) || ( des3_bytes_encrypted != FIPS_DES3_ENCRYPT_LENGTH ) || ( PORT_Memcmp( des3_computed_ciphertext, des3_ecb_known_ciphertext, FIPS_DES3_ENCRYPT_LENGTH ) != 0 ) ) return( CKR_DEVICE_ERROR ); /*******************************************************/ /* DES3-ECB Single-Round Known Answer Decryption Test. */ /*******************************************************/ des3_context = DES_CreateContext( des3_known_key, NULL, NSS_DES_EDE3, PR_FALSE ); if( des3_context == NULL ) return( CKR_HOST_MEMORY ); des3_status = DES_Decrypt( des3_context, des3_computed_plaintext, &des3_bytes_decrypted, FIPS_DES3_DECRYPT_LENGTH, des3_ecb_known_ciphertext, FIPS_DES3_ENCRYPT_LENGTH ); DES_DestroyContext( des3_context, PR_TRUE ); if( ( des3_status != SECSuccess ) || ( des3_bytes_decrypted != FIPS_DES3_DECRYPT_LENGTH ) || ( PORT_Memcmp( des3_computed_plaintext, des3_ecb_known_plaintext, FIPS_DES3_DECRYPT_LENGTH ) != 0 ) ) return( CKR_DEVICE_ERROR ); /*******************************************************/ /* DES3-CBC Single-Round Known Answer Encryption Test. */ /*******************************************************/ des3_context = DES_CreateContext( des3_known_key, des3_cbc_known_initialization_vector, NSS_DES_EDE3_CBC, PR_TRUE ); if( des3_context == NULL ) return( CKR_HOST_MEMORY ); des3_status = DES_Encrypt( des3_context, des3_computed_ciphertext, &des3_bytes_encrypted, FIPS_DES3_ENCRYPT_LENGTH, des3_cbc_known_plaintext, FIPS_DES3_DECRYPT_LENGTH ); DES_DestroyContext( des3_context, PR_TRUE ); if( ( des3_status != SECSuccess ) || ( des3_bytes_encrypted != FIPS_DES3_ENCRYPT_LENGTH ) || ( PORT_Memcmp( des3_computed_ciphertext, des3_cbc_known_ciphertext, FIPS_DES3_ENCRYPT_LENGTH ) != 0 ) ) return( CKR_DEVICE_ERROR ); /*******************************************************/ /* DES3-CBC Single-Round Known Answer Decryption Test. */ /*******************************************************/ des3_context = DES_CreateContext( des3_known_key, des3_cbc_known_initialization_vector, NSS_DES_EDE3_CBC, PR_FALSE ); if( des3_context == NULL ) return( CKR_HOST_MEMORY ); des3_status = DES_Decrypt( des3_context, des3_computed_plaintext, &des3_bytes_decrypted, FIPS_DES3_DECRYPT_LENGTH, des3_cbc_known_ciphertext, FIPS_DES3_ENCRYPT_LENGTH ); DES_DestroyContext( des3_context, PR_TRUE ); if( ( des3_status != SECSuccess ) || ( des3_bytes_decrypted != FIPS_DES3_DECRYPT_LENGTH ) || ( PORT_Memcmp( des3_computed_plaintext, des3_cbc_known_plaintext, FIPS_DES3_DECRYPT_LENGTH ) != 0 ) ) return( CKR_DEVICE_ERROR ); return( CKR_OK );}static CK_RVpk11_fips_MD2_PowerUpSelfTest( void ){ /* MD2 Known Hash Message (512-bits). */ static PRUint8 md2_known_hash_message[] = { "The test message for the MD2, MD5, and SHA-1 hashing algorithms." }; /* MD2 Known Digest Message (128-bits). */ static PRUint8 md2_known_digest[] = { 0x41,0x5a,0x12,0xb2,0x3f,0x28,0x97,0x17, 0x0c,0x71,0x4e,0xcc,0x40,0xc8,0x1d,0x1b}; /* MD2 variables. */ MD2Context * md2_context; unsigned int md2_bytes_hashed; PRUint8 md2_computed_digest[MD2_LENGTH]; /***********************************************/ /* MD2 Single-Round Known Answer Hashing Test. */ /***********************************************/ md2_context = MD2_NewContext(); if( md2_context == NULL ) return( CKR_HOST_MEMORY ); MD2_Begin( md2_context ); MD2_Update( md2_context, md2_known_hash_message, FIPS_MD2_HASH_MESSAGE_LENGTH ); MD2_End( md2_context, md2_computed_digest, &md2_bytes_hashed, MD2_LENGTH ); MD2_DestroyContext( md2_context , PR_TRUE ); if( ( md2_bytes_hashed != MD2_LENGTH ) || ( PORT_Memcmp( md2_computed_digest, md2_known_digest, MD2_LENGTH ) != 0 ) ) return( CKR_DEVICE_ERROR ); return( CKR_OK );}static CK_RVpk11_fips_MD5_PowerUpSelfTest( void ){ /* MD5 Known Hash Message (512-bits). */ static PRUint8 md5_known_hash_message[] = { "The test message for the MD2, MD5, and SHA-1 hashing algorithms." }; /* MD5 Known Digest Message (128-bits). */ static PRUint8 md5_known_digest[] = { 0x25,0xc8,0xc0,0x10,0xc5,0x6e,0x68,0x28, 0x28,0xa4,0xa5,0xd2,0x98,0x9a,0xea,0x2d}; /* MD5 variables. */ PRUint8 md5_computed_digest[MD5_LENGTH]; SECStatus md5_status; /***********************************************/ /* MD5 Single-Round Known Answer Hashing Test. */ /***********************************************/ md5_status = MD5_HashBuf( md5_computed_digest, md5_known_hash_message, FIPS_MD5_HASH_MESSAGE_LENGTH ); if( ( md5_status != SECSuccess ) || ( PORT_Memcmp( md5_computed_digest, md5_known_digest, MD5_LENGTH ) != 0 ) ) return( CKR_DEVICE_ERROR ); return( CKR_OK );}static CK_RVpk11_fips_SHA1_PowerUpSelfTest( void ){ /* SHA-1 Known Hash Message (512-bits). */ static PRUint8 sha1_known_hash_message[] = { "The test message for the MD2, MD5, and SHA-1 hashing algorithms." }; /* SHA-1 Known Digest Message (160-bits). */ static PRUint8 sha1_known_digest[] = { 0x0a,0x6d,0x07,0xba,0x1e,0xbd,0x8a,0x1b, 0x72,0xf6,0xc7,0x22,0xf1,0x27,0x9f,0xf0, 0xe0,0x68,0x47,0x7a}; /* SHA-1 variables. */ PRUint8 sha1_computed_digest[SHA1_LENGTH]; SECStatus sha1_status; /*************************************************/ /* SHA-1 Single-Round Known Answer Hashing Test. */ /*************************************************/ sha1_status = SHA1_HashBuf( sha1_computed_digest, sha1_known_hash_message, FIPS_SHA1_HASH_MESSAGE_LENGTH ); if( ( sha1_status != SECSuccess ) || ( PORT_Memcmp( sha1_computed_digest, sha1_known_digest, SHA1_LENGTH ) != 0 ) ) return( CKR_DEVICE_ERROR ); return( CKR_OK );}static CK_RVpk11_fips_RSA_PowerUpSelfTest( void ){ /* RSA Known Modulus used in both Public/Private Key Values (520-bits). */ static PRUint8 rsa_modulus[FIPS_RSA_MODULUS_LENGTH] = { 0x00,0xa1,0xe9,0x5e,0x66,0x88,0xe2,0xf2, 0x2b,0xe7,0x70,0x36,0x33,0xbc,0xeb,0x55, 0x55,0xf1,0x60,0x18,0x3c,0xfb,0xd2,0x79, 0xf6,0xc4,0xb8,0x09,0xe3,0x12,0xf6,0x63, 0x6d,0xc7,0x8e,0x19,0xc0,0x0e,0x10,0x78, 0xc1,0xfe,0x2a,0x41,0x74,0x2d,0xf7,0xc4, 0x69,0xa7,0x3c,0xbc,0x8a,0xc8,0x31,0x2b, 0x4f,0x60,0xf0,0xf1,0xec,0x5a,0x29,0xec, 0x6b}; /* RSA Known Public Key Values (8-bits). */ static PRUint8 rsa_public_exponent[] = { 0x03 }; /* RSA Known Private Key Values (version is 8-bits), */ /* (private exponent is 512-bits), */ /* (private prime0 is 264-bits), */ /* (private prime1 is 264-bits), */ /* (private prime exponent0 is 264-bits), */ /* (private prime exponent1 is 264-bits), */ /* and (private coefficient is 256-bits). */ static PRUint8 rsa_version[] = { 0x00 }; static PRUint8 rsa_private_exponent[FIPS_RSA_PRIVATE_EXPONENT_LENGTH] = { 0x6b,0xf0,0xe9,0x99,0xb0,0x97,0x4c,0x1d, 0x44,0xf5,0x79,0x77,0xd3,0x47,0x8e,0x39, 0x4b,0x95,0x65,0x7d,0xfd,0x36,0xfb,0xf9, 0xd8,0x7a,0xb1,0x42,0x0c,0xa4,0x42,0x48, 0x20,0x1c,0x6b,0x7d,0x5d,0xa3,0x58,0xd6, 0x95,0xd6,0x41,0xe3,0xd6,0x73,0xad,0xdb, 0x3b,0x89,0x00,0x8a,0xcd,0x1d,0xb9,0x06, 0xac,0xac,0x0e,0x02,0x72,0x1c,0xf8,0xab }; static PRUint8 rsa_prime0[FIPS_RSA_PRIME0_LENGTH] = { 0x00,0xd2,0x2c,0x9d,0xef,0x7c,0x8f,0x58, 0x93,0x19,0xa1,0x77,0x0e,0x38,0x3e,0x85, 0xb4,0xaf,0xcc,0x99,0xa5,0x43,0xbf,0x97, 0xdc,0x46,0xb8,0x3f,0x6e,0x85,0x18,0x00, 0x81}; static PRUint8 rsa_prime1[FIPS_RSA_PRIME1_LENGTH] = { 0x00,0xc5,0x36,0xda,0x94,0x85,0x0c,0x1a, 0xed,0x03,0xc7,0x67,0x90,0x34,0x0b,0xb9, 0xec,0x1e,0x22,0xa2,0x15,0x50,0xc4,0xfd, 0xe9,0x17,0x36,0x9d,0x7a,0x29,0xe6,0x76, 0xeb}; static PRUint8 rsa_exponent0[FIPS_RSA_EXPONENT0_LENGTH] = { 0x00,0x8c,0x1d,0xbe,0x9f,0xa8, 0x5f,0x90,0x62,0x11,0x16,0x4f, 0x5e,0xd0,0x29,0xae,0x78,0x75, 0x33,0x11,0x18,0xd7,0xd5,0x0f, 0xe8,0x2f,0x25,0x7f,0x9f,0x03, 0x65,0x55,0xab}; static PRUint8 rsa_exponent1[FIPS_RSA_EXPONENT1_LENGTH] = { 0x00,0x83,0x79,0xe7,0x0d,0xae, 0x08,0x11,0xf3,0x57,0xda,0x45,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -