]>
git.ipfire.org Git - thirdparty/openssl.git/blob - crypto/ec/curve448/arch_64/f_impl.h
2 * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
3 * Copyright 2014-2016 Cryptography Research, Inc.
5 * Licensed under the OpenSSL license (the "License"). You may not use
6 * this file except in compliance with the License. You can obtain a copy
7 * in the file LICENSE in the source distribution or at
8 * https://www.openssl.org/source/license.html
10 * Originally written by Mike Hamburg
13 #ifndef OSSL_CRYPTO_EC_CURVE448_ARCH_64_F_IMPL_H
14 # define OSSL_CRYPTO_EC_CURVE448_ARCH_64_F_IMPL_H
16 # define GF_HEADROOM 9999 /* Everything is reduced anyway */
17 # define FIELD_LITERAL(a,b,c,d,e,f,g,h) {{a,b,c,d,e,f,g,h}}
19 # define LIMB_PLACE_VALUE(i) 56
21 void gf_add_RAW(gf out
, const gf a
, const gf b
)
25 for (i
= 0; i
< NLIMBS
; i
++)
26 out
->limb
[i
] = a
->limb
[i
] + b
->limb
[i
];
31 void gf_sub_RAW(gf out
, const gf a
, const gf b
)
33 uint64_t co1
= ((1ULL << 56) - 1) * 2, co2
= co1
- 2;
36 for (i
= 0; i
< NLIMBS
; i
++)
37 out
->limb
[i
] = a
->limb
[i
] - b
->limb
[i
] + ((i
== NLIMBS
/ 2) ? co2
: co1
);
42 void gf_bias(gf a
, int amt
)
46 void gf_weak_reduce(gf a
)
48 uint64_t mask
= (1ULL << 56) - 1;
49 uint64_t tmp
= a
->limb
[NLIMBS
- 1] >> 56;
52 a
->limb
[NLIMBS
/ 2] += tmp
;
53 for (i
= NLIMBS
- 1; i
> 0; i
--)
54 a
->limb
[i
] = (a
->limb
[i
] & mask
) + (a
->limb
[i
- 1] >> 56);
55 a
->limb
[0] = (a
->limb
[0] & mask
) + tmp
;
58 #endif /* OSSL_CRYPTO_EC_CURVE448_ARCH_64_F_IMPL_H */