signify-ts
    Preparing search index...

    Class GroupIdentifierManager

    Identifier manager for group identifiers.

    A group identifier does not have its own private signing keys. Instead, this manager maps group event signing indexes onto the local member AID (mhab) and delegates actual signing to that member's key manager.

    The central invariant is that indexed rotation signatures carry two positions:

    • index points to the signer's current key in the event's current key list (k), which SignifyTS derives from states.
    • ondex points to the prior establishment event's next digest list (n), proving that the current key was a precommitted key.

    rstates are the proposed next digest source for the new event. They are not the signer authorization set for the event being signed.

    Implements

    Index

    Constructors

    Properties

    Methods

    Constructors

    • Creates a manager for either a new group event or an existing group AID.

      states and rstates are app-level key state records used when creating a new group event. keys and ndigs are persisted group manager params used when loading an existing group. For an existing group, ndigs is expected to be the current establishment event's next digest list.

      During group inception there is no separate prior establishment event, so gpndigs starts as the same digest list as gdigs. During rotation, gdigs changes to the proposed next digests, while gpndigs stays fixed for ondex derivation.

      Parameters

      • manager: IdentifierManagerFactory
      • mhab: {
            icp_dt: string;
            name: string;
            prefix: string;
            state: {
                b: string[];
                bt: string;
                c: string[];
                d: string;
                di: string;
                dt: string;
                ee: { ba?: unknown[]; br?: unknown[]; d: string; s: string };
                et: string;
                f: string;
                i: string;
                k: string[];
                kt: string | string[];
                n: string[];
                nt: string | string[];
                p: string;
                s: string;
                vn?: number[];
            };
            transferable: boolean;
            windexes: string[];
        } & (
            | {
                salty: {
                    dcode: string;
                    icodes: string[];
                    kidx: number;
                    ncodes: string[];
                    pidx: number;
                    stem: string;
                    sxlt: string;
                    tier: KeriaApi.Tier;
                    transferable: boolean;
                };
            }
            | { randy: { nxts: string[]; prxs: string[] } }
            | {
                group: {
                    keys: string[];
                    mhab: { name: string; prefix: string; icp_dt: string; state: { vn?: number[] | undefined; i: string; s: string; p: string; d: string; f: string; dt: string; et: string; kt: string | string[]; k: string[]; nt: string | string[]; ... 5 more ...; di: string; }; transferable: boolean; windexes: string[]; } & ({ ...; } | ... 2...;
                    ndigs: string[];
                };
            }
            | {
                extern: { extern_type: string; pidx: number } & {
                    [key: string]: unknown;
                };
            }
        )
      • states:
            | undefined
            | {
                b: string[];
                bt: string;
                c: string[];
                d: string;
                di: string;
                dt: string;
                ee: { ba?: unknown[]; br?: unknown[]; d: string; s: string };
                et: string;
                f: string;
                i: string;
                k: string[];
                kt: string | string[];
                n: string[];
                nt: string | string[];
                p: string;
                s: string;
                vn?: number[];
            }[] = undefined
        • undefined
        • {
              b: string[];
              bt: string;
              c: string[];
              d: string;
              di: string;
              dt: string;
              ee: { ba?: unknown[]; br?: unknown[]; d: string; s: string };
              et: string;
              f: string;
              i: string;
              k: string[];
              kt: string | string[];
              n: string[];
              nt: string | string[];
              p: string;
              s: string;
              vn?: number[];
          }[]
          • b: string[]
          • bt: string
            0
            
          • c: string[]
          • d: string
            
            
          • di: string
            
            
          • dt: string
            
            
          • ee: { ba?: unknown[]; br?: unknown[]; d: string; s: string }
            • Optionalba?: unknown[]
            • Optionalbr?: unknown[]
            • d: string
              
              
            • s: string
              0
              
          • et: string
            
            
          • f: string
            0
            
          • i: string
            
            
          • k: string[]
          • kt: string | string[]
          • n: string[]
          • nt: string | string[]
          • p: string
            
            
          • s: string
            0
            
          • Optionalvn?: number[]
      • rstates:
            | undefined
            | {
                b: string[];
                bt: string;
                c: string[];
                d: string;
                di: string;
                dt: string;
                ee: { ba?: unknown[]; br?: unknown[]; d: string; s: string };
                et: string;
                f: string;
                i: string;
                k: string[];
                kt: string | string[];
                n: string[];
                nt: string | string[];
                p: string;
                s: string;
                vn?: number[];
            }[] = undefined
        • undefined
        • {
              b: string[];
              bt: string;
              c: string[];
              d: string;
              di: string;
              dt: string;
              ee: { ba?: unknown[]; br?: unknown[]; d: string; s: string };
              et: string;
              f: string;
              i: string;
              k: string[];
              kt: string | string[];
              n: string[];
              nt: string | string[];
              p: string;
              s: string;
              vn?: number[];
          }[]
          • b: string[]
          • bt: string
            0
            
          • c: string[]
          • d: string
            
            
          • di: string
            
            
          • dt: string
            
            
          • ee: { ba?: unknown[]; br?: unknown[]; d: string; s: string }
            • Optionalba?: unknown[]
            • Optionalbr?: unknown[]
            • d: string
              
              
            • s: string
              0
              
          • et: string
            
            
          • f: string
            0
            
          • i: string
            
            
          • k: string[]
          • kt: string | string[]
          • n: string[]
          • nt: string | string[]
          • p: string
            
            
          • s: string
            0
            
          • Optionalvn?: number[]
      • keys: string[] = []
      • ndigs: string[] = []

      Returns GroupIdentifierManager

    Properties

    algo: Algos = Algos.group
    signers: Signer[]

    Retained for the IdentifierManager interface. Group signing delegates to the local member AID keeper instead of storing signers here.

    Methods

    • Returns {
          keys: string[];
          mhab: {
              icp_dt: string;
              name: string;
              prefix: string;
              state: {
                  b: string[];
                  bt: string;
                  c: string[];
                  d: string;
                  di: string;
                  dt: string;
                  ee: { ba?: unknown[]; br?: unknown[]; d: string; s: string };
                  et: string;
                  f: string;
                  i: string;
                  k: string[];
                  kt: string | string[];
                  n: string[];
                  nt: string | string[];
                  p: string;
                  s: string;
                  vn?: number[];
              };
              transferable: boolean;
              windexes: string[];
          } & (
              | {
                  salty: {
                      dcode: string;
                      icodes: string[];
                      kidx: number;
                      ncodes: string[];
                      pidx: number;
                      stem: string;
                      sxlt: string;
                      tier: KeriaApi.Tier;
                      transferable: boolean;
                  };
              }
              | { randy: { nxts: string[]; prxs: string[] } }
              | {
                  group: {
                      keys: string[];
                      mhab: { name: string; prefix: string; icp_dt: string; state: { vn?: number[] | undefined; i: string; s: string; p: string; d: string; f: string; dt: string; et: string; kt: string | string[]; k: string[]; nt: string | string[]; ... 5 more ...; di: string; }; transferable: boolean; windexes: string[]; } & ({ ...; } | ... 2...;
                      ndigs: string[];
                  };
              }
              | {
                  extern: { extern_type: string; pidx: number } & {
                      [key: string]: unknown;
                  };
              }
          );
          ndigs: string[];
      }

    • Performs a multisig rotation.

      states supplies the current group signing keys for the event being signed. rstates supplies the proposed next key digests to put in the new event. The prior next digests used for rotation ondex lookup stay unchanged until KERIA accepts the new establishment event and returns an updated group state.

      Parameters

      • _ncodes: string[]
      • _transferable: boolean
      • states: {
            b: string[];
            bt: string;
            c: string[];
            d: string;
            di: string;
            dt: string;
            ee: { ba?: unknown[]; br?: unknown[]; d: string; s: string };
            et: string;
            f: string;
            i: string;
            k: string[];
            kt: string | string[];
            n: string[];
            nt: string | string[];
            p: string;
            s: string;
            vn?: number[];
        }[]
        • b: string[]
        • bt: string
          0
          
        • c: string[]
        • d: string
          
          
        • di: string
          
          
        • dt: string
          
          
        • ee: { ba?: unknown[]; br?: unknown[]; d: string; s: string }
          • Optionalba?: unknown[]
          • Optionalbr?: unknown[]
          • d: string
            
            
          • s: string
            0
            
        • et: string
          
          
        • f: string
          0
          
        • i: string
          
          
        • k: string[]
        • kt: string | string[]
        • n: string[]
        • nt: string | string[]
        • p: string
          
          
        • s: string
          0
          
        • Optionalvn?: number[]
      • rstates: {
            b: string[];
            bt: string;
            c: string[];
            d: string;
            di: string;
            dt: string;
            ee: { ba?: unknown[]; br?: unknown[]; d: string; s: string };
            et: string;
            f: string;
            i: string;
            k: string[];
            kt: string | string[];
            n: string[];
            nt: string | string[];
            p: string;
            s: string;
            vn?: number[];
        }[]
        • b: string[]
        • bt: string
          0
          
        • c: string[]
        • d: string
          
          
        • di: string
          
          
        • dt: string
          
          
        • ee: { ba?: unknown[]; br?: unknown[]; d: string; s: string }
          • Optionalba?: unknown[]
          • Optionalbr?: unknown[]
          • d: string
            
            
          • s: string
            0
            
        • et: string
          
          
        • f: string
          0
          
        • i: string
          
          
        • k: string[]
        • kt: string | string[]
        • n: string[]
        • nt: string | string[]
        • p: string
          
          
        • s: string
          0
          
        • Optionalvn?: number[]

      Returns Promise<IdentifierManagerResult>

    • Signs for the group by delegating to the local member keeper.

      Parameters

      • ser: Uint8Array
      • indexed: boolean = true
      • _indices: undefined | number[] = undefined
      • _ondices: undefined | Ondex[] = undefined
      • rotated: boolean = false

      Returns Promise<SignResult>