@@ -11,18 +11,14 @@ use alloc::vec::Vec;
11
11
use core:: fmt;
12
12
13
13
use base64:: engine:: { general_purpose, Engine } ;
14
- use bitcoin:: hashes:: sha256:: Hash as Sha256Hash ;
15
- use bitcoin:: hashes:: Hash ;
16
14
#[ cfg( feature = "std" ) ]
17
15
use bitcoin:: secp256k1:: rand:: rngs:: OsRng ;
18
16
use bitcoin:: secp256k1:: rand:: RngCore ;
19
- use chacha20:: cipher:: { KeyIvInit , StreamCipher } ;
20
- use chacha20:: XChaCha20 ;
21
17
22
18
pub mod v2;
23
19
24
20
use self :: v2:: ConversationKey ;
25
- use crate :: { util , PublicKey , SecretKey } ;
21
+ use crate :: { PublicKey , SecretKey } ;
26
22
27
23
/// Error
28
24
#[ derive( Debug , PartialEq , Eq ) ]
@@ -76,11 +72,6 @@ impl From<base64::DecodeError> for Error {
76
72
#[ derive( Debug , Clone , Copy , Default , PartialEq , Eq , PartialOrd , Ord , Hash ) ]
77
73
#[ repr( u8 ) ]
78
74
pub enum Version {
79
- /// Reserved
80
- // Reserved = 0x00,
81
- /// V1 (deprecated)
82
- #[ deprecated]
83
- V1 = 0x01 ,
84
75
/// V2 - Secp256k1 ECDH, HKDF, padding, ChaCha20, HMAC-SHA256 and base64
85
76
#[ default]
86
77
V2 = 0x02 ,
@@ -99,8 +90,6 @@ impl TryFrom<u8> for Version {
99
90
100
91
fn try_from ( version : u8 ) -> Result < Self , Self :: Error > {
101
92
match version {
102
- #[ allow( deprecated) ]
103
- 0x01 => Ok ( Self :: V1 ) ,
104
93
0x02 => Ok ( Self :: V2 ) ,
105
94
v => Err ( Error :: UnknownVersion ( v) ) ,
106
95
}
@@ -135,31 +124,6 @@ where
135
124
T : AsRef < [ u8 ] > ,
136
125
{
137
126
match version {
138
- #[ allow( deprecated) ]
139
- Version :: V1 => {
140
- // Compose key
141
- let shared_key: [ u8 ; 32 ] = util:: generate_shared_key ( secret_key, public_key) ;
142
- let key: Sha256Hash = Sha256Hash :: hash ( & shared_key) ;
143
-
144
- // Generate 192-bit nonce
145
- let mut nonce: [ u8 ; 24 ] = [ 0u8 ; 24 ] ;
146
- rng. fill_bytes ( & mut nonce) ;
147
-
148
- // Compose cipher
149
- let mut cipher = XChaCha20 :: new ( key. as_byte_array ( ) . into ( ) , & nonce. into ( ) ) ;
150
-
151
- // Encrypt
152
- let mut buffer: Vec < u8 > = content. as_ref ( ) . to_vec ( ) ;
153
- cipher. apply_keystream ( & mut buffer) ;
154
-
155
- // Compose payload
156
- let mut payload: Vec < u8 > = vec ! [ version. as_u8( ) ] ;
157
- payload. extend_from_slice ( nonce. as_slice ( ) ) ;
158
- payload. extend ( buffer) ;
159
-
160
- // Encode payload to base64
161
- Ok ( general_purpose:: STANDARD . encode ( payload) )
162
- }
163
127
Version :: V2 => {
164
128
let conversation_key: ConversationKey = ConversationKey :: derive ( secret_key, public_key) ;
165
129
let payload: Vec < u8 > = v2:: encrypt_to_bytes_with_rng ( rng, & conversation_key, content) ?;
@@ -198,29 +162,6 @@ where
198
162
let version: u8 = * payload. first ( ) . ok_or ( Error :: VersionNotFound ) ?;
199
163
200
164
match Version :: try_from ( version) ? {
201
- #[ allow( deprecated) ]
202
- Version :: V1 => {
203
- // Get data from payload
204
- let nonce: & [ u8 ] = payload
205
- . get ( 1 ..25 )
206
- . ok_or_else ( || Error :: NotFound ( String :: from ( "nonce" ) ) ) ?;
207
- let ciphertext: & [ u8 ] = payload
208
- . get ( 25 ..)
209
- . ok_or_else ( || Error :: NotFound ( String :: from ( "ciphertext" ) ) ) ?;
210
-
211
- // Compose key
212
- let shared_key: [ u8 ; 32 ] = util:: generate_shared_key ( secret_key, public_key) ;
213
- let key: Sha256Hash = Sha256Hash :: hash ( & shared_key) ;
214
-
215
- // Compose cipher
216
- let mut cipher = XChaCha20 :: new ( key. as_byte_array ( ) . into ( ) , nonce. into ( ) ) ;
217
-
218
- // Decrypt
219
- let mut buffer: Vec < u8 > = ciphertext. to_vec ( ) ;
220
- cipher. apply_keystream ( & mut buffer) ;
221
-
222
- Ok ( buffer)
223
- }
224
165
Version :: V2 => {
225
166
let conversation_key: ConversationKey = ConversationKey :: derive ( secret_key, public_key) ;
226
167
v2:: decrypt_to_bytes ( & conversation_key, & payload)
@@ -265,41 +206,4 @@ mod tests {
265
206
content
266
207
) ;
267
208
}
268
-
269
- #[ test]
270
- fn test_nip44_decryption ( ) {
271
- let secret_key =
272
- SecretKey :: from_str ( "0000000000000000000000000000000000000000000000000000000000000002" )
273
- . unwrap ( ) ;
274
- let public_key =
275
- PublicKey :: from_str ( "1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdeb" )
276
- . unwrap ( ) ;
277
- let payload =
278
- "AUXEhLosA5eFMYOtumkiFW4Joq1OPmkU8k/25+3+VDFvOU39qkUDl1aiy8Q+0ozTwbhD57VJoIYayYS++hE=" ;
279
- assert_eq ! (
280
- decrypt( & secret_key, & public_key, payload) . unwrap( ) ,
281
- String :: from( "A Peer-to-Peer Electronic Cash System" )
282
- ) ;
283
-
284
- let secret_key =
285
- SecretKey :: from_str ( "0000000000000000000000000000000000000000000000000000000000000001" )
286
- . unwrap ( ) ;
287
- let public_key =
288
- PublicKey :: from_str ( "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" )
289
- . unwrap ( ) ;
290
- let payload = "AdYN4IQFz5veUIFH6CIkrGr0CcErnlSS4VdvoQaP2DCB1dIFL72HSriG1aFABcTlu86hrsG0MdOO9rPdVXc3jptMMzqvIN6tJlHPC8GdwFD5Y8BT76xIIOTJR2W0IdrM7++WC/9harEJAdeWHDAC9zNJX81CpCz4fnV1FZ8GxGLC0nUF7NLeUiNYu5WFXQuO9uWMK0pC7tk3XVogk90X6rwq0MQG9ihT7e1elatDy2YGat+VgQlDrz8ZLRw/lvU+QqeXMQgjqn42sMTrimG6NdKfHJSVWkT6SKZYVsuTyU1Iu5Nk0twEV8d11/MPfsMx4i36arzTC9qxE6jftpOoG8f/jwPTSCEpHdZzrb/CHJcpc+zyOW9BZE2ZOmSxYHAE0ustC9zRNbMT3m6LqxIoHq8j+8Ysu+Cwqr4nUNLYq/Q31UMdDg1oamYS17mWIAS7uf2yF5uT5IlG" ;
291
- assert_eq ! ( decrypt( & secret_key, & public_key, payload) . unwrap( ) , String :: from( "A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending." ) ) ;
292
-
293
- let secret_key =
294
- SecretKey :: from_str ( "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364139" )
295
- . unwrap ( ) ;
296
- let public_key =
297
- PublicKey :: from_str ( "0000000000000000000000000000000000000000000000000000000000000002" )
298
- . unwrap ( ) ;
299
- let payload = "AfSBdQ4T36kLcit8zg2znYCw2y6JXMMAGjM=" ;
300
- assert_eq ! (
301
- decrypt( & secret_key, & public_key, payload) . unwrap( ) ,
302
- String :: from( "a" )
303
- ) ;
304
- }
305
209
}
0 commit comments