0.0.1 • Published 4 months ago

@0xsequence/google-kms-signer v0.0.1

Weekly downloads
-
License
Apache-2.0
Repository
-
Last release
4 months ago

google-kms-signer

GoogleKmsSigner is an ethers.js- and sequence.js-compatible signer using Google Cloud Key Management Service keys

prerequisites

create google cloud kms key

https://console.cloud.google.com/security/kms/keyrings

  1. create project or use existing one
  2. create key ring or use existing one
  3. create key
  • protection level: hsm
  • key material: hsm-generated
  • purpose: asymmetric sign
  • algorithm: elliptic curve secp256k1 - sha256 digest

set up application default credentials

https://cloud.google.com/kms/docs/reference/libraries#authentication

  1. install gcloud cli
  2. gcloud auth application-default login
  3. authenticate

installation

these instructions assume pnpm, please refer to docs if you use something else

pnpm add @0xsequence/google-kms-signer

usage

integration

create a signer:

import { GoogleKmsSigner } from '@0xsequence/google-kms-signer'

const signer = new GoogleKmsSigner({
  project: 'my-project',
  location: 'my-location',
  keyRing: 'my-key-ring',
  cryptoKey: 'my-crypto-key',
  cryptoKeyVersion: 'my-crypto-key-version'
})

get your signer's address:

const address = await signer.getAddress()
console.log(address)

sign a message:

const message = 'hello world'
const signature = await signer.signMessage(message)

console.log(signature)
console.log(`${ethers.utils.verifyMessage(message, signature)} = ${address}`)

send a transaction:

const provider = new ethers.providers.JsonRpcProvider('https://my-json-rpc-provider.com')
const connectedSigner = signer.connect(provider)

const response = await connectedSigner.sendTransaction({
  to: 'destination address',
  value: 123
})

const receipt = await response.wait()
console.log(receipt)

sign for a sequence wallet:

import { Session } from '@0xsequence/auth'
import { isValidMessageSignature } from '@0xsequence/provider'

const session = await Session.singleSigner({
  signer,
  projectAccessKey: 'my-project-access-key'
})

const message = ethers.utils.toUtf8Bytes('hello world')
const signature = await session.account.signMessage(message, chainId, 'eip6492')

console.log(isValidMessageSignature(session.account.address, message, signature, provider))

running tests

cp .env.sample .env

edit the .env file, then:

pnpm test