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
//! # Cryptor module
//!
//! This module contains the [`Cryptor`] trait, which is used to implement
//! crypto algorithms that should be used with [`CryptorProvider`]
//! implementation for data _encryption_ and _decryption_.
use crate::;
/// Encrypted data representation object.
///
/// Objects contain both encrypted data and additional data created by cryptor
/// that will be required to decrypt the data.
/// Cryptor trait.
///
/// Types that implement this trait can be used to configure [`CryptoProvider`]
/// implementations for standalone usage or as part of [`PubNubClientInstance`]
/// for automated data _encryption_ and _decryption_.
///
/// To implement this trait, you must provide `encrypt` and `decrypt` methods
/// that takes a `Vec<u8>` and returns a `Result<EncryptedData, PubNubError>`.
///
/// You can implement this trait for your own types, or use one of the provided
/// features to use a `crypto` library.
///
/// You can implement this trait for your cryptor types, or use one of the
/// implementations provided by `crypto` feature.
/// When you implement your cryptor for custom encryption and use multiple
/// platforms, make sure that the same logic is implemented for other SDKs.
///
/// # Examples
/// ```
/// use pubnub::core::{Cryptor, EncryptedData, error::PubNubError};
///
/// #[derive(Debug)]
/// struct MyCryptor;
///
/// impl Cryptor for MyCryptor {
/// fn identifier(&self) -> [u8; 4] {
/// *b"MCID"
/// }
///
/// fn encrypt(&self, source: Vec<u8>) -> Result<EncryptedData, PubNubError> {
/// // Encrypt provided data here
/// Ok(EncryptedData {
/// metadata: None,
/// data: vec![]
/// })
/// }
///
/// fn decrypt(&self, source: EncryptedData) -> Result<Vec<u8>, PubNubError> {
/// // Decrypt provided data here
/// Ok(vec![])
/// }
/// }
/// ```