@@ -1724,6 +1724,69 @@ void ObjectTests::testDefaultRSAPubAttributes()
17241724 checkCommonRSAPublicKeyAttributes (hSession, hObject, pN, sizeof (pN), 512 , pE, sizeof (pE));
17251725}
17261726
1727+ void ObjectTests::testDefaultRSAPubAttributesWithDates ()
1728+ {
1729+ CK_RV rv;
1730+ CK_SESSION_HANDLE hSession;
1731+ CK_OBJECT_HANDLE hObject = CK_INVALID_HANDLE;
1732+
1733+ // Minimal RSA public key object
1734+ CK_OBJECT_CLASS objClass = CKO_PUBLIC_KEY;
1735+ CK_KEY_TYPE objType = CKK_RSA;
1736+ CK_BYTE pN[] = { 0xC6 , 0x47 , 0xDD , 0x74 , 0x3B , 0xCB , 0xDC , 0x6F , 0xCE , 0xA7 ,
1737+ 0xF0 , 0x5F , 0x29 , 0x4B , 0x27 , 0x00 , 0xCC , 0x92 , 0xE9 , 0x20 ,
1738+ 0x8A , 0x2C , 0x87 , 0x36 , 0x47 , 0x24 , 0xB0 , 0xD5 , 0x7D , 0xB0 ,
1739+ 0x92 , 0x01 , 0xA0 , 0xA3 , 0x55 , 0x2E , 0x3F , 0xFE , 0xA7 , 0x4C ,
1740+ 0x4B , 0x3F , 0x9D , 0x4E , 0xCB , 0x78 , 0x12 , 0xA9 , 0x42 , 0xAD ,
1741+ 0x51 , 0x1F , 0x3B , 0xBD , 0x3D , 0x6A , 0xE5 , 0x38 , 0xB7 , 0x45 ,
1742+ 0x65 , 0x50 , 0x30 , 0x35 };
1743+ CK_BYTE pE[] = { 0x01 , 0x00 , 0x01 };
1744+ CK_DATE startDate = {
1745+ {' 2' , ' 0' , ' 2' , ' 2' },
1746+ {' 0' , ' 1' },
1747+ {' 0' , ' 1' }
1748+ };
1749+ CK_DATE endDate = {
1750+ {' 3' , ' 9' , ' 9' , ' 9' },
1751+ {' 1' , ' 2' },
1752+ {' 3' , ' 1' }
1753+ };
1754+ CK_ATTRIBUTE objTemplate[] = {
1755+ { CKA_CLASS, &objClass, sizeof (objClass) },
1756+ { CKA_KEY_TYPE, &objType, sizeof (objType) },
1757+ { CKA_MODULUS, pN, sizeof (pN) },
1758+ { CKA_PUBLIC_EXPONENT, pE, sizeof (pE) },
1759+ { CKA_START_DATE, &startDate, sizeof (startDate) },
1760+ { CKA_END_DATE, &endDate, sizeof (endDate) }
1761+ };
1762+
1763+ // Just make sure that we finalize any previous tests
1764+ CRYPTOKI_F_PTR ( C_Finalize (NULL_PTR) );
1765+
1766+ // Initialize the library and start the test.
1767+ rv = CRYPTOKI_F_PTR ( C_Initialize (NULL_PTR) );
1768+ CPPUNIT_ASSERT (rv == CKR_OK);
1769+
1770+ // Open read-write session
1771+ rv = CRYPTOKI_F_PTR ( C_OpenSession (m_initializedTokenSlotID, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession) );
1772+ CPPUNIT_ASSERT (rv == CKR_OK);
1773+
1774+ // Login USER into the sessions so we can create a private objects
1775+ rv = CRYPTOKI_F_PTR ( C_Login (hSession, CKU_USER, m_userPin1, m_userPin1Length) );
1776+ CPPUNIT_ASSERT (rv == CKR_OK);
1777+
1778+ // Create minimal RSA public key object
1779+ rv = CRYPTOKI_F_PTR ( C_CreateObject (hSession, objTemplate, sizeof (objTemplate)/sizeof (CK_ATTRIBUTE), &hObject) );
1780+ CPPUNIT_ASSERT (rv == CKR_OK);
1781+
1782+ // Check attributes in RSA public key object
1783+ checkCommonObjectAttributes (hSession, hObject, objClass);
1784+ checkCommonStorageObjectAttributes (hSession, hObject, CK_FALSE, CK_FALSE, CK_TRUE, NULL_PTR, 0 , CK_TRUE, CK_TRUE);
1785+ checkCommonKeyAttributes (hSession, hObject, objType, NULL_PTR, 0 , startDate, sizeof (&startDate), endDate, sizeof (&endDate), CK_FALSE, CK_FALSE, CK_UNAVAILABLE_INFORMATION, NULL_PTR, 0 );
1786+ checkCommonPublicKeyAttributes (hSession, hObject, NULL_PTR, 0 , CK_TRUE, CK_TRUE, CK_TRUE, CK_TRUE, CK_FALSE, NULL_PTR, 0 );
1787+ checkCommonRSAPublicKeyAttributes (hSession, hObject, pN, sizeof (pN), 512 , pE, sizeof (pE));
1788+ }
1789+
17271790void ObjectTests::testDefaultRSAPrivAttributes ()
17281791{
17291792 CK_RV rv;
@@ -1788,6 +1851,80 @@ void ObjectTests::testDefaultRSAPrivAttributes()
17881851 checkCommonRSAPrivateKeyAttributes (hSession, hObject, pN, sizeof (pN), NULL_PTR, 0 , pD, sizeof (pD), NULL_PTR, 0 , NULL_PTR, 0 , NULL_PTR, 0 , NULL_PTR, 0 , NULL_PTR, 0 );
17891852}
17901853
1854+ void ObjectTests::testDefaultRSAPrivAttributesWithDates ()
1855+ {
1856+ CK_RV rv;
1857+ CK_SESSION_HANDLE hSession;
1858+ CK_OBJECT_HANDLE hObject = CK_INVALID_HANDLE;
1859+
1860+ // Minimal RSA private key object
1861+ CK_OBJECT_CLASS objClass = CKO_PRIVATE_KEY;
1862+ CK_KEY_TYPE objType = CKK_RSA;
1863+ CK_BBOOL bTrue = CK_TRUE;
1864+ CK_BBOOL bFalse = CK_FALSE;
1865+ CK_BYTE pN[] = { 0xC6 , 0x47 , 0xDD , 0x74 , 0x3B , 0xCB , 0xDC , 0x6F , 0xCE , 0xA7 ,
1866+ 0xF0 , 0x5F , 0x29 , 0x4B , 0x27 , 0x00 , 0xCC , 0x92 , 0xE9 , 0x20 ,
1867+ 0x8A , 0x2C , 0x87 , 0x36 , 0x47 , 0x24 , 0xB0 , 0xD5 , 0x7D , 0xB0 ,
1868+ 0x92 , 0x01 , 0xA0 , 0xA3 , 0x55 , 0x2E , 0x3F , 0xFE , 0xA7 , 0x4C ,
1869+ 0x4B , 0x3F , 0x9D , 0x4E , 0xCB , 0x78 , 0x12 , 0xA9 , 0x42 , 0xAD ,
1870+ 0x51 , 0x1F , 0x3B , 0xBD , 0x3D , 0x6A , 0xE5 , 0x38 , 0xB7 , 0x45 ,
1871+ 0x65 , 0x50 , 0x30 , 0x35 };
1872+ CK_BYTE pD[] = { 0x6D , 0x94 , 0x6B , 0xEB , 0xFF , 0xDC , 0x03 , 0x80 , 0x7B , 0x0A ,
1873+ 0x4F , 0x0A , 0x98 , 0x6C , 0xA3 , 0x2A , 0x8A , 0xE4 , 0xAA , 0x18 ,
1874+ 0x44 , 0xA4 , 0xA5 , 0x39 , 0x37 , 0x0A , 0x2C , 0xFC , 0x5F , 0xD1 ,
1875+ 0x44 , 0x6E , 0xCE , 0x25 , 0x9B , 0xE5 , 0xD1 , 0x51 , 0xAF , 0xA8 ,
1876+ 0x30 , 0xD1 , 0x4D , 0x3C , 0x60 , 0x33 , 0xB5 , 0xED , 0x4C , 0x39 ,
1877+ 0xDA , 0x68 , 0x78 , 0xF9 , 0x6B , 0x4F , 0x47 , 0x55 , 0xB2 , 0x02 ,
1878+ 0x00 , 0x7E , 0x9C , 0x05 };
1879+ CK_DATE startDate = {
1880+ {' 2' , ' 0' , ' 2' , ' 2' },
1881+ {' 0' , ' 1' },
1882+ {' 0' , ' 1' }
1883+ };
1884+ CK_DATE endDate = {
1885+ {' 3' , ' 9' , ' 9' , ' 9' },
1886+ {' 1' , ' 2' },
1887+ {' 3' , ' 1' }
1888+ };
1889+ // Make the key non-sensitive and extractable so that we can test it.
1890+ CK_ATTRIBUTE objTemplate[] = {
1891+ { CKA_CLASS, &objClass, sizeof (objClass) },
1892+ { CKA_KEY_TYPE, &objType, sizeof (objType) },
1893+ { CKA_SENSITIVE, &bFalse, sizeof (bFalse) },
1894+ { CKA_EXTRACTABLE, &bTrue, sizeof (bTrue) },
1895+ { CKA_MODULUS, pN, sizeof (pN) },
1896+ { CKA_PRIVATE_EXPONENT, pD, sizeof (pD) },
1897+ { CKA_START_DATE, &startDate, sizeof (startDate) },
1898+ { CKA_END_DATE, &endDate, sizeof (endDate) }
1899+ };
1900+
1901+ // Just make sure that we finalize any previous tests
1902+ CRYPTOKI_F_PTR ( C_Finalize (NULL_PTR) );
1903+
1904+ // Initialize the library and start the test.
1905+ rv = CRYPTOKI_F_PTR ( C_Initialize (NULL_PTR) );
1906+ CPPUNIT_ASSERT (rv == CKR_OK);
1907+
1908+ // Open read-write session
1909+ rv = CRYPTOKI_F_PTR ( C_OpenSession (m_initializedTokenSlotID, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession) );
1910+ CPPUNIT_ASSERT (rv == CKR_OK);
1911+
1912+ // Login USER into the sessions so we can create a private objects
1913+ rv = CRYPTOKI_F_PTR ( C_Login (hSession, CKU_USER, m_userPin1, m_userPin1Length) );
1914+ CPPUNIT_ASSERT (rv == CKR_OK);
1915+
1916+ // Create minimal RSA public key object
1917+ rv = CRYPTOKI_F_PTR ( C_CreateObject (hSession, objTemplate, sizeof (objTemplate)/sizeof (CK_ATTRIBUTE), &hObject) );
1918+ CPPUNIT_ASSERT (rv == CKR_OK);
1919+
1920+ // Check attributes in RSA public key object
1921+ checkCommonObjectAttributes (hSession, hObject, objClass);
1922+ checkCommonStorageObjectAttributes (hSession, hObject, CK_FALSE, CK_TRUE, CK_TRUE, NULL_PTR, 0 , CK_TRUE, CK_TRUE);
1923+ checkCommonKeyAttributes (hSession, hObject, objType, NULL_PTR, 0 , startDate, sizeof (&startDate), endDate, sizeof (&endDate), CK_FALSE, CK_FALSE, CK_UNAVAILABLE_INFORMATION, NULL_PTR, 0 );
1924+ checkCommonPrivateKeyAttributes (hSession, hObject, NULL_PTR, 0 , CK_FALSE, CK_TRUE, CK_TRUE, CK_TRUE, CK_TRUE, CK_TRUE, CK_FALSE, CK_FALSE, CK_FALSE, NULL_PTR, 0 , CK_FALSE);
1925+ checkCommonRSAPrivateKeyAttributes (hSession, hObject, pN, sizeof (pN), NULL_PTR, 0 , pD, sizeof (pD), NULL_PTR, 0 , NULL_PTR, 0 , NULL_PTR, 0 , NULL_PTR, 0 , NULL_PTR, 0 );
1926+ }
1927+
17911928void ObjectTests::testAlwaysNeverAttribute ()
17921929{
17931930 CK_RV rv;
0 commit comments