Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
a200c4e9
Commit
a200c4e9
authored
Jan 17, 2005
by
Michael Jung
Committed by
Alexandre Julliard
Jan 17, 2005
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Moved HMAC initialization and finalization code to
init_/finalize_hash. Removed the redundant pKeyContainer function parameter from init_hash.
parent
90351160
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
38 additions
and
22 deletions
+38
-22
rsaenh.c
dlls/rsaenh/rsaenh.c
+38
-22
No files found.
dlls/rsaenh/rsaenh.c
View file @
a200c4e9
...
...
@@ -448,20 +448,35 @@ static void destroy_hash(OBJECTHDR *pCryptHash)
* pKeyContainer [I] Pointer to the key container the hash object belongs to.
* pCryptHash [I] The hash object to be initialized.
*/
static
inline
BOOL
init_hash
(
KEYCONTAINER
*
pKeyContainer
,
CRYPTHASH
*
pCryptHash
)
{
static
inline
BOOL
init_hash
(
CRYPTHASH
*
pCryptHash
)
{
DWORD
dwLen
;
const
PROV_ENUMALGS_EX
*
pAlgInfo
;
switch
(
pCryptHash
->
aiAlgid
)
{
case
CALG_HMAC
:
if
(
pCryptHash
->
pHMACInfo
)
{
const
PROV_ENUMALGS_EX
*
pAlgInfo
;
KEYCONTAINER
*
pKeyContainer
;
if
(
!
lookup_handle
(
&
handle_table
,
pCryptHash
->
hProv
,
RSAENH_MAGIC_CONTAINER
,
(
OBJECTHDR
**
)
&
pKeyContainer
))
{
SetLastError
(
NTE_FAIL
);
return
FALSE
;
}
pAlgInfo
=
get_algid_info
(
pKeyContainer
,
pCryptHash
->
pHMACInfo
->
HashAlgid
);
if
(
pAlgInfo
)
pCryptHash
->
dwHashSize
=
pAlgInfo
->
dwDefaultLen
>>
3
;
return
init_hash_impl
(
pCryptHash
->
pHMACInfo
->
HashAlgid
,
&
pCryptHash
->
context
);
if
(
!
pAlgInfo
)
{
SetLastError
(
NTE_BAD_ALGID
);
return
FALSE
;
}
pCryptHash
->
dwHashSize
=
pAlgInfo
->
dwDefaultLen
>>
3
;
init_hash_impl
(
pCryptHash
->
pHMACInfo
->
HashAlgid
,
&
pCryptHash
->
context
);
update_hash_impl
(
pCryptHash
->
pHMACInfo
->
HashAlgid
,
&
pCryptHash
->
context
,
pCryptHash
->
pHMACInfo
->
pbInnerString
,
pCryptHash
->
pHMACInfo
->
cbInnerString
);
}
return
TRUE
;
case
CALG_MAC
:
dwLen
=
sizeof
(
DWORD
);
RSAENH_CPGetKeyParam
(
pCryptHash
->
hProv
,
pCryptHash
->
hKey
,
KP_BLOCKLEN
,
...
...
@@ -524,9 +539,21 @@ static inline void finalize_hash(CRYPTHASH *pCryptHash) {
switch
(
pCryptHash
->
aiAlgid
)
{
case
CALG_HMAC
:
if
(
pCryptHash
->
pHMACInfo
)
if
(
pCryptHash
->
pHMACInfo
)
{
BYTE
abHashValue
[
RSAENH_MAX_HASH_SIZE
];
finalize_hash_impl
(
pCryptHash
->
pHMACInfo
->
HashAlgid
,
&
pCryptHash
->
context
,
pCryptHash
->
abHashValue
);
memcpy
(
abHashValue
,
pCryptHash
->
abHashValue
,
pCryptHash
->
dwHashSize
);
init_hash_impl
(
pCryptHash
->
pHMACInfo
->
HashAlgid
,
&
pCryptHash
->
context
);
update_hash_impl
(
pCryptHash
->
pHMACInfo
->
HashAlgid
,
&
pCryptHash
->
context
,
pCryptHash
->
pHMACInfo
->
pbOuterString
,
pCryptHash
->
pHMACInfo
->
cbOuterString
);
update_hash_impl
(
pCryptHash
->
pHMACInfo
->
HashAlgid
,
&
pCryptHash
->
context
,
abHashValue
,
pCryptHash
->
dwHashSize
);
finalize_hash_impl
(
pCryptHash
->
pHMACInfo
->
HashAlgid
,
&
pCryptHash
->
context
,
pCryptHash
->
abHashValue
);
}
break
;
case
CALG_MAC
:
...
...
@@ -1173,7 +1200,7 @@ BOOL WINAPI RSAENH_CPCreateHash(HCRYPTPROV hProv, ALG_ID Algid, HCRYPTKEY hKey,
pCryptHash
->
pHMACInfo
=
(
PHMAC_INFO
)
NULL
;
pCryptHash
->
dwHashSize
=
peaAlgidInfo
->
dwDefaultLen
>>
3
;
return
init_hash
(
p
KeyContainer
,
p
CryptHash
);
return
init_hash
(
pCryptHash
);
}
/******************************************************************************
...
...
@@ -2045,7 +2072,6 @@ BOOL WINAPI RSAENH_CPGetHashParam(HCRYPTPROV hProv, HCRYPTHASH hHash, DWORD dwPa
{
CRYPTHASH
*
pCryptHash
;
KEYCONTAINER
*
pKeyContainer
;
BYTE
abHashValue
[
RSAENH_MAX_HASH_SIZE
];
TRACE
(
"(hProv=%08lx, hHash=%08lx, dwParam=%08lx, pbData=%p, pdwDataLen=%p, dwFlags=%08lx)
\n
"
,
hProv
,
hHash
,
dwParam
,
pbData
,
pdwDataLen
,
dwFlags
);
...
...
@@ -2095,15 +2121,6 @@ BOOL WINAPI RSAENH_CPGetHashParam(HCRYPTPROV hProv, HCRYPTHASH hHash, DWORD dwPa
if
(
pbData
&&
(
pCryptHash
->
dwState
!=
RSAENH_HASHSTATE_FINISHED
))
{
finalize_hash
(
pCryptHash
);
if
(
pCryptHash
->
aiAlgid
==
CALG_HMAC
)
{
memcpy
(
abHashValue
,
pCryptHash
->
abHashValue
,
pCryptHash
->
dwHashSize
);
init_hash
(
pKeyContainer
,
pCryptHash
);
update_hash
(
pCryptHash
,
pCryptHash
->
pHMACInfo
->
pbOuterString
,
pCryptHash
->
pHMACInfo
->
cbOuterString
);
update_hash
(
pCryptHash
,
abHashValue
,
pCryptHash
->
dwHashSize
);
finalize_hash
(
pCryptHash
);
}
pCryptHash
->
dwState
=
RSAENH_HASHSTATE_FINISHED
;
}
...
...
@@ -2485,12 +2502,12 @@ BOOL WINAPI RSAENH_CPDeriveKey(HCRYPTPROV hProv, ALG_ID Algid, HCRYPTHASH hBaseD
pad2
[
i
]
=
RSAENH_HMAC_DEF_OPAD_CHAR
^
(
i
<
dwLen
?
abHashValue
[
i
]
:
0
);
}
init_hash
(
p
KeyContainer
,
p
CryptHash
);
init_hash
(
pCryptHash
);
update_hash
(
pCryptHash
,
pad1
,
RSAENH_HMAC_DEF_PAD_LEN
);
finalize_hash
(
pCryptHash
);
memcpy
(
abHashValue
,
pCryptHash
->
abHashValue
,
pCryptHash
->
dwHashSize
);
init_hash
(
p
KeyContainer
,
p
CryptHash
);
init_hash
(
pCryptHash
);
update_hash
(
pCryptHash
,
pad2
,
RSAENH_HMAC_DEF_PAD_LEN
);
finalize_hash
(
pCryptHash
);
memcpy
(
abHashValue
+
pCryptHash
->
dwHashSize
,
pCryptHash
->
abHashValue
,
...
...
@@ -2767,7 +2784,6 @@ BOOL WINAPI RSAENH_CPSetHashParam(HCRYPTPROV hProv, HCRYPTHASH hHash, DWORD dwPa
case
HP_HMAC_INFO
:
free_hmac_info
(
pCryptHash
->
pHMACInfo
);
if
(
!
copy_hmac_info
(
&
pCryptHash
->
pHMACInfo
,
(
PHMAC_INFO
)
pbData
))
return
FALSE
;
init_hash
(
pKeyContainer
,
pCryptHash
);
if
(
!
lookup_handle
(
&
handle_table
,
pCryptHash
->
hKey
,
RSAENH_MAGIC_KEY
,
(
OBJECTHDR
**
)
&
pCryptKey
))
...
...
@@ -2783,8 +2799,8 @@ BOOL WINAPI RSAENH_CPSetHashParam(HCRYPTPROV hProv, HCRYPTHASH hHash, DWORD dwPa
pCryptHash
->
pHMACInfo
->
pbOuterString
[
i
]
^=
pCryptKey
->
abKeyValue
[
i
];
}
return
RSAENH_CPHashData
(
hProv
,
hHash
,
pCryptHash
->
pHMACInfo
->
pbInnerString
,
pCryptHash
->
pHMACInfo
->
cbInnerString
,
0
)
;
init_hash
(
pCryptHash
);
return
TRUE
;
case
HP_HASHVAL
:
memcpy
(
pCryptHash
->
abHashValue
,
pbData
,
pCryptHash
->
dwHashSize
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment