mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-21 20:15:17 +00:00
LibCrypto: Define SECP521r1
Define SECP521r1 with its constants. Since the parameters cannot be represented as full bytes, a slight modification has been added to the byte size. The current implementation of SECPxxxr1 does not work with this curve.
This commit is contained in:
parent
e318316af7
commit
c3aa8af514
Notes:
github-actions[bot]
2024-12-14 00:53:21 +00:00
Author: https://github.com/devgianlu Commit: https://github.com/LadybirdBrowser/ladybird/commit/c3aa8af5140 Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/2902 Reviewed-by: https://github.com/alimpfard
1 changed files with 18 additions and 6 deletions
|
@ -99,7 +99,7 @@ private:
|
|||
|
||||
// Curve parameters
|
||||
static constexpr size_t KEY_BIT_SIZE = bit_size;
|
||||
static constexpr size_t KEY_BYTE_SIZE = KEY_BIT_SIZE / 8;
|
||||
static constexpr size_t KEY_BYTE_SIZE = ceil_div(KEY_BIT_SIZE, 8ull);
|
||||
static constexpr size_t POINT_BYTE_SIZE = 1 + 2 * KEY_BYTE_SIZE;
|
||||
|
||||
static constexpr StorageType make_unsigned_fixed_big_int_from_string(StringView str)
|
||||
|
@ -216,7 +216,7 @@ public:
|
|||
|
||||
ErrorOr<SECPxxxr1Point> generate_public_key_point(UnsignedBigInteger scalar)
|
||||
{
|
||||
VERIFY(scalar.byte_length() == KEY_BYTE_SIZE);
|
||||
VERIFY(scalar.byte_length() >= KEY_BYTE_SIZE);
|
||||
|
||||
return compute_coordinate_point(scalar, SECPxxxr1Point { UnsignedBigInteger::import_data(GENERATOR_POINT.data() + 1, KEY_BYTE_SIZE), UnsignedBigInteger::import_data(GENERATOR_POINT.data() + 1 + KEY_BYTE_SIZE, KEY_BYTE_SIZE) });
|
||||
}
|
||||
|
@ -399,10 +399,11 @@ public:
|
|||
private:
|
||||
StorageType unsigned_big_integer_to_storage_type(UnsignedBigInteger big)
|
||||
{
|
||||
VERIFY(big.length() >= KEY_BIT_SIZE / 32);
|
||||
constexpr size_t word_count = (KEY_BYTE_SIZE + 4 - 1) / 4;
|
||||
VERIFY(big.length() >= word_count);
|
||||
|
||||
StorageType val = 0u;
|
||||
for (size_t i = 0; i < (KEY_BIT_SIZE / 32); i++) {
|
||||
for (size_t i = 0; i < word_count; i++) {
|
||||
StorageType rr = big.words()[i];
|
||||
val |= (rr << (i * 32));
|
||||
}
|
||||
|
@ -411,8 +412,9 @@ private:
|
|||
|
||||
UnsignedBigInteger storage_type_to_unsigned_big_integer(StorageType val)
|
||||
{
|
||||
Vector<UnsignedBigInteger::Word, KEY_BIT_SIZE / 32> words;
|
||||
for (size_t i = 0; i < (KEY_BIT_SIZE / 32); i++) {
|
||||
constexpr size_t word_count = (KEY_BYTE_SIZE + 4 - 1) / 4;
|
||||
Vector<UnsignedBigInteger::Word, word_count> words;
|
||||
for (size_t i = 0; i < word_count; i++) {
|
||||
words.append(static_cast<UnsignedBigInteger::Word>((val >> (i * 32)) & 0xFFFFFFFF));
|
||||
}
|
||||
return UnsignedBigInteger(move(words));
|
||||
|
@ -851,4 +853,14 @@ static constexpr SECPxxxr1CurveParameters SECP384r1_CURVE_PARAMETERS {
|
|||
};
|
||||
using SECP384r1 = SECPxxxr1<384, SECP384r1_CURVE_PARAMETERS>;
|
||||
|
||||
// SECP521r1 curve
|
||||
static constexpr SECPxxxr1CurveParameters SECP521r1_CURVE_PARAMETERS {
|
||||
.prime = "01FF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF"sv,
|
||||
.a = "01FF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFC"sv,
|
||||
.b = "0051_953EB961_8E1C9A1F_929A21A0_B68540EE_A2DA725B_99B315F3_B8B48991_8EF109E1_56193951_EC7E937B_1652C0BD_3BB1BF07_3573DF88_3D2C34F1_EF451FD4_6B503F00"sv,
|
||||
.order = "01FF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFA_51868783_BF2F966B_7FCC0148_F709A5D0_3BB5C9B8_899C47AE_BB6FB71E_91386409"sv,
|
||||
.generator_point = "04_00C6_858E06B7_0404E9CD_9E3ECB66_2395B442_9C648139_053FB521_F828AF60_6B4D3DBA_A14B5E77_EFE75928_FE1DC127_A2FFA8DE_3348B3C1_856A429B_F97E7E31_C2E5BD66_0118_39296A78_9A3BC004_5C8A5FB4_2C7D1BD9_98F54449_579B4468_17AFBD17_273E662C_97EE7299_5EF42640_C550B901_3FAD0761_353C7086_A272C240_88BE9476_9FD16650"sv,
|
||||
};
|
||||
using SECP521r1 = SECPxxxr1<521, SECP521r1_CURVE_PARAMETERS>;
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue