mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-05 15:49:11 +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: c3aa8af514
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
|
// Curve parameters
|
||||||
static constexpr size_t KEY_BIT_SIZE = bit_size;
|
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 size_t POINT_BYTE_SIZE = 1 + 2 * KEY_BYTE_SIZE;
|
||||||
|
|
||||||
static constexpr StorageType make_unsigned_fixed_big_int_from_string(StringView str)
|
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)
|
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) });
|
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:
|
private:
|
||||||
StorageType unsigned_big_integer_to_storage_type(UnsignedBigInteger big)
|
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;
|
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];
|
StorageType rr = big.words()[i];
|
||||||
val |= (rr << (i * 32));
|
val |= (rr << (i * 32));
|
||||||
}
|
}
|
||||||
|
@ -411,8 +412,9 @@ private:
|
||||||
|
|
||||||
UnsignedBigInteger storage_type_to_unsigned_big_integer(StorageType val)
|
UnsignedBigInteger storage_type_to_unsigned_big_integer(StorageType val)
|
||||||
{
|
{
|
||||||
Vector<UnsignedBigInteger::Word, KEY_BIT_SIZE / 32> words;
|
constexpr size_t word_count = (KEY_BYTE_SIZE + 4 - 1) / 4;
|
||||||
for (size_t i = 0; i < (KEY_BIT_SIZE / 32); i++) {
|
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));
|
words.append(static_cast<UnsignedBigInteger::Word>((val >> (i * 32)) & 0xFFFFFFFF));
|
||||||
}
|
}
|
||||||
return UnsignedBigInteger(move(words));
|
return UnsignedBigInteger(move(words));
|
||||||
|
@ -851,4 +853,14 @@ static constexpr SECPxxxr1CurveParameters SECP384r1_CURVE_PARAMETERS {
|
||||||
};
|
};
|
||||||
using SECP384r1 = SECPxxxr1<384, 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
Add a link
Reference in a new issue