blob: 77c1fdf1febffc6ea115a7cd416f3e23bf4dd554 [file] [log] [blame]
// Copyright 2021 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
namespace cryptohome;
// Encryption algorithms used in the user secret stash.
enum UserSecretStashEncryptionAlgorithm : int {
NONE = 0, // designator of an unset enum field in tables
AES_GCM_256 = 1, // AES-GCM-256
}
// Container for the encrypted user secret stash. It can be persisted to disk
// as-is.
table UserSecretStashContainer {
// The algorithm used for encrypting UserSecretStashPayload.
encryption_algorithm:UserSecretStashEncryptionAlgorithm (id: 0);
// This is the encrypted UserSecretStashPayload.
ciphertext:[ubyte] (id: 1);
// The random IV used by the encryption algorithm.
iv:[ubyte] (id: 2);
// The GCM tag generated by the block cipher.
gcm_tag:[ubyte] (id: 3);
// Holds multiple wrapped (encrypted) representations of the main key, each
// wrapped using a different intermediate key.
wrapped_key_blocks:[UserSecretStashWrappedKeyBlock] (id: 4);
}
// Holds the USS main key, wrapped (encrypted) using an intermediate key.
table UserSecretStashWrappedKeyBlock {
// The wrapping ID that allows the programmatic layers to identify the
// intermediate key needed for decrypting this table.
wrapping_id:string (id: 0);
// The algorithm used for encrypting the USS main key.
encryption_algorithm:UserSecretStashEncryptionAlgorithm (id: 1);
// This is the encrypted USS main key.
encrypted_key:[ubyte] (id: 2);
// The random IV used in the encryption of the USS main key.
iv:[ubyte] (id: 3);
// The GCM tag generated by the block cipher.
gcm_tag:[ubyte] (id: 4);
}
root_type UserSecretStashContainer;