Loading security/keymint/support/remote_prov_utils.cpp +6 −5 Original line number Original line Diff line number Diff line Loading @@ -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"; } } Loading Loading @@ -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; Loading Loading @@ -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()); Loading Loading
security/keymint/support/remote_prov_utils.cpp +6 −5 Original line number Original line Diff line number Diff line Loading @@ -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"; } } Loading Loading @@ -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; Loading Loading @@ -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()); Loading