Skip to content

Latest commit

 

History

History
59 lines (46 loc) · 2.49 KB

File metadata and controls

59 lines (46 loc) · 2.49 KB

Response Verification

Response verification on the Internet Computer is the process of verifying that a canister's response to an HTTP query call has gone through consensus with other replicas hosting the same canister.

This package encapsulates the protocol for such verification. It is used by the Service Worker, ICX Proxy, HTTP Proxy, and may be used by other implementations of the HTTP Gateway Protocol in the future. These projects can be used as references when working on new integrations.

Usage

import initResponseVerification, {
  verifyRequestResponsePair,
  ResponseVerificationError,
  ResponseVerificationErrorCode,
} from '@dfinity/response-verification';

// this is necessary for web, but not for NodeJS consumers
await initResponseVerification();

try {
  const result = verifyRequestResponsePair(
    request,
    response,
    canister_id,
    current_time_ns,
    max_cert_time_offset_ns,
    fromHex(IC_ROOT_KEY),
  );

  // do something with the result
  // `result.passed` will be true if verification succeeds, false otherwise, and
  // `result.response` will contain the certified response object if verification was successful.
} catch (error) {
  if (error instanceof ResponseVerificationError) {
    switch (error.code) {
      case ResponseVerificationErrorCode.MalformedCbor:
        // the cbor returned from the replica was malformed.
        // ...
        break;

      case ResponseVerificationErrorCode.MalformedCertificate:
        // the certificate returned from the replica was malformed.
        // ...
        break;

      // Other error cases...
    }
  }
}

Examples

See the following for working examples:

Note that when bundling for a service worker with Webpack. The target property must be set to webworker.