aboutsummaryrefslogtreecommitdiff
path: root/ext/ipp/sources/ippcp/pcphash.h
diff options
context:
space:
mode:
Diffstat (limited to 'ext/ipp/sources/ippcp/pcphash.h')
-rw-r--r--ext/ipp/sources/ippcp/pcphash.h257
1 files changed, 257 insertions, 0 deletions
diff --git a/ext/ipp/sources/ippcp/pcphash.h b/ext/ipp/sources/ippcp/pcphash.h
new file mode 100644
index 0000000..950e56c
--- /dev/null
+++ b/ext/ipp/sources/ippcp/pcphash.h
@@ -0,0 +1,257 @@
+/*******************************************************************************
+* Copyright 2014-2018 Intel Corporation
+* All Rights Reserved.
+*
+* If this software was obtained under the Intel Simplified Software License,
+* the following terms apply:
+*
+* The source code, information and material ("Material") contained herein is
+* owned by Intel Corporation or its suppliers or licensors, and title to such
+* Material remains with Intel Corporation or its suppliers or licensors. The
+* Material contains proprietary information of Intel or its suppliers and
+* licensors. The Material is protected by worldwide copyright laws and treaty
+* provisions. No part of the Material may be used, copied, reproduced,
+* modified, published, uploaded, posted, transmitted, distributed or disclosed
+* in any way without Intel's prior express written permission. No license under
+* any patent, copyright or other intellectual property rights in the Material
+* is granted to or conferred upon you, either expressly, by implication,
+* inducement, estoppel or otherwise. Any license under such intellectual
+* property rights must be express and approved by Intel in writing.
+*
+* Unless otherwise agreed by Intel in writing, you may not remove or alter this
+* notice or any other notice embedded in Materials by Intel or Intel's
+* suppliers or licensors in any way.
+*
+*
+* If this software was obtained under the Apache License, Version 2.0 (the
+* "License"), the following terms apply:
+*
+* You may not use this file except in compliance with the License. You may
+* obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
+*
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+*
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*******************************************************************************/
+
+/*
+//
+// Purpose:
+// Cryptography Primitive.
+// Security Hash Standard
+// Internal Definitions and Internal Functions Prototypes
+//
+//
+*/
+
+#if !defined(_PCP_HASH_H)
+#define _PCP_HASH_H
+
+
+/* messge block size */
+#define MBS_SHA1 (64) /* SHA1 message block size (bytes) */
+#define MBS_SHA256 (64) /* SHA256 and SHA224 */
+#define MBS_SHA224 (64) /* SHA224 */
+#define MBS_SHA512 (128) /* SHA512 and SHA384 */
+#define MBS_SHA384 (128) /* SHA384 */
+#define MBS_MD5 (64) /* MD5 */
+#define MBS_SM3 (64) /* SM3 */
+#define MBS_HASH_MAX (MBS_SHA512) /* max message block size (bytes) */
+
+#define MAX_HASH_SIZE (IPP_SHA512_DIGEST_BITSIZE/8) /* hash of the max len (bytes) */
+
+/* size of processed message length representation (bytes) */
+#define MLR_SHA1 (sizeof(Ipp64u))
+#define MLR_SHA256 (sizeof(Ipp64u))
+#define MLR_SHA224 (sizeof(Ipp64u))
+#define MLR_SHA512 (sizeof(Ipp64u)*2)
+#define MLR_SHA384 (sizeof(Ipp64u)*2)
+#define MLR_MD5 (sizeof(Ipp64u))
+#define MLR_SM3 (sizeof(Ipp64u))
+
+/* hold some old definition for a purpose */
+typedef Ipp32u DigestSHA1[5]; /* SHA1 digest */
+typedef Ipp32u DigestSHA224[7]; /* SHA224 digest */
+typedef Ipp32u DigestSHA256[8]; /* SHA256 digest */
+typedef Ipp64u DigestSHA384[6]; /* SHA384 digest */
+typedef Ipp64u DigestSHA512[8]; /* SHA512 digest */
+typedef Ipp32u DigestMD5[4]; /* MD5 digest */
+typedef Ipp32u DigestSM3[8]; /* SM3 digest */
+
+#define HASH_ALIGNMENT ((int)(sizeof(void*)))
+#define SHA1_ALIGNMENT HASH_ALIGNMENT
+#define SHA224_ALIGNMENT HASH_ALIGNMENT
+#define SHA256_ALIGNMENT HASH_ALIGNMENT
+#define SHA384_ALIGNMENT HASH_ALIGNMENT
+#define SHA512_ALIGNMENT HASH_ALIGNMENT
+#define MD5_ALIGNMENT HASH_ALIGNMENT
+#define SM3_ALIGNMENT HASH_ALIGNMENT
+
+
+struct _cpSHA1 {
+ IppCtxId idCtx; /* SHA1 identifier */
+ int msgBuffIdx; /* buffer entry */
+ Ipp64u msgLenLo; /* message length (bytes) */
+ Ipp8u msgBuffer[MBS_SHA1]; /* buffer */
+ DigestSHA1 msgHash; /* intermediate hash */
+};
+
+struct _cpSHA256 {
+ IppCtxId idCtx; /* SHA224 identifier */
+ int msgBuffIdx; /* buffer entry */
+ Ipp64u msgLenLo; /* message length */
+ Ipp8u msgBuffer[MBS_SHA256]; /* buffer */
+ DigestSHA256 msgHash; /* intermediate hash */
+};
+
+struct _cpSHA512 {
+ IppCtxId idCtx; /* SHA384 identifier */
+ int msgBuffIdx; /* buffer entry */
+ Ipp64u msgLenLo; /* message length */
+ Ipp64u msgLenHi; /* message length */
+ Ipp8u msgBuffer[MBS_SHA512]; /* buffer */
+ DigestSHA512 msgHash; /* intermediate hash */
+};
+
+struct _cpMD5 {
+ IppCtxId idCtx; /* MD5 identifier */
+ int msgBuffIdx; /* buffer entry */
+ Ipp64u msgLenLo; /* message length */
+ Ipp8u msgBuffer[MBS_MD5]; /* buffer */
+ DigestMD5 msgHash; /* intermediate hash */
+};
+
+struct _cpSM3 {
+ IppCtxId idCtx; /* SM3 identifier */
+ int msgBuffIdx; /* buffer entry */
+ Ipp64u msgLenLo; /* message length */
+ Ipp8u msgBuffer[MBS_SM3]; /* buffer */
+ DigestSM3 msgHash; /* intermediate hash */
+};
+
+
+/* hash alg attributes */
+typedef struct _cpHashAttr {
+ int ivSize; /* attr: length (bytes) of initial value cpHashIV */
+ int hashSize; /* attr: length (bytes) of hash */
+ int msgBlkSize; /* attr: length (bytes) of message block */
+ int msgLenRepSize; /* attr: length (bytes) in representation of processed message length */
+ Ipp64u msgLenMax[2]; /* attr: max message length (bytes) (low high) */
+} cpHashAttr;
+
+/* hash value */
+typedef Ipp64u cpHash[IPP_SHA512_DIGEST_BITSIZE/BITSIZE(Ipp64u)]; /* hash value */
+
+/* hash update function */
+typedef void (*cpHashProc)(void* pHash, const Ipp8u* pMsg, int msgLen, const void* pParam);
+
+/* generalized hash context */
+struct _cpHashCtx {
+ IppCtxId idCtx; /* hash identifier */
+ IppHashAlgId algID; /* hash algorithm ID */
+ Ipp64u msgLenLo; /* processed message:*/
+ Ipp64u msgLenHi; /* length */
+ cpHashProc hashProc; /* hash update func */
+ const void* pParam; /* hashProc's params */
+ cpHash msgHash; /* intermadiate hash */
+ int msgBuffIdx; /* buffer entry */
+ Ipp8u msgBuffer[MBS_HASH_MAX]; /* buffer */
+};
+
+/* accessors */
+#define HASH_CTX_ID(stt) ((stt)->idCtx)
+#define HASH_ALG_ID(stt) ((stt)->algID)
+#define HASH_LENLO(stt) ((stt)->msgLenLo)
+#define HASH_LENHI(stt) ((stt)->msgLenHi)
+#define HASH_FUNC(stt) ((stt)->hashProc)
+#define HASH_FUNC_PAR(stt) ((stt)->pParam)
+#define HASH_VALUE(stt) ((stt)->msgHash)
+#define HAHS_BUFFIDX(stt) ((stt)->msgBuffIdx)
+#define HASH_BUFF(stt) ((stt)->msgBuffer)
+#define HASH_VALID_ID(pCtx) (HASH_CTX_ID((pCtx))==idCtxHash)
+
+
+/* initial hash values */
+extern const Ipp32u SHA1_IV[];
+extern const Ipp32u SHA256_IV[];
+extern const Ipp32u SHA224_IV[];
+extern const Ipp64u SHA512_IV[];
+extern const Ipp64u SHA384_IV[];
+extern const Ipp32u MD5_IV[];
+extern const Ipp32u SM3_IV[];
+extern const Ipp64u SHA512_224_IV[];
+extern const Ipp64u SHA512_256_IV[];
+
+/* hash alg additive constants */
+extern __ALIGN16 const Ipp32u SHA1_cnt[];
+extern __ALIGN16 const Ipp32u SHA256_cnt[];
+extern __ALIGN16 const Ipp64u SHA512_cnt[];
+extern __ALIGN16 const Ipp32u MD5_cnt[];
+extern __ALIGN16 const Ipp32u SM3_cnt[];
+
+/* hash alg opt argument */
+extern const void* cpHashProcFuncOpt[];
+
+/* enabled hash alg */
+extern const IppHashAlgId cpEnabledHashAlgID[];
+
+/* hash alg IV (init value) */
+extern const Ipp8u* cpHashIV[];
+
+/* hash alg attribute DB */
+extern const cpHashAttr cpHashAlgAttr[];
+
+/* IV size helper */
+__INLINE int cpHashIvSize(IppHashAlgId algID)
+{ return cpHashAlgAttr[algID].ivSize; }
+
+/* hash size helper */
+__INLINE int cpHashSize(IppHashAlgId algID)
+{ return cpHashAlgAttr[algID].hashSize; }
+
+/* message block size helper */
+__INLINE int cpHashMBS(IppHashAlgId algID)
+{ return cpHashAlgAttr[algID].msgBlkSize; }
+
+/* maps algID into enabled IppHashAlgId value */
+__INLINE IppHashAlgId cpValidHashAlg(IppHashAlgId algID)
+{
+ /* maps algID into the valid range */
+ algID = (((int)ippHashAlg_Unknown < (int)algID) && ((int)algID < (int)ippHashAlg_MaxNo))? algID : ippHashAlg_Unknown;
+ return cpEnabledHashAlgID[algID];
+}
+
+/* common functions */
+#define cpComputeDigest OWNAPI(cpComputeDigest)
+void cpComputeDigest(Ipp8u* pHashTag, int hashTagLen, const IppsHashState* pCtx);
+
+/* processing functions */
+#define UpdateSHA1 OWNAPI(UpdateSHA1)
+void UpdateSHA1 (void* pHash, const Ipp8u* mblk, int mlen, const void* pParam);
+#define UpdateSHA256 OWNAPI(UpdateSHA256)
+void UpdateSHA256(void* pHash, const Ipp8u* mblk, int mlen, const void* pParam);
+#define UpdateSHA512 OWNAPI(UpdateSHA512)
+void UpdateSHA512(void* pHash, const Ipp8u* mblk, int mlen, const void* pParam);
+#define UpdateMD5 OWNAPI(UpdateMD5)
+void UpdateMD5 (void* pHash, const Ipp8u* mblk, int mlen, const void* pParam);
+#define UpdateSM3 OWNAPI(UpdateSM3)
+void UpdateSM3 (void* pHash, const Ipp8u* mblk, int mlen, const void* pParam);
+
+#if (_SHA_NI_ENABLING_ == _FEATURE_TICKTOCK_) || (_SHA_NI_ENABLING_ == _FEATURE_ON_)
+#define UpdateSHA1ni OWNAPI(UpdateSHA1ni)
+void UpdateSHA1ni (void* pHash, const Ipp8u* mblk, int mlen, const void* pParam);
+#define UpdateSHA256ni OWNAPI(UpdateSHA256ni)
+void UpdateSHA256ni(void* pHash, const Ipp8u* mblk, int mlen, const void* pParam);
+#endif
+
+/* general methods */
+#define cpInitHash OWNAPI(cpInitHash)
+int cpInitHash(IppsHashState* pCtx, IppHashAlgId algID);
+#define cpReInitHash OWNAPI(cpReInitHash)
+int cpReInitHash(IppsHashState* pCtx, IppHashAlgId algID);
+
+#endif /* _PCP_HASH_H */