Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6435b744 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Add NID_secp384r1 support on parsing UDS public key" into main

parents af7df717 10ee304f
Loading
Loading
Loading
Loading
+6 −5
Original line number Original line Diff line number Diff line
@@ -65,9 +65,9 @@ ErrMsgOr<bytevec> ecKeyGetPrivateKey(const EC_KEY* ecKey) {
    return privKey;
    return privKey;
}
}


ErrMsgOr<bytevec> ecKeyGetPublicKey(const EC_KEY* ecKey) {
ErrMsgOr<bytevec> ecKeyGetPublicKey(const EC_KEY* ecKey, const int nid) {
    // Extract public key.
    // Extract public key.
    auto group = EC_GROUP_Ptr(EC_GROUP_new_by_curve_name(NID_X9_62_prime256v1));
    auto group = EC_GROUP_Ptr(EC_GROUP_new_by_curve_name(nid));
    if (group.get() == nullptr) {
    if (group.get() == nullptr) {
        return "Error creating EC group by curve name";
        return "Error creating EC group by curve name";
    }
    }
@@ -123,11 +123,12 @@ ErrMsgOr<bytevec> getRawPublicKey(const EVP_PKEY_Ptr& pubKey) {
    int keyType = EVP_PKEY_base_id(pubKey.get());
    int keyType = EVP_PKEY_base_id(pubKey.get());
    switch (keyType) {
    switch (keyType) {
        case EVP_PKEY_EC: {
        case EVP_PKEY_EC: {
            int nid = EVP_PKEY_bits(pubKey.get()) == 384 ? NID_secp384r1 : NID_X9_62_prime256v1;
            auto ecKey = EC_KEY_Ptr(EVP_PKEY_get1_EC_KEY(pubKey.get()));
            auto ecKey = EC_KEY_Ptr(EVP_PKEY_get1_EC_KEY(pubKey.get()));
            if (ecKey.get() == nullptr) {
            if (ecKey.get() == nullptr) {
                return "Failed to get ec key";
                return "Failed to get ec key";
          }
          }
            return ecKeyGetPublicKey(ecKey.get());
          return ecKeyGetPublicKey(ecKey.get(), nid);
        }
        }
        case EVP_PKEY_ED25519: {
        case EVP_PKEY_ED25519: {
            bytevec rawPubKey;
            bytevec rawPubKey;
@@ -165,7 +166,7 @@ ErrMsgOr<std::tuple<bytevec, bytevec>> generateEc256KeyPair() {
    auto privKey = ecKeyGetPrivateKey(ec_key.get());
    auto privKey = ecKeyGetPrivateKey(ec_key.get());
    if (!privKey) return privKey.moveMessage();
    if (!privKey) return privKey.moveMessage();


    auto pubKey = ecKeyGetPublicKey(ec_key.get());
    auto pubKey = ecKeyGetPublicKey(ec_key.get(), NID_X9_62_prime256v1);
    if (!pubKey) return pubKey.moveMessage();
    if (!pubKey) return pubKey.moveMessage();


    return std::make_tuple(pubKey.moveValue(), privKey.moveValue());
    return std::make_tuple(pubKey.moveValue(), privKey.moveValue());