SigningKey
A SigningKey provides high-level access to the elliptic curve cryptography (ECC) operations and key management.
Constructors
new SigningKey()
new SigningKey(privateKey): SigningKey
Creates a new SigningKey for privateKey
.
Parameters
Parameter | Type |
---|---|
privateKey | BytesLike |
Returns
Source
Accessors
compressedPublicKey
get compressedPublicKey(): string
The compressed public key.
This will always begin with either the prefix 0x02
or 0x03
and be 68 characters long (the 0x
prefix and 33
hexadecimal nibbles)
Returns
string
Source
privateKey
get privateKey(): string
The private key.
Returns
string
Source
publicKey
get publicKey(): string
The uncompressed public key.
This will always begin with the prefix 0x04
and be 132 characters long (the 0x
prefix and 130 hexadecimal
nibbles).
Returns
string
Source
Methods
computeSharedSecret()
computeSharedSecret(other): string
Returns the ECDH shared secret between this
private key and the other
key.
The other
key may be any type of key, a raw public key, a compressed/uncompressed pubic key or aprivate key.
Best practice is usually to use a cryptographic hash on the returned value before using it as a symetric secret.
Parameters
Parameter | Type | Description |
---|---|---|
other | BytesLike | The other key to compute the shared secret with. |
Returns
string
The shared secret.
Example
sign1 = new SigningKey(id('some-secret-1'));
sign2 = new SigningKey(id('some-secret-2'));
// Notice that privA.computeSharedSecret(pubB)...
sign1.computeSharedSecret(sign2.publicKey);
// ...is equal to privB.computeSharedSecret(pubA).
sign2.computeSharedSecret(sign1.publicKey);
Source
sign()
sign(digest): Signature
Return the signature of the signed digest
.
Parameters
Parameter | Type | Description |
---|---|---|
digest | BytesLike | The data to sign. |
Returns
The signature of the data.
Throws
If the digest is not 32 bytes long.
Source
addPoints()
static addPoints(
p0,
p1,
compressed?): string
Returns the point resulting from adding the ellipic curve points p0
and p1
.
This is not a common function most developers should require, but can be useful for certain privacy-specific techniques.
For example, it is used by QuaiHDWallet to compute child addresses from parent public keys and chain codes.
Parameters
Parameter | Type | Description |
---|---|---|
p0 | BytesLike | The first point to add. |
p1 | BytesLike | The second point to add. |
compressed ? | boolean | Whether to return the compressed public key. |
Returns
string
The sum of the points.
Source
computePublicKey()
static computePublicKey(key, compressed?): string
Compute the public key for key
, optionally compressed
.
The key
may be any type of key, a raw public key, a compressed/uncompressed public key or private key.
Parameters
Parameter | Type | Description |
---|---|---|
key | BytesLike | The key to compute the public key for. |
compressed ? | boolean | Whether to return the compressed public key. |
Returns
string
The public key.
Example
sign = new SigningKey(id('some-secret'));
// Compute the uncompressed public key for a private key
SigningKey.computePublicKey(sign.privateKey);
// Compute the compressed public key for a private key
SigningKey.computePublicKey(sign.privateKey, true);
// Compute the uncompressed public key
SigningKey.computePublicKey(sign.publicKey, false);
// Compute the Compressed a public key
SigningKey.computePublicKey(sign.publicKey, true);
Source
recoverPublicKey()
static recoverPublicKey(digest, signature): string
Returns the public key for the private key which produced the signature
for the given digest
.
Parameters
Parameter | Type | Description |
---|---|---|
digest | BytesLike | The data that was signed. |
signature | SignatureLike | The signature of the data. |
Returns
string
The public key.
Example
key = new SigningKey(id('some-secret'));
digest = id('hello world');
sig = key.sign(digest);
// Notice the signer public key...
key.publicKey;
// ...is equal to the recovered public key
SigningKey.recoverPublicKey(digest, sig);
Source
Was this page helpful?