-
Notifications
You must be signed in to change notification settings - Fork 217
/
Copy pathglobal.ts
831 lines (727 loc) · 21.5 KB
/
global.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the Apache 2.0 License.
/**
* This module describes the global {@linkcode ccf} variable.
* Direct access of this module or the {@linkcode ccf} variable is
* typically not needed as all of its functionality is exposed
* via other, often more high-level, modules.
*
* Accessing the {@linkcode ccf} global in a type-safe way is done
* as follows:
*
* ```
* import { ccf } from '@microsoft/ccf-app/global.js';
* ```
*
* @module
*/
// The global ccf variable and associated types are exported
// as a regular module instead of using an ambient namespace
// in a .d.ts definition file.
// This avoids polluting the global namespace.
export const ccf: CCF = (<any>globalThis).ccf;
// This should eventually cover all JSON-compatible values.
// There are attempts at https://github.com/microsoft/TypeScript/issues/1897
// to create such a type but it needs further refinement.
export type JsonCompatible<T> = any;
/**
* A map in the Key Value Store.
*
* `KVMap` is modelled after JavaScript's `Map` object,
* except that keys and values must be of type `ArrayBuffer`
* and no guarantees on iteration order are provided.
*/
export interface KvMap {
has(key: ArrayBuffer): boolean;
get(key: ArrayBuffer): ArrayBuffer | undefined;
getVersionOfPreviousWrite(key: ArrayBuffer): number | undefined;
set(key: ArrayBuffer, value: ArrayBuffer): KvMap;
delete(key: ArrayBuffer): void;
clear(): void;
forEach(
callback: (value: ArrayBuffer, key: ArrayBuffer, kvmap: KvMap) => void,
): void;
size: number;
}
/**
* A set in the Key Value Store.
*
* `KVSet` is modelled after JavaScript's `Set` object,
* except that keys must be of type `ArrayBuffer`
* and no guarantees on iteration order are provided.
*/
export interface KvSet {
has(key: ArrayBuffer): boolean;
getVersionOfPreviousWrite(key: ArrayBuffer): number | undefined;
add(key: ArrayBuffer): KvSet;
delete(key: ArrayBuffer): void;
clear(): void;
forEach(callback: (value: ArrayBuffer, kvset: KvSet) => void): void;
size: number;
}
/**
* @inheritDoc CCF.kv
*/
export type KvMaps = { [key: string]: KvMap };
export interface ProofElement {
/**
* Hex-encoded Merkle tree element hash.
*/
left?: string;
/**
* Hex-encoded Merkle tree element hash.
*/
right?: string;
}
export interface LeafComponents {
/**
* Hex-encoded hash of transaction's write set.
*/
write_set_digest: string;
/**
* Raw bytes of commit evidence.
*/
commit_evidence?: string;
/**
* Hex-encoded hash of transaction's claims.
*/
claims_digest?: string;
}
/**
* @inheritDoc Receipt.proof
*/
export type Proof = ProofElement[];
export interface Receipt {
/**
* Base64-encoded signature of the Merkle tree root hash.
*/
signature: string;
/**
* Certificate of the node that signed the Merkle tree root hash.
*/
cert: string;
/**
* Merkle tree inclusion proof as an array of ``ProofElement`` objects.
*/
proof: Proof;
/**
* Hex-encoded Merkle tree leaf hash, for pre-2.x transactions.
*/
leaf?: string;
/**
* Components of Merkle tree leaf hash, which digest together to replace leaf.
*/
leaf_components?: LeafComponents;
/**
* ID of the node that signed the Merkle tree root hash.
*/
node_id: string;
}
/**
* State associated with a specific historic transaction.
*/
export interface HistoricalState {
/**
* The ID of the transaction, formatted as '<view>.<seqno>' string.
*/
transactionId: string;
/**
* The receipt for the historic transaction.
*/
receipt: Receipt;
/**
* An object that provides access to the maps of the Key-Value Store
* associated with the historic transaction.
* Fields are map names and values are {@linkcode KvMap} objects.
*/
kv: KvMaps;
}
export interface TransactionId {
view: number;
seqno: number;
}
export type TransactionStatus = "Committed" | "Invalid" | "Pending" | "Unknown";
/**
* [RSA-OAEP](https://datatracker.ietf.org/doc/html/rfc8017)
* key wrapping with SHA-256 as digest function.
*
* The `key` argument of {@link CCF.wrapKey} can be of
* arbitrary content up to the maximum size supported
* by the wrapping algorithm.
* The `wrappingKey` argument must be a PEM-encoded RSA public key.
*/
export interface RsaOaepParams {
name: "RSA-OAEP";
/**
* A label to be associated with the wrapped key.
*/
label?: ArrayBuffer;
}
/**
* [AES key wrapping with padding](https://tools.ietf.org/html/rfc5649).
*
* The `key` argument of {@link CCF.wrapKey} can be of
* arbitrary content.
* The `wrappingKey` argument must be an AES key.
*/
export interface AesKwpParams {
name: "AES-KWP";
}
/**
* [RSA AES key wrapping](http://docs.oasis-open.org/pkcs11/pkcs11-curr/v2.40/cos01/pkcs11-curr-v2.40-cos01.html#_Toc370634387)
* with SHA-256 as digest function.
*
* The `key` argument of {@link CCF.wrapKey} can be of
* arbitrary content.
* The `wrappingKey` argument must be a PEM-encoded RSA public key.
*/
export interface RsaOaepAesKwpParams {
name: "RSA-OAEP-AES-KWP";
/**
* Size of the temporary AES key in bits.
*/
aesKeySize: number;
/**
* A label to be associated with the wrapped key.
*/
label?: ArrayBuffer;
}
export type WrapAlgoParams = RsaOaepParams | AesKwpParams | RsaOaepAesKwpParams;
export interface CryptoKeyPair {
/**
* Private key in PEM encoding.
*/
privateKey: string;
/**
* Public key in PEM encoding.
*/
publicKey: string;
}
export type AlgorithmName = "RSA-PSS" | "ECDSA" | "EdDSA" | "HMAC";
export type DigestAlgorithm = "SHA-256" | "SHA-384" | "SHA-512";
export interface SigningAlgorithm {
name: AlgorithmName;
/**
* Digest algorithm. It's necessary for "RSA-PSS", "ECDSA", and "HMAC"
*/
hash?: DigestAlgorithm;
/**
* Salt length, necessary for "RSA-PSS".
*/
saltLength?: number;
}
/**
* Interfaces for JSON Web Key objects, as per [RFC7517](https://www.rfc-editor.org/rfc/rfc7517).
*/
export interface JsonWebKey {
/**
* Key type.
*/
kty: string;
/**
* Key ID.
*/
kid?: string;
}
export interface JsonWebKeyECPublic extends JsonWebKey {
/**
* Elliptic curve identifier.
*/
crv: string;
/**
* Base64url-encoded x coordinate.
*/
x: string;
/**
* Base64url-encoded y coordinate.
*/
y: string;
}
export interface JsonWebKeyECPrivate extends JsonWebKeyECPublic {
/**
* Base64url-encoded d coordinate.
*/
d: string;
}
export interface JsonWebKeyRSAPublic extends JsonWebKey {
/**
* Base64url-encoded modulus.
*/
n: string;
/**
* Base64url-encoded exponent.
*/
e: string;
}
export interface JsonWebKeyRSAPrivate extends JsonWebKeyRSAPublic {
/**
* Private exponent.
*/
d: string;
/**
* Additional exponents.
*/
p: string;
q: string;
dp: string;
dq: string;
qi: string;
}
export interface JsonWebKeyEdDSAPublic extends JsonWebKey {
/**
* Elliptic curve identifier.
*/
crv: string;
/**
* Base64url-encoded public key.
*/
x: string;
}
export interface JsonWebKeyEdDSAPrivate extends JsonWebKeyEdDSAPublic {
/**
* Base64url-encoded private key.
*/
d: string;
}
export interface CCFCrypto {
/**
* Generate a signature.
*
* @param algorithm Signing algorithm and parameters
* @param key A PEM-encoded private key
* @param plaintext Input data that will be signed
* @throws Will throw an error if the key is not compatible with the
* signing algorithm or if an unknown algorithm is used.
*/
sign(
algorithm: SigningAlgorithm,
key: string,
plaintext: ArrayBuffer,
): ArrayBuffer;
/**
* Returns whether digital signature is valid.
*
* @param algorithm Signing algorithm and parameters
* @param key A PEM-encoded public key or X.509 certificate
* @param signature Signature to verify
* @param plaintext Input data that was signed
* @throws Will throw an error if the key is not compatible with the
* signing algorithm or if an unknown algorithm is used.
*/
verifySignature(
algorithm: SigningAlgorithm,
key: string,
signature: ArrayBuffer,
plaintext: ArrayBuffer,
): boolean;
/**
* Generate an AES key.
*
* @param size The length in bits of the key to generate. 128, 192, or 256.
*/
generateAesKey(size: number): ArrayBuffer;
/**
* Generate an RSA key pair.
*
* @param size The length in bits of the RSA modulus. Minimum: 2048.
* @param exponent The public exponent. Default: 65537.
*/
generateRsaKeyPair(size: number, exponent?: number): CryptoKeyPair;
/**
* Generate an ECDSA key pair.
*
* @param curve The name of the curve, one of "secp256r1", "secp256k1", "secp384r1".
*/
generateEcdsaKeyPair(curve: string): CryptoKeyPair;
/**
* Generate an EdDSA key pair.
*
* @param curve The name of the curve. Only "curve25519" and "x25519" are supported.
*/
generateEddsaKeyPair(curve: string): CryptoKeyPair;
/**
* Wraps a key using a wrapping key.
*
* Constraints on the `key` and `wrappingKey` parameters depend
* on the wrapping algorithm that is used (`wrapAlgo`).
*/
wrapKey(
key: ArrayBuffer,
wrappingKey: ArrayBuffer,
wrapAlgo: WrapAlgoParams,
): ArrayBuffer;
/**
* Unwraps a key using a wrapping key.
*
* Constraints on the `key` and `wrappingKey` parameters depend
* on the wrapping algorithm that is used (`wrapAlgo`).
*/
unwrapKey(
key: ArrayBuffer,
wrappingKey: ArrayBuffer,
wrapAlgo: WrapAlgoParams,
): ArrayBuffer;
/**
* Generate a digest (hash) of the given data.
*/
digest(algorithm: DigestAlgorithm, plaintext: ArrayBuffer): ArrayBuffer;
/**
* Returns whether a string is a PEM-encoded bundle of X.509 certificates.
*
* A bundle consists of one or more certificates.
* Certificates in the bundle do not have to be related to each other.
* Validation is only syntactical, properties like validity dates are not evaluated.
*/
isValidX509CertBundle(pem: string): boolean;
/**
* Returns whether a certificate chain is valid given a set of trusted certificates.
* The chain and trusted certificates are PEM-encoded bundles of X.509 certificates.
*/
isValidX509CertChain(chain: string, trusted: string): boolean;
/**
* Converts an elliptic curve public key as PEM to JSON Web Key (JWK) object.
*
* @param pem Elliptic curve public key as PEM
* @param kid Key identifier (optional)
*/
pubPemToJwk(pem: string, kid?: string): JsonWebKeyECPublic;
/**
* Converts an elliptic curve private key as PEM to JSON Web Key (JWK) object.
*
* @param pem Elliptic curve private key as PEM
* @param kid Key identifier (optional)
*/
pemToJwk(pem: string, kid?: string): JsonWebKeyECPrivate;
/**
* Converts an RSA public key as PEM to JSON Web Key (JWK) object.
*
* @param pem RSA public key as PEM
* @param kid Key identifier (optional)
*/
pubRsaPemToJwk(pem: string, kid?: string): JsonWebKeyRSAPublic;
/**
* Converts an RSA private key as PEM to JSON Web Key (JWK) object.
*
* @param pem RSA private key as PEM
* @param kid Key identifier (optional)
*/
rsaPemToJwk(pem: string, kid?: string): JsonWebKeyRSAPrivate;
/**
* Converts an EdDSA public key as PEM to JSON Web Key (JWK) object.
* Only Curve25519 and X25519 are supported.
*
* @param pem EdDSA public key as PEM
* @param kid Key identifier (optional)
*/
pubEddsaPemToJwk(pem: string, kid?: string): JsonWebKeyEdDSAPublic;
/**
* Converts an EdDSA private key as PEM to JSON Web Key (JWK) object.
* Only Curve25519 and X25519 are supported.
*
* @param pem EdDSA private key as PEM
* @param kid Key identifier (optional)
*/
eddsaPemToJwk(pem: string, kid?: string): JsonWebKeyEdDSAPrivate;
/**
* Converts an elliptic curve public key as JSON Web Key (JWK) object to PEM.
*
* @param jwk Elliptic curve public key as JWK
*/
pubJwkToPem(jwk: JsonWebKeyECPublic): string;
/**
* Converts an elliptic curve private key as JSON Web Key (JWK) object to PEM.
*
* @param jwk Elliptic curve private key as JWK
*/
jwkToPem(jwk: JsonWebKeyECPrivate): string;
/**
* Converts an RSA public key as JSON Web Key (JWK) object to PEM.
*
* @param jwk RSA public key as JWK
*/
pubRsaJwkToPem(jwk: JsonWebKeyRSAPublic): string;
/**
* Converts an RSA private key as JSON Web Key (JWK) object to PEM.
*
* @param jwk RSA private key as JWK
*/
rsaJwkToPem(jwk: JsonWebKeyRSAPrivate): string;
/**
* Converts an EdDSA public key as JSON Web Key (JWK) object to PEM.
* Currently only Curve25519 is supported.
*
* @param jwk EdDSA public key as JWK
*/
pubEddsaJwkToPem(jwk: JsonWebKeyEdDSAPublic): string;
/**
* Converts an EdDSA private key as JSON Web Key (JWK) object to PEM.
* Currently only Curve25519 is supported.
*
* @param jwk EdDSA private key as JWK
*/
eddsaJwkToPem(jwk: JsonWebKeyEdDSAPrivate): string;
}
export interface CCFRpc {
/**
* Set whether KV writes should be applied even if the response status is not 2xx.
* The default is `false`.
*/
setApplyWrites(force: boolean): void;
/**
* Set a claims digest to be associated with the transaction if it succeeds. This
* digest can later be accessed from the receipt, and expanded into a full claim.
*
* The `digest` argument must be a sha-256 ArrayBuffer, eg. produced by {@link global!CCF.digest}.
*/
setClaimsDigest(digest: ArrayBuffer): void;
}
export interface CCFConsensus {
/**
* Get the ID of latest transaction known to be committed.
*/
getLastCommittedTxId(): TransactionId;
/**
* Get the status of a transaction by ID, provided as a view+seqno pair.
*
* Note that this value is the node's local understanding of the status
* of that transaction in the network at call time. For a given TxID, the
* initial status is always UNKNOWN, and eventually becomes COMMITTED or
* INVALID. See the documentation section titled "Verifying Transactions"
* for more detail.
*
* UNKNOWN [Initial status]
* v ^
* PENDING
* v v
* COMMITTED INVALID [Final statuses]
*
* This status is not sampled atomically per handler: if this is called
* multiple times in a transaction handler, later calls may see more up to
* date values than earlier calls. Once a final state (COMMITTED or INVALID)
* has been reached, no further changes are possible.
*
*/
getStatusForTxId(view: number, seqno: number): TransactionStatus;
/**
* Get the view associated with a given seqno, to construct a valid TxID.
* If the seqno is not known by the node, `null` is returned.
*/
getViewForSeqno(seqno: number): number | null;
}
export interface CCFHistorical {
/**
* Retrieve a range of historical states containing the state written at the given
* indices.
*
* If this is not currently available, this function returns `null`
* and begins fetching the ledger entry asynchronously. This will generally
* be true for the first call for a given seqno, and it may take some time
* to completely fetch and validate. The call should be repeated later with
* the same arguments to retrieve the requested entries. This state is kept
* until it is deleted for one of the following reasons:
* - A call to {@linkcode dropCachedStates}
* - `seconds_until_expiry` seconds elapse without calling this function
* - This handle is used to request a different seqno or range
*
* The range is inclusive of both start_seqno and end_seqno. If a non-empty
* array is returned, it will always contain the full requested range; the
* array will be of length (end_seqno - start_seqno + 1).
*
* If the requested range failed to be retrieved then `null` is returned.
* This may happen if the range is not known to the node (see also
* {@linkcode global!CCFConsensus.getStatusForTxId | getStatusForTxId}) or not available for
* other reasons (for example, the node is missing ledger files on disk).
*/
getStateRange(
handle: number,
startSeqno: number,
endSeqno: number,
secondsUntilExpiry: number,
): HistoricalState[] | null;
/** Drop cached states for the given handle.
*
* May be used to free up space once a historical query has been resolved,
* more aggressively than waiting for the requests to expire.
*
* Returns `true` if the handle was found and dropped, `false` otherwise.
*/
dropCachedStates(handle: number): boolean;
}
export interface CCF {
/**
* Convert a string into an ArrayBuffer.
*/
strToBuf(v: string): ArrayBuffer;
/**
* Convert an ArrayBuffer into a string.
*
* Note that this function does not perform any encoding validation, and may produce
* an invalid JS string if the input is not valid UTF-8.
*/
bufToStr(v: ArrayBuffer): string;
/**
* Serialize a value to JSON and convert it to an ArrayBuffer.
*
* Equivalent to `ccf.strToBuf(JSON.stringify(v))`.
*/
jsonCompatibleToBuf<T extends JsonCompatible<T>>(v: T): ArrayBuffer;
/**
* Parse JSON from an ArrayBuffer.
*
* Equivalent to `JSON.parse(ccf.bufToStr(v))`.
*/
bufToJsonCompatible<T extends JsonCompatible<T>>(v: ArrayBuffer): T;
/**
* @deprecated This method has been moved to ccf.crypto namespace
* @see crypto.generateAesKey
*/
generateAesKey(size: number): ArrayBuffer;
/**
* @deprecated This method has been moved to ccf.crypto namespace
* @see crypto.generateRsaKeyPair
*/
generateRsaKeyPair(size: number, exponent?: number): CryptoKeyPair;
/**
* @deprecated This method has been moved to ccf.crypto namespace
* @see crypto.generateEcdsaKeyPair
*/
generateEcdsaKeyPair(curve: string): CryptoKeyPair;
/**
* @deprecated This method has been moved to ccf.crypto namespace
* @see crypto.wrapKey
*/
wrapKey(
key: ArrayBuffer,
wrappingKey: ArrayBuffer,
wrapAlgo: WrapAlgoParams,
): ArrayBuffer;
/**
* @deprecated This method has been moved to ccf.crypto namespace
* @see crypto.digest
*/
digest(algorithm: DigestAlgorithm, data: ArrayBuffer): ArrayBuffer;
/**
* @deprecated
* @see crypto.isValidX509CertBundle
*/
isValidX509CertBundle(pem: string): boolean;
/**
* @deprecated This method has been moved to ccf.crypto namespace
* @see crypto.isValidX509CertChain
*/
isValidX509CertChain(chain: string, trusted: string): boolean;
crypto: CCFCrypto;
rpc: CCFRpc;
consensus: CCFConsensus;
/**
* An object that provides access to the maps of the Key-Value Store of CCF.
* Fields are map names and values are {@linkcode KvMap} objects.
*/
kv: KvMaps;
/**
* State associated with a specific historic transaction.
* Only defined for endpoints with "mode" set to "historical".
*/
historicalState?: HistoricalState;
historical: CCFHistorical;
/**
* Toggles implementation of Date global API between using untrusted host time
* (when enabled)and returning 0 (when disabled). By default this is disabled.
*
* Returns the previous value, allowing a global default to be maintained.
*
* @param enable If true, then subsequent calls to Date.now() will return untrusted
* host time
*/
enableUntrustedDateTime(enable: boolean): boolean;
/**
* Toggles whether common metrics (including the path, the response status,
* and the execution time) should be logged when this execution completes.
* By default this is enabled. If the request pattern should not be visible
* to an operator, then this behaviour should be disabled.
*
* Returns the previous value, allowing a global default to be maintained.
*
* @param enable If false, then no built-in logging will be emitted describing
* this execution
*/
enableMetricsLogging(enable: boolean): boolean;
}
export interface TcbVersion {
boot_loader: number;
tee: number;
snp: number;
microcode: number;
}
export interface SnpAttestationResult {
attestation: {
version: number;
guest_svn: number;
policy: {
abi_minor: number;
abi_major: number;
smt: number;
migrate_ma: number;
debug: number;
single_socket: number;
};
family_id: ArrayBuffer;
image_id: ArrayBuffer;
vmpl: number;
signature_algo: number;
platform_version: TcbVersion;
platform_info: {
smt_en: number;
tsme_en: number;
};
flags: {
author_key_en: number;
mask_chip_key: number;
signing_key: number;
};
report_data: ArrayBuffer;
measurement: ArrayBuffer;
host_data: ArrayBuffer;
id_key_digest: ArrayBuffer;
author_key_digest: ArrayBuffer;
report_id: ArrayBuffer;
report_id_ma: ArrayBuffer;
reported_tcb: TcbVersion;
chip_id: ArrayBuffer;
committed_tcb: TcbVersion;
current_minor: number;
current_build: number;
current_major: number;
committed_build: number;
committed_minor: number;
committed_major: number;
launch_tcb: TcbVersion;
signature: {
r: ArrayBuffer;
s: ArrayBuffer;
};
};
uvm_endorsements?: {
did: string;
feed: string;
svn: string;
};
}
export const snp_attestation: SnpAttestation = (<any>globalThis)
.snp_attestation;
export interface SnpAttestation {
/**
* Verify SNP Attestation
*
* @param evidence Raw SNP attestation evidence
* @param endorsements SNP attestation endorsements
* @param uvm_endorsements UVM endorsements, optional
* @param endorsed_tcb Endorsed TCB version, optional
*/
verifySnpAttestation(
evidence: ArrayBuffer,
endorsements: ArrayBuffer,
uvm_endorsements?: ArrayBuffer,
endorsed_tcb?: string,
): SnpAttestationResult;
}