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
// Copyright 2020 The Tink-Rust Authors // // 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 // // http://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. // //////////////////////////////////////////////////////////////////////////////// //! Example program demonstrating keyset management. fn main() { tink_aead::init(); // Create a keyset with a single key in it, and encrypt something. let kh = tink_core::keyset::Handle::new(&tink_aead::aes128_gcm_key_template()).unwrap(); let cipher = tink_aead::new(&kh).unwrap(); let ct = cipher.encrypt(b"data", b"aad").unwrap(); // Move ownership of the `Handle` into a `keyset::Manager`. let mut km = tink_core::keyset::Manager::new_from_handle(kh); // Rotate in a new primary key, and add an additional secondary key. let key_id_a = km.rotate(&tink_aead::aes256_gcm_key_template()).unwrap(); let key_id_b = km .add( &tink_aead::aes256_gcm_key_template(), /* primary = */ false, ) .unwrap(); // Create a new keyset handle for the current state of the managed keyset. let kh2 = km.handle().unwrap(); println!("{:?}", kh2); // debug output does not include key material // The original key is still in the keyset, and so can decrypt. let cipher2 = tink_aead::new(&kh2).unwrap(); let pt = cipher2.decrypt(&ct, b"aad").unwrap(); assert_eq!(pt, b"data"); // Set the third key to primary and disable the previous primary key. km.set_primary(key_id_b).unwrap(); km.disable(key_id_a).unwrap(); let kh3 = km.handle().unwrap(); println!("{:?}", kh3); }