sha3-addons.d.ts 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. /**
  2. * SHA3 (keccak) addons.
  3. *
  4. * * Full [NIST SP 800-185](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-185.pdf):
  5. * cSHAKE, KMAC, TupleHash, ParallelHash + XOF variants
  6. * * Reduced-round Keccak [(draft)](https://datatracker.ietf.org/doc/draft-irtf-cfrg-kangarootwelve/):
  7. * * 🦘 K12 aka KangarooTwelve
  8. * * M14 aka MarsupilamiFourteen
  9. * * TurboSHAKE
  10. * * KeccakPRG: Pseudo-random generator based on Keccak [(pdf)](https://keccak.team/files/CSF-0.1.pdf)
  11. * @module
  12. */
  13. import { Keccak, type ShakeOpts } from './sha3.ts';
  14. import { type CHashO, type CHashXO, Hash, type HashXOF, type Input } from './utils.ts';
  15. export type cShakeOpts = ShakeOpts & {
  16. personalization?: Input;
  17. NISTfn?: Input;
  18. };
  19. export type ICShake = {
  20. (msg: Input, opts?: cShakeOpts): Uint8Array;
  21. outputLen: number;
  22. blockLen: number;
  23. create(opts: cShakeOpts): HashXOF<Keccak>;
  24. };
  25. export type ITupleHash = {
  26. (messages: Input[], opts?: cShakeOpts): Uint8Array;
  27. create(opts?: cShakeOpts): TupleHash;
  28. };
  29. export type IParHash = {
  30. (message: Input, opts?: ParallelOpts): Uint8Array;
  31. create(opts?: ParallelOpts): ParallelHash;
  32. };
  33. export declare const cshake128: ICShake;
  34. export declare const cshake256: ICShake;
  35. export declare class KMAC extends Keccak implements HashXOF<KMAC> {
  36. constructor(blockLen: number, outputLen: number, enableXOF: boolean, key: Input, opts?: cShakeOpts);
  37. protected finish(): void;
  38. _cloneInto(to?: KMAC): KMAC;
  39. clone(): KMAC;
  40. }
  41. export declare const kmac128: {
  42. (key: Input, message: Input, opts?: cShakeOpts): Uint8Array;
  43. create(key: Input, opts?: cShakeOpts): KMAC;
  44. };
  45. export declare const kmac256: {
  46. (key: Input, message: Input, opts?: cShakeOpts): Uint8Array;
  47. create(key: Input, opts?: cShakeOpts): KMAC;
  48. };
  49. export declare const kmac128xof: {
  50. (key: Input, message: Input, opts?: cShakeOpts): Uint8Array;
  51. create(key: Input, opts?: cShakeOpts): KMAC;
  52. };
  53. export declare const kmac256xof: {
  54. (key: Input, message: Input, opts?: cShakeOpts): Uint8Array;
  55. create(key: Input, opts?: cShakeOpts): KMAC;
  56. };
  57. export declare class TupleHash extends Keccak implements HashXOF<TupleHash> {
  58. constructor(blockLen: number, outputLen: number, enableXOF: boolean, opts?: cShakeOpts);
  59. protected finish(): void;
  60. _cloneInto(to?: TupleHash): TupleHash;
  61. clone(): TupleHash;
  62. }
  63. /** 128-bit TupleHASH. */
  64. export declare const tuplehash128: ITupleHash;
  65. /** 256-bit TupleHASH. */
  66. export declare const tuplehash256: ITupleHash;
  67. /** 128-bit TupleHASH XOF. */
  68. export declare const tuplehash128xof: ITupleHash;
  69. /** 256-bit TupleHASH XOF. */
  70. export declare const tuplehash256xof: ITupleHash;
  71. type ParallelOpts = cShakeOpts & {
  72. blockLen?: number;
  73. };
  74. export declare class ParallelHash extends Keccak implements HashXOF<ParallelHash> {
  75. private leafHash?;
  76. protected leafCons: () => Hash<Keccak>;
  77. private chunkPos;
  78. private chunksDone;
  79. private chunkLen;
  80. constructor(blockLen: number, outputLen: number, leafCons: () => Hash<Keccak>, enableXOF: boolean, opts?: ParallelOpts);
  81. protected finish(): void;
  82. _cloneInto(to?: ParallelHash): ParallelHash;
  83. destroy(): void;
  84. clone(): ParallelHash;
  85. }
  86. /** 128-bit ParallelHash. In JS, it is not parallel. */
  87. export declare const parallelhash128: IParHash;
  88. /** 256-bit ParallelHash. In JS, it is not parallel. */
  89. export declare const parallelhash256: IParHash;
  90. /** 128-bit ParallelHash XOF. In JS, it is not parallel. */
  91. export declare const parallelhash128xof: IParHash;
  92. /** 256-bit ParallelHash. In JS, it is not parallel. */
  93. export declare const parallelhash256xof: IParHash;
  94. export type TurboshakeOpts = ShakeOpts & {
  95. D?: number;
  96. };
  97. /** TurboSHAKE 128-bit: reduced 12-round keccak. */
  98. export declare const turboshake128: CHashXO;
  99. /** TurboSHAKE 256-bit: reduced 12-round keccak. */
  100. export declare const turboshake256: CHashXO;
  101. export type KangarooOpts = {
  102. dkLen?: number;
  103. personalization?: Input;
  104. };
  105. export declare class KangarooTwelve extends Keccak implements HashXOF<KangarooTwelve> {
  106. readonly chunkLen = 8192;
  107. private leafHash?;
  108. protected leafLen: number;
  109. private personalization;
  110. private chunkPos;
  111. private chunksDone;
  112. constructor(blockLen: number, leafLen: number, outputLen: number, rounds: number, opts: KangarooOpts);
  113. update(data: Input): this;
  114. protected finish(): void;
  115. destroy(): void;
  116. _cloneInto(to?: KangarooTwelve): KangarooTwelve;
  117. clone(): KangarooTwelve;
  118. }
  119. /** KangarooTwelve: reduced 12-round keccak. */
  120. export declare const k12: CHashO;
  121. /** MarsupilamiFourteen: reduced 14-round keccak. */
  122. export declare const m14: CHashO;
  123. /**
  124. * More at https://github.com/XKCP/XKCP/tree/master/lib/high/Keccak/PRG.
  125. */
  126. export declare class KeccakPRG extends Keccak {
  127. protected rate: number;
  128. constructor(capacity: number);
  129. keccak(): void;
  130. update(data: Input): this;
  131. feed(data: Input): this;
  132. protected finish(): void;
  133. digestInto(_out: Uint8Array): Uint8Array;
  134. fetch(bytes: number): Uint8Array;
  135. forget(): void;
  136. _cloneInto(to?: KeccakPRG): KeccakPRG;
  137. clone(): KeccakPRG;
  138. }
  139. /** KeccakPRG: Pseudo-random generator based on Keccak. https://keccak.team/files/CSF-0.1.pdf */
  140. export declare const keccakprg: (capacity?: number) => KeccakPRG;
  141. export {};
  142. //# sourceMappingURL=sha3-addons.d.ts.map