@libp2p/interface
Version:
The interface implemented by a libp2p node
348 lines (288 loc) • 8.21 kB
text/typescript
import type { AbortOptions } from './index.ts'
import type { CID } from 'multiformats/cid'
import type { MultihashDigest } from 'multiformats/hashes/interface'
import type { Uint8ArrayList } from 'uint8arraylist'
export type KeyType = 'RSA' | 'Ed25519' | 'secp256k1' | 'ECDSA'
export interface RSAPublicKey {
/**
* The type of this key
*/
readonly type: 'RSA'
/**
* PKIX in ASN1 DER format
*/
readonly raw: Uint8Array
/**
* The public key as a JSON web key
*/
readonly jwk: JsonWebKey
/**
* Returns `true` if the passed object matches this key
*/
equals(key?: any): boolean
/**
* Returns this public key as a Multihash digest.
*
* It contains a sha256 hash of the protobuf version of the public key.
*/
toMultihash(): MultihashDigest<0x12>
/**
* Return this public key as a CID encoded with the `libp2p-key` codec
*
* The digest contains a sha256 hash of the protobuf version of the public
* key.
*/
toCID(): CID<unknown, 0x72, 0x12, 1>
/**
* Verify the passed data was signed by the private key corresponding to this
* public key
*/
verify(data: Uint8Array | Uint8ArrayList, sig: Uint8Array, options?: AbortOptions): boolean | Promise<boolean>
/**
* Returns this key as a multihash with base58btc encoding
*/
toString(): string
}
export interface Ed25519PublicKey {
/**
* The type of this key
*/
readonly type: 'Ed25519'
/**
* The raw public key bytes
*/
readonly raw: Uint8Array
/**
* Returns `true` if the passed object matches this key
*/
equals(key?: any): boolean
/**
* Returns this public key as an identity hash containing the protobuf wrapped
* public key
*/
toMultihash(): MultihashDigest<0x0>
/**
* Return this public key as a CID encoded with the `libp2p-key` codec
*
* The digest contains an identity hash containing the protobuf wrapped
* version of the public key.
*/
toCID(): CID<unknown, 0x72, 0x0, 1>
/**
* Verify the passed data was signed by the private key corresponding to this
* public key
*/
verify(data: Uint8Array | Uint8ArrayList, sig: Uint8Array, options?: AbortOptions): boolean | Promise<boolean>
/**
* Returns this key as a multihash with base58btc encoding
*/
toString(): string
}
export interface Secp256k1PublicKey {
/**
* The type of this key
*/
readonly type: 'secp256k1'
/**
* The raw public key bytes
*/
readonly raw: Uint8Array
/**
* Returns `true` if the passed object matches this key
*/
equals(key?: any): boolean
/**
* Returns this public key as an identity hash containing the protobuf wrapped
* public key
*/
toMultihash(): MultihashDigest<0x0>
/**
* Return this public key as a CID encoded with the `libp2p-key` codec
*
* The digest contains an identity hash containing the protobuf wrapped
* version of the public key.
*/
toCID(): CID<unknown, 0x72, 0x0, 1>
/**
* Verify the passed data was signed by the private key corresponding to this
* public key
*/
verify(data: Uint8Array | Uint8ArrayList, sig: Uint8Array, options?: AbortOptions): boolean | Promise<boolean>
/**
* Returns this key as a multihash with base58btc encoding
*/
toString(): string
}
export interface ECDSAPublicKey {
/**
* The type of this key
*/
readonly type: 'ECDSA'
/**
* The public key as a DER-encoded PKIMessage
*/
readonly raw: Uint8Array
/**
* The public key as a JSON web key
*/
readonly jwk: JsonWebKey
/**
* Returns `true` if the passed object matches this key
*/
equals(key?: any): boolean
/**
* Returns this public key as an identity hash containing the protobuf wrapped
* public key
*/
toMultihash(): MultihashDigest<0x0>
/**
* Return this public key as a CID encoded with the `libp2p-key` codec
*
* The digest contains an identity hash containing the protobuf wrapped
* version of the public key.
*/
toCID(): CID<unknown, 0x72, 0x0, 1>
/**
* Verify the passed data was signed by the private key corresponding to this
* public key
*/
verify(data: Uint8Array | Uint8ArrayList, sig: Uint8Array, options?: AbortOptions): boolean | Promise<boolean>
/**
* Returns this key as a multihash with base58btc encoding
*/
toString(): string
}
export type PublicKey = RSAPublicKey | Ed25519PublicKey | Secp256k1PublicKey | ECDSAPublicKey
/**
* Returns true if the passed argument has type overlap with the `PublicKey`
* interface. Can be used to disambiguate object types.
*/
export function isPublicKey (key?: any): key is PublicKey {
if (key == null) {
return false
}
return (key.type === 'RSA' || key.type === 'Ed25519' || key.type === 'secp256k1' || key.type === 'ECDSA') &&
key.raw instanceof Uint8Array &&
typeof key.equals === 'function' &&
typeof key.toMultihash === 'function' &&
typeof key.toCID === 'function' &&
typeof key.verify === 'function'
}
/**
* Generic private key interface
*/
export interface RSAPrivateKey {
/**
* The type of this key
*/
readonly type: 'RSA'
/**
* The public key that corresponds to this private key
*/
readonly publicKey: RSAPublicKey
/**
* PKIX in ASN1 DER format
*/
readonly raw: Uint8Array
/**
* The private key as a JSON web key
*/
readonly jwk: JsonWebKey
/**
* Returns `true` if the passed object matches this key
*/
equals(key?: any): boolean
/**
* Sign the passed data with this private key and return the signature for
* later verification
*/
sign(data: Uint8Array | Uint8ArrayList, options?: AbortOptions): Uint8Array | Promise<Uint8Array>
}
export interface Ed25519PrivateKey {
/**
* The type of this key
*/
readonly type: 'Ed25519'
/**
* The public key that corresponds to this private key
*/
readonly publicKey: Ed25519PublicKey
/**
* The raw private key bytes
*/
readonly raw: Uint8Array
/**
* Returns `true` if the passed object matches this key
*/
equals(key?: any): boolean
/**
* Sign the passed data with this private key and return the signature for
* later verification
*/
sign(data: Uint8Array | Uint8ArrayList, options?: AbortOptions): Uint8Array | Promise<Uint8Array>
}
export interface Secp256k1PrivateKey {
/**
* The type of this key
*/
readonly type: 'secp256k1'
/**
* The public key that corresponds to this private key
*/
readonly publicKey: Secp256k1PublicKey
/**
* The raw private key bytes
*/
readonly raw: Uint8Array
/**
* Returns `true` if the passed object matches this key
*/
equals(key?: any): boolean
/**
* Sign the passed data with this private key and return the signature for
* later verification
*/
sign(data: Uint8Array | Uint8ArrayList, options?: AbortOptions): Uint8Array | Promise<Uint8Array>
}
export interface ECDSAPrivateKey {
/**
* The type of this key
*/
readonly type: 'ECDSA'
/**
* The public key that corresponds to this private key
*/
readonly publicKey: ECDSAPublicKey
/**
* The private key as a DER-encoded PKIMessage
*/
readonly raw: Uint8Array
/**
* The private key as a JSON web key
*/
readonly jwk: JsonWebKey
/**
* Returns `true` if the passed object matches this key
*/
equals(key?: any): boolean
/**
* Sign the passed data with this private key and return the signature for
* later verification
*/
sign(data: Uint8Array | Uint8ArrayList, options?: AbortOptions): Uint8Array | Promise<Uint8Array>
}
export type PrivateKey = RSAPrivateKey | Ed25519PrivateKey | Secp256k1PrivateKey | ECDSAPrivateKey
/**
* Returns true if the passed argument has type overlap with the `PrivateKey`
* interface. Can be used to disambiguate object types.
*/
export function isPrivateKey (key?: any): key is PrivateKey {
if (key == null) {
return false
}
return (key.type === 'RSA' || key.type === 'Ed25519' || key.type === 'secp256k1' || key.type === 'ECDSA') &&
isPublicKey(key.publicKey) &&
key.raw instanceof Uint8Array &&
typeof key.equals === 'function' &&
typeof key.sign === 'function'
}