-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcrypto.h
More file actions
112 lines (96 loc) · 3.37 KB
/
Copy pathcrypto.h
File metadata and controls
112 lines (96 loc) · 3.37 KB
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
#ifndef PIGCLOUD_TEE_CRYPTO_H
#define PIGCLOUD_TEE_CRYPTO_H
#include <stddef.h>
#include <stdint.h>
#include "protocol.h"
typedef void (*tee_crypto_progress_cb)(void);
void tee_crypto_set_progress_cb(tee_crypto_progress_cb cb);
typedef int (*tee_chunk_cb)(const unsigned char *chunk, size_t len, void *userdata);
#define TEE_UNSEAL_REASON_BLOB_TOO_SHORT "unseal_blob_too_short"
#define TEE_UNSEAL_REASON_X25519_ECDH "unseal_x25519_ecdh_failed"
#define TEE_UNSEAL_REASON_X25519_RECIPIENT_PK "unseal_x25519_recipient_pk_failed"
#define TEE_UNSEAL_REASON_MLKEM_UNAVAILABLE "unseal_mlkem_unavailable"
#define TEE_UNSEAL_REASON_MLKEM_PARAM "unseal_mlkem_param_mismatch"
#define TEE_UNSEAL_REASON_MLKEM_KEYPAIR "unseal_mlkem_keypair_failed"
#define TEE_UNSEAL_REASON_MLKEM_DECAPS "unseal_mlkem_decaps_failed"
#define TEE_UNSEAL_REASON_KDF_SALT_OVERFLOW "unseal_kdf_salt_overflow"
#define TEE_UNSEAL_REASON_KDF_IKM_OVERFLOW "unseal_kdf_ikm_overflow"
#define TEE_UNSEAL_REASON_AEAD_AUTH "unseal_aead_auth_failed"
int tee_unseal_hybrid_data_key(
const unsigned char *sealed, size_t sealed_len,
const unsigned char *enclave_x25519_sk,
const unsigned char *enclave_kyber_seed,
unsigned char data_key_out[E2EE_KEY_SIZE],
const char **reason_out
);
typedef struct {
unsigned char bytes[32];
int produced;
} tee_output_digest_t;
int tee_sign_hash(
const unsigned char hash[32],
const unsigned char *enclave_ed25519_sk,
const unsigned char *enclave_mldsa_sk,
unsigned char sig_ed25519_out[E2EE_ED25519_SIG_SIZE],
unsigned char sig_mldsa_out[MLDSA44_SIGNATURE_SIZE]
);
int tee_decrypt_file(
const char *ciphertext_path,
const unsigned char data_key[E2EE_KEY_SIZE],
const unsigned char nonce[E2EE_NONCE_SIZE],
int expected_chunks,
const char *expected_sha256,
int meta_version,
unsigned char **plaintext_out,
size_t *plaintext_len
);
int tee_seal_hybrid(
const unsigned char *payload, size_t payload_len,
const unsigned char recipient_x25519_pk[32],
const unsigned char *recipient_kyber_pk,
unsigned char *sealed_out, size_t sealed_out_cap, size_t *sealed_len_out
);
int tee_decrypt_file_cb(
const char *ciphertext_path,
const unsigned char data_key[E2EE_KEY_SIZE],
const unsigned char nonce[E2EE_NONCE_SIZE],
int expected_chunks,
const char *expected_sha256,
int meta_version,
tee_chunk_cb chunk_cb,
void *chunk_cb_userdata,
char *derived_sha256_hex,
unsigned char **plaintext_out,
size_t *plaintext_len
);
int tee_encrypt_file(
const unsigned char *plaintext,
size_t plaintext_len,
const unsigned char data_key[E2EE_KEY_SIZE],
const char *output_path,
unsigned char new_nonce_out[E2EE_NONCE_SIZE],
int *new_chunks_out,
char new_sha256_out[SHA256_HEX_BUF],
tee_output_digest_t *ciphertext_digest_out
);
int tee_verify_metadata_mac(
const unsigned char data_key[E2EE_KEY_SIZE],
int version,
const char *nonce_b64,
int chunk_size,
int chunks,
const char *plaintext_sha256,
int64_t plaintext_size,
const char *expected_mac_hex
);
int tee_compute_metadata_mac(
const unsigned char data_key[E2EE_KEY_SIZE],
int version,
const char *nonce_b64,
int chunk_size,
int chunks,
const char *plaintext_sha256,
int64_t plaintext_size,
char mac_hex_out[SHA256_HEX_BUF]
);
#endif