namillum
Version:
Bubble Protocol SDK
211 lines (127 loc) • 4.67 kB
Markdown
# @zilliqa-js/crypto
> Cryptographic abstractions for working with Zilliqa's crypto primitives
## Functions
### `randomBytes(bytes: number): string`
Safely generates random bytes.
#### Parameters
`bytes`: `number` - the number of bytes to randomly generate
#### Returns
`string` - n randomly-generated bytes (hex-encoded).
### `generatePrivateKey(): string`
Generates a cryptographically-secure 32-byte private key.
#### Parameters
None
#### Returns
`string` - 32-byte hex-encoded private key.
### `getPubKeyFromPrivateKey(privateKey: string): string`
Retrieves the public key of the given hex-encoded private key.
#### Parameters
`privateKey`: `string` - 32-byte hex-encoded private key.
#### Returns
`string` - 33-byte hex-encoded public key.
### `getAddressFromPrivateKey(privateKey: string): string`
Retrieves the address from the given hex-encoded private key.
#### Parameters
`privateKey`: `string` - 32-byte hex-encoded private key.
#### Returns
`string` - 20-byte hex-encoded address.
### `compressPublicKey(publicKey: string): string`
Compresses a full-length public key by using a sign byte (02 or 03).
#### Parameters
`publicKey`: `string` - 65-byte hex-encoded public key.
#### Returns
`string` - 32-byte hex-encoded public key.
### `getAddressFromPublicKey(publicKey: string): string`
Returns the address derived from the given publicKey.
#### Parameters
`publicKey`: `string` - 32-byte hex-encoded compressed public key.
#### Returns
`string` - 20-byte hex-encoded address.
### `verifyPrivateKey(privateKey: string): boolean`
Returns true if the given privateKey is valid.
#### Parameters
`string` - 32-byte hex-encoded private key.
#### Returns
`boolean`
### `sign(msg: Buffer, privateKey: string, pubKey: string): string`
Generates a Schnorr signature over a `Buffer` of arbitrary bytes. This function
must be used to sign all transactions to be broadcast on the blockchain.
#### Parameters
`msg`: `Buffer` - arbitrary sequence of bytes to be signed. `privateKey`:
`string` - 32-byte hex-encoded private key. `pubKey`: `string` - 32-byte
hex-encoded private key.
#### Returns
`boolean`
### `encryptPrivateKey(kdf: KDF, privateKey: string, passphrase: string): Promise<string>`
Generates a version 3 keystore file that complies with the
[Web3 Secret Storage definition](https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition).
#### Parameters
`kdf`: `'pbkdf2' | 'scrypt'` - the key derivation function. Only `pbkdf2` and
`scrypt` are currently supported. `privateKey`: `string` - 32-byte hex-encoded
private key. `passphrase`: `string` - the passphrase to be used to encrypt the
private key.
#### Returns
`Promise<string>` - the stringified JSON file.
### `decryptPrivateKey(passphrase: string, keystore: KeystoreV3): Promise<string>`
Generates a version 3 keystore file that complies with the
[Web3 Secret Storage definition](https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition).
#### Parameters
`passphrase`: `string` - the passphrase to be used to encrypt the private key.
`keystore`: `KeystoreV3` - the object containing the deserialised JSON obtained
from `encryptPrivateKey`.
#### Returns
`Promise<string>` - the hex-encoded private key.
### `toBech32Address(address: string): string`
Encodes a 20-byte hex encoded address as a bech32 address. Non-hex-encoded
strings will cause an error to be thrown.
#### Parameters
`address`: `string` - the 20-byte hex-encoded address. `0x` prefix optional.
#### Returns
`string` - the bech32 encoded address. It is always prefixed by `zil1`, where
`1` is a separator.
#### Example
```text
0x1d19918a737306218b5cbb3241fcdcbd998c3a72 (hex) -> zil1r5verznnwvrzrz6uhveyrlxuhkvccwnju4aehf (bech32)
```
### `fromBech32Address(address: string): string`
Encodes a a bech32 address as a hex-encoded string. Invalid bech32 addresses
will cause an error to be thrown.
#### Parameters
`address`: `string` - the 42-character bech32 address.
#### Returns
`string` - the checksum 20-byte hex-encoded address.
#### Example
```test
zil1r5verznnwvrzrz6uhveyrlxuhkvccwnju4aehf (bech32) -> 0x1d19918a737306218b5cbb3241fcdcbd998c3a72 (hex)
```
#### Interfaces
```ts
interface PBKDF2Params {
salt: string;
dklen: number;
c: number;
}
interface ScryptParams {
salt: string;
dklen: number;
n: number;
r: number;
p: number;
}
type KDFParams = PBKDF2Params | ScryptParams;
interface KeystoreV3 {
address: string;
crypto: {
cipher: string;
cipherparams: {
iv: string;
};
ciphertext: string;
kdf: KDF;
kdfparams: KDFParams;
mac: string;
};
id: string;
version: 3;
}
```