What you are missing here is the chain ID of the network.
Jungle Testnet: e70aaab8997e1dfce58fbfac80cbbb8fecec7b99cf982a9444273cbc64c41473
It has to be added in the " " field just after the key.
Your request for Jungle Testnet should be:
There are several ECDSA according to what elliptic curve algorithm uses. Bitcoin, Ethereum and EOSIO support secp256k1 using Koblitz curve, and their ways to sign a transaction or recover public key from signature are fundamentally same.
When a transaction is pushed to node, node tries recovering public keys from signatures (multi-sig is supported in EOSIO ...
ECDSA signature consists of two values, r and s. Recovery ID (v in Ethereum) is not mandatory, but due to characteristics of elliptic curve, multiple public keys are recovered from signature and verifier can determine what he should choose among them by recovery ID v. Or, verifier can check whether one of recovered key is same to known signer's public key.
Everytime you update the ABI file, a record is stored on chain. The action is eosio::setabi. Therefore it would be possible to say which version of the ABI file was current on the blockchain at the time of a transaction being signed.
You can sign everything you want using eosjs-ecc.
See here Github eosjs-ecc
ecc.sign(Buffer.from(data, 'utf8'), private_key)
But be aware, that the transaction always has to match with the ABI.