objectECKey
The ECKey class is incryptoImplemented in the module, you can use this class to generate ECDSA key pairs, signatures and verification messages, etc.
Here is an example:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15const crypto = require("crypto");
// generate a secp256k1 key
const key = crypto.generateKey("secp256k1");
console.log("Private key:", key.pem());
console.log("Public key:", key.publicKey.pem());
const message = "Hello, fibjs!";
// sign a message
const sig = key.sign(message);
console.log("Signature:", sig.hex());
// very the signature
const verify = key.verify(message, sig);
console.log("Verify result:", verify);
In this example, we first generate an ECKey object of secp256k1, and then print the generated public and private keys. Next, we signed the message "Hello, fibjs!" and printed the signature result. Finally, we verified the signature using the same key object and printed the verification result.
inheritance relationship
Constructor
ECKey
Construct ECKey from key in DER format
1
2new ECKey(Buffer DerKey,
String password = "");
Call parameters:
- DerKey:Buffer, key in DER format
- password: String, decryption password
Construct ECKey from key in PEM format
1
2new ECKey(String pemKey,
String password = "");
Call parameters:
- pemKey: String, key in PEM format
- password: String, decryption password
Construct ECKey from key in JSON format
1new ECKey(Object jsonKey);
Call parameters:
- jsonKey: Object, key in JSON format
The format of jsonKey supports the following two types, EC private key:
1
2
3
4
5
6
7{
"kty": "EC",
"crv": "P-521",
"x": "ATfNNFuuvlGxrTGoXgyfSAGgRNNDnO3rN3k74urKJdVS14RYhdnSwm91Bm-F1l-T1XKlAY2yRnzG9w1Ukvo8c0wL",
"y": "ASBHqrruB6kdkEUB3vlW3-UIkk4HtKdUeTwN-7m3j2rgZvYR1ffRAapDvWqKGiBjomqWafxokBkbDI0c95f6f4XU",
"d": "AfkIbUHXfW41njdpoKuqqKludcoLJS8D_oMEwkj-GVaXFNKccIoF5iKGu2c69kNDjo83R_7wyGlfRczsklkik1ST"
}
EC public key:
1
2
3
4
5
6{
"kty": "EC",
"crv": "P-521",
"x": "ATfNNFuuvlGxrTGoXgyfSAGgRNNDnO3rN3k74urKJdVS14RYhdnSwm91Bm-F1l-T1XKlAY2yRnzG9w1Ukvo8c0wL",
"y": "ASBHqrruB6kdkEUB3vlW3-UIkk4HtKdUeTwN-7m3j2rgZvYR1ffRAapDvWqKGiBjomqWafxokBkbDI0c95f6f4XU"
}
static function
recover
Recover public key from recoverable signature, only supports secp256k1
1
2static ECKey ECKey.recover(Buffer data,
Buffer sig) async;
Call parameters:
Return results:
- ECKey, returns an object containing the public key
from
Load a key in DER format
1
2static PKey ECKey.from(Buffer DerKey,
String password = "");
Call parameters:
- DerKey:Buffer, key in DER format
- password: String, decryption password
Return results:
- PKey, returns an object containing the key
Load a key in PEM format
1
2static PKey ECKey.from(String pemKey,
String password = "");
Call parameters:
- pemKey: String, key in PEM format
- password: String, decryption password
Return results:
- PKey, returns an object containing the key
Load a key in JSON format
1static PKey ECKey.from(Object jsonKey);
Call parameters:
- jsonKey: Object, key in JSON format
Return results:
- PKey, returns an object containing the key
The format of jsonKey supports the following four types of RSA private keys:
1
2
3
4
5
6
7
8
9
10
11{
"kty": "RSA",
"n": "0m5lvKpWqy9JS7tV2HIPqHCYHLquSuxIC3F8strIQLJKO3rZmTT96KTnhsOfBO7Y1bI7mnT0PB3_vcHd9ekWMEoZJQw7MuB8KeM_Wn54-elJr5DNLk5bMppSGxX7ZnumiXGG51_X3Yp-_EbGtDG80GxXXix7Mucyo7K25uE0uW8=",
"e": "AQAB",
"d": "agN2O9NxMHL1MTMi75WfL9Pxvl-KWXKqZSF6mjzAsF9iKI8euyHIXYFepzU8kual1RsjDhCnzvWqFvZplW8lXqrHf_P-rS_9Y4gBUw6pjnI_DnFIRwWHRvrUHHSCfWOdTCIKdOTkgLZuGFuhEY3RMIW0WSYejjLtftwy0RVxAzk=",
"p": "6a4G1qmfwWmn1biigN7IVFlkbLf9oVe6g7rOmHxI-hn1GRxKDSVuAUrmR1IhuAnca9M0y7SD-7TUs6wjOxWxaw==",
"q": "5ofkxFKdPBD0CQHMb9q13AMHUVe0rJ-hSjqqIBrmqApUOneyAcMV76M0QyIQnI2p3POa4Qu_7XChDwRVl7LlDQ==",
"dp": "2mXGiGwCHl8j-FBWuID-1C6z-BRB3MBEVoeKPOOzxOPruatB3mWEGXsqG7A8SWgV9URxTI2K6P3J6Z7RUpBkvw==",
"dq": "oagn5vfb5NQqnOpS9xkSsD67cfIj821ZSFlNFYhnuOzNVda7z_qCtnHm4zDPH0lEFXoKYMfBhfqWJpaugttjPQ==",
"qi": "dqEQgxNmOVFrF4s776hTqeC6oEDila8EvpVb2F2ZvwAOLjCQ66OiAZK1BiYGHqUy0NeqNmtlsLSuBEZQZvqZwg=="
}
RSA public key:
1
2
3
4
5{
"kty": "RSA",
"n": "0m5lvKpWqy9JS7tV2HIPqHCYHLquSuxIC3F8strIQLJKO3rZmTT96KTnhsOfBO7Y1bI7mnT0PB3_vcHd9ekWMEoZJQw7MuB8KeM_Wn54-elJr5DNLk5bMppSGxX7ZnumiXGG51_X3Yp-_EbGtDG80GxXXix7Mucyo7K25uE0uW8=",
"e": "AQAB"
}
EC private key:
1
2
3
4
5
6
7{
"kty": "EC",
"crv": "P-521",
"x": "ATfNNFuuvlGxrTGoXgyfSAGgRNNDnO3rN3k74urKJdVS14RYhdnSwm91Bm-F1l-T1XKlAY2yRnzG9w1Ukvo8c0wL",
"y": "ASBHqrruB6kdkEUB3vlW3-UIkk4HtKdUeTwN-7m3j2rgZvYR1ffRAapDvWqKGiBjomqWafxokBkbDI0c95f6f4XU",
"d": "AfkIbUHXfW41njdpoKuqqKludcoLJS8D_oMEwkj-GVaXFNKccIoF5iKGu2c69kNDjo83R_7wyGlfRczsklkik1ST"
}
EC public key:
1
2
3
4
5
6{
"kty": "EC",
"crv": "P-521",
"x": "ATfNNFuuvlGxrTGoXgyfSAGgRNNDnO3rN3k74urKJdVS14RYhdnSwm91Bm-F1l-T1XKlAY2yRnzG9w1Ukvo8c0wL",
"y": "ASBHqrruB6kdkEUB3vlW3-UIkk4HtKdUeTwN-7m3j2rgZvYR1ffRAapDvWqKGiBjomqWafxokBkbDI0c95f6f4XU"
}
member properties
curve
String, returns the elliptic curve name of the current algorithm
1readonly String ECKey.curve;
name
String, returns the current algorithm name
1readonly String ECKey.name;
keySize
Integer, returns the current algorithm password length in bits
1readonly Integer ECKey.keySize;
alg
String, returns and sets the current object signature algorithm
1readonly String ECKey.alg;
publicKey
PKey, returns the public key of the current key
1readonly PKey ECKey.publicKey;
Return results:
- the public key of the current key
member function
computeSecret
Calculate the Elliptic Curve Diffie-Hellman (ECDH) shared key using the current algorithm
1Buffer ECKey.computeSecret(ECKey publicKey) async;
Call parameters:
- publicKey: ECKey, specify the other party’s public key
Return results:
- Buffer, returns the calculated shared secret key
isPrivate
Query whether the current key is a private key
1Boolean ECKey.isPrivate();
Return results:
- Boolean, is True and represents the private key
clone
copy current key
1PKey ECKey.clone();
Return results:
- PKey, the copy object of the current key
pem
Returns the PEM format encoding of the current key
1String ECKey.pem();
Return results:
- String, PEM format encoding of the current key
der
Returns the DER format encoding of the current key
1Buffer ECKey.der();
Return results:
- Buffer, the DER format encoding of the current key
json
Returns the jwt format encoding of the current key
1Object ECKey.json(Object opts = {});
Call parameters:
- opts: Object, specify export options
Return results:
- Object, the jwt format encoding of the current key
opts supports the following parameters:
1
2
3{
compress: false // specify whether to output public key in compressed form
}
Curves that support compression are: secp192r1, secp192k1, secp256r1, secp256k1, brainpoolP256r1, secp384r1, brainpoolP384r1, brainpoolP512r1, secp521r1, sm2
equals
Compare two public/private keys to see if they are the same
1Boolean ECKey.equals(object key);
Call parameters:
- key:object, specify the other party’s public/private key
Return results:
- Boolean, if they are the same, return true
encrypt
Encrypt data using current algorithm cipher public key
1Buffer ECKey.encrypt(Buffer data) async;
Call parameters:
- data:Buffer, specify the data to be encrypted
Return results:
- Buffer, returns the encrypted data
decrypt
Decrypt data using current algorithm password private key
1Buffer ECKey.decrypt(Buffer data) async;
Call parameters:
- data:Buffer, specify the data to be decrypted
Return results:
- Buffer, returns the decrypted data
sign
Sign data using the current algorithm cryptographic private key
1
2Buffer ECKey.sign(Buffer data,
Object opts = {}) async;
Call parameters:
- data:Buffer, specify the data to be signed. When the algorithm is RSA, the input parameter needs to be executed with the algorithm specified by alg.hash
- opts: Object, specify signature options
Return results:
- Buffer, return the signed data
opts supports the following parameters:
1
2
3
4
5{
alg: 0, // specify the hash algorithm for signing, only valid for RSA, default is 0. Supported algorithms: 0=NONE,1=MD5,2=SHA1,3=SHA224,4=SHA256,5=SHA384,6=SHA512,7=RIPEMD160
format: "der", // specify the signature format, default is der, supported formats: der, raw
recoverable: false // specify whether to return a recoverable signature, only valid for secp256k1
}
verify
Verify data using current algorithm cryptographic public key
1
2
3Boolean ECKey.verify(Buffer data,
Buffer sign,
Object opts = {}) async;
Call parameters:
- data:Buffer, specify the data to be verified
- sign:Buffer, specify the signature to be verified
- opts: Object, specify verification options
Return results:
- Boolean, returns the verified result
opts supports the following parameters:
1
2
3
4{
alg: 0, // specify the hash algorithm for signing, only valid for RSA, default is 0. Supported algorithms: 0=NONE,1=MD5,2=SHA1,3=SHA224,4=SHA256,5=SHA384,6=SHA512,7=RIPEMD160
format: "der" // specify the signature format, default is der, supported formats: der, raw
}
toString
Returns the string representation of the object. Generally, "[Native Object]" is returned. The object can be re-implemented according to its own characteristics.
1String ECKey.toString();
Return results:
- String, returns the string representation of the object
toJSON
Returns a JSON format representation of the object, generally returning a collection of readable properties defined by the object.
1Value ECKey.toJSON(String key = "");
Call parameters:
- key: String, not used
Return results:
- Value, returns a value containing JSON serializable