@ldclabs/ic-auth 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,14 +1,63 @@
1
- # `@ldclabs/ic-auth`
2
- ![License](https://img.shields.io/crates/l/ic-auth.svg)
1
+ # @ldclabs/ic-auth
2
+ ![License](https://img.shields.io/npm/l/@ldclabs/ic-auth)
3
3
  [![Test](https://github.com/ldclabs/ic-auth/actions/workflows/test.yml/badge.svg)](https://github.com/ldclabs/ic-auth/actions/workflows/test.yml)
4
4
  [![NPM version](http://img.shields.io/npm/v/@ldclabs/ic-auth.svg)](https://www.npmjs.com/package/@ldclabs/ic-auth)
5
5
 
6
6
  [IC-Auth](https://github.com/ldclabs/ic-auth) is a comprehensive web authentication system based on the Internet Computer (ICP) identity.
7
7
 
8
- `@ldclabs/ic-auth` is the Typescript version of the client SDK for the ic-auth.
8
+ `@ldclabs/ic-auth` is the client-side TypeScript SDK for `ic-auth`, providing essential utilities for identity management and data serialization.
9
+
10
+ ## Installation
11
+
12
+ Install the package using your favorite package manager:
13
+
14
+ ```bash
15
+ npm install @ldclabs/ic-auth
16
+ ```
17
+
18
+ or
19
+
20
+ ```bash
21
+ yarn add @ldclabs/ic-auth
22
+ ```
23
+
24
+ This package has peer dependencies on several `@dfinity` packages, which you should also have in your project.
25
+
26
+ ```json
27
+ "peerDependencies": {
28
+ "@dfinity/candid": ">=3.2.0",
29
+ "@dfinity/agent": ">=3.2.0",
30
+ "@dfinity/identity": ">=3.2.0",
31
+ "@dfinity/principal": ">=3.2.0",
32
+ "@noble/hashes": ">=1.8.0",
33
+ "cborg": ">=4.2.0"
34
+ }
35
+ ```
36
+
37
+ ## Usage
38
+
39
+ Here is a basic example of how to use the library to create a custom identity and sign a message.
40
+
41
+ ```typescript
42
+ import { DelegationIdentity, Ed25519KeyIdentity, toDelegationIdentity, signCborMessage } from '@ldclabs/ic-auth';
43
+
44
+ async function main() {
45
+ // 1. Create a base identity (e.g., from a private key)
46
+ const baseIdentity = Ed25519KeyIdentity.generate();
47
+
48
+ // 2. Create an AuthIdentity
49
+ const authIdentity = toDelegationIdentity(baseIdentity);
50
+
51
+ // 4. Sign a message (e.g., a challenge from the backend)
52
+ const message = { challenge: 'Hello, world!' };
53
+ const signedEnvelope = await signCborMessage.signCborMessage(message);
54
+ }
55
+
56
+ main();
57
+ ```
9
58
 
10
59
  ## License
11
60
 
12
61
  Copyright © 2024-2025 [LDC Labs](https://github.com/ldclabs).
13
62
 
14
- Licensed under the MIT License. See [LICENSE](../../LICENSE-MIT) for details.
63
+ Licensed under the MIT License. See [LICENSE](../../LICENSE-MIT) for details.
package/dist/cbor.d.ts CHANGED
@@ -1,3 +1,9 @@
1
+ import { Token } from 'cborg';
1
2
  export { decode, encode } from 'cborg';
3
+ export declare const rfc8949EncodeOptions: Readonly<{
4
+ float64: true;
5
+ mapSorter: typeof rfc8949MapSorter;
6
+ }>;
2
7
  export declare function deterministicEncode(data: any): Uint8Array;
3
8
  export declare function compareBytes(a: Uint8Array, b: Uint8Array): number;
9
+ declare function rfc8949MapSorter(e1: (Token | Token[])[], e2: (Token | Token[])[]): number;
package/dist/cbor.js CHANGED
@@ -1,8 +1,12 @@
1
1
  import { encode, Token } from 'cborg';
2
2
  export { decode, encode } from 'cborg';
3
+ export const rfc8949EncodeOptions = Object.freeze({
4
+ float64: true,
5
+ mapSorter: rfc8949MapSorter
6
+ });
3
7
  // RFC 8949 Deterministic Encoding: The keys in every map MUST be sorted in the bytewise lexicographic order of their deterministic encodings.
4
8
  export function deterministicEncode(data) {
5
- return encode(data, { float64: true, mapSorter });
9
+ return encode(data, rfc8949EncodeOptions);
6
10
  }
7
11
  export function compareBytes(a, b) {
8
12
  if (a instanceof Uint8Array && b instanceof Uint8Array) {
@@ -22,7 +26,7 @@ export function compareBytes(a, b) {
22
26
  }
23
27
  throw new Error('ic-auth: compareBytes: invalid arguments');
24
28
  }
25
- function mapSorter(e1, e2) {
29
+ function rfc8949MapSorter(e1, e2) {
26
30
  if (e1[0] instanceof Token && e2[0] instanceof Token) {
27
31
  const t1 = e1[0];
28
32
  const t2 = e2[0];
@@ -35,6 +39,6 @@ function mapSorter(e1, e2) {
35
39
  }
36
40
  return compareBytes(t1._keyBytes, t2._keyBytes);
37
41
  }
38
- throw new Error('ic-auth: mapSorter: complex key types are not supported yet');
42
+ throw new Error('rfc8949MapSorter: complex key types are not supported yet');
39
43
  }
40
44
  //# sourceMappingURL=cbor.js.map
package/dist/cbor.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cbor.js","sourceRoot":"","sources":["../src/cbor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAErC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAEtC,8IAA8I;AAC9I,MAAM,UAAU,mBAAmB,CAAC,IAAS;IAC3C,OAAO,MAAM,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;AACnD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAa,EAAE,CAAa;IACvD,IAAI,CAAC,YAAY,UAAU,IAAI,CAAC,YAAY,UAAU,EAAE,CAAC;QACvD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACZ,OAAO,CAAC,CAAA;QACV,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClB,SAAQ;YACV,CAAC;YACD,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC7B,CAAC;QAED,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YACxB,OAAO,CAAC,CAAC,CAAA;QACX,CAAC;QAED,OAAO,CAAC,CAAA;IACV,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;AAC7D,CAAC;AAID,SAAS,SAAS,CAAC,EAAuB,EAAE,EAAuB;IACjE,IAAI,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,EAAE,CAAC;QACrD,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAY,CAAA;QAC3B,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAY,CAAA;QAE3B,sBAAsB;QACtB,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC;YAClB,EAAE,CAAC,SAAS,GAAG,mBAAmB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;QAC9C,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC;YAClB,EAAE,CAAC,SAAS,GAAG,mBAAmB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;QAC9C,CAAC;QAED,OAAO,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,CAAA;IACjD,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAA;AAChF,CAAC"}
1
+ {"version":3,"file":"cbor.js","sourceRoot":"","sources":["../src/cbor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAErC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAEtC,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC;IAChD,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,gBAAgB;CAC5B,CAAC,CAAA;AAEF,8IAA8I;AAC9I,MAAM,UAAU,mBAAmB,CAAC,IAAS;IAC3C,OAAO,MAAM,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAA;AAC3C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAa,EAAE,CAAa;IACvD,IAAI,CAAC,YAAY,UAAU,IAAI,CAAC,YAAY,UAAU,EAAE,CAAC;QACvD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACZ,OAAO,CAAC,CAAA;QACV,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClB,SAAQ;YACV,CAAC;YACD,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC7B,CAAC;QAED,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YACxB,OAAO,CAAC,CAAC,CAAA;QACX,CAAC;QAED,OAAO,CAAC,CAAA;IACV,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;AAC7D,CAAC;AAID,SAAS,gBAAgB,CACvB,EAAuB,EACvB,EAAuB;IAEvB,IAAI,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,EAAE,CAAC;QACrD,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAY,CAAA;QAC3B,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAY,CAAA;QAE3B,sBAAsB;QACtB,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC;YAClB,EAAE,CAAC,SAAS,GAAG,mBAAmB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;QAC9C,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC;YAClB,EAAE,CAAC,SAAS,GAAG,mBAAmB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;QAC9C,CAAC;QAED,OAAO,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,CAAA;IACjD,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;AAC9E,CAAC"}
@@ -4,6 +4,7 @@ import { SignedEnvelopeCompact } from './types.js';
4
4
  export { DelegationIdentity, Ed25519KeyIdentity, Ed25519PublicKey } from '@dfinity/identity';
5
5
  export declare function toDelegationIdentity(identity: SignIdentity): DelegationIdentity;
6
6
  export declare function signArbitrary(identity: DelegationIdentity, data: Uint8Array): Promise<SignedEnvelopeCompact>;
7
- export declare function signCborMessage(identity: DelegationIdentity, obj: any): Promise<SignedEnvelopeCompact>;
7
+ export declare function digestMessage(obj: any): Uint8Array;
8
+ export declare function signMessage(identity: DelegationIdentity, obj: any): Promise<SignedEnvelopeCompact>;
8
9
  export declare function bytesToBase64Url(bytes: Uint8Array): string;
9
10
  export declare function base64ToBytes(str: string): Uint8Array;
package/dist/identity.js CHANGED
@@ -20,10 +20,12 @@ export async function signArbitrary(identity, data) {
20
20
  h: data
21
21
  };
22
22
  }
23
- export async function signCborMessage(identity, obj) {
23
+ export function digestMessage(obj) {
24
24
  const data = deterministicEncode(obj);
25
- const digest = sha3_256(data);
26
- return signArbitrary(identity, digest);
25
+ return sha3_256(data);
26
+ }
27
+ export async function signMessage(identity, obj) {
28
+ return signArbitrary(identity, digestMessage(obj));
27
29
  }
28
30
  export function bytesToBase64Url(bytes) {
29
31
  return btoa(String.fromCodePoint(...bytes))
@@ -1 +1 @@
1
- {"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,EAAyB,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAE7E,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,mBAAmB,CAAA;AAE1B,MAAM,UAAU,oBAAoB,CAClC,QAAsB;IAEtB,OAAO,QAAQ,YAAY,kBAAkB;QAC3C,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,kBAAkB,CAAC,cAAc,CAC/B,QAAQ,EACR,eAAe,CAAC,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,CAAC,CACrE,CAAA;AACP,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAA4B,EAC5B,IAAgB;IAEhB,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACrC,MAAM,WAAW,GAAG,QAAQ;SACzB,aAAa,EAAE;SACf,WAAW,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAA;IAC7C,OAAO;QACL,CAAC,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE;QAClC,CAAC,EAAE,IAAI,UAAU,CAAC,GAAG,CAAC;QACtB,CAAC,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;QACnD,CAAC,EAAE,IAAI;KACR,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAA4B,EAC5B,GAAQ;IAER,MAAM,IAAI,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAA;IACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC7B,OAAO,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;AACxC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAiB;IAChD,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,CAAC;SACxC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC;SACpB,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC;SACpB,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;AACxB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO,UAAU,CAAC,IAAI,CACpB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EACnD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAE,CACzB,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,EAAyB,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAE7E,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,mBAAmB,CAAA;AAE1B,MAAM,UAAU,oBAAoB,CAClC,QAAsB;IAEtB,OAAO,QAAQ,YAAY,kBAAkB;QAC3C,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,kBAAkB,CAAC,cAAc,CAC/B,QAAQ,EACR,eAAe,CAAC,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,CAAC,CACrE,CAAA;AACP,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAA4B,EAC5B,IAAgB;IAEhB,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACrC,MAAM,WAAW,GAAG,QAAQ;SACzB,aAAa,EAAE;SACf,WAAW,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAA;IAC7C,OAAO;QACL,CAAC,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE;QAClC,CAAC,EAAE,IAAI,UAAU,CAAC,GAAG,CAAC;QACtB,CAAC,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;QACnD,CAAC,EAAE,IAAI;KACR,CAAA;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAQ;IACpC,MAAM,IAAI,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAA;IACrC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAA;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,QAA4B,EAC5B,GAAQ;IAER,OAAO,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAA;AACpD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAiB;IAChD,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,CAAC;SACxC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC;SACpB,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC;SACpB,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;AACxB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO,UAAU,CAAC,IAAI,CACpB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EACnD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAE,CACzB,CAAA;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ldclabs/ic-auth",
3
- "version": "0.1.2",
3
+ "version": "0.2.0",
4
4
  "type": "module",
5
5
  "description": "The Typescript version of the client SDK for the IC Auth.",
6
6
  "license": "MIT",