2021-03-26 02:23:07

by Tianjia Zhang

[permalink] [raw]
Subject: [PATCH] crypto: sm3 - use the more precise type u32 instead of unsigned int

In the process of calculating the hash, use the more accurate type
'u32' instead of the original 'unsigned int' to avoid ambiguity.

Signed-off-by: Tianjia Zhang <[email protected]>
---
crypto/sm3_generic.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/crypto/sm3_generic.c b/crypto/sm3_generic.c
index 193c4584bd00..562e96f92f64 100644
--- a/crypto/sm3_generic.c
+++ b/crypto/sm3_generic.c
@@ -36,17 +36,17 @@ static inline u32 p1(u32 x)
return x ^ rol32(x, 15) ^ rol32(x, 23);
}

-static inline u32 ff(unsigned int n, u32 a, u32 b, u32 c)
+static inline u32 ff(u32 n, u32 a, u32 b, u32 c)
{
return (n < 16) ? (a ^ b ^ c) : ((a & b) | (a & c) | (b & c));
}

-static inline u32 gg(unsigned int n, u32 e, u32 f, u32 g)
+static inline u32 gg(u32 n, u32 e, u32 f, u32 g)
{
return (n < 16) ? (e ^ f ^ g) : ((e & f) | ((~e) & g));
}

-static inline u32 t(unsigned int n)
+static inline u32 t(u32 n)
{
return (n < 16) ? SM3_T1 : SM3_T2;
}
@@ -54,7 +54,7 @@ static inline u32 t(unsigned int n)
static void sm3_expand(u32 *t, u32 *w, u32 *wt)
{
int i;
- unsigned int tmp;
+ u32 tmp;

/* load the input */
for (i = 0; i <= 15; i++)
@@ -123,8 +123,8 @@ static void sm3_compress(u32 *w, u32 *wt, u32 *m)

static void sm3_transform(struct sm3_state *sst, u8 const *src)
{
- unsigned int w[68];
- unsigned int wt[64];
+ u32 w[68];
+ u32 wt[64];

sm3_expand((u32 *)src, w, wt);
sm3_compress(w, wt, sst->state);
--
2.19.1.3.ge56e4f7


2021-03-26 09:02:48

by Ard Biesheuvel

[permalink] [raw]
Subject: Re: [PATCH] crypto: sm3 - use the more precise type u32 instead of unsigned int

On Fri, 26 Mar 2021 at 03:22, Tianjia Zhang
<[email protected]> wrote:
>
> In the process of calculating the hash, use the more accurate type
> 'u32' instead of the original 'unsigned int' to avoid ambiguity.
>
> Signed-off-by: Tianjia Zhang <[email protected]>

I don't see the point of this patch. u32 and unsigned int are always
the same type, regardless of architecture.


> ---
> crypto/sm3_generic.c | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/crypto/sm3_generic.c b/crypto/sm3_generic.c
> index 193c4584bd00..562e96f92f64 100644
> --- a/crypto/sm3_generic.c
> +++ b/crypto/sm3_generic.c
> @@ -36,17 +36,17 @@ static inline u32 p1(u32 x)
> return x ^ rol32(x, 15) ^ rol32(x, 23);
> }
>
> -static inline u32 ff(unsigned int n, u32 a, u32 b, u32 c)
> +static inline u32 ff(u32 n, u32 a, u32 b, u32 c)
> {
> return (n < 16) ? (a ^ b ^ c) : ((a & b) | (a & c) | (b & c));
> }
>
> -static inline u32 gg(unsigned int n, u32 e, u32 f, u32 g)
> +static inline u32 gg(u32 n, u32 e, u32 f, u32 g)
> {
> return (n < 16) ? (e ^ f ^ g) : ((e & f) | ((~e) & g));
> }
>
> -static inline u32 t(unsigned int n)
> +static inline u32 t(u32 n)
> {
> return (n < 16) ? SM3_T1 : SM3_T2;
> }
> @@ -54,7 +54,7 @@ static inline u32 t(unsigned int n)
> static void sm3_expand(u32 *t, u32 *w, u32 *wt)
> {
> int i;
> - unsigned int tmp;
> + u32 tmp;
>
> /* load the input */
> for (i = 0; i <= 15; i++)
> @@ -123,8 +123,8 @@ static void sm3_compress(u32 *w, u32 *wt, u32 *m)
>
> static void sm3_transform(struct sm3_state *sst, u8 const *src)
> {
> - unsigned int w[68];
> - unsigned int wt[64];
> + u32 w[68];
> + u32 wt[64];
>
> sm3_expand((u32 *)src, w, wt);
> sm3_compress(w, wt, sst->state);
> --
> 2.19.1.3.ge56e4f7
>

2021-04-07 14:19:53

by Tianjia Zhang

[permalink] [raw]
Subject: Re: [PATCH] crypto: sm3 - use the more precise type u32 instead of unsigned int



On 3/26/21 5:38 PM, Gilad Ben-Yossef wrote:
> Hi,
>
> Thank you for the patch!
>
> On Fri, Mar 26, 2021 at 5:21 AM Tianjia Zhang
> <[email protected]> wrote:
>>
>> In the process of calculating the hash, use the more accurate type
>> 'u32' instead of the original 'unsigned int' to avoid ambiguity.
>
> I don't think there is any ambiguity here, as both forms are always
> the same size.
>
> Generally, I tend to use the convention of using 'u32' as denoting
> variables where the size is meaningful - e.g. mathematical operations
> that are defined in the standard on 32 bit buffers, versus using
> plain 'int' types where it isn't - e.g. loop counters etc.
>
> Having said that, even under my own definition possibly the w and wt
> arrays in sm3_trandform() should be changed to u32.
> I don't object to changing those if it bugs you :-)
>
> Cheers,
> Gilad
>
>

Thanks for your opinions. This is just to make the form more uniform.
This is not a mistake. If it is not necessary, just ignore this
modification.

Best regards,
Tianjia