chromium/third_party/shell-encryption/src/serialization.proto

/*
 * Copyright 2017 Google Inc.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

syntax = "proto2";

option optimize_for = LITE_RUNTIME;

package rlwe;

option go_package = "github.com/google/shell-encryption";

// NTT Polynomial
message SerializedNttPolynomial {
  // Coefficients of the polynomial
  optional bytes coeffs = 1;

  // Number of coefficients of the polynomial.
  optional int32 num_coeffs = 2;
}

// RLWE Ciphertext
message SerializedSymmetricRlweCiphertext {
  // Polynomials composing the ciphertext
  repeated SerializedNttPolynomial c = 1;

  // The power of the secret key that the ciphertext is encrypted with.
  optional int32 power_of_s = 2;

  // A heuristic on the amount of error in the ciphertext.
  optional double error = 3;
}

// RLWE RelinearizationKey
message SerializedRelinearizationKey {
  // Polynomial composing the matrix
  repeated SerializedNttPolynomial c = 1;

  // The modulus used to decompose the coefficients of the polynomials. Ranges
  // from 1 to the number of bits of the modulus.
  optional int32 log_decomposition_modulus = 2;

  // For n parts, the key can relinearize an n-component ciphertext to a
  // 2-component ciphertext.
  optional int32 num_parts = 3;

  // Seed used to compress this key.
  optional bytes prng_seed = 4;  // Required

  // The power of s that corresponds to the key. The field is 1 if the key is
  // RelinearizationKey.
  optional int32 power_of_s = 5;
}

// RLWE GaloisKeys.
message SerializedGaloisKey {
  // The key-switching matrix
  optional SerializedRelinearizationKey key = 1;
}