mirror of
https://github.com/eosswedenorg/libantelope
synced 2026-06-18 20:40:03 +02:00
WIF: Support PVT_K1 format.
This commit is contained in:
parent
ea411793a2
commit
1aa6906ba2
7 changed files with 157 additions and 38 deletions
|
|
@ -47,6 +47,24 @@ bool pub_decoder_legacy(const std::vector<unsigned char>& buf, ec_pubkey_t& key)
|
|||
|
||||
bool pub_decoder_k1(const std::vector<unsigned char>& buf, ec_pubkey_t& key);
|
||||
|
||||
/**
|
||||
* Private-key encoders
|
||||
*/
|
||||
typedef size_t (*priv_encoder_t)(const ec_privkey_t&, unsigned char *);
|
||||
|
||||
size_t priv_encoder_legacy(const ec_privkey_t& priv, unsigned char *buf);
|
||||
|
||||
size_t priv_encoder_k1(const ec_privkey_t& priv, unsigned char *buf);
|
||||
|
||||
/**
|
||||
* Private-key decoders
|
||||
*/
|
||||
typedef bool (*priv_decoder_t)(const std::vector<unsigned char>&, ec_privkey_t&);
|
||||
|
||||
bool priv_decoder_legacy(const std::vector<unsigned char>& buf, ec_privkey_t& priv);
|
||||
|
||||
bool priv_decoder_k1(const std::vector<unsigned char>& buf, ec_privkey_t& priv);
|
||||
|
||||
}} // namespace libeosio::internal
|
||||
|
||||
#endif /* LIBEOSIO_CODEC_H */
|
||||
|
|
|
|||
|
|
@ -61,4 +61,28 @@ bool pub_decoder_k1(const std::vector<unsigned char>& buf, ec_pubkey_t& key) {
|
|||
return true;
|
||||
}
|
||||
|
||||
size_t priv_encoder_k1(const ec_privkey_t& priv, unsigned char *buf) {
|
||||
checksum_t check = _checksum_suffix(priv.data(), EC_PRIVKEY_SIZE, "K1");
|
||||
|
||||
memcpy(buf, priv.data(), priv.size());
|
||||
memcpy(buf + EC_PRIVKEY_SIZE, check.data(), check.size());
|
||||
|
||||
return EC_PRIVKEY_SIZE + CHECKSUM_SIZE;
|
||||
}
|
||||
|
||||
bool priv_decoder_k1(const std::vector<unsigned char>& buf, ec_privkey_t& priv) {
|
||||
|
||||
if (buf.size() != EC_PRIVKEY_SIZE + CHECKSUM_SIZE) {
|
||||
return false;
|
||||
}
|
||||
|
||||
checksum_t check = _checksum_suffix(buf.data(), EC_PRIVKEY_SIZE, "K1");
|
||||
if (memcmp(buf.data() + EC_PRIVKEY_SIZE, check.data(), CHECKSUM_SIZE)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
memcpy(priv.data(), buf.data(), priv.size());
|
||||
return true;
|
||||
}
|
||||
|
||||
}} // namespace libeosio::internal
|
||||
|
|
@ -27,6 +27,8 @@
|
|||
|
||||
namespace libeosio { namespace internal {
|
||||
|
||||
#define PRIV_KEY_PREFIX 0x80 /* 0x80 for "Bitcoin mainnet". Always used by EOS. */
|
||||
|
||||
void pub_encoder_legacy(const ec_pubkey_t& key, unsigned char *buf) {
|
||||
|
||||
checksum_t check = checksum_ripemd160(key.data(), EC_PUBKEY_SIZE);
|
||||
|
|
@ -45,4 +47,32 @@ bool pub_decoder_legacy(const std::vector<unsigned char>& buf, ec_pubkey_t& key)
|
|||
return true;
|
||||
}
|
||||
|
||||
size_t priv_encoder_legacy(const ec_privkey_t& priv, unsigned char *buf) {
|
||||
checksum_t check;
|
||||
|
||||
buf[0] = PRIV_KEY_PREFIX;
|
||||
memcpy(buf + 1, priv.data(), EC_PRIVKEY_SIZE);
|
||||
check = checksum_sha256d(buf, 1 + EC_PRIVKEY_SIZE);
|
||||
memcpy(buf + 1 + EC_PRIVKEY_SIZE, check.data(), check.size());
|
||||
|
||||
return 1 + EC_PRIVKEY_SIZE + CHECKSUM_SIZE;
|
||||
}
|
||||
|
||||
bool priv_decoder_legacy(const std::vector<unsigned char>& buf, ec_privkey_t& priv) {
|
||||
if (buf[0] != PRIV_KEY_PREFIX) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (buf.size() != 1 + EC_PRIVKEY_SIZE + CHECKSUM_SIZE) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!checksum_validate<checksum_sha256d>(buf.data(), buf.size())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
memcpy(priv.data(), buf.data() + 1, priv.size());
|
||||
return true;
|
||||
}
|
||||
|
||||
}} // namespace libeosio::internal
|
||||
Loading…
Add table
Add a link
Reference in a new issue