@@ -1100,7 +1100,7 @@ extern const PCSYMCRYPT_HASH SymCryptSha1Algorithm;
11001100// SHA-256
11011101//
11021102//
1103- // Tha SHA-256 hash algorithm per FIPS 180-4.
1103+ // The SHA-256 hash algorithm per FIPS 180-4.
11041104// This implementation is limited to data strings that are in whole bytes.
11051105// Odd bit length are not supported.
11061106//
@@ -1165,7 +1165,7 @@ extern const PCSYMCRYPT_HASH SymCryptSha256Algorithm;
11651165// SHA-384
11661166//
11671167//
1168- // Tha SHA-384 hash algorithm per FIPS 180-4.
1168+ // The SHA-384 hash algorithm per FIPS 180-4.
11691169// This implementation is limited to data strings that are in whole bytes.
11701170// Odd bit length are not supported.
11711171//
@@ -1230,7 +1230,7 @@ extern const PCSYMCRYPT_HASH SymCryptSha384Algorithm;
12301230// SHA-512
12311231//
12321232//
1233- // Tha SHA-512 hash algorithm per FIPS 180-4.
1233+ // The SHA-512 hash algorithm per FIPS 180-4.
12341234// This implementation is limited to data strings that are in whole bytes.
12351235// Odd bit length are not supported.
12361236//
@@ -1291,6 +1291,181 @@ SymCryptSha512Selftest();
12911291
12921292extern const PCSYMCRYPT_HASH SymCryptSha512Algorithm ;
12931293
1294+
1295+ ////////////////////////////////////////////////////////////////////////////
1296+ // SHA-3
1297+ //
1298+ // The SHA-3 family of hash algorithms per FIPS 202.
1299+ // This implementation is limited to data strings that are in whole bytes.
1300+ // Odd bit length are not supported.
1301+ //
1302+ //
1303+ // For details on this API see the description above about the generic hash function API.
1304+ //
1305+
1306+
1307+ //
1308+ // SHA-3-256
1309+ //
1310+
1311+ #define SYMCRYPT_SHA3_256_RESULT_SIZE (32)
1312+ #define SYMCRYPT_SHA3_256_INPUT_BLOCK_SIZE (136)
1313+
1314+ VOID
1315+ SYMCRYPT_CALL
1316+ SymCryptSha3_256 (
1317+ _In_reads_ (cbData ) PCBYTE pbData ,
1318+ SIZE_T cbData ,
1319+ _Out_writes_ (SYMCRYPT_SHA3_256_RESULT_SIZE ) PBYTE pbResult );
1320+
1321+ VOID
1322+ SYMCRYPT_CALL
1323+ SymCryptSha3_256Init (_Out_ PSYMCRYPT_SHA3_256_STATE pState );
1324+
1325+ VOID
1326+ SYMCRYPT_CALL
1327+ SymCryptSha3_256Append (
1328+ _Inout_ PSYMCRYPT_SHA3_256_STATE pState ,
1329+ _In_reads_ (cbData ) PCBYTE pbData ,
1330+ SIZE_T cbData );
1331+
1332+ VOID
1333+ SYMCRYPT_CALL
1334+ SymCryptSha3_256Result (
1335+ _Inout_ PSYMCRYPT_SHA3_256_STATE pState ,
1336+ _Out_writes_ (SYMCRYPT_SHA3_256_RESULT_SIZE ) PBYTE pbResult );
1337+
1338+ VOID
1339+ SYMCRYPT_CALL
1340+ SymCryptSha3_256StateCopy (_In_ PCSYMCRYPT_SHA3_256_STATE pSrc , _Out_ PSYMCRYPT_SHA3_256_STATE pDst );
1341+
1342+ VOID
1343+ SYMCRYPT_CALL
1344+ SymCryptSha3_256StateExport (
1345+ _In_ PCSYMCRYPT_SHA3_256_STATE pState ,
1346+ _Out_writes_bytes_ (SYMCRYPT_SHA3_256_STATE_EXPORT_SIZE ) PBYTE pbBlob );
1347+
1348+ SYMCRYPT_ERROR
1349+ SYMCRYPT_CALL
1350+ SymCryptSha3_256StateImport (
1351+ _Out_ PSYMCRYPT_SHA3_256_STATE pState ,
1352+ _In_reads_bytes_ (SYMCRYPT_SHA3_256_STATE_EXPORT_SIZE ) PCBYTE pbBlob );
1353+
1354+ VOID
1355+ SYMCRYPT_CALL
1356+ SymCryptSha3_256Selftest ();
1357+
1358+ extern const PCSYMCRYPT_HASH SymCryptSha3_256Algorithm ;
1359+
1360+
1361+ //
1362+ // SHA-3-384
1363+ //
1364+
1365+ #define SYMCRYPT_SHA3_384_RESULT_SIZE (48)
1366+ #define SYMCRYPT_SHA3_384_INPUT_BLOCK_SIZE (104)
1367+
1368+ VOID
1369+ SYMCRYPT_CALL
1370+ SymCryptSha3_384 (
1371+ _In_reads_ (cbData ) PCBYTE pbData ,
1372+ SIZE_T cbData ,
1373+ _Out_writes_ (SYMCRYPT_SHA3_384_RESULT_SIZE ) PBYTE pbResult );
1374+
1375+ VOID
1376+ SYMCRYPT_CALL
1377+ SymCryptSha3_384Init (_Out_ PSYMCRYPT_SHA3_384_STATE pState );
1378+
1379+ VOID
1380+ SYMCRYPT_CALL
1381+ SymCryptSha3_384Append (
1382+ _Inout_ PSYMCRYPT_SHA3_384_STATE pState ,
1383+ _In_reads_ (cbData ) PCBYTE pbData ,
1384+ SIZE_T cbData );
1385+
1386+ VOID
1387+ SYMCRYPT_CALL
1388+ SymCryptSha3_384Result (
1389+ _Inout_ PSYMCRYPT_SHA3_384_STATE pState ,
1390+ _Out_writes_ (SYMCRYPT_SHA3_384_RESULT_SIZE ) PBYTE pbResult );
1391+
1392+ VOID
1393+ SYMCRYPT_CALL
1394+ SymCryptSha3_384StateCopy (_In_ PCSYMCRYPT_SHA3_384_STATE pSrc , _Out_ PSYMCRYPT_SHA3_384_STATE pDst );
1395+
1396+ VOID
1397+ SYMCRYPT_CALL
1398+ SymCryptSha3_384StateExport (
1399+ _In_ PCSYMCRYPT_SHA3_384_STATE pState ,
1400+ _Out_writes_bytes_ (SYMCRYPT_SHA3_384_STATE_EXPORT_SIZE ) PBYTE pbBlob );
1401+
1402+ SYMCRYPT_ERROR
1403+ SYMCRYPT_CALL
1404+ SymCryptSha3_384StateImport (
1405+ _Out_ PSYMCRYPT_SHA3_384_STATE pState ,
1406+ _In_reads_bytes_ (SYMCRYPT_SHA3_384_STATE_EXPORT_SIZE ) PCBYTE pbBlob );
1407+
1408+ VOID
1409+ SYMCRYPT_CALL
1410+ SymCryptSha3_384Selftest ();
1411+
1412+ extern const PCSYMCRYPT_HASH SymCryptSha3_384Algorithm ;
1413+
1414+
1415+ //
1416+ // SHA-3-512
1417+ //
1418+
1419+ #define SYMCRYPT_SHA3_512_RESULT_SIZE (64)
1420+ #define SYMCRYPT_SHA3_512_INPUT_BLOCK_SIZE (72)
1421+
1422+ VOID
1423+ SYMCRYPT_CALL
1424+ SymCryptSha3_512 (
1425+ _In_reads_ ( cbData ) PCBYTE pbData ,
1426+ SIZE_T cbData ,
1427+ _Out_writes_ ( SYMCRYPT_SHA3_512_RESULT_SIZE ) PBYTE pbResult );
1428+
1429+ VOID
1430+ SYMCRYPT_CALL
1431+ SymCryptSha3_512Init ( _Out_ PSYMCRYPT_SHA3_512_STATE pState );
1432+
1433+ VOID
1434+ SYMCRYPT_CALL
1435+ SymCryptSha3_512Append (
1436+ _Inout_ PSYMCRYPT_SHA3_512_STATE pState ,
1437+ _In_reads_ ( cbData ) PCBYTE pbData ,
1438+ SIZE_T cbData );
1439+
1440+ VOID
1441+ SYMCRYPT_CALL
1442+ SymCryptSha3_512Result (
1443+ _Inout_ PSYMCRYPT_SHA3_512_STATE pState ,
1444+ _Out_writes_ ( SYMCRYPT_SHA3_512_RESULT_SIZE ) PBYTE pbResult );
1445+
1446+ VOID
1447+ SYMCRYPT_CALL
1448+ SymCryptSha3_512StateCopy ( _In_ PCSYMCRYPT_SHA3_512_STATE pSrc , _Out_ PSYMCRYPT_SHA3_512_STATE pDst );
1449+
1450+ VOID
1451+ SYMCRYPT_CALL
1452+ SymCryptSha3_512StateExport (
1453+ _In_ PCSYMCRYPT_SHA3_512_STATE pState ,
1454+ _Out_writes_bytes_ ( SYMCRYPT_SHA3_512_STATE_EXPORT_SIZE ) PBYTE pbBlob );
1455+
1456+ SYMCRYPT_ERROR
1457+ SYMCRYPT_CALL
1458+ SymCryptSha3_512StateImport (
1459+ _Out_ PSYMCRYPT_SHA3_512_STATE pState ,
1460+ _In_reads_bytes_ ( SYMCRYPT_SHA3_512_STATE_EXPORT_SIZE ) PCBYTE pbBlob );
1461+
1462+ VOID
1463+ SYMCRYPT_CALL
1464+ SymCryptSha3_512Selftest ();
1465+
1466+ extern const PCSYMCRYPT_HASH SymCryptSha3_512Algorithm ;
1467+
1468+
12941469//==========================================================================
12951470// PARALLELISED HASH FUNCTIONS
12961471//==========================================================================
@@ -6419,6 +6594,15 @@ extern const SYMCRYPT_OID SymCryptSha384OidList[SYMCRYPT_SHA384_OID_COUNT];
64196594#define SYMCRYPT_SHA512_OID_COUNT (2)
64206595extern const SYMCRYPT_OID SymCryptSha512OidList [SYMCRYPT_SHA512_OID_COUNT ];
64216596
6597+ #define SYMCRYPT_SHA3_256_OID_COUNT (2)
6598+ extern const SYMCRYPT_OID SymCryptSha3_256OidList [SYMCRYPT_SHA3_256_OID_COUNT ];
6599+
6600+ #define SYMCRYPT_SHA3_384_OID_COUNT (2)
6601+ extern const SYMCRYPT_OID SymCryptSha3_384OidList [SYMCRYPT_SHA3_384_OID_COUNT ];
6602+
6603+ #define SYMCRYPT_SHA3_512_OID_COUNT (2)
6604+ extern const SYMCRYPT_OID SymCryptSha3_512OidList [SYMCRYPT_SHA3_512_OID_COUNT ];
6605+
64226606//
64236607// SYMCRYPT_FLAG_RSA_PKCS1_NO_ASN1: For RSA PKCS1 to not use the OID on signing or verifying.
64246608//
0 commit comments